diff --git a/dlls/winmm/playsound.c b/dlls/winmm/playsound.c
index 3a5dc1f..1601ecb 100644
--- a/dlls/winmm/playsound.c
+++ b/dlls/winmm/playsound.c
@@ -357,6 +357,7 @@ static DWORD WINAPI proc_PlaySound(LPVOID arg)
     if (waveOutOpen(&hWave, WAVE_MAPPER, lpWaveFormat, (DWORD)PlaySound_Callback,
 		    (DWORD)&s, CALLBACK_FUNCTION) != MMSYSERR_NOERROR)
 	goto errCleanUp;
+    wps->hWave = hWave;
 
     /* make it so that 3 buffers per second are needed */
     bufsize = (((lpWaveFormat->nAvgBytesPerSec / 3) - 1) / lpWaveFormat->nBlockAlign + 1) *
@@ -451,6 +452,7 @@ static BOOL MULTIMEDIA_PlaySound(const void* pszSound, HMODULE hmod, DWORD fdwSo
          * NULL... as of today, we stop all playing instances */
         SetEvent(WINMM_IData.psStopEvent);
 
+        waveOutReset(WINMM_IData.lpPlaySound->hWave);
         LeaveCriticalSection(&WINMM_IData.cs);
         WaitForSingleObject(WINMM_IData.psLastEvent, INFINITE);
         EnterCriticalSection(&WINMM_IData.cs);
diff --git a/dlls/winmm/winemm.h b/dlls/winmm/winemm.h
index ef90d32..004714b 100644
--- a/dlls/winmm/winemm.h
+++ b/dlls/winmm/winemm.h
@@ -192,6 +192,7 @@ typedef struct tagWINE_PLAYSOUND {
     HMODULE		        hMod;
     DWORD		        fdwSound;
     HANDLE                      hThread;
+    HWAVEOUT                    hWave;
     struct tagWINE_PLAYSOUND*   lpNext;
 } WINE_PLAYSOUND, *LPWINE_PLAYSOUND;
 
