Index: tests/concurrency/mutexstmt/.expect/locks.txt
===================================================================
--- tests/concurrency/mutexstmt/.expect/locks.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/mutexstmt/.expect/locks.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,6 @@
+Start Test: single lock mutual exclusion
+End Test: single lock mutual exclusion
+Start Test: multi lock deadlock/mutual exclusion
+End Test: multi lock deadlock/mutual exclusion
+Start Test: multi polymorphic lock deadlock/mutual exclusion
+End Test: multi polymorphic lock deadlock/mutual exclusion
Index: tests/concurrency/mutexstmt/.expect/monitors.txt
===================================================================
--- tests/concurrency/mutexstmt/.expect/monitors.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/mutexstmt/.expect/monitors.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,4 @@
+Start Test: single monitor mutual exclusion
+End Test: single monitor mutual exclusion
+Start Test: multi monitor deadlock/mutual exclusion
+End Test: multi monitor deadlock/mutual exclusion
Index: tests/concurrency/mutexstmt/locks.cfa
===================================================================
--- tests/concurrency/mutexstmt/locks.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/mutexstmt/locks.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,133 @@
+#include <mutex_stmt.hfa>
+#include <locks.hfa>
+
+const unsigned int num_times = 10000;
+
+Duration default_preemption() { return 0; }
+
+single_acquisition_lock m1, m2, m3, m4, m5;
+
+thread T_Mutex {};
+bool insideFlag = false;
+int count = 0;
+
+void main( T_Mutex & this ) {
+	for (unsigned int i = 0; i < num_times; i++) {
+		mutex ( m1 ) count++;
+		mutex ( m1 ) { 
+			assert(!insideFlag);
+			insideFlag = true;
+			assert(insideFlag);
+			insideFlag = false;
+		}
+	}
+}
+
+void refTest( single_acquisition_lock & m ) {
+	mutex ( m ) {
+		assert(!insideFlag);
+		insideFlag = true;
+		assert(insideFlag);
+		insideFlag = false;
+	}
+}
+
+thread T_Multi {};
+
+void main( T_Multi & this ) {
+	for (unsigned int i = 0; i < num_times; i++) {
+		refTest( m1 );
+		mutex ( m1 ) {
+			assert(!insideFlag);
+			insideFlag = true;
+			assert(insideFlag);
+			insideFlag = false;
+		}
+		mutex ( m1, m2, m3, m4, m5 ) {
+			assert(!insideFlag);
+			insideFlag = true;
+			assert(insideFlag);
+			insideFlag = false;
+		}
+		mutex ( m3, m1 ) {
+			assert(!insideFlag);
+			insideFlag = true;
+			assert(insideFlag);
+			insideFlag = false;
+		}
+		mutex ( m1, m2, m4 ) {
+			assert(!insideFlag);
+			insideFlag = true;
+			assert(insideFlag);
+			insideFlag = false;
+		}
+		mutex ( m1, m3, m4, m5 ) {
+			assert(!insideFlag);
+			insideFlag = true;
+			assert(insideFlag);
+			insideFlag = false;
+		}
+	}
+}
+
+single_acquisition_lock l1;
+exp_backoff_then_block_lock l2;
+owner_lock l3;
+
+monitor monitor_t {};
+
+monitor_t l4;
+
+thread T_Multi_Poly {};
+
+void main( T_Multi_Poly & this ) {
+	for (unsigned int i = 0; i < num_times; i++) {
+		refTest( l1 );
+		mutex ( l1, l4 ) {
+			assert(!insideFlag);
+			insideFlag = true;
+			assert(insideFlag);
+			insideFlag = false;
+		}
+		mutex ( l1, l2, l3 ) {
+			assert(!insideFlag);
+			insideFlag = true;
+			assert(insideFlag);
+			insideFlag = false;
+		}
+		mutex ( l3, l1, l4 ) {
+			assert(!insideFlag);
+			insideFlag = true;
+			assert(insideFlag);
+			insideFlag = false;
+		}
+		mutex ( l1, l2, l4 ) {
+			assert(!insideFlag);
+			insideFlag = true;
+			assert(insideFlag);
+			insideFlag = false;
+		}
+	}
+}
+
+int num_tasks = 10;
+int main() {
+	processor p[num_tasks - 1];
+
+	printf("Start Test: single lock mutual exclusion\n");
+	{
+		T_Mutex t[num_tasks];
+	}
+	assert(count == num_tasks * num_times);
+	printf("End Test: single lock mutual exclusion\n");
+	printf("Start Test: multi lock deadlock/mutual exclusion\n");
+	{
+		T_Multi t[num_tasks];
+	}
+	printf("End Test: multi lock deadlock/mutual exclusion\n");
+	printf("Start Test: multi polymorphic lock deadlock/mutual exclusion\n");
+	{
+		T_Multi_Poly t[num_tasks];
+	}
+	printf("End Test: multi polymorphic lock deadlock/mutual exclusion\n");
+}
Index: tests/concurrency/mutexstmt/monitors.cfa
===================================================================
--- tests/concurrency/mutexstmt/monitors.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/mutexstmt/monitors.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,81 @@
+#include <monitor.hfa>
+#include <mutex_stmt.hfa>
+#include <stdio.h>
+#include <stdlib.hfa>
+#include <thread.hfa>
+
+const unsigned int num_times = 10000;
+
+monitor monitor_t {};
+
+monitor_t m1, m2, m3, m4, m5;
+
+thread T_Mutex {};
+bool insideFlag = false;
+int count = 0;
+bool startFlag = false;
+
+void main( T_Mutex & this ) {
+	for (unsigned int i = 0; i < num_times; i++) {
+		mutex ( m1 ) count++;
+		mutex ( m1 ) {
+			assert(!insideFlag);
+			insideFlag = true;
+			assert(insideFlag);
+			insideFlag = false;
+		}
+	}
+}
+
+thread T_Multi {};
+
+void main( T_Multi & this ) {
+	for (unsigned int i = 0; i < num_times; i++) {
+		mutex ( m1 ) {
+			assert(!insideFlag);
+			insideFlag = true;
+			assert(insideFlag);
+			insideFlag = false;
+		}
+		mutex ( m1, m2, m3, m4, m5 ) {
+			assert(!insideFlag);
+			insideFlag = true;
+			assert(insideFlag);
+			insideFlag = false;
+		}
+		mutex ( m3, m1 ) {
+			assert(!insideFlag);
+			insideFlag = true;
+			assert(insideFlag);
+			insideFlag = false;
+		}
+		mutex ( m1, m2, m4 ) {
+			assert(!insideFlag);
+			insideFlag = true;
+			assert(insideFlag);
+			insideFlag = false;
+		}
+		mutex ( m1, m3, m4, m5 ) {
+			assert(!insideFlag);
+			insideFlag = true;
+			assert(insideFlag);
+			insideFlag = false;
+		}
+	}
+}
+
+
+int main() {
+	processor p[10];
+
+	printf("Start Test: single monitor mutual exclusion\n");
+	{
+		T_Mutex t[10];
+	}
+	printf("End Test: single monitor mutual exclusion\n");
+	printf("Start Test: multi monitor deadlock/mutual exclusion\n");
+	{
+		T_Multi t[10];
+	}
+	printf("End Test: multi monitor deadlock/mutual exclusion\n");
+}
