diff --git a/if1632/system.spec b/if1632/system.spec
index 62ba8e6..c2702c2 100644
--- a/if1632/system.spec
+++ b/if1632/system.spec
@@ -2,7 +2,7 @@
 type	win16
 
 1 pascal   InquireSystem(word word) InquireSystem
-2 pascal16 CreateSystemTimer(word segptr) CreateSystemTimer
+2 pascal16 CreateSystemTimer(word segptr) WIN16_CreateSystemTimer
 3 pascal16 KillSystemTimer(word) SYSTEM_KillSystemTimer
 4 pascal16 EnableSystemTimers() EnableSystemTimers
 5 pascal16 DisableSystemTimers() DisableSystemTimers
diff --git a/if1632/thunk.c b/if1632/thunk.c
index 48c68e6..6db8d4a 100644
--- a/if1632/thunk.c
+++ b/if1632/thunk.c
@@ -157,7 +157,6 @@
     (void *)CallTo16_word_ww,              /* CallBootAppProc */
     (void *)CallTo16_word_www,             /* CallLoadAppSegProc */
     (void *)CallTo16_word_www,             /* CallLocalNotifyFunc */
-    (void *)CallTo16_word_,                /* CallSystemTimerProc */
     (void *)CallTo16_word_www,             /* CallResourceHandlerProc */
     (void *)CallTo16_word_wwwl,            /* CallPostAppMessageProc */
     (void *)CallTo16_long_l,               /* CallWOWCallbackProc */
@@ -815,6 +814,42 @@
 }
 
 
+/***********************************************************************
+ *           WIN16_CreateSystemTimer   (SYSTEM.2)
+ */
+static void CALLBACK THUNK_CallSystemTimerProc( FARPROC16 proc, WORD timer )
+{
+    CONTEXT context;
+    memset( &context, '\0', sizeof(context) );
+
+    CS_reg( &context ) = SELECTOROF( proc );
+    IP_reg( &context ) = OFFSETOF( proc );
+    BP_reg( &context ) = OFFSETOF( THREAD_Current()->cur_stack )
+                         + (WORD)&((STACK16FRAME*)0)->bp;
+
+    AX_reg( &context ) = timer;
+
+    CallTo16_sreg_( &context, 0 ); 
+
+    /* FIXME: This does not work if the signal occurs while some thread
+              is currently in 16-bit code. With the current structure
+              of the Wine thunking code, this seems to be hard to fix ... */
+}
+WORD WINAPI WIN16_CreateSystemTimer( WORD rate, FARPROC16 proc )
+{
+    THUNK *thunk = THUNK_Alloc( proc, (RELAY)THUNK_CallSystemTimerProc );
+    WORD timer = 0;
+
+#if 1
+    FIXME(system,"are currently broken, returning 0.\n");
+#else
+    timer = CreateSystemTimer( rate, (SYSTEMTIMERPROC)thunk );
+#endif
+
+    if (!timer) THUNK_Free( thunk );
+    return timer;
+}
+
 
 /***********************************************************************
  * 16->32 Flat Thunk routines:
diff --git a/include/callback.h b/include/callback.h
index 1b46d6f..98d8935 100644
--- a/include/callback.h
+++ b/include/callback.h
@@ -37,7 +37,6 @@
     VOID (CALLBACK *CallBootAppProc)( FARPROC16, HANDLE16, HFILE16 );
     WORD (CALLBACK *CallLoadAppSegProc)( FARPROC16, HANDLE16, HFILE16, WORD );
     WORD (CALLBACK *CallLocalNotifyFunc)( FARPROC16, WORD, HLOCAL16, WORD );
-    VOID (CALLBACK *CallSystemTimerProc)( FARPROC16 );
     HGLOBAL16 (CALLBACK *CallResourceHandlerProc)( FARPROC16, HGLOBAL16, HMODULE16, HRSRC16 );
     BOOL16 (CALLBACK *CallPostAppMessageProc)( FARPROC16, HTASK16, UINT16, WPARAM16, LPARAM );
     DWORD (CALLBACK *CallWOWCallbackProc)( FARPROC16, DWORD );
diff --git a/include/windows.h b/include/windows.h
index f04d350..62537ee 100644
--- a/include/windows.h
+++ b/include/windows.h
@@ -6585,6 +6585,8 @@
 /* Declarations for functions that exist only in Win16 */
 
 #ifdef __WINE__
+typedef VOID (*SYSTEMTIMERPROC)(WORD);
+
 WORD        WINAPI AllocCStoDSAlias(WORD);
 WORD        WINAPI AllocDStoCSAlias(WORD);
 HGLOBAL16   WINAPI AllocResource(HINSTANCE16,HRSRC16,DWORD);
@@ -6595,7 +6597,7 @@
 INT16       WINAPI CloseComm(INT16);
 HGLOBAL16   WINAPI CreateCursorIconIndirect(HINSTANCE16,CURSORICONINFO*,
                                             LPCVOID,LPCVOID);
