Index: trunk/Include/Classes/System/Threading/AutoResetEvent.ab
===================================================================
--- trunk/Include/Classes/System/Threading/AutoResetEvent.ab	(revision 417)
+++ trunk/Include/Classes/System/Threading/AutoResetEvent.ab	(revision 419)
@@ -1,2 +1,6 @@
+' Classes/System/Threading/AutoResetEvent.ab
+
+#ifndef __SYSTEM_THREADING_AUTORESETEVENT_AB__
+#define __SYSTEM_THREADING_AUTORESETEVENT_AB__
 
 NameSpace System
@@ -15,2 +19,4 @@
 End Namespace
 End Namespace
+
+#endif
Index: trunk/Include/Classes/System/Threading/EventWaitHandle.ab
===================================================================
--- trunk/Include/Classes/System/Threading/EventWaitHandle.ab	(revision 417)
+++ trunk/Include/Classes/System/Threading/EventWaitHandle.ab	(revision 419)
@@ -1,2 +1,6 @@
+' Classes/System/Threading/EventWaitHandle.ab
+
+#ifndef __SYSTEM_THREADING_EVENTWAITHANDLE_AB__
+#define __SYSTEM_THREADING_EVENTWAITHANDLE_AB__
 
 NameSpace System
@@ -13,12 +17,12 @@
 Public
 	Sub EventWaitHandle (initialState As Boolean, mode As EventResetMode)
-		This.Handle=CreateEvent(NULL,mode As BOOL,initialState As BOOL,NULL)
+		This.Handle(CreateEvent(NULL,mode As BOOL,initialState As BOOL,NULL))
 	End Sub
 	Sub EventWaitHandle (initialState As Boolean, mode As EventResetMode, name As String)
-		This.Handle=CreateEvent(NULL,mode As BOOL,initialState As BOOL,name)
+		This.Handle(CreateEvent(NULL,mode As BOOL,initialState As BOOL,ToTCStr(name)))
 	End Sub
 	Sub EventWaitHandle (initialState As Boolean, mode As EventResetMode, name As String, ByRef createdNew As Boolean)
-		This.Handle=CreateEvent(NULL,mode As BOOL,initialState As BOOL,name)
-		If ERROR_ALREADY_EXISTS=GetLastError() Then createdNew=False
+		This.Handle(CreateEvent(NULL,mode As BOOL,initialState As BOOL,ToTCStr(name)))
+		If ERROR_ALREADY_EXISTS=GetLastError() Then createdNew=False Else createdNew=True
 	End Sub
 /*	Sub EventWaitHandle (initialState As Boolean, mode As EventResetMode, name As String, ByRef createdNew As Boolean, EventWaitHandleSecurity)
@@ -54,4 +58,5 @@
 	*/
 	Static Function OpenExisting(name As String) As WaitHandle
+		This.Handle(OpenEvent(EVENT_ALL_ACCESS,FALSE,ToTCStr(name)))
 	End Function
 
@@ -100,2 +105,4 @@
 End Namespace
 End Namespace
+
+#endif
Index: trunk/Include/Classes/System/Threading/ManualResetEvent.ab
===================================================================
--- trunk/Include/Classes/System/Threading/ManualResetEvent.ab	(revision 417)
+++ trunk/Include/Classes/System/Threading/ManualResetEvent.ab	(revision 419)
@@ -1,2 +1,6 @@
+' Classes/System/Threading/ManualResetEvent.ab
+
+#ifndef __SYSTEM_THREADING_MANUALRESETEVENT_AB__
+#define __SYSTEM_THREADING_MANUALRESETEVENT_AB__
 
 NameSpace System
@@ -15,2 +19,4 @@
 End Namespace
 End Namespace
