Index: src/CodeGen/CodeGenerator.cc
===================================================================
--- src/CodeGen/CodeGenerator.cc	(revision b72d4ed3c032c44b2e77aa0b0822f63ebaf1bea0)
+++ src/CodeGen/CodeGenerator.cc	(revision a5de33ebd685fe6ecb7f95deb3a78328f5b9da15)
@@ -66,12 +66,4 @@
 	} // extension
 
-	ostream & CodeGenerator::Indenter::operator()( ostream & output ) const {
-	  return output << string( cg.cur_indent, ' ' );
-	}
-
-	ostream & operator<<( ostream & output, const CodeGenerator::Indenter &indent ) {
-		return indent( output );
-	}
-
 	CodeGenerator::LabelPrinter & CodeGenerator::LabelPrinter::operator()( std::list< Label > & l ) {
 		labels = &l;
@@ -111,5 +103,5 @@
 	}
 
-	CodeGenerator::CodeGenerator( std::ostream & os, bool pretty, bool genC, bool lineMarks ) : indent( *this), cur_indent( 0 ), insideFunction( false ), output( os ), printLabels( *this ), pretty( pretty ), genC( genC ), lineMarks( lineMarks ) {}
+	CodeGenerator::CodeGenerator( std::ostream & os, bool pretty, bool genC, bool lineMarks ) : indent( CodeGenerator::tabsize ), insideFunction( false ), output( os ), printLabels( *this ), pretty( pretty ), genC( genC ), lineMarks( lineMarks ) {}
 
 	string CodeGenerator::mangleName( DeclarationWithType * decl ) {
@@ -202,5 +194,5 @@
 			output << " {" << endl;
 
-			cur_indent += CodeGenerator::tabsize;
+			++indent;
 			for ( std::list< Declaration* >::iterator i = memb.begin(); i != memb.end(); i++ ) {
 				output << lineDirective( *i ) << indent;
@@ -209,5 +201,5 @@
 			} // for
 
-			cur_indent -= CodeGenerator::tabsize;
+			--indent;
 
 			output << indent << "}";
@@ -239,5 +231,5 @@
 			output << " {" << endl;
 
-			cur_indent += CodeGenerator::tabsize;
+			++indent;
 			for ( std::list< Declaration* >::iterator i = memb.begin(); i != memb.end();  i++) {
 				ObjectDecl * obj = dynamic_cast< ObjectDecl* >( *i );
@@ -251,5 +243,5 @@
 			} // for
 
-			cur_indent -= CodeGenerator::tabsize;
+			--indent;
 
 			output << indent << "}";
@@ -755,5 +747,5 @@
 		std::list< Statement * > & stmts = stmtExpr->get_statements()->get_kids();
 		output << lineDirective( stmtExpr) << "({" << std::endl;
-		cur_indent += CodeGenerator::tabsize;
+		++indent;
 		unsigned int numStmts = stmts.size();
 		unsigned int i = 0;
@@ -778,5 +770,5 @@
 			++i;
 		}
-		cur_indent -= CodeGenerator::tabsize;
+		--indent;
 		output << indent << "})";
 	}
@@ -787,5 +779,5 @@
 		output << "{" << endl;
 
-		cur_indent += CodeGenerator::tabsize;
+		++indent;
 
 		for ( std::list<Statement *>::iterator i = ks.begin(); i != ks.end();  i++ ) {
@@ -798,5 +790,5 @@
 			} // if
 		} // for
-		cur_indent -= CodeGenerator::tabsize;
+		--indent;
 
 		output << indent << "}";
@@ -866,7 +858,7 @@
 
 		output << "{" << std::endl;
-		cur_indent += CodeGenerator::tabsize;
+		++indent;
 		acceptAll( switchStmt->get_statements(), *this );
-		cur_indent -= CodeGenerator::tabsize;
+		--indent;
 		output << indent << "}";
 	}
@@ -885,5 +877,5 @@
 		std::list<Statement *> sts = caseStmt->get_statements();
 
-		cur_indent += CodeGenerator::tabsize;
+		++indent;
 		for ( std::list<Statement *>::iterator i = sts.begin(); i != sts.end();  i++) {
 			output << indent << printLabels( (*i)->get_labels() )  ;
@@ -891,5 +883,5 @@
 			output << endl;
 		} // for
-		cur_indent -= CodeGenerator::tabsize;
+		--indent;
 	}
 
Index: src/CodeGen/CodeGenerator.h
===================================================================
--- src/CodeGen/CodeGenerator.h	(revision b72d4ed3c032c44b2e77aa0b0822f63ebaf1bea0)
+++ src/CodeGen/CodeGenerator.h	(revision a5de33ebd685fe6ecb7f95deb3a78328f5b9da15)
@@ -25,4 +25,5 @@
 #include "SymTab/Indexer.h"
 
