Index: src/ResolvExpr/Resolver.cc
===================================================================
--- src/ResolvExpr/Resolver.cc	(revision c6c6f2aed949d46b70a8cbd7541b2a7ee7cc4124)
+++ src/ResolvExpr/Resolver.cc	(revision 3f27b9ac2b8f14514c806d4b49cab5c60103870f)
@@ -394,5 +394,8 @@
 
 	void Resolver::visit( CatchStmt *catchStmt ) {
-		Parent::visit( catchStmt );
+		// inline Indexer::visit so that the exception variable is still in-scope for
+		// findSingleExpression() below
+		Parent::enterScope();
+		Visitor::visit( catchStmt );
 		
 		if ( catchStmt->get_cond() ) {
@@ -403,4 +406,6 @@
 			catchStmt->set_cond( findSingleExpression( wrapped, *this ) );
 		}
+
+		Parent::leaveScope();
 	}
 
Index: src/SymTab/Indexer.cc
===================================================================
--- src/SymTab/Indexer.cc	(revision c6c6f2aed949d46b70a8cbd7541b2a7ee7cc4124)
+++ src/SymTab/Indexer.cc	(revision 3f27b9ac2b8f14514c806d4b49cab5c60103870f)
@@ -353,4 +353,17 @@
 	}
 
+	void Indexer::visit( ForStmt *forStmt ) {
+	    // for statements introduce a level of scope
+	    enterScope();
+	    Visitor::visit( forStmt );
+	    leaveScope();
+	}
+
+	void Indexer::visit( CatchStmt *catchStmt ) {
+		// catch statements introduce a level of scope (for the caught exception)
+		enterScope();
+		Visitor::visit( catchStmt );
+		leaveScope();
+	}
 
 	void Indexer::visit( ApplicationExpr *applicationExpr ) {
@@ -556,13 +569,4 @@
 		leaveScope();
 	}
-
-	void Indexer::visit( ForStmt *forStmt ) {
-	    // for statements introduce a level of scope
-	    enterScope();
-	    Visitor::visit( forStmt );
-	    leaveScope();
-	}
-
-
 
 	void Indexer::lookupId( const std::string &id, std::list< DeclarationWithType* > &out ) const {
Index: src/SymTab/Indexer.h
===================================================================
--- src/SymTab/Indexer.h	(revision c6c6f2aed949d46b70a8cbd7541b2a7ee7cc4124)
+++ src/SymTab/Indexer.h	(revision 3f27b9ac2b8f14514c806d4b49cab5c60103870f)
@@ -45,4 +45,6 @@
 
 		virtual void visit( CompoundStmt *compoundStmt );
+		virtual void visit( ForStmt *forStmt );
+		virtual void visit( CatchStmt *catchStmt );
 
 		virtual void visit( ApplicationExpr *applicationExpr );
@@ -81,6 +83,4 @@
 		virtual void visit( StructInstType *contextInst );
 		virtual void visit( UnionInstType *contextInst );
-
-		virtual void visit( ForStmt *forStmt );
 
 		// when using an indexer manually (e.g., within a mutator traversal), it is necessary to tell the indexer
