Index: src/AST/Convert.cpp
===================================================================
--- src/AST/Convert.cpp	(revision 675d8166196da4f57bc368b82d7a4641323e2570)
+++ src/AST/Convert.cpp	(revision f6964efac123e363d6c06c0a069704a6b0ac40d7)
@@ -16,6 +16,4 @@
 #include "Convert.hpp"
 
-#include "AST/Pass.hpp"
-
 #include "AST/Attribute.hpp"
 #include "AST/Decl.hpp"
@@ -23,8 +21,9 @@
 #include "AST/Init.hpp"
 #include "AST/Stmt.hpp"
-
+#include "AST/TypeSubstitution.hpp"
 
 #include "SynTree/Attribute.h"
 #include "SynTree/Declaration.h"
+#include "SynTree/TypeSubstitution.h"
 
 //================================================================================================
@@ -1172,18 +1171,58 @@
 	}
 
+	ast::TypeSubstitution * convertTypeSubstitution(const TypeSubstitution * old) {
+
+		ast::TypeSubstitution *rslt = new ast::TypeSubstitution();
+
+		for (decltype(old->begin()) old_i = old->begin(); old_i != old->end(); old_i++) {
+			rslt->add( old_i->first,
+			           getAccept1<ast::Type>(old_i->second) );
+		}
+
+		for (decltype(old->beginVar()) old_i = old->beginVar(); old_i != old->endVar(); old_i++) {
+			rslt->addVar( old_i->first,
+			              getAccept1<ast::Expr>(old_i->second) );
+		}
+	}
+
+	void convertInferUnion(ast::Expr::InferUnion &nwInferred, InferredParams oldInferParams, const std::vector<UniqueId> &oldResnSlots) {
+		
+		(void) nwInferred;
+		(void) oldInferParams;
+		(void) oldResnSlots;
+		
+		// TODO
+	}
+
+	ast::Expr * visitBaseExpr(Expression * old, ast::Expr * nw) {
+
+		nw->result = GET_ACCEPT_1(result, Type);
+		nw->env    = convertTypeSubstitution(old->env);
+
+		nw->extension = old->extension;
+		convertInferUnion(nw->inferred, old->inferParams, old->resnSlots);
+
+		return nw;
+	}
+
 	virtual void visit( ApplicationExpr * ) override final {
-
+		// TODO
 	}
 
 	virtual void visit( UntypedExpr * ) override final {
-
-	}
-
-	virtual void visit( NameExpr * ) override final {
-
+		// TODO
+	}
+
+	virtual void visit( NameExpr * old ) override final {
+		this->node = visitBaseExpr( old,
+			new ast::NameExpr(
+				old->location,
+				old->get_name()
+			)
+		);
 	}
 
 	virtual void visit( CastExpr * ) override final {
-
+		// TODO ... (rest)
 	}
 
Index: src/AST/Pass.hpp
===================================================================
--- src/AST/Pass.hpp	(revision 675d8166196da4f57bc368b82d7a4641323e2570)
+++ src/AST/Pass.hpp	(revision f6964efac123e363d6c06c0a069704a6b0ac40d7)
@@ -300,4 +300,5 @@
 #include "Common/Stats.h"
 
+namespace ast {
 extern struct PassVisitorStats {
 	size_t depth = 0;
@@ -305,4 +306,5 @@
 	Stats::Counters::AverageCounter<double> * avg = nullptr;
 } pass_visitor_stats;
+}
 
 #include "AST/Pass.impl.hpp"
Index: src/AST/TypeSubstitution.cpp
===================================================================
--- src/AST/TypeSubstitution.cpp	(revision 675d8166196da4f57bc368b82d7a4641323e2570)
+++ src/AST/TypeSubstitution.cpp	(revision f6964efac123e363d6c06c0a069704a6b0ac40d7)
@@ -58,4 +58,8 @@
 void TypeSubstitution::add( std::string formalType, const Type *actualType ) {
 	typeEnv[ formalType ] = actualType;
+}
+
+void TypeSubstitution::addVar( std::string formalExpr, const Expr *actualExpr ) {
+	varEnv[ formalExpr ] = actualExpr;
 }
 
