Index: src/InitTweak/FixInit.cc
===================================================================
--- src/InitTweak/FixInit.cc	(revision 5e298d76f4907c104a5c68c87edd4ae0b34414b5)
+++ src/InitTweak/FixInit.cc	(revision 0508ab37015e515ab083ce4225257d934e451d93)
@@ -56,5 +56,5 @@
 		typedef std::unordered_map< int, int > UnqCount;
 
-		class InsertImplicitCalls {
+		class InsertImplicitCalls : public WithTypeSubstitution {
 		public:
 			/// wrap function application expressions as ImplicitCopyCtorExpr nodes so that it is easy to identify which
@@ -69,5 +69,4 @@
 			// collects environments for relevant nodes
 			EnvMap & envMap;
-			TypeSubstitution * env; //Magically populated by the PassVisitor
 		};
 
@@ -192,5 +191,5 @@
 		};
 
-		class FixInit {
+		class FixInit : public WithStmtsToAdd {
 		  public:
 			/// expand each object declaration to use its constructor after it is declared.
@@ -200,5 +199,4 @@
 
 			std::list< Declaration * > staticDtorDecls;
-			std::list< Statement * > stmtsToAddAfter; // found by PassVisitor
 		};
 
Index: src/SymTab/Validate.cc
===================================================================
--- src/SymTab/Validate.cc	(revision 5e298d76f4907c104a5c68c87edd4ae0b34414b5)
+++ src/SymTab/Validate.cc	(revision 0508ab37015e515ab083ce4225257d934e451d93)
@@ -160,5 +160,5 @@
 	};
 
-	class ReturnChecker {
+	class ReturnChecker : public WithScopes {
 	  public:
 		/// Checks that return statements return nothing if their return type is void
@@ -167,10 +167,8 @@
 	  private:
 		void previsit( FunctionDecl * functionDecl );
-		void postvisit( FunctionDecl * functionDecl );
 		void previsit( ReturnStmt * returnStmt );
 
 		typedef std::list< DeclarationWithType * > ReturnVals;
 		ReturnVals returnVals;
-		std::stack< ReturnVals > returnValsStack;
 	};
 
@@ -608,10 +606,6 @@
 
 	void ReturnChecker::previsit( FunctionDecl * functionDecl ) {
-		returnValsStack.push( returnVals );
+		GuardValue( returnVals );
 		returnVals = functionDecl->get_functionType()->get_returnVals();
-	}
-	void ReturnChecker::postvisit( __attribute__((unused)) FunctionDecl * functionDecl ) {
-		returnVals = returnValsStack.top();
-		returnValsStack.pop();
 	}
 
