Index: src/AST/TypeSubstitution.hpp
===================================================================
--- src/AST/TypeSubstitution.hpp	(revision d2de1be93f6494379e15cb2f5ae0c8e23b7783ce)
+++ src/AST/TypeSubstitution.hpp	(revision c7f834ee97540f7ecf7e9479b5c836cab282be31)
@@ -46,5 +46,6 @@
 	template< typename SynTreeClass >
 	struct ApplyResult {
-		const SynTreeClass * node;
+		// const SynTreeClass * node;
+		ast::ptr<SynTreeClass> node;
 		int count;
 	};
Index: src/ResolvExpr/Unify.cc
===================================================================
--- src/ResolvExpr/Unify.cc	(revision d2de1be93f6494379e15cb2f5ae0c8e23b7783ce)
+++ src/ResolvExpr/Unify.cc	(revision c7f834ee97540f7ecf7e9479b5c836cab282be31)
@@ -170,7 +170,10 @@
 		ast::ptr< ast::Type > t2_(newSecond);
 
+		ast::ptr< ast::Type > subFirst = env.apply(newFirst).node;
+		ast::ptr< ast::Type > subSecond = env.apply(newSecond).node;
+
 		return unifyExact(
-			env.apply( newFirst  ).node,
-			env.apply( newSecond ).node,
+			subFirst,
+			subSecond,
 			newEnv, need, have, open, noWiden(), symtab );
 	}
