Index: src/AST/Convert.cpp
===================================================================
--- src/AST/Convert.cpp	(revision 3eb16532294d117fed698ff9850a05999c1f0994)
+++ src/AST/Convert.cpp	(revision 4559b34425030aa5ff5e6be7a0d6e46d70ae6fec)
@@ -1468,5 +1468,5 @@
 		return strict_dynamic_cast< ast::Decl * >( node );
 	}
-
+	
 	ConverterOldToNew() = default;
 	ConverterOldToNew(const ConverterOldToNew &) = delete;
@@ -2771,5 +2771,5 @@
 		ast::EnumInstType * ty; 
 		if ( old->baseEnum ) {
-			ty = new ast::EnumInstType{
+			ty = new ast::EnumInstType{ // Probably here: missing the specification of the base
 				GET_ACCEPT_1( baseEnum, EnumDecl ),
 				cv( old ),
Index: src/AST/Decl.hpp
===================================================================
--- src/AST/Decl.hpp	(revision 3eb16532294d117fed698ff9850a05999c1f0994)
+++ src/AST/Decl.hpp	(revision 4559b34425030aa5ff5e6be7a0d6e46d70ae6fec)
@@ -317,4 +317,6 @@
 	const char * typeString() const override { return aggrString( Enum ); }
 
+	bool isTyped() {return base && base.get();}
+
 private:
 	EnumDecl * clone() const override { return new EnumDecl{ *this }; }
Index: src/AST/Print.cpp
===================================================================
--- src/AST/Print.cpp	(revision 3eb16532294d117fed698ff9850a05999c1f0994)
+++ src/AST/Print.cpp	(revision 4559b34425030aa5ff5e6be7a0d6e46d70ae6fec)
@@ -210,4 +210,12 @@
 		}
 
+		auto ptrToEnum = dynamic_cast<const ast::EnumDecl *>(node);
+		if ( ! short_mode && ptrToEnum && ptrToEnum->base ) {
+			os << endl << indent << ".. with (enum) base" << endl;
+			++indent;
+			ptrToEnum->base->accept( *this );
+			--indent;  
+		}
+
 		os << endl;
 	}
Index: src/Common/PassVisitor.impl.h
===================================================================
--- src/Common/PassVisitor.impl.h	(revision 3eb16532294d117fed698ff9850a05999c1f0994)
+++ src/Common/PassVisitor.impl.h	(revision 4559b34425030aa5ff5e6be7a0d6e46d70ae6fec)
@@ -754,5 +754,5 @@
 
 	// unlike structs, traits, and unions, enums inject their members into the global scope
-	if ( node->base ) maybeAccept_impl( node->base, *this ); // Need this? Maybe not?
+	// if ( node->base ) maybeAccept_impl( node->base, *this ); // Need this? Maybe not?
 	maybeAccept_impl( node->parameters, *this );
 	maybeAccept_impl( node->members   , *this );
Index: src/ResolvExpr/Resolver.cc
===================================================================
--- src/ResolvExpr/Resolver.cc	(revision 3eb16532294d117fed698ff9850a05999c1f0994)
+++ src/ResolvExpr/Resolver.cc	(revision 4559b34425030aa5ff5e6be7a0d6e46d70ae6fec)
@@ -1470,7 +1470,29 @@
 			// enumerator initializers should not use the enum type to initialize, since the
 			// enum type is still incomplete at this point. Use `int` instead.
-			objectDecl = fixObjectType(objectDecl, symtab);
-			currentObject = ast::CurrentObject{
-				objectDecl->location, new ast::BasicType{ ast::BasicType::SignedInt } };
+
+			if (dynamic_cast< const ast::EnumInstType * >( objectDecl->get_type() )->base->base) { // const ast::PointerType &
+				const ast::Type * enumBase =  (dynamic_cast< const ast::EnumInstType * >( objectDecl->get_type() )->base->base.get());
+				const ast::PointerType * enumBaseAsPtr = dynamic_cast<const ast::PointerType *>(enumBase);
+
+				if ( enumBaseAsPtr ) {
+					const ast::Type * pointerBase = enumBaseAsPtr->base.get();
+					if ( dynamic_cast<const ast::BasicType *>(pointerBase) ) {
+						objectDecl = fixObjectType(objectDecl, symtab);
+						if (dynamic_cast<const ast::BasicType *>(pointerBase)->kind == ast::BasicType::Char)
+						currentObject = ast::CurrentObject{
+					 		objectDecl->location,  new ast::PointerType{ 
+							 	new ast::BasicType{ ast::BasicType::Char }
+							} };
+					} else {
+						objectDecl = fixObjectType(objectDecl, symtab);
+						currentObject = ast::CurrentObject{objectDecl->location, new ast::BasicType{ ast::BasicType::SignedInt } };
+					}
+				}
+			} else {
+				objectDecl = fixObjectType(objectDecl, symtab);
+				currentObject = ast::CurrentObject{
+					objectDecl->location, new ast::BasicType{ ast::BasicType::SignedInt } };
+			}
+
 		}
 		else {
Index: src/SymTab/Validate.cc
===================================================================
--- src/SymTab/Validate.cc	(revision 3eb16532294d117fed698ff9850a05999c1f0994)
+++ src/SymTab/Validate.cc	(revision 4559b34425030aa5ff5e6be7a0d6e46d70ae6fec)
@@ -939,7 +939,19 @@
 					// need to resolve enumerator initializers early so that other passes that determine if an expression is constexpr have the appropriate information.
 					SingleInit * init = strict_dynamic_cast<SingleInit *>( field->init );
-					ResolvExpr::findSingleExpression( init->value, new BasicType( Type::Qualifiers(), BasicType::SignedInt ), indexer );
+					if ( !enumDecl->base || dynamic_cast<BasicType *>(enumDecl->base))
+						ResolvExpr::findSingleExpression( init->value, new BasicType( Type::Qualifiers(), BasicType::SignedInt ), indexer );
+					else {
+						if (dynamic_cast<PointerType *>(enumDecl->base)) {
+							auto typePtr = dynamic_cast<PointerType *>(enumDecl->base);
+							ResolvExpr::findSingleExpression( init->value,
+							 new PointerType( Type::Qualifiers(), typePtr->base ), indexer );
+						} else {
+							ResolvExpr::findSingleExpression( init->value, new BasicType( Type::Qualifiers(), BasicType::SignedInt ), indexer );
+						}
+					}
+					
 				}
 			}
