Index: Monitor.cs
===================================================================
--- Monitor.cs	(revision 56669)
+++ Monitor.cs	(working copy)
@@ -207,7 +207,7 @@
 			// LAMESPEC: says to throw ArgumentException too
 			int ms=Convert.ToInt32(timeout.TotalMilliseconds);
 			
-			if(ms < 0 || ms > Int32.MaxValue) {
+			if((ms < 0 && ms != -1) || ms > Int32.MaxValue) {
 				throw new ArgumentOutOfRangeException("timeout out of range");
 			}
 			if(Monitor_test_synchronised(obj)==false) {
