Index: src/AST/Convert.cpp
===================================================================
--- src/AST/Convert.cpp	(revision 1e30df7c247fd856856ad97d81bc81faecf5bcd5)
+++ src/AST/Convert.cpp	(revision 5408b5919f1f591121d6cdabf6c6b5e605e61e6b)
@@ -310,9 +310,9 @@
 			node->name,
 			get<Attribute>().acceptL( node->attributes ),
-			false, // Temporary
+			node->isTyped,
 			LinkageSpec::Spec( node->linkage.val ),
 			get<Type>().accept1(node->base)
 		);
-		return aggregatePostamble( decl, node ); // Node info, including members, processed in aggregatePostamble
+		return aggregatePostamble( decl, node );
 	}
 
@@ -737,5 +737,4 @@
 				node->name
 		);
-		temp->var = get<DeclarationWithType>().accept1(node->var);
 		auto expr = visitBaseExpr( node,
 			temp
@@ -2282,6 +2281,4 @@
 	}
 
-	/// xxx - type_decl should be DeclWithType in the final design
-	/// type_decl is set to EnumDecl as a temporary fix
 	virtual void visit( const QualifiedNameExpr * old ) override final {
 		this->node = visitBaseExpr( old,
@@ -2289,5 +2286,4 @@
 				old->location,
 				GET_ACCEPT_1(type_decl, Decl),
-				GET_ACCEPT_1(var, DeclWithType),
 				old->name
 			)
Index: src/AST/Decl.hpp
===================================================================
--- src/AST/Decl.hpp	(revision 1e30df7c247fd856856ad97d81bc81faecf5bcd5)
+++ src/AST/Decl.hpp	(revision 5408b5919f1f591121d6cdabf6c6b5e605e61e6b)
@@ -315,6 +315,7 @@
 class EnumDecl final : public AggregateDecl {
 public:
-	bool isTyped;
-	ptr<Type> base;
+	bool isTyped; // isTyped indicated if the enum has a declaration like:
+	// enum (type_optional) Name {...} 
+	ptr<Type> base; // if isTyped == true && base.get() == nullptr, it is a "void" type enum
 
 	EnumDecl( const CodeLocation& loc, const std::string& name, bool isTyped = false, 
Index: src/AST/Expr.hpp
===================================================================
--- src/AST/Expr.hpp	(revision 1e30df7c247fd856856ad97d81bc81faecf5bcd5)
+++ src/AST/Expr.hpp	(revision 5408b5919f1f591121d6cdabf6c6b5e605e61e6b)
@@ -257,9 +257,8 @@
 public:
 	ptr<Decl> type_decl;
-	ptr<DeclWithType> var;
 	std::string name;
 
-	QualifiedNameExpr( const CodeLocation & loc, const Decl * d, const DeclWithType * r, const std::string & n ) 
-	: Expr( loc ), type_decl( d ), var(r), name( n ) {}
+	QualifiedNameExpr( const CodeLocation & loc, const Decl * d, const std::string & n ) 
+	: Expr( loc ), type_decl( d ), name( n ) {}
 
 	const Expr * accept( Visitor & v ) const override { return v.visit( this ); }
Index: src/AST/Pass.impl.hpp
===================================================================
--- src/AST/Pass.impl.hpp	(revision 1e30df7c247fd856856ad97d81bc81faecf5bcd5)
+++ src/AST/Pass.impl.hpp	(revision 5408b5919f1f591121d6cdabf6c6b5e605e61e6b)
@@ -1205,5 +1205,4 @@
 	if ( __visit_children() ) {
 		guard_symtab guard { *this };
-		maybe_accept( node, &QualifiedNameExpr::var );
 		maybe_accept( node, &QualifiedNameExpr::type_decl );
 	}
Index: src/CodeGen/CodeGenerator.cc
===================================================================
--- src/CodeGen/CodeGenerator.cc	(revision 1e30df7c247fd856856ad97d81bc81faecf5bcd5)
+++ src/CodeGen/CodeGenerator.cc	(revision 5408b5919f1f591121d6cdabf6c6b5e605e61e6b)
@@ -912,10 +912,4 @@
 		}
 		output << ")";
-	}
-
-	// QualifiedNameExpr should not reach to CodeGen.
-	// FixQualifiedName Convert QualifiedNameExpr to VariableExpr
-	void CodeGenerator::postvisit( QualifiedNameExpr * expr ) {
-		output << "/* label */" << mangleName(expr->var);
 	}
 
Index: src/CodeGen/CodeGenerator.h
===================================================================
--- src/CodeGen/CodeGenerator.h	(revision 1e30df7c247fd856856ad97d81bc81faecf5bcd5)
+++ src/CodeGen/CodeGenerator.h	(revision 5408b5919f1f591121d6cdabf6c6b5e605e61e6b)
@@ -103,5 +103,4 @@
 		void postvisit( DefaultArgExpr * );
 		void postvisit( GenericExpr * );
-		void postvisit( QualifiedNameExpr *);
 
 		//*** Statements
Index: src/Common/PassVisitor.impl.h
===================================================================
--- src/Common/PassVisitor.impl.h	(revision 1e30df7c247fd856856ad97d81bc81faecf5bcd5)
+++ src/Common/PassVisitor.impl.h	(revision 5408b5919f1f591121d6cdabf6c6b5e605e61e6b)
@@ -1934,5 +1934,4 @@
 	indexerScopedAccept( node->result, *this );
 	maybeAccept_impl( node->type_decl, *this );
-	maybeAccept_impl( node->var, *this );
 
 	VISIT_END( node );
@@ -1945,5 +1944,4 @@
 	indexerScopedAccept( node->result, *this );
 	maybeAccept_impl( node->type_decl, *this );
-	maybeAccept_impl( node->var, *this );
 
 	VISIT_END( node );
@@ -1957,5 +1955,4 @@
     indexerScopedMutate( node->result, *this );
 	maybeMutate_impl( node->type_decl, *this );
-	maybeAccept_impl( node->var, *this );
 
 	MUTATE_END( Expression, node );
Index: src/Parser/ExpressionNode.cc
===================================================================
--- src/Parser/ExpressionNode.cc	(revision 1e30df7c247fd856856ad97d81bc81faecf5bcd5)
+++ src/Parser/ExpressionNode.cc	(revision 5408b5919f1f591121d6cdabf6c6b5e605e61e6b)
@@ -523,5 +523,4 @@
 		auto enumInst = new EnumInstType( Type::Qualifiers(), e );
 		auto obj = new ObjectDecl( name->name, Type::StorageClasses(), LinkageSpec::Cforall, nullptr, enumInst, nullptr );
-		ret->set_var( obj );
 	}
 	return ret;