Index: src/AST/TypeSubstitution.hpp
===================================================================
--- src/AST/TypeSubstitution.hpp	(revision 675d8166196da4f57bc368b82d7a4641323e2570)
+++ src/AST/TypeSubstitution.hpp	(revision f6964efac123e363d6c06c0a069704a6b0ac40d7)
@@ -52,4 +52,6 @@
 	bool empty() const;
 
+	void addVar( std::string formalExpr, const Expr *actualExpr );
+
 	template< typename FormalIterator, typename ActualIterator >
 	void add( FormalIterator formalBegin, FormalIterator formalEnd, ActualIterator actualBegin );
@@ -87,4 +89,9 @@
 	auto begin() const -> decltype( typeEnv.begin() ) { return typeEnv.begin(); }
 	auto   end() const -> decltype( typeEnv.  end() ) { return typeEnv.  end(); }
+
+	auto beginVar()       -> decltype( varEnv.begin() ) { return varEnv.begin(); }
+	auto   endVar()       -> decltype( varEnv.  end() ) { return varEnv.  end(); }
+	auto beginVar() const -> decltype( varEnv.begin() ) { return varEnv.begin(); }
+	auto   endVar() const -> decltype( varEnv.  end() ) { return varEnv.  end(); }
 };
 
Index: src/AST/module.mk
===================================================================
--- src/AST/module.mk	(revision f6964efac123e363d6c06c0a069704a6b0ac40d7)
+++ src/AST/module.mk	(revision f6964efac123e363d6c06c0a069704a6b0ac40d7)
@@ -0,0 +1,27 @@
+######################### -*- Mode: Makefile-Gmake -*-
+########################
+##
+## Cforall Version 1.0.0 Copyright (C) 2019 University of Waterloo
+##
+## The contents of this file are covered under the licence agreement in the
+## file "LICENCE" distributed with Cforall.
+##
+## module.mk --
+##
+## Author           : Thierry Delisle
+## Created On       : Thu May 09 16:05:36 2019
+## Last Modified By :
+## Last Modified On :
+## Update Count     :
+###############################################################################
+
+SRC_AST = \
+     AST/Convert.cpp \
+     AST/Node.cpp \
+     AST/TypeSubstitution.cpp 
+
+
+
+SRC += $(SRC_AST)
+SRCDEMANGLE += $(SRC_AST)
+
Index: src/SynTree/TypeSubstitution.cc
===================================================================
--- src/SynTree/TypeSubstitution.cc	(revision 675d8166196da4f57bc368b82d7a4641323e2570)
+++ src/SynTree/TypeSubstitution.cc	(revision f6964efac123e363d6c06c0a069704a6b0ac40d7)
@@ -62,4 +62,8 @@
 	} // if
 	typeEnv[ formalType ] = actualType->clone();
+}
+
+void TypeSubstitution::addVar( std::string formalExpr, Expression *actualExpr ) {
+	varEnv[ formalExpr ] = actualExpr;
 }
 
Index: src/SynTree/TypeSubstitution.h
===================================================================
--- src/SynTree/TypeSubstitution.h	(revision 675d8166196da4f57bc368b82d7a4641323e2570)
+++ src/SynTree/TypeSubstitution.h	(revision f6964efac123e363d6c06c0a069704a6b0ac40d7)
@@ -48,4 +48,6 @@
 	bool empty() const;
 
+	void addVar( std::string formalExpr, Expression *actualExpr );
+
 	template< typename FormalIterator, typename ActualIterator >
 	void add( FormalIterator formalBegin, FormalIterator formalEnd, ActualIterator actualBegin );
@@ -89,4 +91,9 @@
 	auto begin() const -> decltype( typeEnv.begin() ) { return typeEnv.begin(); }
 	auto   end() const -> decltype( typeEnv.  end() ) { return typeEnv.  end(); }
+
+	auto beginVar()       -> decltype( varEnv.begin() ) { return varEnv.begin(); }
+	auto   endVar()       -> decltype( varEnv.  end() ) { return varEnv.  end(); }
+	auto beginVar() const -> decltype( varEnv.begin() ) { return varEnv.begin(); }
+	auto   endVar() const -> decltype( varEnv.  end() ) { return varEnv.  end(); }
 };
 
