Index: src/SynTree/BaseSyntaxNode.h
===================================================================
--- src/SynTree/BaseSyntaxNode.h	(revision d56e5bcda08aa6816d20a750cfe4087387b7681f)
+++ src/SynTree/BaseSyntaxNode.h	(revision aa3d77b01f0bccec37e2709bdd14bd335e4d24ee)
@@ -24,5 +24,7 @@
 	CodeLocation location;
 
-	virtual void accept( Visitor & v ) = 0; // temporary -- needs to be here so that BaseSyntaxNode is polymorphic and can be dynamic_cast
+	virtual ~BaseSyntaxNode() {}
+
+	virtual void accept( Visitor & v ) = 0;
 };
 
Index: src/SynTree/Expression.cc
===================================================================
--- src/SynTree/Expression.cc	(revision d56e5bcda08aa6816d20a750cfe4087387b7681f)
+++ src/SynTree/Expression.cc	(revision aa3d77b01f0bccec37e2709bdd14bd335e4d24ee)
@@ -288,6 +288,4 @@
 }
 
-// CastExpr *CastExpr::clone() const { return 0; }
-
 void CastExpr::print( std::ostream &os, int indent ) const {
 	os << "Cast of:" << std::endl << std::string( indent+2, ' ' );
@@ -355,5 +353,4 @@
 }
 
-//// is this right? It's cloning the member, but the member is a declaration so probably shouldn't be cloned...
 MemberExpr::MemberExpr( const MemberExpr &other ) :
 		Expression( other ), member( other.member ), aggregate( maybeClone( other.aggregate ) ) {
@@ -361,5 +358,5 @@
 
 MemberExpr::~MemberExpr() {
-	// delete member;
+	// don't delete the member declaration, since it points somewhere else in the tree
 	delete aggregate;
 }
@@ -591,14 +588,4 @@
 }
 
-UntypedValofExpr::UntypedValofExpr( const UntypedValofExpr & other ) : Expression( other ), body ( maybeClone( other.body ) ) {}
-
-UntypedValofExpr::~UntypedValofExpr() { delete body; }
-
-void UntypedValofExpr::print( std::ostream &os, int indent ) const {
-	os << std::string( indent, ' ' ) << "Valof Expression: " << std::endl;
-	if ( get_body() != 0 )
-		get_body()->print( os, indent + 2 );
-}
-
 RangeExpr::RangeExpr( Expression *low, Expression *high ) : low( low ), high( high ) {}
 RangeExpr::RangeExpr( const RangeExpr &other ) : Expression( other ), low( other.low->clone() ), high( other.high->clone() ) {}
Index: src/SynTree/Expression.h
===================================================================
--- src/SynTree/Expression.h	(revision d56e5bcda08aa6816d20a750cfe4087387b7681f)
+++ src/SynTree/Expression.h	(revision aa3d77b01f0bccec37e2709bdd14bd335e4d24ee)
@@ -226,5 +226,6 @@
 };
 
-/// MemberExpr represents a member selection operation, e.g. q.p after processing by the expression analyzer
+/// MemberExpr represents a member selection operation, e.g. q.p after processing by the expression analyzer.
+/// Does not take ownership of member.
 class MemberExpr : public Expression {
   public:
@@ -247,5 +248,6 @@
 };
 
-/// VariableExpr represents an expression that simply refers to the value of a named variable
+/// VariableExpr represents an expression that simply refers to the value of a named variable.
+/// Does not take ownership of var.
 class VariableExpr : public Expression {
   public:
@@ -598,22 +600,4 @@
 };
 
-/// ValofExpr represents a GCC 'lambda expression'
-class UntypedValofExpr : public Expression {
-  public:
-	UntypedValofExpr( Statement *_body, Expression *_aname = nullptr ) : Expression( _aname ), body ( _body ) {}
-	UntypedValofExpr( const UntypedValofExpr & other );
-	virtual ~UntypedValofExpr();
-
-	Expression * get_value();
-	Statement * get_body() const { return body; }
-
-	virtual UntypedValofExpr * clone() const { return new UntypedValofExpr( * this ); }
-	virtual void accept( Visitor & v ) { v.visit( this ); }
-	virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); }
-	virtual void print( std::ostream & os, int indent = 0 ) const;
-  private:
-	Statement * body;
-};
-
 /// RangeExpr represents a range e.g. '3 ... 5' or '1~10'
 class RangeExpr : public Expression {
Index: src/SynTree/Mutator.cc
===================================================================
--- src/SynTree/Mutator.cc	(revision d56e5bcda08aa6816d20a750cfe4087387b7681f)
+++ src/SynTree/Mutator.cc	(revision aa3d77b01f0bccec37e2709bdd14bd335e4d24ee)
@@ -380,10 +380,4 @@
 }
 