Index: src/ResolvExpr/CandidateFinder.cpp
===================================================================
--- src/ResolvExpr/CandidateFinder.cpp	(revision 1e30df7c247fd856856ad97d81bc81faecf5bcd5)
+++ src/ResolvExpr/CandidateFinder.cpp	(revision 5408b5919f1f591121d6cdabf6c6b5e605e61e6b)
@@ -862,9 +862,4 @@
 				}
 			}
-		}
-
-		void postvisit( const ast::QualifiedNameExpr * qualifiedNameExpr ) {
-			auto mangleName = Mangle::mangle(qualifiedNameExpr->var);
-			addCandidate( qualifiedNameExpr, tenv );
 		}
 
Index: src/SymTab/Mangler.cc
===================================================================
--- src/SymTab/Mangler.cc	(revision 1e30df7c247fd856856ad97d81bc81faecf5bcd5)
+++ src/SymTab/Mangler.cc	(revision 5408b5919f1f591121d6cdabf6c6b5e605e61e6b)
@@ -65,6 +65,4 @@
 				void postvisit( const QualifiedType * qualType );
 
-				void postvisit( const QualifiedNameExpr * qualNameExpr );
-
 				std::string get_mangleName() { return mangleName; }
 			  private:
@@ -307,8 +305,4 @@
 					mangleName += Encoding::qualifiedTypeEnd;
 				}
-			}
-
-			void Mangler_old::postvisit( const QualifiedNameExpr * qual ) {
-				maybeAccept( qual->var, *visitor );
 			}
 
@@ -423,5 +417,4 @@
 			void postvisit( const ast::OneType * oneType );
 			void postvisit( const ast::QualifiedType * qualType );
-			void postvisit( const ast::QualifiedNameExpr * qualNameExpr );
 
 			std::string get_mangleName() { return mangleName; }
@@ -652,7 +645,4 @@
 				mangleName += Encoding::qualifiedTypeEnd;
 			}
-		}
-		void Mangler_new::postvisit( const ast::QualifiedNameExpr * qual ) {
-			maybeAccept( qual->var.get(), *visitor );
 		}
 
