Updated to new MM header organization.

diff --git a/multimedia/audio.c b/multimedia/audio.c
index ff0459f..f11dc74 100644
--- a/multimedia/audio.c
+++ b/multimedia/audio.c
@@ -21,7 +21,8 @@
 #include <sys/ioctl.h>
 #include "wine/winuser16.h"
 #include "driver.h"
-#include "multimedia.h"
+#include "mmddk.h"
+#include "oss.h"
 #include "heap.h"
 #include "ldt.h"
 #include "debugtools.h"
@@ -1377,7 +1378,6 @@
     case WIDM_GETPOS:		return widGetPosition(wDevID, (LPMMTIME16)dwParam1, dwParam2);
     case WIDM_RESET:		return widReset(wDevID);
     case WIDM_START:		return widStart(wDevID);
-    case WIDM_PAUSE:		return widStop(wDevID);
     case WIDM_STOP:		return widStop(wDevID);
     default:
 	FIXME("unknown message %u!\n", wMsg);
diff --git a/multimedia/dsound.c b/multimedia/dsound.c
index 46d0df0..9acb9b5 100644
--- a/multimedia/dsound.c
+++ b/multimedia/dsound.c
@@ -64,7 +64,6 @@
 #include "dsound.h"
 #include "winuser.h"
 #include "winerror.h"
-#include "multimedia.h"
 #include "wine/obj_base.h"
 #include "thread.h"
 #include "debugtools.h"
diff --git a/multimedia/mci.c b/multimedia/mci.c
index 0dc2845..fc0cd9c 100644
--- a/multimedia/mci.c
+++ b/multimedia/mci.c
@@ -13,7 +13,7 @@
 #include "winuser.h"
 #include "heap.h"
 #include "driver.h"
-#include "multimedia.h"
+#include "winemm.h"
 #include "selectors.h"
 #include "digitalv.h"
 #include "options.h"
