Index: src/Parser/ParseNode.h
===================================================================
--- src/Parser/ParseNode.h	(revision 481115fc1ffbb26c8743033726f427f34f1a1693)
+++ src/Parser/ParseNode.h	(revision d8893ca8c3a93edede949bb75c6d4f23d5d6cf8a)
@@ -408,4 +408,5 @@
 WaitForStmt * build_waitfor_timeout( ExpressionNode * timeout, StatementNode * stmt, ExpressionNode * when );
 WaitForStmt * build_waitfor_timeout( ExpressionNode * timeout, StatementNode * stmt, ExpressionNode * when, StatementNode * else_stmt, ExpressionNode * else_when );
+WithStmt * build_with( ExpressionNode * exprs, StatementNode * stmt );
 
 //##############################################################################
Index: src/Parser/StatementNode.cc
===================================================================
--- src/Parser/StatementNode.cc	(revision 481115fc1ffbb26c8743033726f427f34f1a1693)
+++ src/Parser/StatementNode.cc	(revision d8893ca8c3a93edede949bb75c6d4f23d5d6cf8a)
@@ -282,8 +282,15 @@
 	node->timeout.condition = notZeroExpr( maybeMoveBuild<Expression>( when ) );
 
-	node->orelse.statement = maybeMoveBuild<Statement >( else_stmt );
+	node->orelse.statement  = maybeMoveBuild<Statement >( else_stmt );
 	node->orelse.condition  = notZeroExpr( maybeMoveBuild<Expression>( else_when ) );
 
 	return node;
+}
+
+WithStmt * build_with( ExpressionNode * exprs, StatementNode * stmt ) {
+	std::list< Expression * > e;
+	buildMoveList( exprs, e );
+	Statement * s = maybeMoveBuild<Statement>( stmt );
+	return new WithStmt( e, s );
 }
 
Index: src/Parser/parser.yy
===================================================================
--- src/Parser/parser.yy	(revision 481115fc1ffbb26c8743033726f427f34f1a1693)
+++ src/Parser/parser.yy	(revision d8893ca8c3a93edede949bb75c6d4f23d5d6cf8a)
@@ -1058,5 +1058,7 @@
 with_statement:
 	WITH '(' tuple_expression_list ')' statement
-		{ throw SemanticError("With clause is currently unimplemented."); $$ = nullptr; } // FIX ME
+		{
+			$$ = new StatementNode( build_with( $3, $5 ) );
+		}
 	;
 