Index: src/SymTab/Validate.cc
===================================================================
--- src/SymTab/Validate.cc	(revision 1e30df7c247fd856856ad97d81bc81faecf5bcd5)
+++ src/SymTab/Validate.cc	(revision 5408b5919f1f591121d6cdabf6c6b5e605e61e6b)
@@ -858,5 +858,4 @@
 			declsToAddBefore.push_back( new UnionDecl( aggDecl->name, noAttributes, tyDecl->linkage ) );
 		} else if ( EnumInstType * enumInst = dynamic_cast< EnumInstType * >( designatorType ) ) {
-			// declsToAddBefore.push_back( new EnumDecl( enumDecl->name, noAttributes, tyDecl->linkage, enumDecl->baseEnum->base ) );
 			if ( enumInst->baseEnum ) {
 				const EnumDecl * enumDecl = enumInst->baseEnum;
Index: src/SymTab/ValidateType.cc
===================================================================
--- src/SymTab/ValidateType.cc	(revision 1e30df7c247fd856856ad97d81bc81faecf5bcd5)
+++ src/SymTab/ValidateType.cc	(revision 5408b5919f1f591121d6cdabf6c6b5e605e61e6b)
@@ -81,7 +81,6 @@
 	void previsit( QualifiedType * qualType );
 	void postvisit( QualifiedType * qualType );
-
 	void postvisit( QualifiedNameExpr * qualExpr );
-
+	
 	void postvisit( EnumDecl * enumDecl );
 	void postvisit( StructDecl * structDecl );
Index: src/SynTree/Expression.h
===================================================================
--- src/SynTree/Expression.h	(revision 1e30df7c247fd856856ad97d81bc81faecf5bcd5)
+++ src/SynTree/Expression.h	(revision 5408b5919f1f591121d6cdabf6c6b5e605e61e6b)
@@ -168,13 +168,9 @@
 	Declaration * type_decl;
 	std::string name;
-	DeclarationWithType * var;
 
 	QualifiedNameExpr( Declaration * decl, std::string name): Expression(), type_decl(decl), name(name) {}
-	QualifiedNameExpr( const QualifiedNameExpr & other): Expression(other), type_decl(other.type_decl), name(other.name), var(other.var) {}
-	DeclarationWithType * get_var() const { return var; }
-	void set_var( DeclarationWithType * newValue ) { var = newValue; }
+	QualifiedNameExpr( const QualifiedNameExpr & other): Expression(other), type_decl(other.type_decl), name(other.name) {}
 
 	virtual ~QualifiedNameExpr() {
-		delete var;
 		delete type_decl;
 	}
Index: src/Validate/FixQualifiedTypes.cpp
===================================================================
--- src/Validate/FixQualifiedTypes.cpp	(revision 1e30df7c247fd856856ad97d81bc81faecf5bcd5)
+++ src/Validate/FixQualifiedTypes.cpp	(revision 5408b5919f1f591121d6cdabf6c6b5e605e61e6b)
@@ -102,11 +102,8 @@
 			}
 
-
-        	auto var = new ast::ObjectDecl( t->var->location, t->name,
-			 new ast::EnumInstType(enumDecl, ast::CV::Const), nullptr, {}, ast::Linkage::Cforall );
-			var->scopeLevel = 1; // 1 for now; should copy the scopeLevel of the enumValue
+        	auto var = new ast::ObjectDecl( t->location, t->name,
+			new ast::EnumInstType(enumDecl, ast::CV::Const), nullptr, {}, ast::Linkage::Cforall );
 			var->mangleName = Mangle::mangle( var );
 			return new ast::VariableExpr( t->location, var );
-        	// return ret;
         }
 
Index: src/Validate/LinkReferenceToTypes.cpp
===================================================================
--- src/Validate/LinkReferenceToTypes.cpp	(revision 1e30df7c247fd856856ad97d81bc81faecf5bcd5)
+++ src/Validate/LinkReferenceToTypes.cpp	(revision 5408b5919f1f591121d6cdabf6c6b5e605e61e6b)
@@ -44,5 +44,4 @@
 	void postvisit( ast::UnionDecl const * decl );
 	ast::TraitDecl const * postvisit( ast::TraitDecl const * decl );
-	ast::QualifiedNameExpr const * previsit( ast::QualifiedNameExpr const * decl);
 
 private:
@@ -316,37 +315,4 @@
 }
 
-ast::QualifiedNameExpr const * LinkTypesCore::previsit( ast::QualifiedNameExpr const * decl ) {
-	// Try to lookup type
-	if ( auto objDecl = decl->type_decl.as<ast::ObjectDecl>() ) {
-		if ( auto inst = objDecl->type.as<ast::TypeInstType>()) {
-			if ( auto enumDecl = symtab.lookupEnum ( inst->name ) ) {
-				auto mut = ast::mutate( decl );
-				mut->type_decl = enumDecl;
-				auto enumInst = new ast::EnumInstType( enumDecl );
-				enumInst->name = decl->name;
-				// Adding result; addCandidate() use result
-				mut->result = enumInst;
-				decl = mut;
-			}
-		}
-	} else if ( auto enumDecl = decl->type_decl.as<ast::EnumDecl>() ) {
-		auto mut = ast::mutate( decl );
-		auto enumInst = new ast::EnumInstType( enumDecl );
-		enumInst->name = decl->name;
-		// Adding result; addCandidate() use result
-		mut->result = enumInst;
-		decl = mut;
-	}
-	// ast::EnumDecl const * decl = symtab.lookupEnum( type->name );
-	// // It's not a semantic error if the enum is not found, just an implicit forward declaration.
-	// if ( decl ) {
-	// 	// Just linking in the node.
-	// 	auto mut = ast::mutate( type );
-	// 	mut->base = const_cast<ast::EnumDecl *>( decl );
-	// 	type = mut;
-	// }
-	return decl;
-}
-
 } // namespace
 