+
+#endif
Index: trunk/Include/Classes/System/Threading/Mutex.ab
===================================================================
--- trunk/Include/Classes/System/Threading/Mutex.ab	(revision 419)
+++ trunk/Include/Classes/System/Threading/Mutex.ab	(revision 419)
@@ -0,0 +1,58 @@
+' Classes/System/Threading/Mutex.ab
+
+#ifndef __SYSTEM_THREADING_MUTEX_AB__
+#define __SYSTEM_THREADING_MUTEX_AB__
+
+Namespace System
+Namespace Threading
+
+Class Mutex
+	Inherits System.Threading.WaitHandle
+
+Public
+	Sub Mutex()
+		This.Handle(CreateMutex(NULL,FALSE,NULL))
+	End Sub
+	Sub Mutex(initiallyOwned As Boolean)
+		This.Handle(CreateMutex(NULL,initiallyOwned As BOOL,NULL))
+	End Sub
+	Sub Mutex(initiallyOwned As Boolean, name As String)
+		This.Handle(CreateMutex(NULL,initiallyOwned As BOOL,ToTCStr(name)))
+	End Sub
+	Sub Mutex(initiallyOwned As Boolean, name As String, ByRef createdNew As Boolean)
+		This.Handle(CreateMutex(NULL,initiallyOwned As BOOL,ToTCStr(name)))
+		If ERROR_ALREADY_EXISTS=GetLastError() Then createdNew=False Else createdNew=True
+		'Throw UnauthorizedAccessException
+		'Throw IOException
+		'Throw ApplicationException
+		'Throw ArgumentException
+	End Sub
+/*	Sub Mutex(Boolean, String, Boolean, MutexSecurity)  
+		TODO
+	End Sub*/
+
+	Static Function OpenExisting (name As String) As Mutex
+		This.Handle(OpenMutex(MUTEX_ALL_ACCESS,FALSE,ToTCStr(name)))
+		'Throw ArgumentException
+		'Throw ArgumentNullException
+		'Throw WaitHandleCannotBeOpenedException
+		'Throw IOException
+		'Throw UnauthorizedAccessException
+	End Function
+
+/*	Static Function OpenExisting (String, MutexRights) As Mutex
+		TODO
+	End Function*/
+
+	Sub Release()
+		If ReleaseMutex(This.Handle()) = 0 Then
+			'Throw ApplicationException
+		End If
+	End Sub
+
+End Class
+
+End Namespace 'Threading
+End Namespace 'System
+
+#endif
Index: trunk/Include/Classes/System/Threading/Semaphore.ab
===================================================================
--- trunk/Include/Classes/System/Threading/Semaphore.ab	(revision 419)
+++ trunk/Include/Classes/System/Threading/Semaphore.ab	(revision 419)
@@ -0,0 +1,66 @@
+' Classes/System/Threading/Semaphore.ab
+
+#ifndef __SYSTEM_THREADING_SEMAPHORE_AB__
+#define __SYSTEM_THREADING_SEMAPHORE_AB__
+
+Namespace System
+Namespace Threading
+
+Class Semaphore
+	Inherits System.Threading.WaitHandle
+
+Public
+	Sub Semaphore(initialCount As Long, maximumCount As Long)
+		This.Handle(CreateSemaphore(NULL,initialCount,maximumCount,NULL))
+	End Sub
+	Sub Semaphore(initialCount As Long, maximumCount As Long, name As String)
+		This.Handle(CreateSemaphore(NULL,initialCount,maximumCount,ToTCStr(name)))
+	End Sub
+	Sub Semaphore(initialCount As Long, maximumCount As Long, name As String, ByRef createdNew As Boolean)
+		This.Handle(CreateSemaphore(NULL,initialCount,maximumCount,ToTCStr(name)))
+		If ERROR_ALREADY_EXISTS=GetLastError() Then createdNew=False Else createdNew=True
+		'Throw ArgumentException
+		'Throw ArgumentOutOfRangeException
+		'Throw IOException
+		'Throw UnauthorizedAccessException
+		'Throw WaitHandleCannotBeOpenedException
+	End Sub
+/*	Sub Semaphore(initialCount As Long, maximumCount As Long, name As String, ByRef createdNew As Boolean, semaphoreSecurity As SemaphoreSecurity)
+		TODO
+	End Sub*/
+
+	Static Function OpenExisting (name As String) As Semaphore
+		This.Handle(OpenSemaphore(SEMAPHORE_ALL_ACCESS,FALSE,ToTCStr(name)))
+		'Throw ArgumentException
+		'Throw ArgumentNullException
+		'Throw WaitHandleCannotBeOpenedException
+		'Throw IOException
+		'Throw UnauthorizedAccessException
+	End Function
+
+/*	Static Function OpenExisting (String, SemaphoreRights) As Semaphore
+		TODO
+	End Function*/
+
+	Function Release() As Long
+		If ReleaseSemaphore(This.Handle(),1,Release) = 0 Then
+			'SemaphoreFullException
+			'IOException
+			'UnauthorizedAccessException
+		End If
+	End Function
+	Function Release(releaseCount As Long) As Long
+		If ReleaseSemaphore(This.Handle(),releaseCount,Release) = 0 Then
+			'ArgumentOutOfRangeException
+			'SemaphoreFullException
+			'IOException
+			'UnauthorizedAccessException
+		End If
+	End Function
+
+End Class
+
+End Namespace 'Threading
+End Namespace 'System
+
+#endif
Index: trunk/Include/Classes/System/Threading/Timeout.ab
===================================================================
--- trunk/Include/Classes/System/Threading/Timeout.ab	(revision 419)
+++ trunk/Include/Classes/System/Threading/Timeout.ab	(revision 419)
@@ -0,0 +1,17 @@
+' Classes/System/Threading/Timeout.ab
+
+#ifndef __SYSTEM_THREADING_TIMEOUT_AB__
+#define __SYSTEM_THREADING_TIMEOUT_AB__
+
+Namespace System
+Namespace Threading
+
+Class Timeout
+Public
+	Const Infinite = -1 As Long
+End Class
+
+End Namespace 'Threading
+End Namespace 'System
+
+#endif
Index: trunk/Include/Classes/index.ab
===================================================================
--- trunk/Include/Classes/index.ab	(revision 417)
+++ trunk/Include/Classes/index.ab	(revision 419)
@@ -81,5 +81,8 @@
 #require "./System/Threading/EventWaitHandle.ab"
 #require "./System/Threading/ManualResetEvent.ab"
+#require "./System/Threading/Mutex.ab"
+#require "./System/Threading/Semaphore.ab"
 #require "./System/Threading/Thread.ab"
+#require "./System/Threading/Timeout.ab"
 #require "./System/Threading/WaitHandle.ab"
 #require "./System/Windows/Forms/Application.ab"
