diff --git a/boehm-gc/ChangeLog b/boehm-gc/ChangeLog
index 633eef54c167203451b4dc9018de5ee83f433cd3..7e0d91098297a67b723040e0b7701604ca76b4f8 100644
--- a/boehm-gc/ChangeLog
+++ b/boehm-gc/ChangeLog
@@ -1,3 +1,12 @@
+2003-07-31  Danny Smith  <dannysmith@users.sourceforge.net>
+
+	* include/gc.h (GC_CreateThread): Declare with WINAPI
+	attribute. 
+	* win32_threads.c (GC_CreateThread): Make definitions consistent
+	with declaration.  Cast &thread_table[i].handle to PHANDLE
+	in call to DuplicateHandle
+	(thread_start): Declare as static.
+
 2003-07-30  Andreas Tobler  <a.tobler@schweiz.ch>
 
 	* dyn_load.c: Define __private_extern__ to match Apple's system 
diff --git a/boehm-gc/include/gc.h b/boehm-gc/include/gc.h
index d49cd9d60b1f8575252ecfbebb52ed38a6d4c8b0..4444e991ff3bb759e7cbaa48a11a819e558c08e8 100644
--- a/boehm-gc/include/gc.h
+++ b/boehm-gc/include/gc.h
@@ -895,7 +895,7 @@ extern void GC_thr_init();	/* Needed for Solaris/X86	*/
    * and does then use DllMain to keep track of thread creations.  But new code
    * should be built to call GC_CreateThread.
    */
-  GC_API HANDLE GC_CreateThread(
+   GC_API HANDLE WINAPI GC_CreateThread(
       LPSECURITY_ATTRIBUTES lpThreadAttributes,
       DWORD dwStackSize, LPTHREAD_START_ROUTINE lpStartAddress,
       LPVOID lpParameter, DWORD dwCreationFlags, LPDWORD lpThreadId );
diff --git a/boehm-gc/win32_threads.c b/boehm-gc/win32_threads.c
index ff1d06625f86d3de60aa5f216066974e27607f0f..10cfef9d9eb073eaffff9febff9411cf07a6e20d 100644
--- a/boehm-gc/win32_threads.c
+++ b/boehm-gc/win32_threads.c
@@ -376,7 +376,7 @@ void GC_get_next_stack(char *start, char **lo, char **hi)
 
 /* We register threads from DllMain */
 
-GC_API HANDLE GC_CreateThread(
+GC_API HANDLE WINAPI GC_CreateThread(
     LPSECURITY_ATTRIBUTES lpThreadAttributes, 
     DWORD dwStackSize, LPTHREAD_START_ROUTINE lpStartAddress, 
     LPVOID lpParameter, DWORD dwCreationFlags, LPDWORD lpThreadId )
@@ -397,9 +397,9 @@ typedef struct {
     LPVOID param;
 } thread_args;
 
-DWORD WINAPI thread_start(LPVOID arg);
+static DWORD WINAPI thread_start(LPVOID arg);
 
-HANDLE WINAPI GC_CreateThread(
+GC_API HANDLE WINAPI GC_CreateThread(
     LPSECURITY_ATTRIBUTES lpThreadAttributes, 
     DWORD dwStackSize, LPTHREAD_START_ROUTINE lpStartAddress, 
     LPVOID lpParameter, DWORD dwCreationFlags, LPDWORD lpThreadId )
@@ -445,7 +445,7 @@ HANDLE WINAPI GC_CreateThread(
 		    if (!DuplicateHandle(GetCurrentProcess(),
 				 	 thread_h,
 					 GetCurrentProcess(),
-			 		 &thread_table[i].handle,
+			 		 (PHANDLE) &thread_table[i].handle,
 			  		 0,
 					 0,
 					 DUPLICATE_SAME_ACCESS)) {