Index: src/AST/Pass.hpp
===================================================================
--- src/AST/Pass.hpp	(revision d3aa64f1fa52252ca6f76dda4aaf32c039f504d5)
+++ src/AST/Pass.hpp	(revision 73f1b1c70b1a01a4653725904c19b05ccdcb2a4e)
@@ -48,4 +48,6 @@
 //
 // Several additional features are available through inheritance
+// | PureVisitor           - makes the visitor pure, it never modifies nodes in place and always
+//                           clones nodes it needs to make changes to
 // | WithTypeSubstitution  - provides polymorphic const TypeSubstitution * env for the
 //                           current expression
@@ -267,5 +269,5 @@
 /// Keep track of the polymorphic const TypeSubstitution * env for the current expression
 
-/// marker to force shallow copies in pass visit
+/// If used the visitor will always clone nodes.
 struct PureVisitor {};
 
Index: src/AST/Pass.impl.hpp
===================================================================
--- src/AST/Pass.impl.hpp	(revision d3aa64f1fa52252ca6f76dda4aaf32c039f504d5)
+++ src/AST/Pass.impl.hpp	(revision 73f1b1c70b1a01a4653725904c19b05ccdcb2a4e)
@@ -21,5 +21,4 @@
 
 #include "AST/TypeSubstitution.hpp"
-// #include "AST/Copy.hpp"
 
 #define VISIT_START( node ) \
@@ -329,5 +328,4 @@
 
 		if( __pass::differs(old_val, new_val) ) {
-			// auto new_parent = mutate(parent);
 			auto new_parent = __pass::mutate<core_t>(parent);
 			new_parent->*child = new_val;
Index: src/AST/TypeSubstitution.hpp
===================================================================
--- src/AST/TypeSubstitution.hpp	(revision d3aa64f1fa52252ca6f76dda4aaf32c039f504d5)
+++ src/AST/TypeSubstitution.hpp	(revision 73f1b1c70b1a01a4653725904c19b05ccdcb2a4e)
@@ -46,5 +46,4 @@
 	template< typename SynTreeClass >
 	struct ApplyResult {
-		// const SynTreeClass * node;
 		ast::ptr<SynTreeClass> node;
 		int count;
@@ -187,5 +186,4 @@
 	assert( input );
 	Pass<Substituter> sub( *this, false );
-//	input = strict_dynamic_cast< const SynTreeClass * >( deepCopy(input)->accept( sub ) );
 	input = strict_dynamic_cast< const SynTreeClass * >( input->accept( sub ) );
 	return { input, sub.core.subCount };
@@ -196,5 +194,4 @@
 	assert( input );
 	Pass<Substituter> sub( *this, true );
-//	input = strict_dynamic_cast< const SynTreeClass * >( deepCopy(input)->accept( sub ) );
 	input = strict_dynamic_cast< const SynTreeClass * >( input->accept( sub ) );
 	return { input, sub.core.subCount };
Index: src/ResolvExpr/Unify.cc
===================================================================
--- src/ResolvExpr/Unify.cc	(revision d3aa64f1fa52252ca6f76dda4aaf32c039f504d5)
+++ src/ResolvExpr/Unify.cc	(revision 73f1b1c70b1a01a4653725904c19b05ccdcb2a4e)
@@ -1113,6 +1113,4 @@
 			ast::Pass<TtypeExpander_new> expander{ tenv };
 
-			// ast::ptr<ast::TupleType> tuplec = tuple;
-			// ast::ptr<ast::TupleType> tuple2c = tuple2;
 			const ast::Type * flat = tuple->accept( expander );
 			const ast::Type * flat2 = tuple2->accept( expander );
