diff --git a/dlls/dmusic/Makefile.in b/dlls/dmusic/Makefile.in
index cf4cb4f..e21c8fc 100644
--- a/dlls/dmusic/Makefile.in
+++ b/dlls/dmusic/Makefile.in
@@ -5,7 +5,6 @@
 MODULE    = dmusic.dll
 IMPORTS   = winmm ole32 msacm32 dsound rpcrt4 user32 advapi32 kernel32 ntdll
 EXTRALIBS = -ldxguid -luuid
-EXTRADEFS = -DWINE_NO_LONG_AS_INT
 
 C_SRCS = \
 	buffer.c \
diff --git a/dlls/dmusic/buffer.c b/dlls/dmusic/buffer.c
index b0718d0..14e03cc 100644
--- a/dlls/dmusic/buffer.c
+++ b/dlls/dmusic/buffer.c
@@ -39,7 +39,7 @@
 	IDirectMusicBufferImpl *This = (IDirectMusicBufferImpl *)iface;
 	ULONG refCount = InterlockedIncrement(&This->ref);
 
-	TRACE("(%p)->(ref before=%lu)\n", This, refCount - 1);
+	TRACE("(%p)->(ref before=%u)\n", This, refCount - 1);
 
 	DMUSIC_LockModule();
 
@@ -50,7 +50,7 @@
 	IDirectMusicBufferImpl *This = (IDirectMusicBufferImpl *)iface;
 	ULONG refCount = InterlockedDecrement(&This->ref);
 
