Index: src/CodeGen/CodeGenerator.cc
===================================================================
--- src/CodeGen/CodeGenerator.cc	(revision 92538ab6b62a97cccbb9045dcd6004887dec9529)
+++ src/CodeGen/CodeGenerator.cc	(revision d8e2a09543f35ee50941fc5ef2b7d98498ebe3b7)
@@ -275,7 +275,5 @@
 		extension( enumDecl );
 		std::list< Declaration* > &memb = enumDecl->get_members();
-		if (enumDecl->base && ! memb.empty() && 
-		(dynamic_cast<BasicType *>(enumDecl->base)
-		 && !(dynamic_cast<BasicType *>(enumDecl->base)->kind == BasicType::Kind::SignedInt))) {
+		if (enumDecl->base && ! memb.empty()) {
 			ObjectDecl * last = nullptr;
 			for ( std::list< Declaration* >::iterator i = memb.begin(); i != memb.end();  i++) {
Index: src/CodeGen/GenType.cc
===================================================================
--- src/CodeGen/GenType.cc	(revision 92538ab6b62a97cccbb9045dcd6004887dec9529)
+++ src/CodeGen/GenType.cc	(revision d8e2a09543f35ee50941fc5ef2b7d98498ebe3b7)
@@ -253,7 +253,5 @@
 
 	void GenType::postvisit( EnumInstType * enumInst ) {
-		if ( enumInst->baseEnum->base 
-		&& dynamic_cast<BasicType *>(enumInst->baseEnum->base)
-		&& dynamic_cast<BasicType *>(enumInst->baseEnum->base)->kind != BasicType::Kind::SignedInt) {
+		if ( enumInst->baseEnum->base ) {
 			typeString = genType(enumInst->baseEnum->base, "", options) + typeString;
 		} else {
Index: src/ResolvExpr/Resolver.cc
===================================================================
--- src/ResolvExpr/Resolver.cc	(revision 92538ab6b62a97cccbb9045dcd6004887dec9529)
+++ src/ResolvExpr/Resolver.cc	(revision d8e2a09543f35ee50941fc5ef2b7d98498ebe3b7)
@@ -1484,5 +1484,5 @@
 					const ast::Type * pointerBase = enumBaseAsPtr->base.get();
 					if ( dynamic_cast<const ast::BasicType *>(pointerBase) ) {
-						objectDecl = fixObjectType(objectDecl, symtab);
+						objectDecl = fixObjectType(objectDecl, context);
 						if (dynamic_cast<const ast::BasicType *>(pointerBase)->kind == ast::BasicType::Char)
 						currentObject = ast::CurrentObject{
@@ -1491,10 +1491,10 @@
 							} };
 					} else {
-						objectDecl = fixObjectType(objectDecl, symtab);
+						objectDecl = fixObjectType(objectDecl, context);
 						currentObject = ast::CurrentObject{objectDecl->location, new ast::BasicType{ ast::BasicType::SignedInt } };
 					}
 				}
 			} else {
-				objectDecl = fixObjectType(objectDecl, symtab);
+				objectDecl = fixObjectType(objectDecl, context);
 				currentObject = ast::CurrentObject{
 					objectDecl->location, new ast::BasicType{ ast::BasicType::SignedInt } };
Index: tests/enum_tests/.expect/stringEnum.txt
===================================================================
--- tests/enum_tests/.expect/stringEnum.txt	(revision d8e2a09543f35ee50941fc5ef2b7d98498ebe3b7)
+++ tests/enum_tests/.expect/stringEnum.txt	(revision d8e2a09543f35ee50941fc5ef2b7d98498ebe3b7)
@@ -0,0 +1,1 @@
+zero: zero, one: one
Index: tests/enum_tests/.expect/typedIntEnum.txt
===================================================================
--- tests/enum_tests/.expect/typedIntEnum.txt	(revision d8e2a09543f35ee50941fc5ef2b7d98498ebe3b7)
+++ tests/enum_tests/.expect/typedIntEnum.txt	(revision d8e2a09543f35ee50941fc5ef2b7d98498ebe3b7)
@@ -0,0 +1,1 @@
+zero: 0, one: 1
Index: tests/enum_tests/stringEnum.cfa
===================================================================
--- tests/enum_tests/stringEnum.cfa	(revision d8e2a09543f35ee50941fc5ef2b7d98498ebe3b7)
+++ tests/enum_tests/stringEnum.cfa	(revision d8e2a09543f35ee50941fc5ef2b7d98498ebe3b7)
@@ -0,0 +1,11 @@
+#include <stdio.h>
+
+enum(char *) IntEnum {
+    zero="zero",
+    one="one"
+};
+
+int main() {
+    printf("zero: %s, one: %s\n", zero, one);
+    return 0;
+}
Index: sts/enum_tests/typedIntEnum.c
===================================================================
--- tests/enum_tests/typedIntEnum.c	(revision 92538ab6b62a97cccbb9045dcd6004887dec9529)
+++ 	(revision )
@@ -1,11 +1,0 @@
-#include <stdio.h>
-
-enum(int) IntEnum {
-    zero,
-    one
-};
-
-int main() {
-    printf("zero: %d, one: %d \n", zero, one);
-    return 0;
-}
Index: tests/enum_tests/typedIntEnum.cfa
===================================================================
--- tests/enum_tests/typedIntEnum.cfa	(revision d8e2a09543f35ee50941fc5ef2b7d98498ebe3b7)
+++ tests/enum_tests/typedIntEnum.cfa	(revision d8e2a09543f35ee50941fc5ef2b7d98498ebe3b7)
@@ -0,0 +1,11 @@
+#include <stdio.h>
+
+enum(int) IntEnum {
+    zero,
+    one
+};
+
+int main() {
+    printf("zero: %d, one: %d\n", zero, one);
+    return 0;
+}
