Index: src/SynTree/Declaration.h
===================================================================
--- src/SynTree/Declaration.h	(revision ce12e2b15f088274daa97c991566ae160ca9a8fa)
+++ src/SynTree/Declaration.h	(revision e67991fd01d5341ea7ee45736431dbe64851911e)
@@ -360,4 +360,21 @@
 };
 
+class WithStmt : public Declaration {
+public:
+	std::list< Expression * > exprs;
+	Statement * stmt;
+
+	WithStmt( const std::list< Expression * > & exprs, Statement * stmt );
+	WithStmt( const WithStmt & other );
+	virtual ~WithStmt();
+
+	virtual WithStmt * clone() const override { return new WithStmt( *this ); }
+	virtual void accept( Visitor & v ) override { v.visit( this ); }
+	virtual void accept( Visitor & v ) const override { v.visit( this ); }
+	virtual Declaration * acceptMutator( Mutator & m )  override { return m.mutate( this ); }
+	virtual void print( std::ostream & os, Indenter indent = {} ) const override;
+	virtual void printShort( std::ostream & os, Indenter indent = {} ) const override { print(os, indent); }
+};
+
 class AsmDecl : public Declaration {
   public:
Index: src/SynTree/Expression.cc
===================================================================
--- src/SynTree/Expression.cc	(revision ce12e2b15f088274daa97c991566ae160ca9a8fa)
+++ src/SynTree/Expression.cc	(revision e67991fd01d5341ea7ee45736431dbe64851911e)
@@ -724,5 +724,5 @@
 }
 
-DeletedExpr::DeletedExpr( Expression * expr, BaseSyntaxNode * deleteStmt ) : expr( expr ), deleteStmt( deleteStmt ) {
+DeletedExpr::DeletedExpr( Expression * expr, Declaration * deleteStmt ) : expr( expr ), deleteStmt( deleteStmt ) {
 	assert( expr->result );
 	result = expr->result->clone();
Index: src/SynTree/Expression.h
===================================================================
--- src/SynTree/Expression.h	(revision ce12e2b15f088274daa97c991566ae160ca9a8fa)
+++ src/SynTree/Expression.h	(revision e67991fd01d5341ea7ee45736431dbe64851911e)
@@ -888,7 +888,7 @@
 public:
 	Expression * expr;
-	BaseSyntaxNode * deleteStmt;
-
-	DeletedExpr( Expression * expr, BaseSyntaxNode * deleteStmt );
+	Declaration * deleteStmt;
+
+	DeletedExpr( Expression * expr, Declaration * deleteStmt );
 	DeletedExpr( const DeletedExpr & other );
 	~DeletedExpr();
Index: src/SynTree/Mutator.h
===================================================================
--- src/SynTree/Mutator.h	(revision ce12e2b15f088274daa97c991566ae160ca9a8fa)
+++ src/SynTree/Mutator.h	(revision e67991fd01d5341ea7ee45736431dbe64851911e)
@@ -52,5 +52,5 @@
 	virtual Statement * mutate( FinallyStmt * catchStmt ) = 0;
 	virtual Statement * mutate( WaitForStmt * waitforStmt ) = 0;
-	virtual Statement * mutate( WithStmt * withStmt ) = 0;
+	virtual Declaration * mutate( WithStmt * withStmt ) = 0;
 	virtual NullStmt * mutate( NullStmt * nullStmt ) = 0;
 	virtual Statement * mutate( DeclStmt * declStmt ) = 0;
Index: src/SynTree/Statement.cc
===================================================================
--- src/SynTree/Statement.cc	(revision ce12e2b15f088274daa97c991566ae160ca9a8fa)
+++ src/SynTree/Statement.cc	(revision e67991fd01d5341ea7ee45736431dbe64851911e)
@@ -493,6 +493,6 @@
 
 
-WithStmt::WithStmt( const std::list< Expression * > & exprs, Statement * stmt ) : Statement(), exprs( exprs ), stmt( stmt ) {}
-WithStmt::WithStmt( const WithStmt & other ) : Statement( other ), stmt( maybeClone( other.stmt ) ) {
+WithStmt::WithStmt( const std::list< Expression * > & exprs, Statement * stmt ) : Declaration("", noStorageClasses, LinkageSpec::Cforall), exprs( exprs ), stmt( stmt ) {}
+WithStmt::WithStmt( const WithStmt & other ) : Declaration( other ), stmt( maybeClone( other.stmt ) ) {
 	cloneAll( other.exprs, exprs );
 }
Index: src/SynTree/Statement.h
===================================================================
--- src/SynTree/Statement.h	(revision ce12e2b15f088274daa97c991566ae160ca9a8fa)
+++ src/SynTree/Statement.h	(revision e67991fd01d5341ea7ee45736431dbe64851911e)
@@ -461,19 +461,19 @@
 };
 
-class WithStmt : public Statement {
-public:
-	std::list< Expression * > exprs;
-	Statement * stmt;
-
-	WithStmt( const std::list< Expression * > & exprs, Statement * stmt );
-	WithStmt( const WithStmt & other );
-	virtual ~WithStmt();
-
-	virtual WithStmt * clone() const override { return new WithStmt( *this ); }
-	virtual void accept( Visitor & v ) override { v.visit( this ); }
-	virtual void accept( Visitor & v ) const override { v.visit( this ); }
-	virtual Statement * acceptMutator( Mutator & m )  override { return m.mutate( this ); }
-	virtual void print( std::ostream & os, Indenter indent = {} ) const override;
-};
+// class WithStmt : public Statement {
+// public:
+// 	std::list< Expression * > exprs;
+// 	Statement * stmt;
+
+// 	WithStmt( const std::list< Expression * > & exprs, Statement * stmt );
+// 	WithStmt( const WithStmt & other );
+// 	virtual ~WithStmt();
+
+// 	virtual WithStmt * clone() const override { return new WithStmt( *this ); }
+// 	virtual void accept( Visitor & v ) override { v.visit( this ); }
+// 	virtual void accept( Visitor & v ) const override { v.visit( this ); }
+// 	virtual Statement * acceptMutator( Mutator & m )  override { return m.mutate( this ); }
+// 	virtual void print( std::ostream & os, Indenter indent = {} ) const override;
+// };
 
 
