Index: src/ControlStruct/ForExprMutator.cc
===================================================================
--- src/ControlStruct/ForExprMutator.cc	(revision af68f0aaa97e163696767618f6faf47775f97d9f)
+++ src/ControlStruct/ForExprMutator.cc	(revision ac032b5138e48f4b7e45f5926201782c05a63ffc)
@@ -5,5 +5,5 @@
 // file "LICENCE" distributed with Cforall.
 //
-// ForExprMutator.cc -- 
+// ForExprMutator.cc --
 //
 // Author           : Rodolfo G. Esteves
@@ -19,9 +19,7 @@
 
 namespace ControlStruct {
-	Statement *ForExprMutator::mutate( ForStmt *forStmt ) {
-		// 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 ) );
-
-		std::list<Statement *> &init = forStmt->get_initialization(); 
+	Statement *ForExprMutator::postmutate( ForStmt *forStmt ) {
+		// hoist any initializer declarations to make them C89 (rather than C99)
+		std::list<Statement *> &init = forStmt->get_initialization();
 		if ( init.size() == 0 ) {
 			return forStmt;
@@ -39,6 +37,4 @@
 		forStmt->set_initialization( std::list<Statement *>() );
 		return block;
-
-		return forStmt;
 	}
 } // namespace ControlStruct
Index: src/ControlStruct/ForExprMutator.h
===================================================================
--- src/ControlStruct/ForExprMutator.h	(revision af68f0aaa97e163696767618f6faf47775f97d9f)
+++ src/ControlStruct/ForExprMutator.h	(revision ac032b5138e48f4b7e45f5926201782c05a63ffc)
@@ -5,5 +5,5 @@
 // file "LICENCE" distributed with Cforall.
 //
-// ForExprMutator.h -- 
+// ForExprMutator.h --
 //
 // Author           : Rodolfo G. Esteves
@@ -21,7 +21,7 @@
 
 namespace ControlStruct {
-	class ForExprMutator : public Mutator {
+	class ForExprMutator {
 	  public:
-		virtual Statement *mutate( ForStmt * );
+		Statement *postmutate( ForStmt * );
 	};
 } // namespace ControlStruct
Index: src/ControlStruct/Mutate.cc
===================================================================
--- src/ControlStruct/Mutate.cc	(revision af68f0aaa97e163696767618f6faf47775f97d9f)
+++ src/ControlStruct/Mutate.cc	(revision ac032b5138e48f4b7e45f5926201782c05a63ffc)
@@ -26,4 +26,5 @@
 
 #include "Common/utility.h"
+#include "Common/PassVisitor.h"
 
 #include "SynTree/Visitor.h"
@@ -34,5 +35,5 @@
 	void mutate( std::list< Declaration * > translationUnit ) {
 		// hoist initialization out of for statements
-		ForExprMutator formut;
+		PassVisitor<ForExprMutator> formut;
 
 		// normalizes label definitions and generates multi-level exit labels
