Index: src/SynTree/Statement.cc
===================================================================
--- src/SynTree/Statement.cc	(revision daf1af80c44ed2335beaaef08ee5072ea619ef52)
+++ src/SynTree/Statement.cc	(revision ca7843715cba84b4e9ce1f8e7b56b833997ab71d)
@@ -10,6 +10,6 @@
 // Created On       : Mon May 18 07:44:20 2015
 // Last Modified By : Andrew Beach
-// Last Modified On : Thr Jun 08 16:22:00 2017
-// Update Count     : 63
+// Last Modified On : Mon Jun 12 10:37:00 2017
+// Update Count     : 64
 //
 
@@ -344,10 +344,10 @@
 }
 
-CatchStmt::CatchStmt( std::list<Label> labels, Declaration *_decl, Statement *_body, bool catchAny ) :
-	Statement( labels ), decl ( _decl ), body( _body ), catchRest ( catchAny ) {
+CatchStmt::CatchStmt( std::list<Label> labels, Kind _kind, Declaration *_decl, Expression *_cond, Statement *_body ) :
+	Statement( labels ), kind ( _kind ), decl ( _decl ), cond ( _cond ), body( _body ) {
 }
 
 CatchStmt::CatchStmt( const CatchStmt & other ) :
-	Statement( other ), decl ( maybeClone( other.decl ) ), body( maybeClone( other.body ) ), catchRest ( other.catchRest ) {
+	Statement( other ), kind ( other.kind ), decl ( maybeClone( other.decl ) ), cond ( maybeClone( other.cond ) ), body( maybeClone( other.body ) ) {
 }
 
@@ -358,5 +358,5 @@
 
 void CatchStmt::print( std::ostream &os, int indent ) const {
-	os << "Catch Statement" << endl;
+	os << "Catch " << ((Terminate == kind) ? "Terminate" : "Resume") << " Statement" << endl;
 
 	os << string( indent, ' ' ) << "... catching" << endl;
@@ -364,6 +364,5 @@
 		decl->printShort( os, indent + 4 );
 		os << endl;
-	} else if ( catchRest )
-		os << string( indent + 4 , ' ' ) << "the rest" << endl;
+	}
 	else
 		os << string( indent + 4 , ' ' ) << ">>> Error:  this catch clause must have a declaration <<<" << endl;
Index: src/SynTree/Statement.h
===================================================================
--- src/SynTree/Statement.h	(revision daf1af80c44ed2335beaaef08ee5072ea619ef52)
+++ src/SynTree/Statement.h	(revision ca7843715cba84b4e9ce1f8e7b56b833997ab71d)
@@ -10,6 +10,6 @@
 // Created On       : Mon May 18 07:44:20 2015
 // Last Modified By : Andrew Beach
-// Last Modified On : Thr Jun 08 18:39:00 2017
-// Update Count     : 66
+// Last Modified On : Mon Jun 12 13:35:00 2017
+// Update Count     : 67
 //
 
@@ -293,9 +293,7 @@
 	enum Kind { Terminate, Resume };
 
-	ThrowStmt( std::list<Label> labels, Kind kind, Expression * expr,
-	           Expression * target = nullptr );
+	ThrowStmt( std::list<Label> labels, Kind kind, Expression * expr, Expression * target = nullptr );
 	ThrowStmt( const ThrowStmt &other );
 	virtual ~ThrowStmt();
-
 
 	Kind get_kind() { return kind; }
@@ -341,11 +339,16 @@
 class CatchStmt : public Statement {
   public:
-	CatchStmt( std::list<Label> labels, Declaration *decl, Statement *body, bool catchAny = false );
+	enum Kind { Terminate, Resume };
+
+	CatchStmt( std::list<Label> labels, Kind kind, Declaration *decl,
+	           Expression *cond, Statement *body );
 	CatchStmt( const CatchStmt &other );
 	virtual ~CatchStmt();
 
+	Kind get_kind() { return kind; }
 	Declaration *get_decl() { return decl; }
 	void set_decl( Declaration *newValue ) { decl = newValue; }
-
+	Expression *get_cond() { return cond; }
+	void set_cond( Expression *newCond ) { cond = newCond; }
 	Statement *get_body() { return body; }
 	void set_body( Statement *newValue ) { body = newValue; }
@@ -357,7 +360,8 @@
 
   private:
+	Kind kind;
 	Declaration *decl;
+	Expression *cond;
 	Statement *body;
-	bool catchRest;
 };
 
