Index: src/SynTree/Mutator.h
===================================================================
--- src/SynTree/Mutator.h	(revision 0c730d99f3adb5e9d0dd1dea118413d63b716406)
+++ src/SynTree/Mutator.h	(revision d00d58175bd0e1df5524a7109ec9127ccb133764)
@@ -58,4 +58,5 @@
 	virtual Statement * mutate( DeclStmt * declStmt ) = 0;
 	virtual Statement * mutate( ImplicitCtorDtorStmt * impCtorDtorStmt ) = 0;
+	virtual Statement * mutate( MutexStmt * mutexStmt ) = 0;
 
 	virtual Expression * mutate( ApplicationExpr * applicationExpr ) = 0;
Index: src/SynTree/Statement.cc
===================================================================
--- src/SynTree/Statement.cc	(revision 0c730d99f3adb5e9d0dd1dea118413d63b716406)
+++ src/SynTree/Statement.cc	(revision d00d58175bd0e1df5524a7109ec9127ccb133764)
@@ -565,4 +565,28 @@
 }
 
+MutexStmt::MutexStmt( Statement * stmt, std::list<Expression *> mutexObjs ) 
+	: Statement(), stmt( stmt ), mutexObjs( mutexObjs ) { }
+
+MutexStmt::MutexStmt( const MutexStmt & other ) : Statement( other ), stmt( maybeClone( other.stmt ) ) {
+	cloneAll( other.mutexObjs, mutexObjs );
+}
+
+MutexStmt::~MutexStmt() {
+	deleteAll( mutexObjs );
+	delete stmt;
+}
+
+void MutexStmt::print( std::ostream & os, Indenter indent ) const {
+	os << "Mutex Statement" << endl;
+	os << indent << "... with Expressions: " << endl;
+	for (auto * obj : mutexObjs) {
+		os << indent+1;
+		obj->print( os, indent+1);
+		os << endl;
+	}
+	os << indent << "... with Statement: " << endl << indent+1;
+	stmt->print( os, indent+1 );
+}
+
 // Local Variables: //
 // tab-width: 4 //
Index: src/SynTree/Statement.h
===================================================================
--- src/SynTree/Statement.h	(revision 0c730d99f3adb5e9d0dd1dea118413d63b716406)
+++ src/SynTree/Statement.h	(revision d00d58175bd0e1df5524a7109ec9127ccb133764)
@@ -535,4 +535,20 @@
 };
 
+class MutexStmt : public Statement {
+  public:
+	Statement * stmt;
+	std::list<Expression *> mutexObjs; // list of mutex objects to acquire
+
+	MutexStmt( Statement * stmt, std::list<Expression *> mutexObjs );
+	MutexStmt( const MutexStmt & other );
+	virtual ~MutexStmt();
+
+	virtual MutexStmt * clone() const override { return new MutexStmt( *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;
+};
+
 // Local Variables: //
 // tab-width: 4 //
Index: src/SynTree/SynTree.h
===================================================================
--- src/SynTree/SynTree.h	(revision 0c730d99f3adb5e9d0dd1dea118413d63b716406)
+++ src/SynTree/SynTree.h	(revision d00d58175bd0e1df5524a7109ec9127ccb133764)
@@ -62,4 +62,5 @@
 class NullStmt;
 class ImplicitCtorDtorStmt;
+class MutexStmt;
 
 class Expression;
Index: src/SynTree/Visitor.h
===================================================================
--- src/SynTree/Visitor.h	(revision 0c730d99f3adb5e9d0dd1dea118413d63b716406)
+++ src/SynTree/Visitor.h	(revision d00d58175bd0e1df5524a7109ec9127ccb133764)
@@ -92,4 +92,6 @@
 	virtual void visit( ImplicitCtorDtorStmt * node ) { visit( const_cast<const ImplicitCtorDtorStmt *>(node) ); }
 	virtual void visit( const ImplicitCtorDtorStmt * impCtorDtorStmt ) = 0;
+	virtual void visit( MutexStmt * node ) { visit( const_cast<const MutexStmt *>(node) ); }
+	virtual void visit( const MutexStmt * mutexStmt ) = 0;
 
 	virtual void visit( ApplicationExpr * node ) { visit( const_cast<const ApplicationExpr *>(node) ); }