-Expression *Mutator::mutate( UntypedValofExpr *valofExpr ) {
-	valofExpr->set_env( maybeMutate( valofExpr->get_env(), *this ) );
-	valofExpr->set_result( maybeMutate( valofExpr->get_result(), *this ) );
-	return valofExpr;
-}
-
 Expression *Mutator::mutate( RangeExpr *rangeExpr ) {
 	rangeExpr->set_env( maybeMutate( rangeExpr->get_env(), *this ) );
Index: src/SynTree/Mutator.h
===================================================================
--- src/SynTree/Mutator.h	(revision d56e5bcda08aa6816d20a750cfe4087387b7681f)
+++ src/SynTree/Mutator.h	(revision aa3d77b01f0bccec37e2709bdd14bd335e4d24ee)
@@ -78,5 +78,4 @@
 	virtual Expression* mutate( ConstructorExpr *ctorExpr );
 	virtual Expression* mutate( CompoundLiteralExpr *compLitExpr );
-	virtual Expression* mutate( UntypedValofExpr *valofExpr );
 	virtual Expression* mutate( RangeExpr *rangeExpr );
 	virtual Expression* mutate( UntypedTupleExpr *tupleExpr );
Index: src/SynTree/ObjectDecl.cc
===================================================================
--- src/SynTree/ObjectDecl.cc	(revision d56e5bcda08aa6816d20a750cfe4087387b7681f)
+++ src/SynTree/ObjectDecl.cc	(revision aa3d77b01f0bccec37e2709bdd14bd335e4d24ee)
@@ -56,7 +56,7 @@
 
 	if ( init ) {
-		os << " with initializer ";
-		init->print( os, indent );
-		os << std::endl << std::string(indent, ' ');
+		os << " with initializer " << std::endl;
+		init->print( os, indent+2 );
+		os << std::endl << std::string(indent+2, ' ');
 		os << "maybeConstructed? " << init->get_maybeConstructed();
 	} // if
Index: src/SynTree/Statement.cc
===================================================================
--- src/SynTree/Statement.cc	(revision d56e5bcda08aa6816d20a750cfe4087387b7681f)
+++ src/SynTree/Statement.cc	(revision aa3d77b01f0bccec37e2709bdd14bd335e4d24ee)
@@ -313,5 +313,5 @@
 }
 
-TryStmt::TryStmt( std::list<Label> labels, CompoundStmt *tryBlock, std::list<Statement *> &_handlers, FinallyStmt *_finallyBlock ) :
+TryStmt::TryStmt( std::list<Label> labels, CompoundStmt *tryBlock, std::list<CatchStmt *> &_handlers, FinallyStmt *_finallyBlock ) :
 	Statement( labels ), block( tryBlock ),  handlers( _handlers ), finallyBlock( _finallyBlock ) {
 }
@@ -334,5 +334,5 @@
 	// handlers
 	os << string( indent + 2, ' ' ) << "and handlers: " << endl;
-	for ( std::list<Statement *>::const_iterator i = handlers.begin(); i != handlers.end(); i++)
+	for ( std::list<CatchStmt *>::const_iterator i = handlers.begin(); i != handlers.end(); i++)
 		(*i )->print( os, indent + 4 );
 
Index: src/SynTree/Statement.h
===================================================================
--- src/SynTree/Statement.h	(revision d56e5bcda08aa6816d20a750cfe4087387b7681f)
+++ src/SynTree/Statement.h	(revision aa3d77b01f0bccec37e2709bdd14bd335e4d24ee)
@@ -315,5 +315,5 @@
 class TryStmt : public Statement {
   public:
-	TryStmt( std::list<Label> labels, CompoundStmt *tryBlock, std::list<Statement *> &handlers, FinallyStmt *finallyBlock = 0 );
+	TryStmt( std::list<Label> labels, CompoundStmt *tryBlock, std::list<CatchStmt *> &handlers, FinallyStmt *finallyBlock = 0 );
 	TryStmt( const TryStmt &other );
 	virtual ~TryStmt();
@@ -321,5 +321,5 @@
 	CompoundStmt *get_block() const { return block; }
 	void set_block( CompoundStmt *newValue ) { block = newValue; }
-	std::list<Statement *>& get_catchers() { return handlers; }
+	std::list<CatchStmt *>& get_catchers() { return handlers; }
 
 	FinallyStmt *get_finally() const { return finallyBlock; }
@@ -333,5 +333,5 @@
   private:
 	CompoundStmt *block;
-	std::list<Statement *> handlers;
+	std::list<CatchStmt *> handlers;
 	FinallyStmt *finallyBlock;
 };
Index: src/SynTree/Visitor.cc
===================================================================
--- src/SynTree/Visitor.cc	(revision d56e5bcda08aa6816d20a750cfe4087387b7681f)
+++ src/SynTree/Visitor.cc	(revision aa3d77b01f0bccec37e2709bdd14bd335e4d24ee)
@@ -301,9 +301,4 @@
 }
 
-void Visitor::visit( UntypedValofExpr *valofExpr ) {
-	maybeAccept( valofExpr->get_result(), *this );
-	maybeAccept( valofExpr->get_body(), *this );
-}
-
 void Visitor::visit( RangeExpr *rangeExpr ) {
 	maybeAccept( rangeExpr->get_low(), *this );
Index: src/SynTree/Visitor.h
===================================================================
--- src/SynTree/Visitor.h	(revision d56e5bcda08aa6816d20a750cfe4087387b7681f)
+++ src/SynTree/Visitor.h	(revision aa3d77b01f0bccec37e2709bdd14bd335e4d24ee)
@@ -81,5 +81,4 @@
 	virtual void visit( ConstructorExpr * ctorExpr );
 	virtual void visit( CompoundLiteralExpr *compLitExpr );
-	virtual void visit( UntypedValofExpr *valofExpr );
 	virtual void visit( RangeExpr *rangeExpr );
 	virtual void visit( UntypedTupleExpr *tupleExpr );
@@ -163,5 +162,5 @@
 			} // if
 		} catch( SemanticError &e ) {
-			e.set_location( (*i)->location );			
+			e.set_location( (*i)->location );
 			errors.append( e );
 		} // try