+
 		} // if
 	}
Index: src/SynTree/AggregateDecl.cc
===================================================================
--- src/SynTree/AggregateDecl.cc	(revision 3eb16532294d117fed698ff9850a05999c1f0994)
+++ src/SynTree/AggregateDecl.cc	(revision 4559b34425030aa5ff5e6be7a0d6e46d70ae6fec)
@@ -59,5 +59,4 @@
 	} // if
 	os << " with body " << has_body();
-
 	if ( ! parameters.empty() ) {
 		os << endl << indent << "... with parameters" << endl;
@@ -106,4 +105,14 @@
 const char * EnumDecl::typeString() const { return aggrString( Enum ); }
 
+void EnumDecl::print( std::ostream & os, Indenter indent ) const {
+	AggregateDecl::print(os, indent);
+	os << " with base? " << (base? "True" : "False") << std::endl;
+	if ( base ) {
+		os << "Base Type of Enum:" << std::endl;
+		base->print(os, indent);
+	}
+	os <<  std::endl << "End of EnumDecl::print" << std::endl;
+}
+
 const char * TraitDecl::typeString() const { return aggrString( Trait ); }
 
Index: src/SynTree/Declaration.h
===================================================================
--- src/SynTree/Declaration.h	(revision 3eb16532294d117fed698ff9850a05999c1f0994)
+++ src/SynTree/Declaration.h	(revision 4559b34425030aa5ff5e6be7a0d6e46d70ae6fec)
@@ -290,5 +290,5 @@
 	AggregateDecl * set_body( bool body ) { AggregateDecl::body = body; return this; }
 
-	virtual void print( std::ostream & os, Indenter indent = {} ) const override final;
+	virtual void print( std::ostream & os, Indenter indent = {} ) const override;
 	virtual void printShort( std::ostream & os, Indenter indent = {} ) const override;
   protected:
@@ -352,4 +352,5 @@
 	Type * base;
 	std::unordered_map< std::string, long long int > enumValues;
+	virtual void print( std::ostream & os, Indenter indent = {} ) const override final;
   private:
 	// std::unordered_map< std::string, long long int > enumValues;