@@ -708,7 +708,7 @@
 	    switch (dwRet & 0xFFFF0000ul) {
 	    case 0:
 	    case MCI_INTEGER_RETURNED:
-		wsnprintfA(lpstrRet, uRetLen, "%d", data[1]);
+		wsnprintfA(lpstrRet, uRetLen, "%ld", data[1]);
 		break;
 	    case MCI_RESOURCE_RETURNED:
 		/* return string which ID is HIWORD(data[1]), 
@@ -741,7 +741,7 @@
 		break;
 	    case MCI_INTEGER_RETURNED:
 		data[1] = *(LPDWORD)lpstrRet;
-		wsnprintfA(lpstrRet, uRetLen, "%d", data[1]);
+		wsnprintfA(lpstrRet, uRetLen, "%ld", data[1]);
 		break;
 	    default:
 		WARN("Oooch. MCI_STRING and HIWORD(dwRet)=%04x\n", HIWORD(dwRet));
@@ -751,7 +751,7 @@
 	case MCI_RECT:	
 	    if (dwRet & 0xFFFF0000ul)	
 		WARN("Oooch. MCI_STRING and HIWORD(dwRet)=%04x\n", HIWORD(dwRet));
-	    wsnprintfA(lpstrRet, uRetLen, "%d %d %d %d", 
+	    wsnprintfA(lpstrRet, uRetLen, "%ld %ld %ld %ld", 
 		     data[1], data[2], data[3], data[4]);	
 	    break;
 	default:		ERR("oops\n");
diff --git a/multimedia/mcianim.c b/multimedia/mcianim.c
index 74d2c31..df4a3cf 100644
--- a/multimedia/mcianim.c
+++ b/multimedia/mcianim.c
@@ -7,7 +7,7 @@
 
 #include "winuser.h"
 #include "driver.h"
-#include "multimedia.h"
+#include "mmddk.h"
 #include "debugtools.h"
 
 DEFAULT_DEBUG_CHANNEL(mcianim)
diff --git a/multimedia/mciavi.c b/multimedia/mciavi.c
index 3aa7d0e..2b0d965 100644
--- a/multimedia/mciavi.c
+++ b/multimedia/mciavi.c
@@ -8,7 +8,7 @@
 
 #include <string.h>
 #include "winuser.h"
-#include "multimedia.h"
+#include "mmddk.h"
 #include "user.h"
 #include "driver.h"
 #include "digitalv.h"
diff --git a/multimedia/mcicda.c b/multimedia/mcicda.c
index 40f1fe5..273a0d1 100644
--- a/multimedia/mcicda.c
+++ b/multimedia/mcicda.c
@@ -8,19 +8,18 @@
 
 #include "winuser.h"
 #include "driver.h"
-#include "multimedia.h"
+#include "mmddk.h"
 #include "cdrom.h"
 #include "debugtools.h"
 
 DEFAULT_DEBUG_CHANNEL(cdaudio)
 
 typedef struct {
-    UINT16		wDevID;
+    UINT		wDevID;
     int     		nUseCount;          /* Incremented for each shared open */
-    BOOL16  		fShareable;         /* TRUE if first open was shareable */
+    BOOL  		fShareable;         /* TRUE if first open was shareable */
     WORD    		wNotifyDeviceID;    /* MCI device ID with a pending notification */
-    HANDLE16 		hCallback;          /* Callback handle for pending notification */
-    MCI_OPEN_PARMS16 	openParms;
+    HANDLE 		hCallback;          /* Callback handle for pending notification */
     DWORD		dwTimeFormat;
     WINE_CDAUDIO	wcda;
     int			mciMode;
@@ -62,7 +61,7 @@
 /**************************************************************************
  * 				CDAUDIO_mciGetOpenDrv		[internal]	
  */
-static WINE_MCICDAUDIO*  CDAUDIO_mciGetOpenDrv(UINT16 wDevID)
+static WINE_MCICDAUDIO*  CDAUDIO_mciGetOpenDrv(UINT wDevID)
 {
     WINE_MCICDAUDIO*	wmcda = (WINE_MCICDAUDIO*)mciGetDriverData(wDevID);
     
@@ -115,7 +114,7 @@
 static DWORD CDAUDIO_CalcFrame(WINE_MCICDAUDIO* wmcda, DWORD dwTime)
 {
     DWORD	dwFrame = 0;
-    UINT16	wTrack;
+    UINT	wTrack;
     
     TRACE("(%p, %08lX, %lu);\n", wmcda, wmcda->dwTimeFormat, dwTime);
     
@@ -155,10 +154,10 @@
 static DWORD CDAUDIO_CalcTime(WINE_MCICDAUDIO* wmcda, DWORD dwFrame, LPDWORD lpRet)
 {
     DWORD	dwTime = 0;
-    UINT16	wTrack;
-    UINT16	wMinutes;
-    UINT16	wSeconds;
-    UINT16	wFrames;
+    UINT	wTrack;
+    UINT	wMinutes;
+    UINT	wSeconds;
+    UINT	wFrames;
     
     TRACE("(%p, %08lX, %lu);\n", wmcda, wmcda->dwTimeFormat, dwFrame);
     
@@ -197,13 +196,13 @@
     return dwTime;
 }
 
-static DWORD CDAUDIO_mciSeek(UINT16 wDevID, DWORD dwFlags, LPMCI_SEEK_PARMS lpParms);
-static DWORD CDAUDIO_mciStop(UINT16 wDevID, DWORD dwFlags, LPMCI_GENERIC_PARMS lpParms);
+static DWORD CDAUDIO_mciSeek(UINT wDevID, DWORD dwFlags, LPMCI_SEEK_PARMS lpParms);
+static DWORD CDAUDIO_mciStop(UINT wDevID, DWORD dwFlags, LPMCI_GENERIC_PARMS lpParms);
 
 /**************************************************************************
  * 				CDAUDIO_mciOpen			[internal]
  */
-static DWORD CDAUDIO_mciOpen(UINT16 wDevID, DWORD dwFlags, LPMCI_OPEN_PARMSA lpOpenParms)
+static DWORD CDAUDIO_mciOpen(UINT wDevID, DWORD dwFlags, LPMCI_OPEN_PARMSA lpOpenParms)
 {
     DWORD		dwDeviceID;
     WINE_MCICDAUDIO* 	wmcda = (WINE_MCICDAUDIO*)mciGetDriverData(wDevID);
@@ -233,13 +232,6 @@
 	/*		return MCIERR_NO_ELEMENT_ALLOWED; */
     }
 
-    wmcda->openParms.dwCallback = lpOpenParms->dwCallback;
-    wmcda->openParms.wDeviceID  = (WORD)lpOpenParms->wDeviceID;
-    wmcda->openParms.wReserved0 = 0; /*????*/
-    wmcda->openParms.lpstrDeviceType = lpOpenParms->lpstrDeviceType;
-    wmcda->openParms.lpstrElementName = lpOpenParms->lpstrElementName;
-    wmcda->openParms.lpstrAlias = lpOpenParms->lpstrAlias;
-
     wmcda->wNotifyDeviceID = dwDeviceID;
     if (CDAUDIO_Open(&wmcda->wcda) == -1) {
 	--wmcda->nUseCount;
@@ -260,7 +252,7 @@
 /**************************************************************************
  * 				CDAUDIO_mciClose		[internal]
  */
-static DWORD CDAUDIO_mciClose(UINT16 wDevID, DWORD dwParam, LPMCI_GENERIC_PARMS lpParms)
+static DWORD CDAUDIO_mciClose(UINT wDevID, DWORD dwParam, LPMCI_GENERIC_PARMS lpParms)
 {
     WINE_MCICDAUDIO*	wmcda = CDAUDIO_mciGetOpenDrv(wDevID);
 
@@ -281,7 +273,7 @@
 /**************************************************************************
  * 				CDAUDIO_mciGetDevCaps		[internal]
  */
-static DWORD CDAUDIO_mciGetDevCaps(UINT16 wDevID, DWORD dwFlags, 
+static DWORD CDAUDIO_mciGetDevCaps(UINT wDevID, DWORD dwFlags, 
 				   LPMCI_GETDEVCAPS_PARMS lpParms)
 {
     DWORD	ret = 0;
@@ -345,7 +337,7 @@
 /**************************************************************************
  * 				CDAUDIO_mciInfo			[internal]
  */
-static DWORD CDAUDIO_mciInfo(UINT16 wDevID, DWORD dwFlags, LPMCI_INFO_PARMS16 lpParms)
+static DWORD CDAUDIO_mciInfo(UINT wDevID, DWORD dwFlags, LPMCI_INFO_PARMSA lpParms)
 {
     LPSTR		str = 0;
     WINE_MCICDAUDIO*	wmcda = CDAUDIO_mciGetOpenDrv(wDevID);
@@ -372,7 +364,7 @@
 /**************************************************************************
  * 				CDAUDIO_mciStatus		[internal]
  */
-static DWORD CDAUDIO_mciStatus(UINT16 wDevID, DWORD dwFlags, LPMCI_STATUS_PARMS lpParms)
+static DWORD CDAUDIO_mciStatus(UINT wDevID, DWORD dwFlags, LPMCI_STATUS_PARMS lpParms)
 {
     WINE_MCICDAUDIO*	wmcda = CDAUDIO_mciGetOpenDrv(wDevID);
     DWORD	        ret = 0;
@@ -384,8 +376,8 @@
 
     if (dwFlags & MCI_NOTIFY) {
 	TRACE("MCI_NOTIFY_SUCCESSFUL %08lX !\n", lpParms->dwCallback);
-	mciDriverNotify16((HWND16)LOWORD(lpParms->dwCallback), 
-			  wmcda->wNotifyDeviceID, MCI_NOTIFY_SUCCESSFUL);
+	mciDriverNotify((HWND)LOWORD(lpParms->dwCallback), 
+			wmcda->wNotifyDeviceID, MCI_NOTIFY_SUCCESSFUL);
     }
     if (dwFlags & MCI_STATUS_ITEM) {
 	switch (lpParms->dwItem) {
@@ -490,7 +482,7 @@
 /**************************************************************************
  * 				CDAUDIO_mciPlay			[internal]
  */
-static DWORD CDAUDIO_mciPlay(UINT16 wDevID, DWORD dwFlags, LPMCI_PLAY_PARMS lpParms)
+static DWORD CDAUDIO_mciPlay(UINT wDevID, DWORD dwFlags, LPMCI_PLAY_PARMS lpParms)
 {
     int 		start, end;
     WINE_MCICDAUDIO*	wmcda = CDAUDIO_mciGetOpenDrv(wDevID);
@@ -530,7 +522,7 @@
 	if (dwFlags & MCI_NOTIFY) {
 	    TRACE("MCI_NOTIFY_SUCCESSFUL %08lX !\n", lpParms->dwCallback);
 	    /*
-	      mciDriverNotify((HWND16)LOWORD(lpParms->dwCallback), 
+	      mciDriverNotify((HWND)LOWORD(lpParms->dwCallback), 
 	      wmcda->wNotifyDeviceID, MCI_NOTIFY_SUCCESSFUL);
 	    */
 	}
@@ -541,7 +533,7 @@
 /**************************************************************************
  * 				CDAUDIO_mciStop			[internal]
  */
-static DWORD CDAUDIO_mciStop(UINT16 wDevID, DWORD dwFlags, LPMCI_GENERIC_PARMS lpParms)
+static DWORD CDAUDIO_mciStop(UINT wDevID, DWORD dwFlags, LPMCI_GENERIC_PARMS lpParms)
 {
     WINE_MCICDAUDIO*	wmcda = CDAUDIO_mciGetOpenDrv(wDevID);
     
@@ -555,8 +547,8 @@
     wmcda->mciMode = MCI_MODE_STOP;
     if (lpParms && (dwFlags & MCI_NOTIFY)) {
 	TRACE("MCI_NOTIFY_SUCCESSFUL %08lX !\n", lpParms->dwCallback);
-	mciDriverNotify16((HWND16)LOWORD(lpParms->dwCallback), 
-			  wmcda->wNotifyDeviceID, MCI_NOTIFY_SUCCESSFUL);
+	mciDriverNotify((HWND)LOWORD(lpParms->dwCallback), 
+			wmcda->wNotifyDeviceID, MCI_NOTIFY_SUCCESSFUL);
     }
     return 0;
 }
@@ -564,7 +556,7 @@
 /**************************************************************************
  * 				CDAUDIO_mciPause		[internal]
  */
-static DWORD CDAUDIO_mciPause(UINT16 wDevID, DWORD dwFlags, LPMCI_GENERIC_PARMS lpParms)
+static DWORD CDAUDIO_mciPause(UINT wDevID, DWORD dwFlags, LPMCI_GENERIC_PARMS lpParms)
 {
     WINE_MCICDAUDIO*	wmcda = CDAUDIO_mciGetOpenDrv(wDevID);
     
@@ -577,8 +569,8 @@
     wmcda->mciMode = MCI_MODE_PAUSE;
     if (lpParms && (dwFlags & MCI_NOTIFY)) {
         TRACE("MCI_NOTIFY_SUCCESSFUL %08lX !\n", lpParms->dwCallback);
-	mciDriverNotify16((HWND16)LOWORD(lpParms->dwCallback), 
-			  wmcda->wNotifyDeviceID, MCI_NOTIFY_SUCCESSFUL);
+	mciDriverNotify((HWND)LOWORD(lpParms->dwCallback), 
+			wmcda->wNotifyDeviceID, MCI_NOTIFY_SUCCESSFUL);
     }
     return 0;
 }
@@ -586,7 +578,7 @@
 /**************************************************************************
  * 				CDAUDIO_mciResume		[internal]
  */
-static DWORD CDAUDIO_mciResume(UINT16 wDevID, DWORD dwFlags, LPMCI_GENERIC_PARMS lpParms)
+static DWORD CDAUDIO_mciResume(UINT wDevID, DWORD dwFlags, LPMCI_GENERIC_PARMS lpParms)
 {
     WINE_MCICDAUDIO*	wmcda = CDAUDIO_mciGetOpenDrv(wDevID);
     
@@ -599,7 +591,7 @@
     wmcda->mciMode = MCI_MODE_STOP;
     if (lpParms && (dwFlags & MCI_NOTIFY)) {
 	TRACE("MCI_NOTIFY_SUCCESSFUL %08lX !\n", lpParms->dwCallback);
-	mciDriverNotify16((HWND16)LOWORD(lpParms->dwCallback), 
+	mciDriverNotify((HWND)LOWORD(lpParms->dwCallback), 
 			  wmcda->wNotifyDeviceID, MCI_NOTIFY_SUCCESSFUL);
     }
     return 0;
@@ -608,7 +600,7 @@
 /**************************************************************************
  * 				CDAUDIO_mciSeek			[internal]
  */
-static DWORD CDAUDIO_mciSeek(UINT16 wDevID, DWORD dwFlags, LPMCI_SEEK_PARMS lpParms)
+static DWORD CDAUDIO_mciSeek(UINT wDevID, DWORD dwFlags, LPMCI_SEEK_PARMS lpParms)
 {
     DWORD		at;
     WINE_MCICDAUDIO*	wmcda = CDAUDIO_mciGetOpenDrv(wDevID);
@@ -641,7 +633,7 @@
     }
     if (dwFlags & MCI_NOTIFY) {
 	TRACE("MCI_NOTIFY_SUCCESSFUL %08lX !\n", lpParms->dwCallback);
-	mciDriverNotify16((HWND16)LOWORD(lpParms->dwCallback), 
+	mciDriverNotify((HWND)LOWORD(lpParms->dwCallback), 
 			  wmcda->wNotifyDeviceID, MCI_NOTIFY_SUCCESSFUL);
     }
     return 0;
@@ -650,7 +642,7 @@
 /**************************************************************************
  * 				CDAUDIO_mciSetDoor		[internal]
  */
-static DWORD	CDAUDIO_mciSetDoor(UINT16 wDevID, int open)
+static DWORD	CDAUDIO_mciSetDoor(UINT wDevID, int open)
 {
     WINE_MCICDAUDIO*	wmcda = CDAUDIO_mciGetOpenDrv(wDevID);
     
@@ -667,7 +659,7 @@
 /**************************************************************************
  * 				CDAUDIO_mciSet			[internal]
  */
-static DWORD CDAUDIO_mciSet(UINT16 wDevID, DWORD dwFlags, LPMCI_SET_PARMS lpParms)
+static DWORD CDAUDIO_mciSet(UINT wDevID, DWORD dwFlags, LPMCI_SET_PARMS lpParms)
 {
     WINE_MCICDAUDIO*	wmcda = CDAUDIO_mciGetOpenDrv(wDevID);
     
@@ -708,7 +700,7 @@
     if (dwFlags & MCI_NOTIFY) {
 	TRACE("MCI_NOTIFY_SUCCESSFUL %08lX !\n", 
 	      lpParms->dwCallback);
-	mciDriverNotify16((HWND16)LOWORD(lpParms->dwCallback), 
+	mciDriverNotify((HWND)LOWORD(lpParms->dwCallback), 
 			  wmcda->wNotifyDeviceID, MCI_NOTIFY_SUCCESSFUL);
     }
     return 0;
@@ -735,7 +727,7 @@
     case MCI_OPEN_DRIVER:	return CDAUDIO_mciOpen(dwDevID, dwParam1, (LPMCI_OPEN_PARMSA)dwParam2);
     case MCI_CLOSE_DRIVER:	return CDAUDIO_mciClose(dwDevID, dwParam1, (LPMCI_GENERIC_PARMS)dwParam2);
     case MCI_GETDEVCAPS:	return CDAUDIO_mciGetDevCaps(dwDevID, dwParam1, (LPMCI_GETDEVCAPS_PARMS)dwParam2);
-    case MCI_INFO:		return CDAUDIO_mciInfo(dwDevID, dwParam1, (LPMCI_INFO_PARMS16)dwParam2);
+    case MCI_INFO:		return CDAUDIO_mciInfo(dwDevID, dwParam1, (LPMCI_INFO_PARMSA)dwParam2);
     case MCI_STATUS:		return CDAUDIO_mciStatus(dwDevID, dwParam1, (LPMCI_STATUS_PARMS)dwParam2);
     case MCI_SET:		return CDAUDIO_mciSet(dwDevID, dwParam1, (LPMCI_SET_PARMS)dwParam2);
     case MCI_PLAY:		return CDAUDIO_mciPlay(dwDevID, dwParam1, (LPMCI_PLAY_PARMS)dwParam2);
diff --git a/multimedia/midi.c b/multimedia/midi.c
index 02b2a73..a40d39f 100644
--- a/multimedia/midi.c
+++ b/multimedia/midi.c
@@ -17,7 +17,8 @@
 #include <fcntl.h>
 #include <sys/ioctl.h>
 #include "winuser.h"
-#include "multimedia.h"
+#include "mmddk.h"
+#include "oss.h"
 #include "driver.h"
 #include "debugtools.h"
 #include "heap.h"
@@ -27,6 +28,8 @@
 
 #ifdef HAVE_OSS_MIDI
 
+#define MIDI_SEQ "/dev/sequencer"
+
 typedef struct {
     int			state;
     DWORD		bufsize;
@@ -128,13 +131,13 @@
 #endif
 
 /**************************************************************************
- * 			MULTIMEDIA_MidiInit			[internal]
+ * 			OSS_MidiInit				[internal]
  *
  * Initializes the MIDI devices information variables
  *
  */
 /* FIXME: this function shall be moved to the OSS drivers DLL entry point */
-BOOL MULTIMEDIA_MidiInit(void)
+BOOL OSS_MidiInit(void)
 {
 #ifdef HAVE_OSS_MIDI
     int 		i, status, numsynthdevs = 255, nummididevs = 255;
diff --git a/multimedia/mixer.c b/multimedia/mixer.c
index 686adad2..3ced6f2 100644
--- a/multimedia/mixer.c
+++ b/multimedia/mixer.c
@@ -15,7 +15,8 @@
 #include "windef.h"
 #include "user.h"
 #include "driver.h"
-#include "multimedia.h"
+#include "mmddk.h"
+#include "oss.h"
 #include "debugtools.h"
 
 DEFAULT_DEBUG_CHANNEL(mmaux)
diff --git a/multimedia/mmaux.c b/multimedia/mmaux.c
index 5076fcc..589edbd 100644
--- a/multimedia/mmaux.c
+++ b/multimedia/mmaux.c
@@ -13,7 +13,9 @@
 #include <sys/ioctl.h>
 #include "windef.h"
 #include "driver.h"
-#include "multimedia.h"
+#include "mmddk.h"
+#include "oss.h"
+
 #include "debugtools.h"
 
 DEFAULT_DEBUG_CHANNEL(mmaux)
diff --git a/multimedia/mmsystem.c b/multimedia/mmsystem.c
index 8a9d800..8d0ea47 100644
--- a/multimedia/mmsystem.c
+++ b/multimedia/mmsystem.c
@@ -25,7 +25,7 @@
 #include "heap.h"
 #include "user.h"
 #include "driver.h"
-#include "multimedia.h"
+#include "winemm.h"
 #include "syslevel.h"
 #include "callback.h"
 #include "selectors.h"
@@ -70,7 +70,8 @@
     switch (fdwReason) {
     case DLL_PROCESS_ATTACH:
 	if (!bInitDone) { /* to be done only once */
-	    if (!MULTIMEDIA_MidiInit() || !MULTIMEDIA_MciInit()) {
+	    /* FIXME: OSS_MidiInit() shall be moved to OSS low level driver */
+	    if (!OSS_MidiInit() || !MULTIMEDIA_MciInit()) {
 		return FALSE;
 	    }
 	    bInitDone = TRUE;	
@@ -1733,7 +1734,7 @@
 
     /*    TRACE("(%04x)\n", uDeviceID); */
 
-    if (!(wmd = MCI_GetDriver(uDeviceID)) || wmd->lpfnYieldProc || wmd->bIs32) {
+    if (!(wmd = MCI_GetDriver(uDeviceID)) || !wmd->lpfnYieldProc || wmd->bIs32) {
 	UserYield16();
     } else {
 	ret = wmd->lpfnYieldProc(uDeviceID, wmd->dwYieldData);
@@ -1752,7 +1753,7 @@
 
     TRACE("(%04x)\n", uDeviceID);
 
-    if (!(wmd = MCI_GetDriver(uDeviceID)) || wmd->lpfnYieldProc || wmd->bIs32) {
+    if (!(wmd = MCI_GetDriver(uDeviceID)) || !wmd->lpfnYieldProc || !wmd->bIs32) {
 	UserYield16();
     } else {
 	ret = wmd->lpfnYieldProc(uDeviceID, wmd->dwYieldData);
@@ -3990,7 +3991,6 @@
     case WODM_PAUSE:
     case WODM_PREPARE:
     case WODM_UNPREPARE:
-    case WODM_STOP:
     case WODM_CLOSE:
 	/* no argument conversion needed */
 	break;
@@ -4027,7 +4027,6 @@
     case WODM_SETPLAYBACKRATE:
     case WODM_RESET:
     case WODM_PAUSE:
-    case WODM_STOP:
     case WODM_CLOSE:
 	/* no argument conversion needed */
 	break;
@@ -4153,7 +4152,7 @@
  * 				waveInOpen			[WINMM.154]
  */
 UINT WINAPI waveInOpen(HWAVEIN* lphWaveIn, UINT uDeviceID,
-		       const LPWAVEFORMAT lpFormat, DWORD dwCallback,
+		       const LPWAVEFORMATEX lpFormat, DWORD dwCallback,
 		       DWORD dwInstance, DWORD dwFlags)
 {
     HWAVEIN16	hwin16;
@@ -4167,7 +4166,7 @@
  * 				waveInOpen			[MMSYSTEM.504]
  */
 UINT16 WINAPI waveInOpen16(HWAVEIN16* lphWaveIn, UINT16 uDeviceID,
-                           const LPWAVEFORMAT lpFormat, DWORD dwCallback,
+                           const LPWAVEFORMATEX lpFormat, DWORD dwCallback,
                            DWORD dwInstance, DWORD dwFlags)
 {
     HWAVEIN16		hWaveIn;
@@ -4190,7 +4189,7 @@
     lpDesc = (LPWAVEOPENDESC) USER_HEAP_LIN_ADDR(hWaveIn);
     if (lpDesc == NULL) return MMSYSERR_NOMEM;
     lpDesc->hWave = hWaveIn;
-    lpDesc->lpFormat = lpFormat;
+    lpDesc->lpFormat = (LPWAVEFORMAT)lpFormat;
     lpDesc->dwCallBack = dwCallback;
     lpDesc->dwInstance = dwInstance;
     while (uDeviceID < MAXWAVEDRIVERS) {
@@ -4514,7 +4513,6 @@
     case WIDM_PREPARE:
     case WIDM_UNPREPARE:
     case WIDM_ADDBUFFER:
-    case WIDM_PAUSE:
 	/* no argument conversion needed */
 	break;
     case WIDM_GETDEVCAPS:
@@ -4549,7 +4547,6 @@
     case WIDM_STOP:
     case WIDM_RESET:
     case WIDM_START:
-    case WIDM_PAUSE:
 	/* no argument conversion needed */
 	break;
     case WIDM_GETDEVCAPS:
diff --git a/multimedia/time.c b/multimedia/time.c
index 0189b87..4502cf1 100644
--- a/multimedia/time.c
+++ b/multimedia/time.c
@@ -10,7 +10,7 @@
 #include <sys/time.h>
 #include "winbase.h"
 #include "callback.h"
-#include "multimedia.h"
+#include "winemm.h"
 #include "services.h"
 #include "syslevel.h"
 #include "debugtools.h"
@@ -28,9 +28,8 @@
 
 static	void	TIME_TriggerCallBack(LPWINE_TIMERENTRY lpTimer, DWORD dwCurrent)
 {
-    TRACE("before CallBack (%lu)!\n", dwCurrent);
-    TRACE("lpFunc=%p wTimerID=%04X dwUser=%08lX !\n",
-	  lpTimer->lpFunc, lpTimer->wTimerID, lpTimer->dwUser);
+    TRACE("before CallBack (%lu) => lpFunc=%p wTimerID=%04X dwUser=%08lX !\n",
+	  dwCurrent, lpTimer->lpFunc, lpTimer->wTimerID, lpTimer->dwUser);
 	
     /* - TimeProc callback that is called here is something strange, under Windows 3.1x it is called 
      * 		during interrupt time,  is allowed to execute very limited number of API calls (like
@@ -89,11 +88,11 @@
     EnterCriticalSection(&iData->cs);
     for (lpTimer = iData->lpTimerList; lpTimer != NULL; ) {
 	lpNextTimer = lpTimer->lpNext;
-	if (lpTimer->wCurTime < MMSYSTIME_MININTERVAL) {
+	if (lpTimer->uCurTime < MMSYSTIME_MININTERVAL) {
 	    /* since lpTimer->wDelay is >= MININTERVAL, wCurTime value
 	     * shall be correct (>= 0)
 	     */
-	    lpTimer->wCurTime += lpTimer->wDelay - MMSYSTIME_MININTERVAL;
+	    lpTimer->uCurTime += lpTimer->wDelay - MMSYSTIME_MININTERVAL;
 	    if (lpTimer->lpFunc) {
 		if (idx == iData->nSizeLpTimers) {
 		    iData->lpTimers = (LPWINE_TIMERENTRY)
@@ -103,17 +102,18 @@
 		}
 		iData->lpTimers[idx++] = *lpTimer;
 	    }
-	    if (lpTimer->wFlags & TIME_ONESHOT)
+	    /* TIME_ONESHOT is defined as 0 */
+	    if (!(lpTimer->wFlags & TIME_PERIODIC))
 		timeKillEvent(lpTimer->wTimerID);
 	} else {
-	    lpTimer->wCurTime -= MMSYSTIME_MININTERVAL;
+	    lpTimer->uCurTime -= MMSYSTIME_MININTERVAL;
 	}
 	lpTimer = lpNextTimer;
     }
     LeaveCriticalSection(&iData->cs);
 
     while (idx > 0) {
-	TIME_TriggerCallBack(iData->lpTimers + --idx, iData->mmSysTimeMS);
+	TIME_TriggerCallBack(&iData->lpTimers[--idx], iData->mmSysTimeMS);
     }
 }
 
@@ -213,15 +213,13 @@
     if (!iData)
 	return 0;
 
-    lpNewTimer->wCurTime = wDelay;
+    lpNewTimer->uCurTime = wDelay;
     lpNewTimer->wDelay = wDelay;
     lpNewTimer->wResol = wResol;
     lpNewTimer->lpFunc = lpFunc;
     lpNewTimer->dwUser = dwUser;
     lpNewTimer->wFlags = wFlags;
 
-    TRACE("lpFunc=0x%08lx !\n", (DWORD)lpFunc);
-
     EnterCriticalSection(&iData->cs);
 
     for (lpTimer = iData->lpTimerList; lpTimer != NULL; lpTimer = lpTimer->lpNext) {
@@ -234,6 +232,8 @@
 
     LeaveCriticalSection(&iData->cs);
 
+    TRACE("=> %u\n", wNewID + 1);
+
     return wNewID + 1;
 }
 
@@ -272,19 +272,25 @@
     LPWINE_MM_IDATA	iData = MULTIMEDIA_GetIData();
     MMRESULT		ret = MMSYSERR_INVALPARAM;
 
+    TRACE("(%u)\n", wID);
     EnterCriticalSection(&iData->cs);
     /* remove WINE_TIMERENTRY from list */
-    for (lpTimer = &iData->lpTimerList; *lpTimer; lpTimer = &((*lpTimer)->lpNext)) {
+    for (lpTimer = &iData->lpTimerList; *lpTimer; lpTimer = &(*lpTimer)->lpNext) {
 	if (wID == (*lpTimer)->wTimerID) {
-	    *lpTimer = (*lpTimer)->lpNext;
 	    break;
 	}
     }
     LeaveCriticalSection(&iData->cs);
     
     if (*lpTimer) {
-	HeapFree(GetProcessHeap(), 0, *lpTimer);
+	LPWINE_TIMERENTRY	lpTemp = *lpTimer;
+
+	/* unlink timer of id 'wID' */
+	*lpTimer = (*lpTimer)->lpNext;
+	HeapFree(GetProcessHeap(), 0, lpTemp);
 	ret = TIMERR_NOERROR;
+    } else {
+	WARN("wID=%u is not a valid timer ID\n", wID);
     }
 
     return ret;
diff --git a/multimedia/winmm.rc b/multimedia/winmm.rc
index 8fe1319..c560d2f 100644
--- a/multimedia/winmm.rc
+++ b/multimedia/winmm.rc
@@ -8,7 +8,7 @@
  *       MMSYSTEM...)
  */
 
-#include "mmsystem.h"
+#include "mmddk.h"
 #include "winnls.h"
 
 /* Add your language specific defines here */
diff --git a/windows/driver.c b/windows/driver.c
index e9f7d06..d978b1d 100644
--- a/windows/driver.c
+++ b/windows/driver.c
@@ -14,8 +14,9 @@
 #include "driver.h"
 #include "ldt.h"
 #include "module.h"
-#include "debugtools.h"
 #include "mmsystem.h"
+#include "mmddk.h"
+#include "debugtools.h"
 
 DEFAULT_DEBUG_CHANNEL(driver)