Index: src/AST/Pass.impl.hpp
===================================================================
--- src/AST/Pass.impl.hpp	(revision fc134a48a40512fa2957765975077ee1bb642ba2)
+++ src/AST/Pass.impl.hpp	(revision 1df492a157311639c92151e6df741fe232bef7d6)
@@ -650,4 +650,5 @@
 	if ( __visit_children() ) {
 		// unlike structs, traits, and unions, enums inject their members into the global scope
+		maybe_accept( node, &EnumDecl::base );
 		maybe_accept( node, &EnumDecl::params     );
 		maybe_accept( node, &EnumDecl::members    );
Index: src/ResolvExpr/CurrentObject.cc
===================================================================
--- src/ResolvExpr/CurrentObject.cc	(revision fc134a48a40512fa2957765975077ee1bb642ba2)
+++ src/ResolvExpr/CurrentObject.cc	(revision 1df492a157311639c92151e6df741fe232bef7d6)
@@ -73,5 +73,5 @@
 		virtual void setPosition( std::list< Expression * > & designators ) = 0;
 
-		/// retrieve the list of possible Type/Designaton pairs for the current position in the currect object
+		/// retrieve the list of possible Type/Designation pairs for the current position in the currect object
 		virtual std::list<InitAlternative> operator*() const = 0;
 
Index: src/SymTab/ValidateType.cc
===================================================================
--- src/SymTab/ValidateType.cc	(revision fc134a48a40512fa2957765975077ee1bb642ba2)
+++ src/SymTab/ValidateType.cc	(revision 1df492a157311639c92151e6df741fe232bef7d6)
@@ -222,11 +222,19 @@
 	// visit enum members first so that the types of self-referencing members are updated properly
 	// Replace the enum base; right now it works only for StructEnum
-	if ( enumDecl->base && dynamic_cast<TypeInstType*>(enumDecl->base) ) {
-		std::string baseName = static_cast<TypeInstType*>(enumDecl->base)->name;
-		const StructDecl * st = local_indexer->lookupStruct( baseName );
-		if ( st ) {
-			enumDecl->base = new StructInstType(Type::Qualifiers(),const_cast<StructDecl *>(st)); // Just linking in the node
+	if ( enumDecl->base ) {
+		if ( const TypeInstType * base = dynamic_cast< TypeInstType * >(enumDecl->base) ) {
+			if ( const StructDecl * decl = local_indexer->lookupStruct( base->name ) ) {
+				enumDecl->base = new StructInstType( Type::Qualifiers(), const_cast< StructDecl * >( decl ) ); // Just linking in the node
+			}
+		} else if ( const PointerType * ptr = dynamic_cast< PointerType * >(enumDecl->base) ) {
+			if ( const TypeInstType * ptrBase = dynamic_cast< TypeInstType * >( ptr->base ) ) {
+				if ( const StructDecl * decl = local_indexer->lookupStruct( ptrBase->name ) ) {
+					enumDecl->base = new PointerType( Type::Qualifiers(),
+						new StructInstType( Type::Qualifiers(), const_cast< StructDecl * >( decl ) ) );
+				}
+			}
 		}
 	}
+	
 	if ( enumDecl->body ) {
 		ForwardEnumsType::iterator fwds = forwardEnums.find( enumDecl->name );
Index: src/SynTree/Type.h
===================================================================
--- src/SynTree/Type.h	(revision fc134a48a40512fa2957765975077ee1bb642ba2)
+++ src/SynTree/Type.h	(revision 1df492a157311639c92151e6df741fe232bef7d6)
@@ -274,5 +274,5 @@
 class PointerType : public Type {
   public:
-	Type *base;
+	Type * base;
 
 	// In C99, pointer types can be qualified in many ways e.g., int f( int a[ static 3 ] )
@@ -516,6 +516,6 @@
 	typedef ReferenceToType Parent;
   public:
-	// this decl is not "owned" by the union inst; it is merely a pointer to elsewhere in the tree,
-	// where the union used in this type is actually defined
+	// this decl is not "owned" by the enum inst; it is merely a pointer to elsewhere in the tree,
+	// where the enum used in this type is actually defined
 	EnumDecl *baseEnum = nullptr;
 