-WORD        WINAPI CreateSystemTimer(WORD,FARPROC16);
+WORD        WINAPI CreateSystemTimer(WORD,SYSTEMTIMERPROC);
 BOOL16      WINAPI DCHook(HDC16,WORD,DWORD,LPARAM);
 VOID        WINAPI DirectedYield(HTASK16);
 HGLOBAL16   WINAPI DirectResAlloc(HINSTANCE16,WORD,UINT16);
diff --git a/misc/callback.c b/misc/callback.c
index 0449c70..e1b9b4c 100644
--- a/misc/callback.c
+++ b/misc/callback.c
@@ -121,14 +121,6 @@
 
 
 /**********************************************************************
- *	     CALLBACK_CallSystemTimerProc
- */
-static void WINAPI CALLBACK_CallSystemTimerProc( FARPROC16 proc )
-{
-    proc();
-}
-
-/**********************************************************************
  *	     CALLBACK_CallResourceHandlerProc
  */
 static HGLOBAL16 WINAPI CALLBACK_CallResourceHandlerProc( FARPROC16 proc,
@@ -274,7 +266,6 @@
     CALLBACK_CallBootAppProc,         /* CallBootAppProc */
     CALLBACK_CallLoadAppSegProc,      /* CallLoadAppSegProc */
     CALLBACK_CallLocalNotifyFunc,     /* CallLocalNotifyFunc */
-    CALLBACK_CallSystemTimerProc,     /* CallSystemTimerProc */
     CALLBACK_CallResourceHandlerProc, /* CallResourceHandlerProc */
     NULL,                             /* CallPostAppMessageProc */
     CALLBACK_CallWOWCallbackProc,     /* CallWOWCallbackProc */
diff --git a/misc/system.c b/misc/system.c
index b9588fc..b29a62d 100644
--- a/misc/system.c
+++ b/misc/system.c
@@ -12,18 +12,15 @@
 #include <sys/types.h>
 #include <sys/wait.h>
 
-#include "callback.h"
 #include "windows.h"
-#include "miscemu.h"
-#include "dosexe.h"
-#include "vga.h"
 #include "selectors.h"
 #include "sig_context.h"
+#include "miscemu.h"
 #include "debug.h"
 
 typedef struct
 {
-    FARPROC16 callback;  /* NULL if not in use */
+    SYSTEMTIMERPROC callback;  /* NULL if not in use */
     INT32     rate;
     INT32     ticks;
 } SYSTEM_TIMER;
@@ -35,14 +32,9 @@
 static int SYS_NbTimers = 0;
 static BOOL32 SYS_TimersDisabled = FALSE;
 
+
 /***********************************************************************
  *           SYSTEM_TimerTick
- * FIXME: It is a very bad idea to call 16bit code in a signal handler:
- *	  If the signal reached us in 16 bit code, we could have a broken
- *	  %FS, which is in turned saved into the single global
- *	  CALLTO16_Current_fs temporary storage, so a single misplaced
- *	  signal crashes the whole WINE process.
- *	  This needs more thought. -MM
  */
 static HANDLER_DEF(SYSTEM_TimerTick)
 {
@@ -55,17 +47,7 @@
         if ((SYS_Timers[i].ticks -= SYS_TIMER_RATE) <= 0)
         {
             SYS_Timers[i].ticks += SYS_Timers[i].rate;
-
-	    if (SYS_Timers[i].callback == (FARPROC16)DOSMEM_Tick) {
-	    	DOSMEM_Tick();
-	    } else
-	    if (SYS_Timers[i].callback == (FARPROC16)MZ_Tick) {
-	    	MZ_Tick(i+1);
-	    } else
-	    if (SYS_Timers[i].callback == (FARPROC16)VGA_Poll) {
-	    	VGA_Poll();
-	    } else
-		Callbacks->CallSystemTimerProc( SYS_Timers[i].callback );
+            SYS_Timers[i].callback( i+1 );
         }
     }
 }
@@ -146,20 +128,9 @@
 /***********************************************************************
  *           CreateSystemTimer   (SYSTEM.2)
  */
-WORD WINAPI CreateSystemTimer( WORD rate, FARPROC16 callback )
+WORD WINAPI CreateSystemTimer( WORD rate, SYSTEMTIMERPROC callback )
 {
     int i;
-
-    /* FIXME: HACK: do not create system timers due to problems mentioned
-     * above, except DOSMEM_Tick(), MZ_Tick(), and VGA_Poll().
-     */
-    if ((callback!=(FARPROC16)DOSMEM_Tick)&&
-        (callback!=(FARPROC16)MZ_Tick)&&
-        (callback!=(FARPROC16)VGA_Poll)) {
-    	FIXME(system,"are currently broken, returning 0.\n");
-    	return 0;
-    }
-
     for (i = 0; i < NB_SYS_TIMERS; i++)
         if (!SYS_Timers[i].callback)  /* Found one */
         {
