Index: src/AST/Attribute.hpp
===================================================================
--- src/AST/Attribute.hpp	(revision 1f1c10286177ed59b62b8450e6ae868302a353ca)
+++ src/AST/Attribute.hpp	(revision 99da2670a9c3077bcfe60c06fde4a115b84eccae)
@@ -51,4 +51,6 @@
 	template<typename node_t>
 	friend node_t * mutate(const node_t * node);
+	template<typename node_t>
+    friend node_t * shallowCopy(const node_t * node);
 };
 
Index: src/AST/Copy.hpp
===================================================================
--- src/AST/Copy.hpp	(revision 1f1c10286177ed59b62b8450e6ae868302a353ca)
+++ src/AST/Copy.hpp	(revision 99da2670a9c3077bcfe60c06fde4a115b84eccae)
@@ -23,5 +23,5 @@
 
 template<typename node_t>
-const node_t * shallowCopy( const node_t * node ) {
+node_t * shallowCopy( const node_t * node );
 /* Create a shallow copy of the node given.
  *
@@ -31,5 +31,5 @@
 
 template<typename node_t>
-node_t * deepCopy( node_t const * localRoot );
+node_t * deepCopy( const node_t * localRoot );
 /* Create a deep copy of the tree rooted at localRoot.
  *
@@ -106,10 +106,10 @@
 
 template<typename node_t>
-node_t * shallowCopy( node_t const * localRoot ) {
+node_t * shallowCopy( const node_t * localRoot ) {
 	return localRoot->clone();
 }
 
 template<typename node_t>
-node_t * deepCopy( node_t const * localRoot ) {
+node_t * deepCopy( const node_t * localRoot ) {
 	Pass< DeepCopyCore > dc;
 	node_t const * newRoot = localRoot->accept( dc );
Index: src/AST/Decl.hpp
===================================================================
--- src/AST/Decl.hpp	(revision 1f1c10286177ed59b62b8450e6ae868302a353ca)
+++ src/AST/Decl.hpp	(revision 99da2670a9c3077bcfe60c06fde4a115b84eccae)
@@ -32,5 +32,7 @@
 
 // Must be included in *all* AST classes; should be #undef'd at the end of the file
-#define MUTATE_FRIEND template<typename node_t> friend node_t * mutate(const node_t * node);
+#define MUTATE_FRIEND \
+    template<typename node_t> friend node_t * mutate(const node_t * node); \
+	template<typename node_t> friend node_t * shallowCopy(const node_t * node);
 
 namespace ast {
Index: src/AST/Expr.hpp
===================================================================
--- src/AST/Expr.hpp	(revision 1f1c10286177ed59b62b8450e6ae868302a353ca)
+++ src/AST/Expr.hpp	(revision 99da2670a9c3077bcfe60c06fde4a115b84eccae)
@@ -30,5 +30,8 @@
 
 // Must be included in *all* AST classes; should be #undef'd at the end of the file
-#define MUTATE_FRIEND template<typename node_t> friend node_t * mutate(const node_t * node);
+#define MUTATE_FRIEND \
+    template<typename node_t> friend node_t * mutate(const node_t * node); \
+	template<typename node_t> friend node_t * shallowCopy(const node_t * node);
+
 
 class ConverterOldToNew;
Index: src/AST/Init.hpp
===================================================================
--- src/AST/Init.hpp	(revision 1f1c10286177ed59b62b8450e6ae868302a353ca)
+++ src/AST/Init.hpp	(revision 99da2670a9c3077bcfe60c06fde4a115b84eccae)
@@ -25,5 +25,7 @@
 
 // Must be included in *all* AST classes; should be #undef'd at the end of the file
-#define MUTATE_FRIEND template<typename node_t> friend node_t * mutate(const node_t * node);
+#define MUTATE_FRIEND \
+    template<typename node_t> friend node_t * mutate(const node_t * node); \
+	template<typename node_t> friend node_t * shallowCopy(const node_t * node);
 
 namespace ast {
Index: src/AST/Node.hpp
===================================================================
--- src/AST/Node.hpp	(revision 1f1c10286177ed59b62b8450e6ae868302a353ca)
+++ src/AST/Node.hpp	(revision 99da2670a9c3077bcfe60c06fde4a115b84eccae)
@@ -57,4 +57,6 @@
 	template<typename node_t>
 	friend node_t * mutate(const node_t * node);
+	template<typename node_t>
+	friend node_t * shallowCopy(const node_t * node);
 
 	mutable size_t strong_count = 0;
Index: src/AST/Stmt.hpp
===================================================================
--- src/AST/Stmt.hpp	(revision 1f1c10286177ed59b62b8450e6ae868302a353ca)
+++ src/AST/Stmt.hpp	(revision 99da2670a9c3077bcfe60c06fde4a115b84eccae)
@@ -27,5 +27,7 @@
 
 // Must be included in *all* AST classes; should be #undef'd at the end of the file
-#define MUTATE_FRIEND template<typename node_t> friend node_t * mutate(const node_t * node);
+#define MUTATE_FRIEND \
+    template<typename node_t> friend node_t * mutate(const node_t * node); \
+	template<typename node_t> friend node_t * shallowCopy(const node_t * node);
 
 namespace ast {
Index: src/AST/Type.hpp
===================================================================
--- src/AST/Type.hpp	(revision 1f1c10286177ed59b62b8450e6ae868302a353ca)
+++ src/AST/Type.hpp	(revision 99da2670a9c3077bcfe60c06fde4a115b84eccae)
@@ -30,5 +30,7 @@
 
 // Must be included in *all* AST classes; should be #undef'd at the end of the file
-#define MUTATE_FRIEND template<typename node_t> friend node_t * mutate(const node_t * node);
+#define MUTATE_FRIEND \
+    template<typename node_t> friend node_t * mutate(const node_t * node); \
+	template<typename node_t> friend node_t * shallowCopy(const node_t * node);
 
 namespace ast {
Index: src/ResolvExpr/RenameVars.cc
===================================================================
--- src/ResolvExpr/RenameVars.cc	(revision 1f1c10286177ed59b62b8450e6ae868302a353ca)
+++ src/ResolvExpr/RenameVars.cc	(revision 99da2670a9c3077bcfe60c06fde4a115b84eccae)
@@ -30,4 +30,6 @@
 #include "SynTree/Type.h"          // for Type, TypeInstType, TraitInstType
 #include "SynTree/Visitor.h"       // for acceptAll, maybeAccept
+
+#include "AST/Copy.hpp"
 
 namespace ResolvExpr {
@@ -172,6 +174,8 @@
 
 const ast::Type * renameTyVars( const ast::Type * t ) {
+	ast::Type *tc = ast::deepCopy(t);
 	ast::Pass<RenameVars_new> renamer;
-	return t->accept( renamer );
+//	return t->accept( renamer );
+	return tc->accept( renamer );
 }
 
