Index: src/Parser/DeclarationNode.cc
===================================================================
--- src/Parser/DeclarationNode.cc	(revision 3403534e2b90c8ea3761ef2743ab04b0f002e8d8)
+++ src/Parser/DeclarationNode.cc	(revision 7d05e7e1d81b9041e298ff69ebfbf7fdff9b0733)
@@ -10,6 +10,6 @@
 // Created On       : Sat May 16 12:34:05 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Mon Aug 29 22:30:56 2016
-// Update Count     : 327
+// Last Modified On : Fri Sep  9 23:21:47 2016
+// Update Count     : 402
 //
 
@@ -43,20 +43,19 @@
 extern LinkageSpec::Spec linkage;						// defined in parser.yy
 
-DeclarationNode::DeclarationNode()
-		: type( 0 )
-		, storageClass( NoStorageClass )
-		, isInline( false )
-		, isNoreturn( false )
-		, bitfieldWidth( 0 )
-		, initializer( 0 )
-		, hasEllipsis( false )
-		, linkage( ::linkage )
-		, extension( false )
-		, error() {
+DeclarationNode::DeclarationNode() :
+		type( 0 ),
+		storageClass( NoStorageClass ),
+		isInline( false ),
+		isNoreturn( false ),
+		bitfieldWidth( 0 ),
+		initializer( 0 ),
+		hasEllipsis( false ),
+		linkage( ::linkage ),
+		extension( false ) {
+	variable.tyClass = DeclarationNode::Type;
+	variable.assertions = nullptr;
+
 	attr.expr = nullptr;
 	attr.type = nullptr;
-
-	variable.tyClass = DeclarationNode::Type;
-	variable.assertions = nullptr;
 }
 
@@ -393,14 +392,9 @@
 
 	if ( (qsrc & qdst).any() ) {						// common bits between qualifier masks ?
-		error = "duplicate qualifier ";
-		int j = 0;										// separator detector
-		for ( int i = 0; i < DeclarationNode::NoOfQualifier; i += 1 ) {
-			if ( qsrc[i] & qdst[i] ) {					// find specific qualifiers in common
-				if ( j > 0 ) error += ", ";
-				error += DeclarationNode::qualifierName[i];
-				j += 1;
+		for ( int i = 0; i < NoOfQualifier; i += 1 ) {	// find common qualifiers
+			if ( qsrc[i] & qdst[i] ) {
+				error += string(error.empty() ? "" : ", ") + "duplicate " + DeclarationNode::qualifierName[i];
 			} // if
 		} // for
-		error += " in declaration of ";
 	} // if
 } // DeclarationNode::checkQualifiers
@@ -442,9 +436,15 @@
 		storageClass = q->storageClass;
 	} else if ( q->storageClass != NoStorageClass ) {
-		q->error = "invalid combination of storage classes in declaration of ";
-	} // if
-	if ( error.empty() ) error = q->error;
-	return this;
-}
+		if ( storageClass == q->storageClass ) {
+			q->error += string( "duplicate " ) + storageName[ storageClass ];
+		} else {										// can only have one storage class
+			q->error += string( "multiple " ) + storageName[ storageClass ] + " & " + storageName[ q->storageClass ];
+		} // if
+	} // if
+	if ( ! q->error.empty() ) {
+		error += (! error.empty() ? ", " : "") + q->error;
+	} // if
+	return this;
+} // DeclarationNode::copyStorageClasses
 
 static void addTypeToType( TypeData *&src, TypeData *&dst ) {
@@ -908,5 +908,5 @@
 
 Declaration *DeclarationNode::build() const {
-	if ( ! error.empty() ) throw SemanticError( error, this );
+	if ( ! error.empty() ) throw SemanticError( error + " in declaration of ", this );
 	if ( type ) {
 		if ( type->kind == TypeData::Variable ) {
@@ -922,5 +922,5 @@
 		return (new ObjectDecl( name, storageClass, linkage, maybeBuild< Expression >( bitfieldWidth ), 0, maybeBuild< Initializer >( initializer ) ))->set_extension( extension );
 	} // if
-	throw SemanticError( "invalid function specifier in declaration of ", this );
+	throw SemanticError( "invalid function specifier ", this );
 }
 
@@ -971,24 +971,4 @@
 }
 
-// DeclarationNode::StorageClass DeclarationNode::buildStorageClass() const {
-// 	DeclarationNode::StorageClass ret = DeclarationNode::NoStorageClass;
-// 	for ( std::list< DeclarationNode::StorageClass >::const_iterator i = storageClasses.begin(); i != storageClasses.end(); ++i ) {
-// 	  if ( *i == DeclarationNode::Inline || *i == DeclarationNode::Noreturn ) continue; // ignore function specifiers
-// 	  if ( ret != DeclarationNode::NoStorageClass ) {	// already have a valid storage class ?
-// 			throw SemanticError( "invalid combination of storage classes in declaration of ", this );
-// 		} // if
-// 		ret = *i;
-// 	} // for
-// 	return ret;
-// }
-
-// bool DeclarationNode::buildFuncSpecifier( DeclarationNode::StorageClass key ) const {
-// 	std::list< DeclarationNode::StorageClass >::const_iterator first = std::find( storageClasses.begin(), storageClasses.end(), key );
-//   if ( first == storageClasses.end() ) return false;	// not found
-// 	first = std::find( ++first, storageClasses.end(), key ); // found
-//   if ( first == storageClasses.end() ) return true;		// not found again
-// 	throw SemanticError( "duplicate function specifier in declaration of ", this );
-// }
-
 // Local Variables: //
 // tab-width: 4 //
Index: src/Parser/ParseNode.h
===================================================================
--- src/Parser/ParseNode.h	(revision 3403534e2b90c8ea3761ef2743ab04b0f002e8d8)
+++ src/Parser/ParseNode.h	(revision 7d05e7e1d81b9041e298ff69ebfbf7fdff9b0733)
@@ -10,6 +10,6 @@
 // Created On       : Sat May 16 13:28:16 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Mon Aug 29 21:45:43 2016
-// Update Count     : 583
+// Last Modified On : Thu Sep  8 21:58:06 2016
+// Update Count     : 587
 //
 
@@ -290,10 +290,4 @@
 	// bool buildFuncSpecifier( StorageClass key ) const;
 
-	struct Enumeration_t {
-		std::string name;
-		DeclarationNode * constants;
-	};
-	Enumeration_t enumeration;
-
 	struct Variable_t {
 		DeclarationNode::TypeClass tyClass;
@@ -408,5 +402,4 @@
 			if ( result ) {
 				*out++ = result;
-			} else {
 			} // if
 		} catch( SemanticError &e ) {
Index: src/Parser/TypeData.h
===================================================================
--- src/Parser/TypeData.h	(revision 3403534e2b90c8ea3761ef2743ab04b0f002e8d8)
+++ src/Parser/TypeData.h	(revision 7d05e7e1d81b9041e298ff69ebfbf7fdff9b0733)
@@ -10,6 +10,6 @@
 // Created On       : Sat May 16 15:18:36 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Mon Aug 29 22:31:52 2016
-// Update Count     : 110
+// Last Modified On : Fri Sep  9 23:20:55 2016
+// Update Count     : 117
 //
 
@@ -96,9 +96,10 @@
 		Array_t array;
 		Enumeration_t enumeration;
+		// Variable_t variable;
 		Function_t function;
 		Symbolic_t symbolic;
 		DeclarationNode * tuple;
 		ExpressionNode * typeexpr;
-		//Attr_t attr;
+		// Attr_t attr;
 		// DeclarationNode::BuiltinType builtin;
 