+#include "Common/Indenter.h"
 #include "Common/utility.h"
 
@@ -102,10 +103,4 @@
 		template< class Iterator > void genCommaList( Iterator begin, Iterator end );
 
-		struct Indenter {
-			Indenter(CodeGenerator &cg) : cg(cg) {}
-			CodeGenerator & cg;
-			std::ostream& operator()(std::ostream & os) const;
-		};
-
 		struct LabelPrinter {
 			LabelPrinter(CodeGenerator &cg) : cg(cg), labels( 0 ) {}
@@ -130,5 +125,4 @@
 	  private:
 		Indenter indent;
-		int cur_indent;
 		bool insideFunction;
 		std::ostream &output;
Index: src/Common/Indenter.h
===================================================================
--- src/Common/Indenter.h	(revision a5de33ebd685fe6ecb7f95deb3a78328f5b9da15)
+++ src/Common/Indenter.h	(revision a5de33ebd685fe6ecb7f95deb3a78328f5b9da15)
@@ -0,0 +1,36 @@
+//
+// Cforall Version 1.0.0 Copyright (C) 2015 University of Waterloo
+//
+// The contents of this file are covered under the licence agreement in the
+// file "LICENCE" distributed with Cforall.
+//
+// utility.h --
+//
+// Author           : Richard C. Bilson
+// Created On       : Mon May 18 07:44:20 2015
+// Last Modified By : Andrew Beach
+// Last Modified On : Fri May 5 11:03:00 2017
+// Update Count     : 32
+//
+
+#ifndef INDENTER_H
+#define INDENTER_H
+
+struct Indenter {
+	Indenter( unsigned int amt = 2 ) : amt( amt ) {}
+	unsigned int amt = 2;  // amount 1 level increases indent by (i.e. how much to increase by in operator++)
+	unsigned int indent = 0;
+
+	Indenter & operator+=(int nlevels) { indent += amt*nlevels; return *this; }
+	Indenter & operator-=(int nlevels) { indent -= amt*nlevels; return *this; }
+	Indenter operator+(int nlevels) { Indenter indenter = *this; return indenter += nlevels; }
+	Indenter operator-(int nlevels) { Indenter indenter = *this; return indenter -= nlevels; }
+	Indenter & operator++() { return *this += 1; }
+	Indenter & operator--() { return *this -= 1; }
+};
+
+inline std::ostream & operator<<( std::ostream & out, Indenter & indent ) {
+	return out << std::string(indent.indent, ' ');
+}
+
+#endif // INDENTER_H
Index: src/ResolvExpr/CurrentObject.cc
===================================================================
--- src/ResolvExpr/CurrentObject.cc	(revision b72d4ed3c032c44b2e77aa0b0822f63ebaf1bea0)
+++ src/ResolvExpr/CurrentObject.cc	(revision a5de33ebd685fe6ecb7f95deb3a78328f5b9da15)
@@ -19,4 +19,6 @@
 #include "CurrentObject.h"
 
+#include "Common/Indenter.h"
+
 #include "SynTree/Declaration.h"
 #include "SynTree/Initializer.h"
@@ -45,19 +47,4 @@
 			assertf( false, "unhandled type on getConstValue %s", toString( constExpr->get_result() ).c_str() ); // xxx - might be semantic error
 		}
-	}
-
-	struct Indenter {
-		static const int amt = 2;
-		unsigned int indent = 0;
-
-		Indenter & operator+=(int nlevels) { indent += amt*nlevels; return *this; }
-		Indenter & operator-=(int nlevels) { indent -= amt*nlevels; return *this; }
-		Indenter operator+(int nlevels) { Indenter indenter = *this; return indenter += nlevels; }
-		Indenter operator-(int nlevels) { Indenter indenter = *this; return indenter -= nlevels; }
-		Indenter & operator++() { return *this += 1; }
-		Indenter & operator--() { return *this -= 1; }
-	};
-	std::ostream & operator<<( std::ostream & out, Indenter & indent ) {
-		return out << std::string(indent.indent, ' ');
 	}
 
Index: src/ResolvExpr/CurrentObject.h
===================================================================
--- src/ResolvExpr/CurrentObject.h	(revision b72d4ed3c032c44b2e77aa0b0822f63ebaf1bea0)
+++ src/ResolvExpr/CurrentObject.h	(revision a5de33ebd685fe6ecb7f95deb3a78328f5b9da15)
@@ -25,4 +25,5 @@
 	class MemberIterator;
 
+	// TODO: memory management of MemberIterators
 	class CurrentObject {
 	public:
