Index: src/CodeGen/CodeGenerator.cc
===================================================================
--- src/CodeGen/CodeGenerator.cc	(revision d4b37ab7ced315c944dd4895d790e996564f3d61)
+++ src/CodeGen/CodeGenerator.cc	(revision d958834bbaca85420da00e8a912914e2702ecacb)
@@ -289,5 +289,5 @@
 					if ( obj->get_init() ) {
 						obj->get_init()->accept( *visitor );
-						last_val = ((ConstantExpr *)(((SingleInit *)(obj->init))->value))->constant.get_ival();
+						// last_val = ((ConstantExpr *)(((SingleInit *)(obj->init))->value))->constant.get_ival();
 					} else {
 						output << ++last_val;
Index: src/ResolvExpr/CandidateFinder.cpp
===================================================================
--- src/ResolvExpr/CandidateFinder.cpp	(revision d4b37ab7ced315c944dd4895d790e996564f3d61)
+++ src/ResolvExpr/CandidateFinder.cpp	(revision d958834bbaca85420da00e8a912914e2702ecacb)
@@ -897,15 +897,15 @@
 						}
 
-						if (argType.as<ast::PointerType>()) funcFinder.otypeKeys.insert(Mangle::Encoding::pointer);
-						else if (const ast::EnumInstType * enumInst = argType.as<ast::EnumInstType>()) {
-							const ast::EnumDecl * enumDecl = enumInst->base;
-							if ( const ast::Type* enumType = enumDecl->base ) {
-								// instance of enum (T) is a instance of type (T) 
-								funcFinder.otypeKeys.insert(Mangle::mangle(enumType, Mangle::NoGenericParams | Mangle::Type));
-							} else {
-								// instance of an untyped enum is techically int
-								funcFinder.otypeKeys.insert(Mangle::mangle(enumDecl, Mangle::NoGenericParams | Mangle::Type));
-							}
-						} 
+						if (argType.as<ast::PointerType>()) funcFinder.otypeKeys.insert(Mangle::Encoding::pointer);						
+						// else if (const ast::EnumInstType * enumInst = argType.as<ast::EnumInstType>()) {
+						// 	const ast::EnumDecl * enumDecl = enumInst->base; // Here
+						// 	if ( const ast::Type* enumType = enumDecl->base ) {
+						// 		// instance of enum (T) is a instance of type (T) 
+						// 		funcFinder.otypeKeys.insert(Mangle::mangle(enumType, Mangle::NoGenericParams | Mangle::Type));
+						// 	} else {
+						// 		// instance of an untyped enum is techically int
+						// 		funcFinder.otypeKeys.insert(Mangle::mangle(enumDecl, Mangle::NoGenericParams | Mangle::Type));
+						// 	}
+						// }
 						else funcFinder.otypeKeys.insert(Mangle::mangle(argType, Mangle::NoGenericParams | Mangle::Type));
 					}
Index: src/ResolvExpr/ConversionCost.cc
===================================================================
--- src/ResolvExpr/ConversionCost.cc	(revision d4b37ab7ced315c944dd4895d790e996564f3d61)
+++ src/ResolvExpr/ConversionCost.cc	(revision d958834bbaca85420da00e8a912914e2702ecacb)
@@ -695,4 +695,5 @@
 	if ( const ast::Type * baseType = baseEnum->base ) {
 		cost = costCalc( baseType, dst, srcIsLvalue, symtab, env );
+		// cost = Cost::safe;
 	} else {
 		(void)enumInstType;
Index: src/Validate/Autogen.cpp
===================================================================
--- src/Validate/Autogen.cpp	(revision d4b37ab7ced315c944dd4895d790e996564f3d61)
+++ src/Validate/Autogen.cpp	(revision d958834bbaca85420da00e8a912914e2702ecacb)
@@ -235,4 +235,11 @@
 	// Must visit children (enum constants) to add them to the symbol table.
 	if ( !enumDecl->body ) return;
+
+	// if ( auto enumBaseType = enumDecl->base ) {
+	// 	if ( auto enumBaseTypeAsStructInst = dynamic_cast<const ast::StructInstType *>(enumBaseType.get()) ) {
+	// 		const ast::StructDecl * structDecl = enumBaseTypeAsStructInst->base.get();
+	// 		this->previsit( structDecl );
+	// 	}
+	// }
 
 	ast::EnumInstType enumInst( enumDecl->name );
Index: tests/enum_tests/structEnum.cfa
===================================================================
--- tests/enum_tests/structEnum.cfa	(revision d4b37ab7ced315c944dd4895d790e996564f3d61)
+++ tests/enum_tests/structEnum.cfa	(revision d958834bbaca85420da00e8a912914e2702ecacb)
@@ -2,29 +2,38 @@
 
 struct Point {
-    int x;
-    char y;
+     int x;
+     char y;
 };
 
 enum(Point) PointEnum {
-    first={
-        100,
-        'c'
-    },
-    second={
-        200,
-        'a'
-    }
+     first={
+         100,
+         'c'
+     },
+     second={
+         200,
+         'a'
+     }
 };
+
+PointEnum foo(PointEnum in) {
+     return in;
+}
 
 // The only valid usage
 struct Point apple = first;
 // Failed due to Qualified name is currently unimplemented.
-// struct Point banana = PointEnum.first;
+struct Point banana = PointEnum.first;
 
 int main() {
-    printf("%d %c\n", apple.x, apple.y);
-    // Failed; enumInstType is now not a real type and not instantiated.
-    // Not sure if we want that
-    // printf("%d %c\n", second.x, second.y);
-    return 0;
+     PointEnum vals = second;
+     PointEnum val2;
+     // P1
+     val2 = vals;
+
+     printf("%d %c\n", apple.x, apple.y);
+     // Failed; enumInstType is now not a real type and not instantiated.
+     // Not sure if we want that
+     // printf("%d %c\n", second.x, second.y);
+     return 0;
 }
