diff --git a/multimedia/mciwave.c b/multimedia/mciwave.c
index 9e503ebf9ffeeed346c08a708e1a8da2ce74b14d..bc2ee7dd0010a4086da36828017eade0340cdbf9 100644
--- a/multimedia/mciwave.c
+++ b/multimedia/mciwave.c
@@ -29,7 +29,7 @@ typedef struct {
     HMMIO			hFile;		/* mmio file handle open as Element */
     MCI_WAVE_OPEN_PARMSA 	openParms;
     WAVEOPENDESC 		waveDesc;
-    PCMWAVEFORMAT		WaveFormat;
+    WAVEFORMATEX		WaveFormat;
     WAVEHDR			WaveHdr;
     BOOL			fInput;		/* FALSE = Output, TRUE = Input */
     WORD			dwStatus;	/* one from MCI_MODE_xxxx */
@@ -100,7 +100,7 @@ static	DWORD 	WAVE_ConvertByteToTimeFormat(WINE_MCIWAVE* wmw, DWORD val, LPDWORD
     
     switch (wmw->dwMciTimeFormat) {
     case MCI_FORMAT_MILLISECONDS:
-	ret = (val * 1000) / wmw->WaveFormat.wf.nAvgBytesPerSec;
+	ret = (val * 1000) / wmw->WaveFormat.nAvgBytesPerSec;
 	break;
     case MCI_FORMAT_BYTES:
 	ret = val;
@@ -125,7 +125,7 @@ static	DWORD 	WAVE_ConvertTimeFormatToByte(WINE_MCIWAVE* wmw, DWORD val)
     
     switch (wmw->dwMciTimeFormat) {
     case MCI_FORMAT_MILLISECONDS:
-	ret = (val * wmw->WaveFormat.wf.nAvgBytesPerSec) / 1000;
+	ret = (val * wmw->WaveFormat.nAvgBytesPerSec) / 1000;
 	break;
     case MCI_FORMAT_BYTES:
 	ret = val;
@@ -156,11 +156,11 @@ static	DWORD WAVE_mciReadFmt(WINE_MCIWAVE* wmw, MMCKINFO* pckMainRIFF)
 		 (long)sizeof(PCMWAVEFORMAT)) != (long)sizeof(PCMWAVEFORMAT))
 	return MCIERR_INVALID_FILE;
     
-    TRACE("wFormatTag=%04X !\n",   wmw->WaveFormat.wf.wFormatTag);
-    TRACE("nChannels=%d \n",       wmw->WaveFormat.wf.nChannels);
-    TRACE("nSamplesPerSec=%ld\n",  wmw->WaveFormat.wf.nSamplesPerSec);
-    TRACE("nAvgBytesPerSec=%ld\n", wmw->WaveFormat.wf.nAvgBytesPerSec);
-    TRACE("nBlockAlign=%d \n",     wmw->WaveFormat.wf.nBlockAlign);
+    TRACE("wFormatTag=%04X !\n",   wmw->WaveFormat.wFormatTag);
+    TRACE("nChannels=%d \n",       wmw->WaveFormat.nChannels);
+    TRACE("nSamplesPerSec=%ld\n",  wmw->WaveFormat.nSamplesPerSec);
+    TRACE("nAvgBytesPerSec=%ld\n", wmw->WaveFormat.nAvgBytesPerSec);
+    TRACE("nBlockAlign=%d \n",     wmw->WaveFormat.nBlockAlign);
     TRACE("wBitsPerSample=%u !\n", wmw->WaveFormat.wBitsPerSample);
 
     mmckInfo.ckid = mmioFOURCC('d', 'a', 't', 'a');
@@ -172,7 +172,7 @@ static	DWORD WAVE_mciReadFmt(WINE_MCIWAVE* wmw, MMCKINFO* pckMainRIFF)
     TRACE("Chunk Found ckid=%.4s fccType=%.4s cksize=%08lX \n",
 	  (LPSTR)&mmckInfo.ckid, (LPSTR)&mmckInfo.fccType, mmckInfo.cksize);
     TRACE("nChannels=%d nSamplesPerSec=%ld\n",
-	  wmw->WaveFormat.wf.nChannels, wmw->WaveFormat.wf.nSamplesPerSec);
+	  wmw->WaveFormat.nChannels, wmw->WaveFormat.nSamplesPerSec);
     wmw->dwLength = mmckInfo.cksize;
     wmw->dwFileOffset = mmioSeek(wmw->hFile, 0, SEEK_CUR); /* >= 0 */
     return 0;
@@ -259,9 +259,9 @@ static DWORD WAVE_mciOpen(UINT wDevID, DWORD dwFlags, LPMCI_WAVE_OPEN_PARMSA lpO
 	wmw->dwLength = 0;
     }
     if (dwRet == 0) {
-	wmw->WaveFormat.wf.nAvgBytesPerSec = 
-	    wmw->WaveFormat.wf.nSamplesPerSec * wmw->WaveFormat.wf.nBlockAlign;
-	wmw->waveDesc.lpFormat = (LPWAVEFORMAT)&wmw->WaveFormat;
+	wmw->WaveFormat.nAvgBytesPerSec = 
+	    wmw->WaveFormat.nSamplesPerSec * wmw->WaveFormat.nBlockAlign;
+	wmw->waveDesc.lpFormat = &wmw->WaveFormat;
 	wmw->dwPosition = 0;
 	
 	wmw->dwStatus = MCI_MODE_STOP;
@@ -443,8 +443,7 @@ static DWORD WAVE_mciPlay(UINT wDevID, DWORD dwFlags, LPMCI_PLAY_PARMS lpParms)
      * change from output to input and back
      */
     /* FIXME: how to choose between several output channels ? here 0 is forced */
-    /* I shall rather use WAVE_MAPPER */
-    dwRet = waveOutOpen(&wmw->hWave, 0, (LPWAVEFORMATEX)&wmw->WaveFormat, 0L, 0L, CALLBACK_NULL);
+    dwRet = waveOutOpen(&wmw->hWave, WAVE_MAPPER, (LPWAVEFORMATEX)&wmw->WaveFormat, 0L, 0L, CALLBACK_NULL);
     if (dwRet != 0) {
 	TRACE("Can't open low level audio device %ld\n", dwRet);
 	return MCIERR_DEVICE_OPEN;
@@ -468,8 +467,8 @@ static DWORD WAVE_mciPlay(UINT wDevID, DWORD dwFlags, LPMCI_PLAY_PARMS lpParms)
 	TRACE("mmioRead bufsize=%ld count=%ld\n", bufsize, count);
 	if (count < 1) 
 	    break;
-	dwRet = waveOutPrepareHeader(wmw->hWave, &wmw->WaveHdr, sizeof(WAVEHDR));
 	wmw->WaveHdr.dwBufferLength = count;
+	dwRet = waveOutPrepareHeader(wmw->hWave, &wmw->WaveHdr, sizeof(WAVEHDR));
 	wmw->WaveHdr.dwBytesRecorded = 0;
 	TRACE("before WODM_WRITE lpWaveHdr=%p dwBufferLength=%lu dwBytesRecorded=%lu\n",
 	      &wmw->WaveHdr, wmw->WaveHdr.dwBufferLength, wmw->WaveHdr.dwBytesRecorded);
@@ -547,10 +546,11 @@ static DWORD WAVE_mciRecord(UINT wDevID, DWORD dwFlags, LPMCI_RECORD_PARMS lpPar
     lpWaveHdr->dwFlags = 0L;
     lpWaveHdr->dwLoops = 0L;
     dwRet = waveInPrepareHeader(wmw->hWave, lpWaveHdr, sizeof(WAVEHDR));
-    while (TRUE) { /* FIXME: I don't see any waveInAddBuffer ? */
+
+    for (;;) { /* FIXME: I don't see any waveInAddBuffer ? */
 	lpWaveHdr->dwBytesRecorded = 0;
 	dwRet = waveInStart(wmw->hWave);
-	TRACE("after WIDM_START lpWaveHdr=%p dwBytesRecorded=%lu\n",
+	TRACE("waveInStart => lpWaveHdr=%p dwBytesRecorded=%lu\n",
 	      lpWaveHdr, lpWaveHdr->dwBytesRecorded);
 	if (lpWaveHdr->dwBytesRecorded == 0) break;
     }
@@ -802,7 +802,7 @@ static DWORD WAVE_mciStatus(UINT wDevID, DWORD dwFlags, LPMCI_STATUS_PARMS lpPar
 	    lpParms->dwReturn = 0;
 	    break;
 	case MCI_WAVE_STATUS_AVGBYTESPERSEC:
-	    lpParms->dwReturn = wmw->WaveFormat.wf.nAvgBytesPerSec;
+	    lpParms->dwReturn = wmw->WaveFormat.nAvgBytesPerSec;
 	    TRACE("MCI_WAVE_STATUS_AVGBYTESPERSEC => %lu!\n", lpParms->dwReturn);
 	    break;
 	case MCI_WAVE_STATUS_BITSPERSAMPLE:
@@ -810,15 +810,15 @@ static DWORD WAVE_mciStatus(UINT wDevID, DWORD dwFlags, LPMCI_STATUS_PARMS lpPar
 	    TRACE("MCI_WAVE_STATUS_BITSPERSAMPLE => %lu!\n", lpParms->dwReturn);
 	    break;
 	case MCI_WAVE_STATUS_BLOCKALIGN:
-	    lpParms->dwReturn = wmw->WaveFormat.wf.nBlockAlign;
+	    lpParms->dwReturn = wmw->WaveFormat.nBlockAlign;
 	    TRACE("MCI_WAVE_STATUS_BLOCKALIGN => %lu!\n", lpParms->dwReturn);
 	    break;
 	case MCI_WAVE_STATUS_CHANNELS:
-	    lpParms->dwReturn = wmw->WaveFormat.wf.nChannels;
+	    lpParms->dwReturn = wmw->WaveFormat.nChannels;
 	    TRACE("MCI_WAVE_STATUS_CHANNELS => %lu!\n", lpParms->dwReturn);
 	    break;
 	case MCI_WAVE_STATUS_FORMATTAG:
-	    lpParms->dwReturn = wmw->WaveFormat.wf.wFormatTag;
+	    lpParms->dwReturn = wmw->WaveFormat.wFormatTag;
 	    TRACE("MCI_WAVE_FORMATTAG => %lu!\n", lpParms->dwReturn);
 	    break;
 	case MCI_WAVE_STATUS_LEVEL:
@@ -826,7 +826,7 @@ static DWORD WAVE_mciStatus(UINT wDevID, DWORD dwFlags, LPMCI_STATUS_PARMS lpPar
 	    lpParms->dwReturn = 0xAAAA5555;
 	    break;
 	case MCI_WAVE_STATUS_SAMPLESPERSEC:
-	    lpParms->dwReturn = wmw->WaveFormat.wf.nSamplesPerSec;
+	    lpParms->dwReturn = wmw->WaveFormat.nSamplesPerSec;
 	    TRACE("MCI_WAVE_STATUS_SAMPLESPERSEC => %lu!\n", lpParms->dwReturn);
 	    break;
 	default: