Index: doc/generic_types/generic_types.tex
===================================================================
--- doc/generic_types/generic_types.tex	(revision 64bc1319def43bb478fa9c6979861d19125a171f)
+++ doc/generic_types/generic_types.tex	(revision 8dac2cc175ede234fb72867c05c2f268ac30ee84)
@@ -1020,5 +1020,5 @@
 While \CC provides good backwards compatibility with C, it has a steep learning curve for many of its extensions.
 For example, polymorphism is provided via three disjoint mechanisms: overloading, inheritance, and templates.
-The overloading is restricted because resolution does not using the return type, inheritance requires learning object-oriented programming and coping with a restricted nominal-inheritance hierarchy, templates cannot be separately compiled resulting in compilation/code bloat and poor error messages, and determining how these mechanisms interact and which to use is confusing.
+The overloading is restricted because resolution does not use the return type, inheritance requires learning object-oriented programming and coping with a restricted nominal-inheritance hierarchy, templates cannot be separately compiled resulting in compilation/code bloat and poor error messages, and determining how these mechanisms interact and which to use is confusing.
 In contrast, \CFA has a single facility for polymorphic code supporting type-safe separate-compilation of polymorphic functions and generic (opaque) types, which uniformly leverage the C procedural paradigm.
 The key mechanism to support separate compilation is \CFA's \emph{explicit} use of assumed properties for a type.
Index: src/InitTweak/FixInit.cc
===================================================================
--- src/InitTweak/FixInit.cc	(revision 64bc1319def43bb478fa9c6979861d19125a171f)
+++ src/InitTweak/FixInit.cc	(revision 8dac2cc175ede234fb72867c05c2f268ac30ee84)
@@ -656,5 +656,5 @@
 				unqExpr->set_result( maybeClone( unqExpr->get_expr()->get_result() ) );
 				if ( unqCount[ unqExpr->get_id() ] == 0 ) {  // insert destructor after the last use of the unique expression
-					stmtsToAdd.splice( stmtsToAddAfter.end(), dtors[ unqExpr->get_id() ] );
+					stmtsToAddAfter.splice( stmtsToAddAfter.end(), dtors[ unqExpr->get_id() ] );
 				}
 				if ( addDeref.count( unqExpr->get_id() ) ) {
@@ -668,10 +668,10 @@
 			stmtsToAdd.splice( stmtsToAdd.end(), fixer.stmtsToAdd );
 			unqMap[unqExpr->get_id()] = unqExpr;
+			if ( unqCount[ unqExpr->get_id() ] == 0 ) {  // insert destructor after the last use of the unique expression
+				stmtsToAddAfter.splice( stmtsToAddAfter.end(), dtors[ unqExpr->get_id() ] );
+			} else { // remember dtors for last instance of unique expr
+				dtors[ unqExpr->get_id() ] = fixer.stmtsToAddAfter;
+			}
 			if ( UntypedExpr * deref = dynamic_cast< UntypedExpr * >( unqExpr->get_expr() ) ) {
-				if ( unqCount[ unqExpr->get_id() ] == 0 ) {  // insert destructor after the last use of the unique expression
-					stmtsToAdd.splice( stmtsToAddAfter.end(), dtors[ unqExpr->get_id() ] );
-				} else { // remember dtors for last instance of unique expr
-					dtors[ unqExpr->get_id() ] = fixer.stmtsToAddAfter;
-				}
 				// unique expression is now a dereference, because the inner expression is an lvalue returning function call.
 				// Normalize the expression by dereferencing the unique expression, rather than the inner expression
