Index: src/CodeGen/CodeGenerator.cc
===================================================================
--- src/CodeGen/CodeGenerator.cc	(revision 85c4ef0989717f74ab61b2f8edadc71d37320cd6)
+++ src/CodeGen/CodeGenerator.cc	(revision 145f1fc837f3fe2237a52a1c4d10dfa54a209da5)
@@ -9,7 +9,7 @@
 // Author           : Richard C. Bilson
 // Created On       : Mon May 18 07:44:20 2015
-// Last Modified By : Peter A. Buhr
-// Last Modified On : Fri Jun 26 16:52:58 2015
-// Update Count     : 144
+// Last Modified By : Rob Schluntz
+// Last Modified On : Wed Jul 15 14:47:42 2015
+// Update Count     : 177
 //
 
@@ -38,5 +38,5 @@
 	int CodeGenerator::tabsize = 4;
 
-	// the kinds of statements that would ideally be separated by more whitespace
+	// the kinds of statements that would ideally be followed by whitespace
 	bool wantSpacing( Statement * stmt) {
 		return dynamic_cast< IfStmt * >( stmt ) || dynamic_cast< CompoundStmt * >( stmt ) ||
@@ -588,11 +588,8 @@
 
 	void CodeGenerator::visit( ForStmt *forStmt ) {
-		output << "for (";
-
-		if ( forStmt->get_initialization() != 0 )
-			forStmt->get_initialization()->accept( *this );
-		else
-			output << ";";
-		
+		// initialization is always hoisted, so don't 
+		// bother doing anything with that 
+		output << "for (;";
+
 		if ( forStmt->get_condition() != 0 )
 			forStmt->get_condition()->accept( *this );
Index: src/ControlStruct/ForExprMutator.cc
===================================================================
--- src/ControlStruct/ForExprMutator.cc	(revision 85c4ef0989717f74ab61b2f8edadc71d37320cd6)
+++ src/ControlStruct/ForExprMutator.cc	(revision 145f1fc837f3fe2237a52a1c4d10dfa54a209da5)
@@ -9,7 +9,7 @@
 // Author           : Rodolfo G. Esteves
 // Created On       : Mon May 18 07:44:20 2015
-// Last Modified By : Peter A. Buhr
-// Last Modified On : Tue May 19 15:31:47 2015
-// Update Count     : 2
+// Last Modified By : Rob Schluntz
+// Last Modified On : Tue Jul 14 12:14:44 2015
+// Update Count     : 10
 //
 
@@ -22,15 +22,21 @@
 		// recurse down all nest for loops to hoist any initializer declarations to make them C89 (rather than C99)
 		forStmt->set_body( forStmt->get_body()->acceptMutator( *this ) );
-		if ( DeclStmt *decl = dynamic_cast< DeclStmt * > ( forStmt->get_initialization() ) ) {
-			// create compound statement, move initializer declaration outside, leave _for_ as-is
-			CompoundStmt *block = new CompoundStmt( std::list< Label >() );
-			std::list<Statement *> &stmts = block->get_kids();
 
-			stmts.push_back( decl );
-			forStmt->set_initialization( 0 );
-			stmts.push_back( forStmt );
+		std::list<Statement *> &init = forStmt->get_initialization(); 
+		if ( init.size() == 0 ) {
+			return forStmt;
+		} // if
 
-			return block;
-		} // if
+		// create compound statement, move initializers outside, leave _for_ as-is
+		CompoundStmt *block = new CompoundStmt( std::list< Label >() );
+		std::list<Statement *> &stmts = block->get_kids();
+		for ( std::list<Statement *>::iterator it = init.begin(); it != init.end(); ++it ) {
+			stmts.push_back( *it );
+		}	// for
+
+		// add for to the new block
+		stmts.push_back( forStmt );
+		forStmt->set_initialization( std::list<Statement *>() );
+		return block;
 
 		return forStmt;
Index: src/ControlStruct/Mutate.cc
===================================================================
--- src/ControlStruct/Mutate.cc	(revision 85c4ef0989717f74ab61b2f8edadc71d37320cd6)
+++ src/ControlStruct/Mutate.cc	(revision 145f1fc837f3fe2237a52a1c4d10dfa54a209da5)
@@ -10,6 +10,6 @@
 // Created On       : Mon May 18 07:44:20 2015
 // Last Modified By : Rob Schluntz
-// Last Modified On : Wed Jun 03 23:08:43 2015
-// Update Count     : 5
+// Last Modified On : Wed Jul 15 14:50:04 2015
+// Update Count     : 7
 //
 
@@ -36,5 +36,6 @@
 namespace ControlStruct {
 	void mutate( std::list< Declaration * > translationUnit ) {
-		// ForExprMutator formut;
+		// hoist initialization out of for statements
+		ForExprMutator formut;
 
 		// normalizes label definitions and generates multi-level
@@ -51,5 +52,5 @@
 		// LabelTypeChecker lbl;
 
-		// mutateAll( translationUnit, formut );
+		mutateAll( translationUnit, formut );
 		acceptAll( translationUnit, lfix );
 		mutateAll( translationUnit, chmut );
Index: src/GenPoly/PolyMutator.cc
===================================================================
--- src/GenPoly/PolyMutator.cc	(revision 85c4ef0989717f74ab61b2f8edadc71d37320cd6)
+++ src/GenPoly/PolyMutator.cc	(revision 145f1fc837f3fe2237a52a1c4d10dfa54a209da5)
@@ -9,7 +9,7 @@
 // Author           : Richard C. Bilson
 // Created On       : Mon May 18 07:44:20 2015
-// Last Modified By : Peter A. Buhr
-// Last Modified On : Tue May 19 07:45:50 2015
-// Update Count     : 1
+// Last Modified By : Rob Schluntz
+// Last Modified On : Wed Jul 15 14:50:58 2015
+// Update Count     : 3
 //
 
@@ -92,5 +92,5 @@
 	Statement * PolyMutator::mutate(ForStmt *forStmt) {
 		forStmt->set_body(  mutateStatement( forStmt->get_body() ) );
-		forStmt->set_initialization(  maybeMutate( forStmt->get_initialization(), *this ) );
+		mutateAll( forStmt->get_initialization(), *this );
 		forStmt->set_condition(  mutateExpression( forStmt->get_condition() ) );
 		forStmt->set_increment(  mutateExpression( forStmt->get_increment() ) );
Index: src/Parser/StatementNode.cc
===================================================================
--- src/Parser/StatementNode.cc	(revision 85c4ef0989717f74ab61b2f8edadc71d37320cd6)
+++ src/Parser/StatementNode.cc	(revision 145f1fc837f3fe2237a52a1c4d10dfa54a209da5)
@@ -9,7 +9,7 @@
 // Author           : Rodolfo G. Esteves
 // Created On       : Sat May 16 14:59:41 2015
-// Last Modified By : Peter A. Buhr
-// Last Modified On : Sat Jun  6 23:25:41 2015
-// Update Count     : 19
+// Last Modified By : Rob Schluntz
+// Last Modified On : Tue Jul 14 12:20:44 2015
+// Update Count     : 21
 //
 
@@ -271,7 +271,8 @@
 			assert( ctl != 0 );
 
-			Statement *stmt = 0;
-			if ( ctl->get_init() != 0 )
-				stmt = ctl->get_init()->build();
+			std::list<Statement *> init;
+			if ( ctl->get_init() != 0 ) {
+				buildList( ctl->get_init(), init );
+			}
 
 			Expression *cond = 0;
@@ -283,5 +284,5 @@
 				incr = ctl->get_change()->build();
 
-			return new ForStmt( labs, stmt, cond, incr, branches.front() );
+			return new ForStmt( labs, init, cond, incr, branches.front() );
 		}
 	  case Switch:
Index: src/ResolvExpr/Resolver.cc
===================================================================
--- src/ResolvExpr/Resolver.cc	(revision 85c4ef0989717f74ab61b2f8edadc71d37320cd6)
+++ src/ResolvExpr/Resolver.cc	(revision 145f1fc837f3fe2237a52a1c4d10dfa54a209da5)
@@ -9,7 +9,7 @@
 // Author           : Richard C. Bilson
 // Created On       : Sun May 17 12:17:01 2015
-// Last Modified By : Peter A. Buhr
-// Last Modified On : Fri Jul  3 16:18:20 2015
-// Update Count     : 159
+// Last Modified By : Rob Schluntz
+// Last Modified On : Wed Jul 15 14:54:04 2015
+// Update Count     : 167
 //
 
@@ -226,25 +226,17 @@
 
 	void Resolver::visit( ForStmt *forStmt ) {
-	    // SymTab::Indexer::visit( forStmt );
-		Expression *newExpr;
-	    // for statements introduce a level of scope
-	    enterScope();
-	    maybeAccept( forStmt->get_initialization(), *this );
+		SymTab::Indexer::visit( forStmt );
+
 		if ( forStmt->get_condition() ) {
-			newExpr = findSingleExpression( forStmt->get_condition(), *this );
+			Expression * newExpr = findSingleExpression( forStmt->get_condition(), *this );
 			delete forStmt->get_condition();
 			forStmt->set_condition( newExpr );
 		} // if
-  
+		
 		if ( forStmt->get_increment() ) {
-			newExpr = findVoidExpression( forStmt->get_increment(), *this );
+			Expression * newExpr = findVoidExpression( forStmt->get_increment(), *this );
 			delete forStmt->get_increment();
 			forStmt->set_increment( newExpr );
 		} // if
-
-	    maybeAccept( forStmt->get_condition(), *this );
-	    maybeAccept( forStmt->get_increment(), *this );
-	    maybeAccept( forStmt->get_body(), *this );
-	    leaveScope();
 	}
 
Index: src/SymTab/AddVisit.h
===================================================================
--- src/SymTab/AddVisit.h	(revision 85c4ef0989717f74ab61b2f8edadc71d37320cd6)
+++ src/SymTab/AddVisit.h	(revision 145f1fc837f3fe2237a52a1c4d10dfa54a209da5)
@@ -9,7 +9,7 @@
 // Author           : Richard C. Bilson
 // Created On       : Sun May 17 16:14:32 2015
-// Last Modified By : Peter A. Buhr
-// Last Modified On : Sun May 17 16:16:38 2015
-// Update Count     : 3
+// Last Modified By : Rob Schluntz
+// Last Modified On : Tue Jul 14 12:26:17 2015
+// Update Count     : 4
 //
 
@@ -57,5 +57,5 @@
 	inline void addVisit(ForStmt *forStmt, Visitor &visitor) {
 		addVisitStatement( forStmt->get_body(), visitor );
-		maybeAccept( forStmt->get_initialization(), visitor );
+		acceptAll( forStmt->get_initialization(), visitor );
 		maybeAccept( forStmt->get_condition(), visitor );
 		maybeAccept( forStmt->get_increment(), visitor );
Index: src/SymTab/Validate.cc
===================================================================
--- src/SymTab/Validate.cc	(revision 85c4ef0989717f74ab61b2f8edadc71d37320cd6)
+++ src/SymTab/Validate.cc	(revision 145f1fc837f3fe2237a52a1c4d10dfa54a209da5)
@@ -10,6 +10,6 @@
 // Created On       : Sun May 17 21:50:04 2015
 // Last Modified By : Rob Schluntz
-// Last Modified On : Mon Jul 13 14:38:19 2015
-// Update Count     : 184
+// Last Modified On : Tue Jul 14 12:27:54 2015
+// Update Count     : 186
 //
 
@@ -530,5 +530,7 @@
 		init->get_args().push_back( new NameExpr( "0" ) );
 		Statement *initStmt = new ExprStmt( noLabels, init );
-  
+		std::list<Statement *> initList;
+		initList.push_back( initStmt );
+
 		UntypedExpr *cond = new UntypedExpr( new NameExpr( "?<?" ) );
 		cond->get_args().push_back( new VariableExpr( index ) );
@@ -555,5 +557,5 @@
 		assignExpr->get_args().push_back( srcIndex );
   
-		*out++ = new ForStmt( noLabels, initStmt, cond, inc, new ExprStmt( noLabels, assignExpr ) );
+		*out++ = new ForStmt( noLabels, initList, cond, inc, new ExprStmt( noLabels, assignExpr ) );
 	}
 
Index: src/SynTree/Mutator.cc
===================================================================
--- src/SynTree/Mutator.cc	(revision 85c4ef0989717f74ab61b2f8edadc71d37320cd6)
+++ src/SynTree/Mutator.cc	(revision 145f1fc837f3fe2237a52a1c4d10dfa54a209da5)
@@ -9,7 +9,7 @@
 // Author           : Richard C. Bilson
 // Created On       : Mon May 18 07:44:20 2015
-// Last Modified By : Peter A. Buhr
-// Last Modified On : Mon May 18 10:10:46 2015
-// Update Count     : 1
+// Last Modified By : Rob Schluntz
+// Last Modified On : Tue Jul 14 12:31:39 2015
+// Update Count     : 2
 //
 
@@ -109,5 +109,5 @@
 
 Statement *Mutator::mutate( ForStmt *forStmt ) {
-	forStmt->set_initialization( maybeMutate( forStmt->get_initialization(), *this ) );
+	mutateAll( forStmt->get_initialization(), *this );
 	forStmt->set_condition( maybeMutate( forStmt->get_condition(), *this ) );
 	forStmt->set_increment( maybeMutate( forStmt->get_increment(), *this ) );
Index: src/SynTree/Statement.cc
===================================================================
--- src/SynTree/Statement.cc	(revision 85c4ef0989717f74ab61b2f8edadc71d37320cd6)
+++ src/SynTree/Statement.cc	(revision 145f1fc837f3fe2237a52a1c4d10dfa54a209da5)
@@ -9,7 +9,7 @@
 // Author           : Richard C. Bilson
 // Created On       : Mon May 18 07:44:20 2015
-// Last Modified By : Peter A. Buhr
-// Last Modified On : Mon Jun 29 17:37:10 2015
-// Update Count     : 22
+// Last Modified By : Rob Schluntz
+// Last Modified On : Wed Jul 15 14:57:40 2015
+// Update Count     : 27
 //
 
@@ -192,10 +192,10 @@
 }
 
-ForStmt::ForStmt( std::list<Label> labels, Statement *initialization_, Expression *condition_, Expression *increment_, Statement *body_ ):
+ForStmt::ForStmt( std::list<Label> labels, std::list<Statement *> initialization_, Expression *condition_, Expression *increment_, Statement *body_ ):
 	Statement( labels ), initialization( initialization_ ), condition( condition_ ), increment( increment_ ), body( body_ ) {
 }
 
 ForStmt::~ForStmt() {
-	delete initialization;
+	deleteAll( initialization );
 	delete condition;
 	delete increment;
@@ -213,6 +213,7 @@
 
 	os << string( indent + 2, ' ' ) << "initialization: \n"; 
-	if ( initialization != 0 )
-		initialization->print( os, indent + 4 );
+	for ( std::list<Statement *>::const_iterator it = initialization.begin(); it != initialization.end(); ++it ) {
+		(*it)->print( os, indent + 4 );
+	}
 
 	os << "\n" << string( indent + 2, ' ' ) << "condition: \n"; 
Index: src/SynTree/Statement.h
===================================================================
--- src/SynTree/Statement.h	(revision 85c4ef0989717f74ab61b2f8edadc71d37320cd6)
+++ src/SynTree/Statement.h	(revision 145f1fc837f3fe2237a52a1c4d10dfa54a209da5)
@@ -9,7 +9,7 @@
 // Author           : Richard C. Bilson
 // Created On       : Mon May 18 07:44:20 2015
-// Last Modified By : Peter A. Buhr
-// Last Modified On : Tue Jun 23 11:44:27 2015
-// Update Count     : 20
+// Last Modified By : Rob Schluntz
+// Last Modified On : Tue Jul 14 12:14:54 2015
+// Update Count     : 24
 //
 
@@ -199,10 +199,10 @@
 class ForStmt : public Statement {
   public:
-	ForStmt( std::list<Label> labels, Statement *initialization = 0,
+	ForStmt( std::list<Label> labels, std::list<Statement *> initialization,
 	     Expression *condition = 0, Expression *increment = 0, Statement *body = 0 );
 	virtual ~ForStmt();
 
-	Statement *get_initialization() { return initialization; }
-	void set_initialization( Statement *newValue ) { initialization = newValue; }
+	std::list<Statement *> &get_initialization() { return initialization; }
+	void set_initialization( std::list<Statement *> newValue ) { initialization = newValue; }
 	Expression *get_condition() { return condition; }
 	void set_condition( Expression *newValue ) { condition = newValue; }
@@ -217,5 +217,5 @@
 	virtual void print( std::ostream &os, int indent = 0 ) const;
   private:
-	Statement *initialization;
+	std::list<Statement *> initialization;
 	Expression *condition;
 	Expression *increment;
Index: src/SynTree/Visitor.cc
===================================================================
--- src/SynTree/Visitor.cc	(revision 85c4ef0989717f74ab61b2f8edadc71d37320cd6)
+++ src/SynTree/Visitor.cc	(revision 145f1fc837f3fe2237a52a1c4d10dfa54a209da5)
@@ -9,7 +9,7 @@
 // Author           : Richard C. Bilson
 // Created On       : Mon May 18 07:44:20 2015
-// Last Modified By : Peter A. Buhr
-// Last Modified On : Mon May 18 11:14:51 2015
-// Update Count     : 2
+// Last Modified By : Rob Schluntz
+// Last Modified On : Tue Jul 14 12:31:03 2015
+// Update Count     : 3
 //
 
@@ -94,6 +94,5 @@
 
 void Visitor::visit( ForStmt *forStmt ) {
-	// ForStmt still needs to be fixed
-	maybeAccept( forStmt->get_initialization(), *this );
+	acceptAll( forStmt->get_initialization(), *this );
 	maybeAccept( forStmt->get_condition(), *this );
 	maybeAccept( forStmt->get_increment(), *this );