-	TRACE("(%p)->(ref before=%lu)\n", This, refCount + 1);
+	TRACE("(%p)->(ref before=%u)\n", This, refCount + 1);
 
 	if (!refCount) {
 		HeapFree(GetProcessHeap(), 0, This);
@@ -76,13 +76,13 @@
 
 static HRESULT WINAPI IDirectMusicBufferImpl_PackStructured (LPDIRECTMUSICBUFFER iface, REFERENCE_TIME rt, DWORD dwChannelGroup, DWORD dwChannelMessage) {
 	IDirectMusicBufferImpl *This = (IDirectMusicBufferImpl *)iface;
-	FIXME("(%p, 0x%s, %ld, %ld): stub\n", This, wine_dbgstr_longlong(rt), dwChannelGroup, dwChannelMessage);
+	FIXME("(%p, 0x%s, %d, %d): stub\n", This, wine_dbgstr_longlong(rt), dwChannelGroup, dwChannelMessage);
 	return S_OK;
 }
 
 static HRESULT WINAPI IDirectMusicBufferImpl_PackUnstructured (LPDIRECTMUSICBUFFER iface, REFERENCE_TIME rt, DWORD dwChannelGroup, DWORD cb, LPBYTE lpb) {
 	IDirectMusicBufferImpl *This = (IDirectMusicBufferImpl *)iface;
-	FIXME("(%p, 0x%s, %ld, %ld, %p): stub\n", This, wine_dbgstr_longlong(rt), dwChannelGroup, cb, lpb);
+	FIXME("(%p, 0x%s, %d, %d, %p): stub\n", This, wine_dbgstr_longlong(rt), dwChannelGroup, cb, lpb);
 	return S_OK;
 }
 
@@ -136,7 +136,7 @@
 
 static HRESULT WINAPI IDirectMusicBufferImpl_SetUsedBytes (LPDIRECTMUSICBUFFER iface, DWORD cb) {
 	IDirectMusicBufferImpl *This = (IDirectMusicBufferImpl *)iface;
-	FIXME("(%p, %ld): stub\n", This, cb);
+	FIXME("(%p, %d): stub\n", This, cb);
 	return S_OK;
 }
 
diff --git a/dlls/dmusic/clock.c b/dlls/dmusic/clock.c
index e88ec68..719848b 100644
--- a/dlls/dmusic/clock.c
+++ b/dlls/dmusic/clock.c
@@ -40,7 +40,7 @@
 	IReferenceClockImpl *This = (IReferenceClockImpl *)iface;
 	ULONG refCount = InterlockedIncrement(&This->ref);
 
-	TRACE("(%p)->(ref before=%lu)\n", This, refCount - 1);
+	TRACE("(%p)->(ref before=%u)\n", This, refCount - 1);
 
 	DMUSIC_LockModule();
 
@@ -51,7 +51,7 @@
 	IReferenceClockImpl *This = (IReferenceClockImpl *)iface;
 	ULONG refCount = InterlockedDecrement(&This->ref);
 
-	TRACE("(%p)->(ref before=%lu)\n", This, refCount + 1);
+	TRACE("(%p)->(ref before=%u)\n", This, refCount + 1);
 
 	if (!refCount) {
 		HeapFree(GetProcessHeap(), 0, This);
@@ -84,7 +84,7 @@
 
 static HRESULT WINAPI IReferenceClockImpl_Unadvise (IReferenceClock *iface, DWORD dwAdviseCookie) {
 	IReferenceClockImpl *This = (IReferenceClockImpl *)iface;
-	FIXME("(%p, %ld): stub\n", This, dwAdviseCookie);
+	FIXME("(%p, %d): stub\n", This, dwAdviseCookie);
 	return S_OK;
 }
 
diff --git a/dlls/dmusic/collection.c b/dlls/dmusic/collection.c
index 746deed..cb1be18 100644
--- a/dlls/dmusic/collection.c
+++ b/dlls/dmusic/collection.c
@@ -61,7 +61,7 @@
 	ICOM_THIS_MULTI(IDirectMusicCollectionImpl, UnknownVtbl, iface);
 	ULONG refCount = InterlockedIncrement(&This->ref);
 
-	TRACE("(%p)->(ref before=%lu)\n", This, refCount - 1);
+	TRACE("(%p)->(ref before=%u)\n", This, refCount - 1);
 
 	DMUSIC_LockModule();
 
@@ -72,7 +72,7 @@
 	ICOM_THIS_MULTI(IDirectMusicCollectionImpl, UnknownVtbl, iface);
 	ULONG refCount = InterlockedDecrement(&This->ref);
 
-	TRACE("(%p)->(ref before=%lu)\n", This, refCount + 1);
+	TRACE("(%p)->(ref before=%u)\n", This, refCount + 1);
 
 	if (!refCount) {
 		HeapFree(GetProcessHeap(), 0, This);
@@ -112,7 +112,7 @@
 	struct list *listEntry;
 	DWORD dwInstPatch;
 
-	TRACE("(%p, %ld, %p)\n", This, dwPatch, ppInstrument);
+	TRACE("(%p, %d, %p)\n", This, dwPatch, ppInstrument);
 	
 	LIST_FOR_EACH (listEntry, &This->Instruments) {
 		tmpEntry = LIST_ENTRY(listEntry, DMUS_PRIVATE_INSTRUMENTENTRY, entry);
@@ -138,7 +138,7 @@
 	struct list *listEntry;
        DWORD dwLen;
 		
-	TRACE("(%p, %ld, %p, %p, %ld)\n", This, dwIndex, pdwPatch, pwszName, dwNameLen);
+	TRACE("(%p, %d, %p, %p, %d)\n", This, dwIndex, pdwPatch, pwszName, dwNameLen);
 	LIST_FOR_EACH (listEntry, &This->Instruments) {
 		tmpEntry = LIST_ENTRY(listEntry, DMUS_PRIVATE_INSTRUMENTENTRY, entry);
 		if (r == dwIndex) {
@@ -236,7 +236,7 @@
 	memcpy (&pDesc->guidClass, &CLSID_DirectMusicCollection, sizeof(CLSID));
 	
 	IStream_Read (pStream, &Chunk, sizeof(FOURCC)+sizeof(DWORD), NULL);
-	TRACE_(dmfile)(": %s chunk (size = 0x%04lx)", debugstr_fourcc (Chunk.fccID), Chunk.dwSize);
+	TRACE_(dmfile)(": %s chunk (size = 0x%04x)", debugstr_fourcc (Chunk.fccID), Chunk.dwSize);
 	switch (Chunk.fccID) {	
 		case FOURCC_RIFF: {
 			IStream_Read (pStream, &Chunk.fccID, sizeof(FOURCC), NULL);				
@@ -248,7 +248,7 @@
 				do {
 					IStream_Read (pStream, &Chunk, sizeof(FOURCC)+sizeof(DWORD), NULL);
 					StreamCount += sizeof(FOURCC) + sizeof(DWORD) + Chunk.dwSize;
-					TRACE_(dmfile)(": %s chunk (size = 0x%04lx)", debugstr_fourcc (Chunk.fccID), Chunk.dwSize);
+					TRACE_(dmfile)(": %s chunk (size = 0x%04x)", debugstr_fourcc (Chunk.fccID), Chunk.dwSize);
 					switch (Chunk.fccID) {
 						case FOURCC_DLID: {
 							TRACE_(dmfile)(": GUID chunk\n");
@@ -280,7 +280,7 @@
 									do {
 										IStream_Read (pStream, &Chunk, sizeof(FOURCC)+sizeof(DWORD), NULL);
 										ListCount[0] += sizeof(FOURCC) + sizeof(DWORD) + Chunk.dwSize;
-										TRACE_(dmfile)(": %s chunk (size = 0x%04lx)", debugstr_fourcc (Chunk.fccID), Chunk.dwSize);
+										TRACE_(dmfile)(": %s chunk (size = 0x%04x)", debugstr_fourcc (Chunk.fccID), Chunk.dwSize);
 										switch (Chunk.fccID) {
 											case mmioFOURCC('I','N','A','M'):{
 												CHAR szName[DMUS_MAX_NAME];												
@@ -346,7 +346,7 @@
 												break;						
 											}
 										}
-										TRACE_(dmfile)(": ListCount[0] = %ld < ListSize[0] = %ld\n", ListCount[0], ListSize[0]);
+										TRACE_(dmfile)(": ListCount[0] = %d < ListSize[0] = %d\n", ListCount[0], ListSize[0]);
 									} while (ListCount[0] < ListSize[0]);
 									break;
 								}
@@ -366,7 +366,7 @@
 							break;						
 						}
 					}
-					TRACE_(dmfile)(": StreamCount[0] = %ld < StreamSize[0] = %ld\n", StreamCount, StreamSize);
+					TRACE_(dmfile)(": StreamCount[0] = %d < StreamSize[0] = %d\n", StreamCount, StreamSize);
 				} while (StreamCount < StreamSize);
 			} else {
 				TRACE_(dmfile)(": unexpected chunk; loading failed)\n");
@@ -439,7 +439,7 @@
 	This->pStm = pStm;
 	
 	IStream_Read (pStm, &Chunk, sizeof(FOURCC)+sizeof(DWORD), NULL);
-	TRACE_(dmfile)(": %s chunk (size = 0x%04lx)", debugstr_fourcc (Chunk.fccID), Chunk.dwSize);
+	TRACE_(dmfile)(": %s chunk (size = 0x%04x)", debugstr_fourcc (Chunk.fccID), Chunk.dwSize);
 	switch (Chunk.fccID) {	
 		case FOURCC_RIFF: {
 			IStream_Read (pStm, &Chunk.fccID, sizeof(FOURCC), NULL);				
@@ -452,7 +452,7 @@
 					do {
 						IStream_Read (pStm, &Chunk, sizeof(FOURCC)+sizeof(DWORD), NULL);
 						StreamCount += sizeof(FOURCC) + sizeof(DWORD) + Chunk.dwSize;
-						TRACE_(dmfile)(": %s chunk (size = 0x%04lx)", debugstr_fourcc (Chunk.fccID), Chunk.dwSize);
+						TRACE_(dmfile)(": %s chunk (size = 0x%04x)", debugstr_fourcc (Chunk.fccID), Chunk.dwSize);
 						switch (Chunk.fccID) {
 							case FOURCC_COLH: {
 								TRACE_(dmfile)(": collection header chunk\n");
@@ -492,7 +492,7 @@
 										do {
 											IStream_Read (pStm, &Chunk, sizeof(FOURCC)+sizeof(DWORD), NULL);
 											ListCount[0] += sizeof(FOURCC) + sizeof(DWORD) + Chunk.dwSize;
-											TRACE_(dmfile)(": %s chunk (size = 0x%04lx)", debugstr_fourcc (Chunk.fccID), Chunk.dwSize);
+											TRACE_(dmfile)(": %s chunk (size = 0x%04x)", debugstr_fourcc (Chunk.fccID), Chunk.dwSize);
 											switch (Chunk.fccID) {
 												case mmioFOURCC('I','N','A','M'): {
 													CHAR szName[DMUS_MAX_NAME];
@@ -559,7 +559,7 @@
 													break;						
 												}
 											}
-											TRACE_(dmfile)(": ListCount[0] = %ld < ListSize[0] = %ld\n", ListCount[0], ListSize[0]);
+											TRACE_(dmfile)(": ListCount[0] = %d < ListSize[0] = %d\n", ListCount[0], ListSize[0]);
 										} while (ListCount[0] < ListSize[0]);
 										break;
 									}
@@ -577,7 +577,7 @@
 										do {
 											IStream_Read (pStm, &Chunk, sizeof(FOURCC)+sizeof(DWORD), NULL);
 											ListCount[0] += sizeof(FOURCC) + sizeof(DWORD) + Chunk.dwSize;
-											TRACE_(dmfile)(": %s chunk (size = 0x%04lx)", debugstr_fourcc (Chunk.fccID), Chunk.dwSize);
+											TRACE_(dmfile)(": %s chunk (size = 0x%04x)", debugstr_fourcc (Chunk.fccID), Chunk.dwSize);
 											switch (Chunk.fccID) {
 												case FOURCC_LIST: {
 													IStream_Read (pStm, &Chunk.fccID, sizeof(FOURCC), NULL);				
@@ -598,7 +598,7 @@
                                                                                                                             do {
 																IStream_Read (pStm, &Chunk, sizeof(FOURCC)+sizeof(DWORD), NULL);
 																ListCount[1] += sizeof(FOURCC) + sizeof(DWORD) + Chunk.dwSize;
-																TRACE_(dmfile)(": %s chunk (size = 0x%04lx)", debugstr_fourcc (Chunk.fccID), Chunk.dwSize);
+																TRACE_(dmfile)(": %s chunk (size = 0x%04x)", debugstr_fourcc (Chunk.fccID), Chunk.dwSize);
 																switch (Chunk.fccID) {
 																	case FOURCC_INSH: {
 																		TRACE_(dmfile)(": instrument header chunk\n");
@@ -634,7 +634,7 @@
 																		break;						
 																	}
 																}
-																TRACE_(dmfile)(": ListCount[1] = %ld < ListSize[1] = %ld\n", ListCount[1], ListSize[1]);
+																TRACE_(dmfile)(": ListCount[1] = %d < ListSize[1] = %d\n", ListCount[1], ListSize[1]);
                                                                                                                             } while (ListCount[1] < ListSize[1]);
                                                                                                                             /* DEBUG: dumps whole instrument object tree: */
                                                                                                                             if (TRACE_ON(dmusic)) {
@@ -643,11 +643,11 @@
 																	TRACE(" - GUID = %s\n", debugstr_dmguid(pInstrument->pInstrumentID));
 																
 																TRACE(" - Instrument header:\n");
-																TRACE("    - cRegions: %ld\n", pInstrument->pHeader->cRegions);
+																TRACE("    - cRegions: %d\n", pInstrument->pHeader->cRegions);
 																TRACE("    - Locale:\n");
-																TRACE("       - ulBank: %ld\n", pInstrument->pHeader->Locale.ulBank);
-																TRACE("       - ulInstrument: %ld\n", pInstrument->pHeader->Locale.ulInstrument);
-																TRACE("       => dwPatch: %ld\n", MIDILOCALE2Patch(&pInstrument->pHeader->Locale));		
+																TRACE("       - ulBank: %d\n", pInstrument->pHeader->Locale.ulBank);
+																TRACE("       - ulInstrument: %d\n", pInstrument->pHeader->Locale.ulInstrument);
+																TRACE("       => dwPatch: %d\n", MIDILOCALE2Patch(&pInstrument->pHeader->Locale));
                                                                                                                             }
                                                                                                                             list_add_tail (&This->Instruments, &pNewInstrument->entry);
                                                                                                                         }
@@ -663,7 +663,7 @@
 													break;						
 												}
 											}
-											TRACE_(dmfile)(": ListCount[0] = %ld < ListSize[0] = %ld\n", ListCount[0], ListSize[0]);
+											TRACE_(dmfile)(": ListCount[0] = %d < ListSize[0] = %d\n", ListCount[0], ListSize[0]);
 										} while (ListCount[0] < ListSize[0]);
 										break;
 									}
@@ -683,7 +683,7 @@
 								break;						
 							}
 						}
-						TRACE_(dmfile)(": StreamCount = %ld < StreamSize = %ld\n", StreamCount, StreamSize);
+						TRACE_(dmfile)(": StreamCount = %d < StreamSize = %d\n", StreamCount, StreamSize);
 					} while (StreamCount < StreamSize);
 					break;
 				}
@@ -721,7 +721,7 @@
 			TRACE(" - Name = %s\n", debugstr_w(This->pDesc->wszName));
 		
 		TRACE(" - Collection header:\n");
-		TRACE("    - cInstruments: %ld\n", This->pHeader->cInstruments);
+		TRACE("    - cInstruments: %d\n", This->pHeader->cInstruments);
 		TRACE(" - Instruments:\n");
 		
 		LIST_FOR_EACH (listEntry, &This->Instruments) {
diff --git a/dlls/dmusic/dmusic.c b/dlls/dmusic/dmusic.c
index 570fd96..daa489b 100644
--- a/dlls/dmusic/dmusic.c
+++ b/dlls/dmusic/dmusic.c
@@ -42,7 +42,7 @@
 	IDirectMusic8Impl *This = (IDirectMusic8Impl *)iface;
 	ULONG refCount = InterlockedIncrement(&This->ref);
 
-	TRACE("(%p)->(ref before=%lu)\n", This, refCount - 1);
+	TRACE("(%p)->(ref before=%u)\n", This, refCount - 1);
 
 	DMUSIC_LockModule();
 
@@ -53,7 +53,7 @@
 	IDirectMusic8Impl *This = (IDirectMusic8Impl *)iface;
 	ULONG refCount = InterlockedDecrement(&This->ref);
 
-	TRACE("(%p)->(ref before=%lu)\n", This, refCount + 1);
+	TRACE("(%p)->(ref before=%u)\n", This, refCount + 1);
 
 	if (!refCount) {
 		HeapFree(GetProcessHeap(), 0, This);
@@ -67,7 +67,7 @@
 /* IDirectMusic8Impl IDirectMusic part: */
 static HRESULT WINAPI IDirectMusic8Impl_EnumPort(LPDIRECTMUSIC8 iface, DWORD dwIndex, LPDMUS_PORTCAPS pPortCaps) {
 	IDirectMusic8Impl *This = (IDirectMusic8Impl *)iface;
-	TRACE("(%p, %ld, %p)\n", This, dwIndex, pPortCaps);
+	TRACE("(%p, %d, %p)\n", This, dwIndex, pPortCaps);
 	if (NULL == pPortCaps) { return E_POINTER; }
 	/* i guess the first port shown is always software synthesizer */
 	if (dwIndex == 0) 
@@ -144,7 +144,7 @@
 
 static HRESULT WINAPI IDirectMusic8Impl_EnumMasterClock (LPDIRECTMUSIC8 iface, DWORD dwIndex, LPDMUS_CLOCKINFO lpClockInfo) {
 	IDirectMusic8Impl *This = (IDirectMusic8Impl *)iface;
-	FIXME("(%p, %ld, %p): stub\n", This, dwIndex, lpClockInfo);
+	FIXME("(%p, %d, %p): stub\n", This, dwIndex, lpClockInfo);
 	return S_FALSE;
 }
 
diff --git a/dlls/dmusic/dmusic_main.c b/dlls/dmusic/dmusic_main.c
index 81c9142..427a41f 100644
--- a/dlls/dmusic/dmusic_main.c
+++ b/dlls/dmusic/dmusic_main.c
@@ -540,7 +540,7 @@
 			return codes[i].name;
 	}
 	/* if we didn't find it, return value */
-	return wine_dbg_sprintf("0x%08lx", code);
+	return wine_dbg_sprintf("0x%08x", code);
 }
 
 /* generic flag-dumping function */
@@ -587,7 +587,7 @@
 		char buffer[1024] = "", *ptr = &buffer[0];
 		
 		ptr += sprintf(ptr, "DMUS_OBJECTDESC (%p):\n", pDesc);
-		ptr += sprintf(ptr, " - dwSize = %ld\n", pDesc->dwSize);
+		ptr += sprintf(ptr, " - dwSize = %d\n", pDesc->dwSize);
 		ptr += sprintf(ptr, " - dwValidData = %s\n", debugstr_DMUS_OBJ_FLAGS (pDesc->dwValidData));
 		if (pDesc->dwValidData & DMUS_OBJ_CLASS) ptr +=	sprintf(ptr, " - guidClass = %s\n", debugstr_dmguid(&pDesc->guidClass));
 		if (pDesc->dwValidData & DMUS_OBJ_OBJECT) ptr += sprintf(ptr, " - guidObject = %s\n", debugstr_guid(&pDesc->guidObject));
diff --git a/dlls/dmusic/download.c b/dlls/dmusic/download.c
index c37007a..d8042c6 100644
--- a/dlls/dmusic/download.c
+++ b/dlls/dmusic/download.c
@@ -40,7 +40,7 @@
 	IDirectMusicDownloadImpl *This = (IDirectMusicDownloadImpl *)iface;
 	ULONG refCount = InterlockedIncrement(&This->ref);
 
-	TRACE("(%p)->(ref before=%lu)\n", This, refCount - 1);
+	TRACE("(%p)->(ref before=%u)\n", This, refCount - 1);
 
 	DMUSIC_LockModule();
 
@@ -51,7 +51,7 @@
 	IDirectMusicDownloadImpl *This = (IDirectMusicDownloadImpl *)iface;
 	ULONG refCount = InterlockedDecrement(&This->ref);
 
-	TRACE("(%p)->(ref before=%lu)\n", This, refCount + 1);
+	TRACE("(%p)->(ref before=%u)\n", This, refCount + 1);
 
 	if (!refCount) {
 		HeapFree(GetProcessHeap(), 0, This);
diff --git a/dlls/dmusic/downloadedinstrument.c b/dlls/dmusic/downloadedinstrument.c
index ef64b83..4533f6d 100644
--- a/dlls/dmusic/downloadedinstrument.c
+++ b/dlls/dmusic/downloadedinstrument.c
@@ -40,7 +40,7 @@
 	IDirectMusicDownloadedInstrumentImpl *This = (IDirectMusicDownloadedInstrumentImpl *)iface;
 	ULONG refCount = InterlockedIncrement(&This->ref);
 
-	TRACE("(%p)->(ref before=%lu)\n", This, refCount - 1);
+	TRACE("(%p)->(ref before=%u)\n", This, refCount - 1);
 
 	DMUSIC_LockModule();
 
@@ -51,7 +51,7 @@
 	IDirectMusicDownloadedInstrumentImpl *This = (IDirectMusicDownloadedInstrumentImpl *)iface;
 	ULONG refCount = InterlockedDecrement(&This->ref);
 
-	TRACE("(%p)->(ref before=%lu)\n", This, refCount + 1);
+	TRACE("(%p)->(ref before=%u)\n", This, refCount + 1);
 
 	if (!refCount) {
 		HeapFree(GetProcessHeap(), 0, This);
diff --git a/dlls/dmusic/instrument.c b/dlls/dmusic/instrument.c
index b251014..8acc0aa 100644
--- a/dlls/dmusic/instrument.c
+++ b/dlls/dmusic/instrument.c
@@ -59,7 +59,7 @@
 	ICOM_THIS_MULTI(IDirectMusicInstrumentImpl, UnknownVtbl, iface);
 	ULONG refCount = InterlockedIncrement(&This->ref);
 
-	TRACE("(%p)->(ref before=%lu)\n", This, refCount - 1);
+	TRACE("(%p)->(ref before=%u)\n", This, refCount - 1);
 
 	DMUSIC_LockModule();
 
@@ -70,7 +70,7 @@
 	ICOM_THIS_MULTI(IDirectMusicInstrumentImpl, UnknownVtbl, iface);
 	ULONG refCount = InterlockedDecrement(&This->ref);
 
-	TRACE("(%p)->(ref before=%lu)\n", This, refCount + 1);
+	TRACE("(%p)->(ref before=%u)\n", This, refCount + 1);
 
 	if (!refCount) {
 		HeapFree(GetProcessHeap(), 0, This);
@@ -112,7 +112,7 @@
 
 static HRESULT WINAPI IDirectMusicInstrumentImpl_IDirectMusicInstrument_SetPatch (LPDIRECTMUSICINSTRUMENT iface, DWORD dwPatch) {
 	ICOM_THIS_MULTI(IDirectMusicInstrumentImpl, InstrumentVtbl, iface);
-	TRACE("(%p, %ld): stub\n", This, dwPatch);
+	TRACE("(%p, %d): stub\n", This, dwPatch);
 	Patch2MIDILOCALE(dwPatch, &This->pHeader->Locale);
 	return S_OK;
 }
@@ -156,7 +156,7 @@
 	IStream_Seek (pStm, This->liInstrumentPosition, STREAM_SEEK_SET, NULL);
 	
 	IStream_Read (pStm, &Chunk, sizeof(FOURCC)+sizeof(DWORD), NULL);
-	TRACE_(dmfile)(": %s chunk (size = 0x%04lx)", debugstr_fourcc (Chunk.fccID), Chunk.dwSize);
+	TRACE_(dmfile)(": %s chunk (size = 0x%04x)", debugstr_fourcc (Chunk.fccID), Chunk.dwSize);
 	switch (Chunk.fccID) {
 		case FOURCC_LIST: {
 			IStream_Read (pStm, &Chunk.fccID, sizeof(FOURCC), NULL);				
@@ -169,7 +169,7 @@
 					do {
 						IStream_Read (pStm, &Chunk, sizeof(FOURCC)+sizeof(DWORD), NULL);
 						ListCount[0] += sizeof(FOURCC) + sizeof(DWORD) + Chunk.dwSize;
-						TRACE_(dmfile)(": %s chunk (size = 0x%04lx)", debugstr_fourcc (Chunk.fccID), Chunk.dwSize);
+						TRACE_(dmfile)(": %s chunk (size = 0x%04x)", debugstr_fourcc (Chunk.fccID), Chunk.dwSize);
 						switch (Chunk.fccID) {
 							case FOURCC_INSH: {
 								TRACE_(dmfile)(": instrument header chunk\n");
@@ -194,7 +194,7 @@
 										do {
 											IStream_Read (pStm, &Chunk, sizeof(FOURCC)+sizeof(DWORD), NULL);
 											ListCount[1] += sizeof(FOURCC) + sizeof(DWORD) + Chunk.dwSize;
-											TRACE_(dmfile)(": %s chunk (size = 0x%04lx)", debugstr_fourcc (Chunk.fccID), Chunk.dwSize);
+											TRACE_(dmfile)(": %s chunk (size = 0x%04x)", debugstr_fourcc (Chunk.fccID), Chunk.dwSize);
 											switch (Chunk.fccID) {
 												case FOURCC_LIST: {
 													IStream_Read (pStm, &Chunk.fccID, sizeof(FOURCC), NULL);				
@@ -213,7 +213,7 @@
 															do {
 																IStream_Read (pStm, &Chunk, sizeof(FOURCC)+sizeof(DWORD), NULL);
 																ListCount[2] += sizeof(FOURCC) + sizeof(DWORD) + Chunk.dwSize;
-																TRACE_(dmfile)(": %s chunk (size = 0x%04lx)", debugstr_fourcc (Chunk.fccID), Chunk.dwSize);
+																TRACE_(dmfile)(": %s chunk (size = 0x%04x)", debugstr_fourcc (Chunk.fccID), Chunk.dwSize);
 																switch (Chunk.fccID) {
 																	case FOURCC_RGNH: {
 																		TRACE_(dmfile)(": region header chunk\n");
@@ -243,7 +243,7 @@
 																		break;						
 																	}
 																}
-																TRACE_(dmfile)(": ListCount[2] = %ld < ListSize[2] = %ld\n", ListCount[2], ListSize[2]);
+																TRACE_(dmfile)(": ListCount[2] = %d < ListSize[2] = %d\n", ListCount[2], ListSize[2]);
 															} while (ListCount[2] < ListSize[2]);
 															FIXME(": need to write temporary data to instrument data\n");
 															break;
@@ -264,7 +264,7 @@
 													break;						
 												}
 											}
-											TRACE_(dmfile)(": ListCount[1] = %ld < ListSize[1] = %ld\n", ListCount[1], ListSize[1]);
+											TRACE_(dmfile)(": ListCount[1] = %d < ListSize[1] = %d\n", ListCount[1], ListSize[1]);
 										} while (ListCount[1] < ListSize[1]);
 										break;
 									}
@@ -273,7 +273,7 @@
 										do {
 											IStream_Read (pStm, &Chunk, sizeof(FOURCC)+sizeof(DWORD), NULL);
 											ListCount[1] += sizeof(FOURCC) + sizeof(DWORD) + Chunk.dwSize;
-											TRACE_(dmfile)(": %s chunk (size = 0x%04lx)", debugstr_fourcc (Chunk.fccID), Chunk.dwSize);
+											TRACE_(dmfile)(": %s chunk (size = 0x%04x)", debugstr_fourcc (Chunk.fccID), Chunk.dwSize);
 											switch (Chunk.fccID) {
 												case FOURCC_ART1: {
 													/* temporary structures */
@@ -295,7 +295,7 @@
 													break;						
 												}
 											}
-											TRACE_(dmfile)(": ListCount[1] = %ld < ListSize[1] = %ld\n", ListCount[1], ListSize[1]);
+											TRACE_(dmfile)(": ListCount[1] = %d < ListSize[1] = %d\n", ListCount[1], ListSize[1]);
 										} while (ListCount[1] < ListSize[1]);
 										break;
 									}
@@ -304,7 +304,7 @@
 										do {
 											IStream_Read (pStm, &Chunk, sizeof(FOURCC)+sizeof(DWORD), NULL);
 											ListCount[1] += sizeof(FOURCC) + sizeof(DWORD) + Chunk.dwSize;
-											TRACE_(dmfile)(": %s chunk (size = 0x%04lx)", debugstr_fourcc (Chunk.fccID), Chunk.dwSize);
+											TRACE_(dmfile)(": %s chunk (size = 0x%04x)", debugstr_fourcc (Chunk.fccID), Chunk.dwSize);
 											switch (Chunk.fccID) {
 												case mmioFOURCC('I','N','A','M'): {
 													TRACE_(dmfile)(": name chunk (ignored)\n");
@@ -370,7 +370,7 @@
 													break;						
 												}
 											}
-											TRACE_(dmfile)(": ListCount[1] = %ld < ListSize[1] = %ld\n", ListCount[1], ListSize[1]);
+											TRACE_(dmfile)(": ListCount[1] = %d < ListSize[1] = %d\n", ListCount[1], ListSize[1]);
 										} while (ListCount[1] < ListSize[1]);
 										break;
 									}									
@@ -391,7 +391,7 @@
 								break;						
 							}
 						}
-						TRACE_(dmfile)(": ListCount[0] = %ld < ListSize[0] = %ld\n", ListCount[0], ListSize[0]);
+						TRACE_(dmfile)(": ListCount[0] = %d < ListSize[0] = %d\n", ListCount[0], ListSize[0]);
 					} while (ListCount[0] < ListSize[0]);
 					break;
 				}
diff --git a/dlls/dmusic/port.c b/dlls/dmusic/port.c
index cb837dd..7329a87 100644
--- a/dlls/dmusic/port.c
+++ b/dlls/dmusic/port.c
@@ -39,7 +39,7 @@
 	IDirectMusicPortImpl *This = (IDirectMusicPortImpl *)iface;
 	ULONG refCount = InterlockedIncrement(&This->ref);
 
-	TRACE("(%p)->(ref before=%lu)\n", This, refCount - 1);
+	TRACE("(%p)->(ref before=%u)\n", This, refCount - 1);
 
 	DMUSIC_LockModule();
 
@@ -50,7 +50,7 @@
 	IDirectMusicPortImpl *This = (IDirectMusicPortImpl *)iface;
 	ULONG refCount = InterlockedDecrement(&This->ref);
 
-	TRACE("(%p)->(ref before=%lu)\n", This, refCount + 1);
+	TRACE("(%p)->(ref before=%u)\n", This, refCount + 1);
 
 	if (!refCount) {
 		HeapFree(GetProcessHeap(), 0, This);
@@ -82,7 +82,7 @@
 
 static HRESULT WINAPI IDirectMusicPortImpl_DownloadInstrument (LPDIRECTMUSICPORT iface, IDirectMusicInstrument* pInstrument, IDirectMusicDownloadedInstrument** ppDownloadedInstrument, DMUS_NOTERANGE* pNoteRanges, DWORD dwNumNoteRanges) {
 	IDirectMusicPortImpl *This = (IDirectMusicPortImpl *)iface;
-	FIXME("(%p, %p, %p, %p, %ld): stub\n", This, pInstrument, ppDownloadedInstrument, pNoteRanges, dwNumNoteRanges);
+	FIXME("(%p, %p, %p, %p, %d): stub\n", This, pInstrument, ppDownloadedInstrument, pNoteRanges, dwNumNoteRanges);
 	return S_OK;
 }
 
@@ -121,13 +121,13 @@
 
 static HRESULT WINAPI IDirectMusicPortImpl_DeviceIoControl (LPDIRECTMUSICPORT iface, DWORD dwIoControlCode, LPVOID lpInBuffer, DWORD nInBufferSize, LPVOID lpOutBuffer, DWORD nOutBufferSize, LPDWORD lpBytesReturned, LPOVERLAPPED lpOverlapped) {
 	IDirectMusicPortImpl *This = (IDirectMusicPortImpl *)iface;
-	FIXME("(%p, %ld, %p, %ld, %p, %ld, %p, %p): stub\n", This, dwIoControlCode, lpInBuffer, nInBufferSize, lpOutBuffer, nOutBufferSize, lpBytesReturned, lpOverlapped);
+	FIXME("(%p, %d, %p, %d, %p, %d, %p, %p): stub\n", This, dwIoControlCode, lpInBuffer, nInBufferSize, lpOutBuffer, nOutBufferSize, lpBytesReturned, lpOverlapped);
 	return S_OK;
 }
 
 static HRESULT WINAPI IDirectMusicPortImpl_SetNumChannelGroups (LPDIRECTMUSICPORT iface, DWORD dwChannelGroups) {
 	IDirectMusicPortImpl *This = (IDirectMusicPortImpl *)iface;
-	FIXME("(%p, %ld): semi-stub\n", This, dwChannelGroups);
+	FIXME("(%p, %d): semi-stub\n", This, dwChannelGroups);
 	This->nrofgroups = dwChannelGroups;
 	return S_OK;
 }
@@ -148,9 +148,9 @@
 
 static HRESULT WINAPI IDirectMusicPortImpl_SetChannelPriority (LPDIRECTMUSICPORT iface, DWORD dwChannelGroup, DWORD dwChannel, DWORD dwPriority) {
 	IDirectMusicPortImpl *This = (IDirectMusicPortImpl *)iface;
-	FIXME("(%p, %ld, %ld, %ld): semi-stub\n", This, dwChannelGroup, dwChannel, dwPriority);
+	FIXME("(%p, %d, %d, %d): semi-stub\n", This, dwChannelGroup, dwChannel, dwPriority);
 	if (dwChannel > 16) {
-		WARN("isn't there supposed to be 16 channels (no. %ld requested)?! (faking as it is ok)\n", dwChannel);
+		WARN("isn't there supposed to be 16 channels (no. %d requested)?! (faking as it is ok)\n", dwChannel);
 		/*return E_INVALIDARG;*/
 	}	
 	return S_OK;
@@ -158,7 +158,7 @@
 
 static HRESULT WINAPI IDirectMusicPortImpl_GetChannelPriority (LPDIRECTMUSICPORT iface, DWORD dwChannelGroup, DWORD dwChannel, LPDWORD pdwPriority) {
 	IDirectMusicPortImpl *This = (IDirectMusicPortImpl *)iface;
-	TRACE("(%p, %ld, %ld, %p)\n", This, dwChannelGroup, dwChannel, pdwPriority);
+	TRACE("(%p, %d, %d, %p)\n", This, dwChannelGroup, dwChannel, pdwPriority);
 	*pdwPriority = This->group[dwChannelGroup-1].channel[dwChannel].priority;
 	return S_OK;
 }
diff --git a/dlls/dmusic/portdownload.c b/dlls/dmusic/portdownload.c
index e0babc9..77eafbb 100644
--- a/dlls/dmusic/portdownload.c
+++ b/dlls/dmusic/portdownload.c
@@ -39,7 +39,7 @@
 	IDirectMusicPortDownloadImpl *This = (IDirectMusicPortDownloadImpl *)iface;
 	ULONG refCount = InterlockedIncrement(&This->ref);
 
-	TRACE("(%p)->(ref before=%lu)\n", This, refCount - 1);
+	TRACE("(%p)->(ref before=%u)\n", This, refCount - 1);
 
 	DMUSIC_LockModule();
 
@@ -50,7 +50,7 @@
 	IDirectMusicPortDownloadImpl *This = (IDirectMusicPortDownloadImpl *)iface;
 	ULONG refCount = InterlockedDecrement(&This->ref);
 
-	TRACE("(%p)->(ref before=%lu)\n", This, refCount + 1);
+	TRACE("(%p)->(ref before=%u)\n", This, refCount + 1);
 
 	if (!refCount) {
 		HeapFree(GetProcessHeap(), 0, This);
@@ -64,19 +64,19 @@
 /* IDirectMusicPortDownload Interface follow: */
 static HRESULT WINAPI IDirectMusicPortDownloadImpl_GetBuffer (LPDIRECTMUSICPORTDOWNLOAD iface, DWORD dwDLId, IDirectMusicDownload** ppIDMDownload) {
 	IDirectMusicPortDownloadImpl *This = (IDirectMusicPortDownloadImpl *)iface;
-	FIXME("(%p, %ld, %p): stub\n", This, dwDLId, ppIDMDownload);
+	FIXME("(%p, %d, %p): stub\n", This, dwDLId, ppIDMDownload);
 	return S_OK;
 }
 
 static HRESULT WINAPI IDirectMusicPortDownloadImpl_AllocateBuffer (LPDIRECTMUSICPORTDOWNLOAD iface, DWORD dwSize, IDirectMusicDownload** ppIDMDownload) {
 	IDirectMusicPortDownloadImpl *This = (IDirectMusicPortDownloadImpl *)iface;
-	FIXME("(%p, %ld, %p): stub\n", This, dwSize, ppIDMDownload);
+	FIXME("(%p, %d, %p): stub\n", This, dwSize, ppIDMDownload);
 	return S_OK;
 }
 
 static HRESULT WINAPI IDirectMusicPortDownloadImpl_GetDLId (LPDIRECTMUSICPORTDOWNLOAD iface, DWORD* pdwStartDLId, DWORD dwCount) {
 	IDirectMusicPortDownloadImpl *This = (IDirectMusicPortDownloadImpl *)iface;
-	FIXME("(%p, %p, %ld): stub\n", This, pdwStartDLId, dwCount);
+	FIXME("(%p, %p, %d): stub\n", This, pdwStartDLId, dwCount);
 	return S_OK;
 }
 
diff --git a/dlls/dmusic/thru.c b/dlls/dmusic/thru.c
index 31e4497..01ee1e6 100644
--- a/dlls/dmusic/thru.c
+++ b/dlls/dmusic/thru.c
@@ -40,7 +40,7 @@
 	IDirectMusicThruImpl *This = (IDirectMusicThruImpl *)iface;
 	ULONG refCount = InterlockedIncrement(&This->ref);
 
-	TRACE("(%p)->(ref before=%lu)\n", This, refCount - 1);
+	TRACE("(%p)->(ref before=%u)\n", This, refCount - 1);
 
 	DMUSIC_LockModule();
 
@@ -51,7 +51,7 @@
 	IDirectMusicThruImpl *This = (IDirectMusicThruImpl *)iface;
 	ULONG refCount = InterlockedDecrement(&This->ref);
 
-	TRACE("(%p)->(ref before=%lu)\n", This, refCount + 1);
+	TRACE("(%p)->(ref before=%u)\n", This, refCount + 1);
 
 	if (!refCount) {
 		HeapFree(GetProcessHeap(), 0, This);
@@ -65,7 +65,7 @@
 /* IDirectMusicThru Interface follow: */
 static HRESULT WINAPI IDirectMusicThruImpl_ThruChannel (LPDIRECTMUSICTHRU iface, DWORD dwSourceChannelGroup, DWORD dwSourceChannel, DWORD dwDestinationChannelGroup, DWORD dwDestinationChannel, LPDIRECTMUSICPORT pDestinationPort) {
 	IDirectMusicThruImpl *This = (IDirectMusicThruImpl *)iface;
-	FIXME("(%p, %ld, %ld, %ld, %ld, %p): stub\n", This, dwSourceChannelGroup, dwSourceChannel, dwDestinationChannelGroup, dwDestinationChannel, pDestinationPort);
+	FIXME("(%p, %d, %d, %d, %d, %p): stub\n", This, dwSourceChannelGroup, dwSourceChannel, dwDestinationChannelGroup, dwDestinationChannel, pDestinationPort);
 	return S_OK;
 }
 
