Index: src/AST/AssertAcyclic.cpp
===================================================================
--- src/AST/AssertAcyclic.cpp	(revision e16e27e15f614509f7df0c1cc1543e38317472cb)
+++ src/AST/AssertAcyclic.cpp	(revision 9856ca94579ea462f5ae80a54a0799a77073d635)
@@ -10,6 +10,6 @@
 // Created On       : Thu Jun 06 15:00:00 2019
 // Last Modified By : Andrew Beach
-// Last Modified On : Thu Jun 06 15:00:00 2019
-// Update Count     : 0
+// Last Modified On : Fri Jun 07 14:32:00 2019
+// Update Count     : 1
 //
 
@@ -20,13 +20,15 @@
 namespace {
 
-class NoStrongCyclesCore : public ast::WithGuards {
+class NoStrongCyclesCore {
     std::vector<const ast::Node *> parents;
 public:
-	void previsit ( const ast::Node * node ) {
-		for (auto & p : parents) {
-			assert(p != node);
+	void previsit( const ast::Node * node ) {
+		for (auto & parent : parents) {
+			assert(parent != node);
 		}
 		parents.push_back(node);
-		GuardAction( [this]() { parents.pop_back(); } );
+	}
+	void postvisit( const ast::Node * ) {
+		parents.pop_back();
 	}
 };
@@ -36,5 +38,5 @@
 namespace ast {
 
-void assertAcyclic( const std::list< ast::ptr< ast::Decl > > translationUnit ) {
+void assertAcyclic( const std::list< ast::ptr< ast::Decl > > & translationUnit ) {
    	Pass<NoStrongCyclesCore> visitor;
 	for ( auto & decl : translationUnit ) {
Index: src/AST/AssertAcyclic.hpp
===================================================================
--- src/AST/AssertAcyclic.hpp	(revision e16e27e15f614509f7df0c1cc1543e38317472cb)
+++ src/AST/AssertAcyclic.hpp	(revision 9856ca94579ea462f5ae80a54a0799a77073d635)
@@ -8,8 +8,8 @@
 //
 // Author           : Andrew Beach
-// Created On       : Thr May 6 15:00:00 2019
+// Created On       : Thr Jun  6 15:00:00 2019
 // Last Modified By : Andrew Beach
-// Last Modified On : Thr May 6 15:00:00 2019
-// Update Count     : 0
+// Last Modified On : Fri Jun  7 14:32:00 2019
+// Update Count     : 1
 //
 
@@ -25,5 +25,5 @@
 namespace ast {
 
-void assertAcyclic( const std::list< ast::ptr< ast::Decl > > translationUnit );
+void assertAcyclic( const std::list< ast::ptr< ast::Decl > > & translationUnit );
 
 }
Index: src/AST/Pass.hpp
===================================================================
--- src/AST/Pass.hpp	(revision e16e27e15f614509f7df0c1cc1543e38317472cb)
+++ src/AST/Pass.hpp	(revision 9856ca94579ea462f5ae80a54a0799a77073d635)
@@ -293,4 +293,12 @@
 		at_cleanup( [func](void *) { func(); }, nullptr );
 	}
+
+	/// When this node is finished being visited, call a member of an object.
+	template<typename T>
+	void GuardMethod( T * obj, void (T::*method)() ) {
+		at_cleanup( [ method ]( void * object ) {
+			static_cast< T * >( object )->method();
+		}, static_cast< void * >( obj ) );
+	}
 };
 
Index: src/CodeGen/CodeGenerator.cc
===================================================================
--- src/CodeGen/CodeGenerator.cc	(revision e16e27e15f614509f7df0c1cc1543e38317472cb)
+++ src/CodeGen/CodeGenerator.cc	(revision 9856ca94579ea462f5ae80a54a0799a77073d635)
@@ -116,6 +116,6 @@
 	}
 
-	CodeGenerator::CodeGenerator( std::ostream & os, bool pretty, bool genC, bool lineMarks, bool printExprTypes ) : indent( CodeGenerator::tabsize ), output( os ), printLabels( *this ), options( pretty, genC, lineMarks, printExprTypes ), endl( *this ) {}
-	CodeGenerator::CodeGenerator( std::ostream & os, const Options &options ) : indent( CodeGenerator::tabsize ), output( os ), printLabels( *this ), options(options), endl( *this ) {}
+	CodeGenerator::CodeGenerator( std::ostream & os, bool pretty, bool genC, bool lineMarks, bool printExprTypes ) : indent( 0, CodeGenerator::tabsize ), output( os ), printLabels( *this ), options( pretty, genC, lineMarks, printExprTypes ), endl( *this ) {}
+	CodeGenerator::CodeGenerator( std::ostream & os, const Options &options ) : indent( 0, CodeGenerator::tabsize ), output( os ), printLabels( *this ), options(options), endl( *this ) {}
 
 	string CodeGenerator::mangleName( DeclarationWithType * decl ) {
Index: src/Common/Indenter.h
===================================================================
--- src/Common/Indenter.h	(revision e16e27e15f614509f7df0c1cc1543e38317472cb)
+++ src/Common/Indenter.h	(revision 9856ca94579ea462f5ae80a54a0799a77073d635)
@@ -23,9 +23,9 @@
 	unsigned int amt;         ///< spaces in one level of indentation
 
-	Indenter( unsigned int indent = 0, unsigned int amt = tabsize ) 
-	: indent( indent*amt ), amt( amt ) {}
-	
-	Indenter & operator+=(int nlevels) { indent += amt*nlevels; return *this; }
-	Indenter & operator-=(int nlevels) { indent -= amt*nlevels; return *this; }
+	Indenter( unsigned int indent = 0, unsigned int amt = tabsize )
+	: indent( indent ), amt( amt ) {}
+
+	Indenter & operator+=(int nlevels) { indent += nlevels; return *this; }
+	Indenter & operator-=(int nlevels) { indent -= nlevels; return *this; }
 	Indenter operator+(int nlevels) { Indenter indenter = *this; return indenter += nlevels; }
 	Indenter operator-(int nlevels) { Indenter indenter = *this; return indenter -= nlevels; }
@@ -35,5 +35,5 @@
 
 inline std::ostream & operator<<( std::ostream & out, const Indenter & indent ) {
-	return out << std::string(indent.indent, ' ');
+	return out << std::string(indent.indent * indent.amt, ' ');
 }
 
Index: src/InitTweak/FixInit.cc
===================================================================
--- src/InitTweak/FixInit.cc	(revision e16e27e15f614509f7df0c1cc1543e38317472cb)
+++ src/InitTweak/FixInit.cc	(revision 9856ca94579ea462f5ae80a54a0799a77073d635)
@@ -301,12 +301,5 @@
 				replacement = new CastExpr( replacement, base->clone() );
 			}
-			size_t replaced = DeclReplacer::replace( dtor, { std::make_pair( objDecl, replacement ) } );
-			if(replaced == 0) {
-				objDecl->print(std::cerr);
-				std::cerr << "-----" << std::endl;
-				dtor->print(std::cerr);
-				std::cerr << "Failed to replace " << objDecl << std::endl;
-				abort();
-			}
+			DeclReplacer::replace( dtor, { std::make_pair( objDecl, replacement ) } );
 			dtorFunc->statements->push_back( strict_dynamic_cast<Statement *>( dtor ) );
 
