Index: src/AST/Copy.hpp
===================================================================
--- src/AST/Copy.hpp	(revision e3bc51c60b9c9b6ea0e677c0358ab2c534e41a95)
+++ src/AST/Copy.hpp	(revision 5c9b20cdbd8f11c2e3b1817c4e65a16c5f1e9a65)
@@ -13,4 +13,6 @@
 // Update Count     : 0
 //
+
+#pragma once
 
 #include "Decl.hpp"
Index: src/AST/TypeSubstitution.hpp
===================================================================
--- src/AST/TypeSubstitution.hpp	(revision e3bc51c60b9c9b6ea0e677c0358ab2c534e41a95)
+++ src/AST/TypeSubstitution.hpp	(revision 5c9b20cdbd8f11c2e3b1817c4e65a16c5f1e9a65)
@@ -153,4 +153,5 @@
 // PassVisitor are defined before PassVisitor implementation accesses TypeSubstitution internals.
 #include "Pass.hpp"
+#include "Copy.hpp"
 
 namespace ast {
@@ -184,5 +185,5 @@
 	assert( input );
 	Pass<Substituter> sub( *this, false );
-	input = strict_dynamic_cast< const SynTreeClass * >( input->accept( sub ) );
+	input = strict_dynamic_cast< const SynTreeClass * >( deepCopy(input)->accept( sub ) );
 	return { input, sub.pass.subCount };
 }
