Index: src/SynTree/TypeSubstitution.cc
===================================================================
--- src/SynTree/TypeSubstitution.cc	(revision 9490621b8ca084a4c568a9349728d4496fd84dd7)
+++ src/SynTree/TypeSubstitution.cc	(revision 51b858208ac4ba1dd63af02aa6f808536839b22a)
@@ -146,4 +146,12 @@
 }
 
+static bool are_same( TypeInstType * left, TypeInstType * right ) {
+	if ( left->baseType && right->baseType ) {
+		return left->baseType == right->baseType;
+	} else {
+		return left->name == right->name;
+	}
+}
+
 Type * TypeSubstitution::Substituter::postmutate( TypeInstType *inst ) {
 	BoundVarsType::const_iterator bound = boundVars.find( inst->name );
@@ -158,5 +166,5 @@
 		// TODO: investigate preventing type variables from being bound to themselves in the first place.
 		if ( TypeInstType * replacement = dynamic_cast< TypeInstType * >( i->second ) ) {
-			if ( inst->name == replacement->name ) {
+			if ( are_same( inst, replacement ) ) {
 				return inst;
 			}
Index: src/Validate/ForallPointerDecay.cpp
===================================================================
--- src/Validate/ForallPointerDecay.cpp	(revision 9490621b8ca084a4c568a9349728d4496fd84dd7)
+++ src/Validate/ForallPointerDecay.cpp	(revision 51b858208ac4ba1dd63af02aa6f808536839b22a)
@@ -177,6 +177,5 @@
 		}
 		auto mut = ast::mutate( decl );
-		//mut->assertions = expandAssertions( decl->assertions );
-		mut->assertions = expandAssertions_DR( decl->type_params, decl->assertions );
+		mut->assertions = expandAssertions( decl->assertions );
 		auto mutType = ast::mutate( mut->type.get() );
 		// *
@@ -209,6 +208,5 @@
 		}
 		return ast::mutate_field( decl, &ast::StructDecl::params,
-			//expandTypeDecls( decl->params ) );
-			expandTypeDecls_DR( decl->params ) );
+			expandTypeDecls( decl->params ) );
 	}
 
@@ -218,6 +216,5 @@
 		}
 		return ast::mutate_field( decl, &ast::UnionDecl::params,
-			//expandTypeDecls( decl->params ) );
-			expandTypeDecls_DR( decl->params ) );
+			expandTypeDecls( decl->params ) );
 	}
 };
