diff --git a/dlls/avifil32/avifile.c b/dlls/avifil32/avifile.c
index a8a784e..89c634a 100644
--- a/dlls/avifil32/avifile.c
+++ b/dlls/avifil32/avifile.c
@@ -116,10 +116,8 @@
 
 static HRESULT WINAPI IAVIFile_fnQueryInterface(IAVIFile* iface,REFIID refiid,LPVOID *obj) {
 	ICOM_THIS(IAVIFileImpl,iface);
-	char    xrefiid[50];
 
-	WINE_StringFromCLSID((LPCLSID)refiid,xrefiid);
-	TRACE_(relay)("(%p)->QueryInterface(%s,%p)\n",This,xrefiid,obj);
+	TRACE_(relay)("(%p)->QueryInterface(%s,%p)\n",This,debugstr_guid(refiid),obj);
 	if (	!memcmp(&IID_IUnknown,refiid,sizeof(IID_IUnknown)) ||
 		!memcmp(&IID_IAVIFile,refiid,sizeof(IID_IAVIFile))
 	) {
@@ -210,16 +208,9 @@
 HRESULT WINAPI AVIFileOpenA(
 	PAVIFILE * ppfile,LPCSTR szFile,UINT uMode,LPCLSID lpHandler
 ) {
-	char	buf[80];
 	IAVIFileImpl	*iavi;
 
-
-	if (HIWORD(lpHandler))
-		WINE_StringFromCLSID(lpHandler,buf);
-	else
-		sprintf(buf,"<clsid-0x%04lx>",(DWORD)lpHandler);
-
-	FIXME("(%p,%s,0x%08lx,%s),stub!\n",ppfile,szFile,(DWORD)uMode,buf);
+	FIXME("(%p,%s,0x%08lx,%s),stub!\n",ppfile,szFile,(DWORD)uMode,debugstr_guid(lpHandler));
 	iavi = (IAVIFileImpl*)HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,sizeof(IAVIFileImpl));
 	iavi->ref = 1;
 	ICOM_VTBL(iavi) = &iavift;
@@ -229,10 +220,8 @@
 
 static HRESULT WINAPI IAVIStream_fnQueryInterface(IAVIStream*iface,REFIID refiid,LPVOID *obj) {
 	ICOM_THIS(IAVIStreamImpl,iface);
-	char    xrefiid[50];
 
-	WINE_StringFromCLSID((LPCLSID)refiid,xrefiid);
-	TRACE_(relay)("(%p)->QueryInterface(%s,%p)\n",This,xrefiid,obj);
+	TRACE_(relay)("(%p)->QueryInterface(%s,%p)\n",This,debugstr_guid(refiid),obj);
 	if (	!memcmp(&IID_IUnknown,refiid,sizeof(IID_IUnknown)) ||
 		!memcmp(&IID_IAVIStream,refiid,sizeof(IID_IAVIStream))
 	) {
diff --git a/dlls/dplayx/dpclassfactory.c b/dlls/dplayx/dpclassfactory.c
index 65a10be..ce9c8d6 100644
--- a/dlls/dplayx/dpclassfactory.c
+++ b/dlls/dplayx/dpclassfactory.c
@@ -21,14 +21,8 @@
 static HRESULT WINAPI
 DP_and_DPL_QueryInterface(LPCLASSFACTORY iface,REFIID riid,LPVOID *ppobj) {
         ICOM_THIS(IClassFactoryImpl,iface);
-        char buf[80];
 
-        if (HIWORD(riid))
-            WINE_StringFromCLSID(riid,buf);
-        else
-            sprintf(buf,"<guid-0x%04x>",LOWORD(riid));
-
-        FIXME("(%p)->(%s,%p),stub!\n",This,buf,ppobj);
+        FIXME("(%p)->(%s,%p),stub!\n",This,debugstr_guid(riid),ppobj);
 
         return E_NOINTERFACE;
 }
@@ -50,10 +44,8 @@
         LPCLASSFACTORY iface,LPUNKNOWN pOuter,REFIID riid,LPVOID *ppobj
 ) {
         ICOM_THIS(IClassFactoryImpl,iface);
-        char buf[80];
 
-        WINE_StringFromCLSID(riid,buf);
-        TRACE("(%p)->(%p,%s,%p)\n",This,pOuter,buf,ppobj);
+        TRACE("(%p)->(%p,%s,%p)\n",This,pOuter,debugstr_guid(riid),ppobj);
 
         /* FIXME: reuse already created DP/DPL object if present? */
         if ( directPlayLobby_QueryInterface( riid, ppobj ) == S_OK )
@@ -104,21 +96,7 @@
  */
 DWORD WINAPI DP_and_DPL_DllGetClassObject(REFCLSID rclsid,REFIID riid,LPVOID *ppv)
 {
-    char buf[80],xbuf[80];
-
-    if (HIWORD(rclsid))
-        WINE_StringFromCLSID(rclsid,xbuf);
-    else
-        sprintf(xbuf,"<guid-0x%04x>",LOWORD(rclsid));
-
-    if (HIWORD(riid))
-        WINE_StringFromCLSID(riid,buf);
-    else
-        sprintf(buf,"<guid-0x%04x>",LOWORD(riid));
-
-    WINE_StringFromCLSID(riid,xbuf);
-
-    TRACE("(%p,%p,%p)\n", xbuf, buf, ppv);
+    TRACE("(%p,%p,%p)\n", debugstr_guid(rclsid), debugstr_guid(riid), ppv);
 
     if ( IsEqualCLSID( riid, &IID_IClassFactory ) )
     {
@@ -128,7 +106,7 @@
         return S_OK;
     }
 
-    ERR("(%p,%p,%p): no interface found.\n", xbuf, buf, ppv);
+    ERR("(%p,%p,%p): no interface found.\n", debugstr_guid(rclsid), debugstr_guid(riid), ppv);
     return CLASS_E_CLASSNOTAVAILABLE;
 }
 
diff --git a/dlls/dplayx/dplay.c b/dlls/dplayx/dplay.c
index 4809ec3..f249de9 100644
--- a/dlls/dplayx/dplay.c
+++ b/dlls/dplayx/dplay.c
@@ -2044,11 +2044,7 @@
 HRESULT WINAPI DirectPlayCreate
 ( LPGUID lpGUID, LPDIRECTPLAY2 *lplpDP, IUnknown *pUnk)
 {
-  char lpGUIDString[51];
- 
-  WINE_StringFromCLSID( lpGUID, &lpGUIDString[0] );
-
-  TRACE( "lpGUID=%s lplpDP=%p pUnk=%p\n", &lpGUIDString[0], lplpDP, pUnk );
+  TRACE( "lpGUID=%s lplpDP=%p pUnk=%p\n", debugstr_guid(lpGUID), lplpDP, pUnk );
 
   if( pUnk != NULL )
   {
@@ -2084,7 +2080,7 @@
      return DPERR_INVALIDPARAMS; 
   }
 
-  ERR( "unknown Service Provider %s\n", &lpGUIDString[0] );
+  ERR( "unknown Service Provider %s\n", debugstr_guid(lpGUID) );
 
   IDirectPlayX_Release( *lplpDP );
   *lplpDP = NULL;
diff --git a/dlls/dplayx/dplobby.c b/dlls/dplayx/dplobby.c
index d938cd90..5bcd6fe 100644
--- a/dlls/dplayx/dplobby.c
+++ b/dlls/dplayx/dplobby.c
@@ -1569,11 +1569,7 @@
     }
     else
     {
-      char lpGUIDString[51];
-      WINE_StringFromCLSID( &lpElements->guidDataType, &lpGUIDString[0] );
-
-      ERR( "Unknown GUID %s\n", &lpGUIDString[0] );
-
+      ERR( "Unknown GUID %s\n", debugstr_guid(&lpElements->guidDataType) );
       return DPERR_INVALIDFLAGS; 
     }
   }
diff --git a/dlls/dsound/dsound_main.c b/dlls/dsound/dsound_main.c
index e55ef85..7f7ccb5 100644
--- a/dlls/dsound/dsound_main.c
+++ b/dlls/dsound/dsound_main.c
@@ -248,10 +248,8 @@
 	LPDIRECTSOUND3DBUFFER iface, REFIID riid, LPVOID *ppobj)
 {
 	ICOM_THIS(IDirectSound3DBufferImpl,iface);
-	char xbuf[50];
 
-	WINE_StringFromCLSID(riid,xbuf);
-	TRACE("(%p,%s,%p)\n",This,xbuf,ppobj);
+	TRACE("(%p,%s,%p)\n",This,debugstr_guid(riid),ppobj);
 	return E_FAIL;
 }
 	
@@ -544,10 +542,8 @@
 	LPDIRECTSOUND3DLISTENER iface, REFIID riid, LPVOID *ppobj)
 {
 	ICOM_THIS(IDirectSound3DListenerImpl,iface);
-	char xbuf[50];
 
-	WINE_StringFromCLSID(riid,xbuf);
-	TRACE("(%p,%s,%p)\n",This,xbuf,ppobj);
+	TRACE("(%p,%s,%p)\n",This,debugstr_guid(riid),ppobj);
 	return E_FAIL;
 }
 	
@@ -727,10 +723,8 @@
 	LPDIRECTSOUNDNOTIFY iface,REFIID riid,LPVOID *ppobj
 ) {
 	ICOM_THIS(IDirectSoundNotifyImpl,iface);
-	char xbuf[50];
 
-	WINE_StringFromCLSID(riid,xbuf);
-	TRACE("(%p,%s,%p)\n",This,xbuf,ppobj);
+	TRACE("(%p,%s,%p)\n",This,debugstr_guid(riid),ppobj);
 	return E_FAIL;
 }
 
@@ -1233,10 +1227,8 @@
 	LPDIRECTSOUNDBUFFER iface,REFIID riid,LPVOID *ppobj
 ) {
 	ICOM_THIS(IDirectSoundBufferImpl,iface);
-	char	xbuf[50];
 
-	WINE_StringFromCLSID(riid,xbuf);
-	TRACE("(%p,%s,%p)\n",This,xbuf,ppobj);
+	TRACE("(%p,%s,%p)\n",This,debugstr_guid(riid),ppobj);
 
 	if ( IsEqualGUID( &IID_IDirectSoundNotify, riid ) ) {
 		IDirectSoundNotifyImpl	*dsn;
@@ -1535,7 +1527,6 @@
 	LPDIRECTSOUND iface,REFIID riid,LPVOID *ppobj
 ) {
 	ICOM_THIS(IDirectSoundImpl,iface);
-	char xbuf[50];
 
 	if ( IsEqualGUID( &IID_IDirectSound3DListener, riid ) ) {
 
@@ -1568,8 +1559,7 @@
 		return DS_OK;
 	}
 
-	WINE_StringFromCLSID(riid,xbuf);
-	TRACE("(%p,%s,%p)\n",This,xbuf,ppobj);
+	TRACE("(%p,%s,%p)\n",This,debugstr_guid(riid),ppobj);
 	return E_FAIL;
 }
 
@@ -2357,13 +2347,8 @@
 static HRESULT WINAPI 
 DSCF_QueryInterface(LPCLASSFACTORY iface,REFIID riid,LPVOID *ppobj) {
 	ICOM_THIS(IClassFactoryImpl,iface);
-	char buf[80];
 
-	if (HIWORD(riid))
-	    WINE_StringFromCLSID(riid,buf);
-	else
-	    sprintf(buf,"<guid-0x%04x>",LOWORD(riid));
-	FIXME("(%p)->(%s,%p),stub!\n",This,buf,ppobj);
+	FIXME("(%p)->(%s,%p),stub!\n",This,debugstr_guid(riid),ppobj);
 	return E_NOINTERFACE;
 }
 
@@ -2383,10 +2368,8 @@
 	LPCLASSFACTORY iface,LPUNKNOWN pOuter,REFIID riid,LPVOID *ppobj
 ) {
 	ICOM_THIS(IClassFactoryImpl,iface);
-	char buf[80];
 
-	WINE_StringFromCLSID(riid,buf);
-	TRACE("(%p)->(%p,%s,%p)\n",This,pOuter,buf,ppobj);
+	TRACE("(%p)->(%p,%s,%p)\n",This,pOuter,debugstr_guid(riid),ppobj);
 	if ( IsEqualGUID( &IID_IDirectSound, riid ) ) {
 		/* FIXME: reuse already created dsound if present? */
 		return DirectSoundCreate(riid,(LPDIRECTSOUND*)ppobj,pOuter);
@@ -2428,25 +2411,14 @@
  */
 DWORD WINAPI DSOUND_DllGetClassObject(REFCLSID rclsid,REFIID riid,LPVOID *ppv)
 {
-    char buf[80],xbuf[80];
-
-    if (HIWORD(rclsid))
-    	WINE_StringFromCLSID(rclsid,xbuf);
-    else
-    	sprintf(xbuf,"<guid-0x%04x>",LOWORD(rclsid));
-    if (HIWORD(riid))
-    	WINE_StringFromCLSID(riid,buf);
-    else
-    	sprintf(buf,"<guid-0x%04x>",LOWORD(riid));
-    WINE_StringFromCLSID(riid,xbuf);
-    TRACE("(%p,%p,%p)\n", xbuf, buf, ppv);
+    TRACE("(%p,%p,%p)\n", debugstr_guid(rclsid), debugstr_guid(riid), ppv);
     if ( IsEqualCLSID( &IID_IClassFactory, riid ) ) {
     	*ppv = (LPVOID)&DSOUND_CF;
 	IClassFactory_AddRef((IClassFactory*)*ppv);
     return S_OK;
     }
 
-    FIXME("(%p,%p,%p): no interface found.\n", xbuf, buf, ppv);
+    FIXME("(%p,%p,%p): no interface found.\n", debugstr_guid(rclsid), debugstr_guid(riid), ppv);
     return CLASS_E_CLASSNOTAVAILABLE;
 }
 
diff --git a/dlls/ole32/clipboard.c b/dlls/ole32/clipboard.c
index 372f9bf..fd7f6b9 100644
--- a/dlls/ole32/clipboard.c
+++ b/dlls/ole32/clipboard.c
@@ -984,10 +984,7 @@
    * Declare "This" pointer 
    */
   ICOM_THIS(OLEClipbrd, iface);
-  char    xriid[50];
-
-  WINE_StringFromCLSID((LPCLSID)riid,xriid);
-  TRACE("(%p)->(\n\tIID:\t%s,%p)\n",This,xriid,ppvObject);
+  TRACE("(%p)->(\n\tIID:\t%s,%p)\n",This,debugstr_guid(riid),ppvObject);
   
   /*
    * Perform a sanity check on the parameters.
@@ -1013,11 +1010,7 @@
   }
   else  /* We only support IUnknown and IDataObject */
   {
-    char clsid[50];
-
-    WINE_StringFromCLSID((LPCLSID)riid,clsid);
-    WARN( "() : asking for unsupported interface %s\n", clsid);
-
+    WARN( "() : asking for unsupported interface %s\n", debugstr_guid(riid));
     return E_NOINTERFACE;
   }
   
@@ -1461,10 +1454,8 @@
   (LPENUMFORMATETC iface, REFIID riid, LPVOID* ppvObj)
 {
   ICOM_THIS(IEnumFORMATETCImpl,iface);
-  char    xriid[50];
 
-  WINE_StringFromCLSID((LPCLSID)riid,xriid);
-  TRACE("(%p)->(\n\tIID:\t%s,%p)\n",This,xriid,ppvObj);
+  TRACE("(%p)->(\n\tIID:\t%s,%p)\n",This,debugstr_guid(riid),ppvObj);
 
   /*
    * Since enumerators are seperate objects from the parent data object
diff --git a/dlls/ole32/datacache.c b/dlls/ole32/datacache.c
index 864f6d2..a8cf092 100644
--- a/dlls/ole32/datacache.c
+++ b/dlls/ole32/datacache.c
@@ -444,13 +444,8 @@
 {
   DataCache* newCache = NULL;
   HRESULT    hr       = S_OK;
-  char       xclsid[50];
-  char       xriid[50];
 
-  WINE_StringFromCLSID((LPCLSID)rclsid,xclsid);
-  WINE_StringFromCLSID((LPCLSID)riid,xriid);
-
-  TRACE("(%s, %p, %s, %p)\n", xclsid, pUnkOuter, xriid, ppvObj);
+  TRACE("(%s, %p, %s, %p)\n", debugstr_guid(rclsid), pUnkOuter, debugstr_guid(riid), ppvObj);
 
   /*
    * Sanity check
@@ -885,14 +880,7 @@
    */
   if ((*ppvObject)==0)
   {
-    char clsid[50];
-
-    WINE_StringFromCLSID((LPCLSID)riid,clsid);
-    
-    WARN(
-	 "() : asking for un supported interface %s\n", 
-	 clsid);
-
+    WARN( "() : asking for un supported interface %s\n", debugstr_guid(riid));
     return E_NOINTERFACE;
   }
   
diff --git a/dlls/ole32/defaulthandler.c b/dlls/ole32/defaulthandler.c
index 89e9b5b..262b1f7 100644
--- a/dlls/ole32/defaulthandler.c
+++ b/dlls/ole32/defaulthandler.c
@@ -383,13 +383,8 @@
 {
   DefaultHandler* newHandler = NULL;
   HRESULT         hr         = S_OK;
-  char            xclsid[50];
-  char            xriid[50];
 
-  WINE_StringFromCLSID((LPCLSID)clsid,xclsid);
-  WINE_StringFromCLSID((LPCLSID)riid,xriid);
-
-  TRACE("(%s, %p, %s, %p)\n", xclsid, pUnkOuter, xriid, ppvObj);
+  TRACE("(%s, %p, %s, %p)\n", debugstr_guid(clsid), pUnkOuter, debugstr_guid(riid), ppvObj);
 
   /*
    * Sanity check
@@ -621,14 +616,7 @@
    */
   if ((*ppvObject)==0)
   {
-    char clsid[50];
-
-    WINE_StringFromCLSID((LPCLSID)riid,clsid);
-    
-    WARN(
-	 "() : asking for un supported interface %s\n", 
-	 clsid);
-
+    WARN( "() : asking for un supported interface %s\n", debugstr_guid(riid));
     return E_NOINTERFACE;
   }
   
diff --git a/dlls/ole32/ifs.c b/dlls/ole32/ifs.c
index ed72c95..7c41869 100644
--- a/dlls/ole32/ifs.c
+++ b/dlls/ole32/ifs.c
@@ -57,10 +57,8 @@
  */
 static HRESULT WINAPI IUnknown_fnQueryInterface(LPUNKNOWN iface,REFIID refiid,LPVOID *obj) {
 	ICOM_THIS(IUnknownImpl,iface);
-	char	xrefiid[50];
 
-	WINE_StringFromCLSID((LPCLSID)refiid,xrefiid);
-	TRACE("(%p)->QueryInterface(%s,%p)\n",This,xrefiid,obj);
+	TRACE("(%p)->QueryInterface(%s,%p)\n",This,debugstr_guid(refiid),obj);
 
 	if (!memcmp(&IID_IUnknown,refiid,sizeof(IID_IUnknown))) {
 		*obj = This;
@@ -111,10 +109,8 @@
  */
 HRESULT WINAPI IMalloc16_fnQueryInterface(IMalloc16* iface,REFIID refiid,LPVOID *obj) {
         ICOM_THIS(IMalloc16Impl,iface);
-	char	xrefiid[50];
 
-	WINE_StringFromCLSID((LPCLSID)refiid,xrefiid);
-	TRACE("(%p)->QueryInterface(%s,%p)\n",This,xrefiid,obj);
+	TRACE("(%p)->QueryInterface(%s,%p)\n",This,debugstr_guid(refiid),obj);
 	if (	!memcmp(&IID_IUnknown,refiid,sizeof(IID_IUnknown)) ||
 		!memcmp(&IID_IMalloc,refiid,sizeof(IID_IMalloc))
 	) {
@@ -245,10 +241,8 @@
  */
 static HRESULT WINAPI IMalloc_fnQueryInterface(LPMALLOC iface,REFIID refiid,LPVOID *obj) {
 	ICOM_THIS(IMalloc32Impl,iface);
-	char	xrefiid[50];
 
-	WINE_StringFromCLSID((LPCLSID)refiid,xrefiid);
-	TRACE("(%p)->QueryInterface(%s,%p)\n",This,xrefiid,obj);
+	TRACE("(%p)->QueryInterface(%s,%p)\n",This,debugstr_guid(refiid),obj);
 	if (	!memcmp(&IID_IUnknown,refiid,sizeof(IID_IUnknown)) ||
 		!memcmp(&IID_IMalloc,refiid,sizeof(IID_IMalloc))
 	) {
diff --git a/dlls/ole32/storage.c b/dlls/ole32/storage.c
index 3558b38..088ed7e 100644
--- a/dlls/ole32/storage.c
+++ b/dlls/ole32/storage.c
@@ -356,9 +356,7 @@
  */
 void
 STORAGE_dump_pps_entry(struct storage_pps_entry *stde) {
-	char	name[33],xguid[50];
-
-	WINE_StringFromCLSID(&(stde->pps_guid),xguid);
+    char	name[33];
 
 	lstrcpyWtoA(name,stde->pps_rawname);
 	if (!stde->pps_sizeofname)
@@ -368,7 +366,7 @@
 	DPRINTF("prev pps: %ld\n",stde->pps_prev);
 	DPRINTF("next pps: %ld\n",stde->pps_next);
 	DPRINTF("dir pps: %ld\n",stde->pps_dir);
-	DPRINTF("guid: %s\n",xguid);
+	DPRINTF("guid: %s\n",debugstr_guid(&(stde->pps_guid)));
 	if (stde->pps_type !=2) {
 		time_t	t;
 
@@ -688,9 +686,7 @@
 	IStream16* iface,REFIID refiid,LPVOID *obj
 ) {
 	ICOM_THIS(IStream16Impl,iface);
-	char    xrefiid[50];
-	WINE_StringFromCLSID((LPCLSID)refiid,xrefiid);
-	TRACE_(relay)("(%p)->(%s,%p)\n",This,xrefiid,obj);
+	TRACE_(relay)("(%p)->(%s,%p)\n",This,debugstr_guid(refiid),obj);
 	if (!memcmp(&IID_IUnknown,refiid,sizeof(IID_IUnknown))) {
 		*obj = This;
 		return 0;
@@ -1172,10 +1168,8 @@
 	IStream* iface,REFIID refiid,LPVOID *obj
 ) {
 	ICOM_THIS(IStream32Impl,iface);
-	char    xrefiid[50];
 
-	WINE_StringFromCLSID((LPCLSID)refiid,xrefiid);
-	TRACE_(relay)("(%p)->(%s,%p)\n",This,xrefiid,obj);
+	TRACE_(relay)("(%p)->(%s,%p)\n",This,debugstr_guid(refiid),obj);
 	if (!memcmp(&IID_IUnknown,refiid,sizeof(IID_IUnknown))) {
 		*obj = This;
 		return 0;
@@ -1228,10 +1222,8 @@
 	IStorage16* iface,REFIID refiid,LPVOID *obj
 ) {
 	ICOM_THIS(IStorage16Impl,iface);
-	char    xrefiid[50];
 
-	WINE_StringFromCLSID((LPCLSID)refiid,xrefiid);
-	TRACE_(relay)("(%p)->(%s,%p)\n",This,xrefiid,obj);
+	TRACE_(relay)("(%p)->(%s,%p)\n",This,debugstr_guid(refiid),obj);
 
 	if (!memcmp(&IID_IUnknown,refiid,sizeof(IID_IUnknown))) {
 		*obj = This;
@@ -1302,14 +1294,8 @@
  */
 HRESULT WINAPI IStorage16_fnCopyTo(LPSTORAGE16 iface,DWORD ciidExclude,const IID *rgiidExclude,SNB16 SNB16Exclude,IStorage16 *pstgDest) {
 	ICOM_THIS(IStorage16Impl,iface);
-	char	xguid[50];
-
-	if (rgiidExclude)
-		WINE_StringFromCLSID(rgiidExclude,xguid);
-	else
-		strcpy(xguid,"<no guid>");
 	FIXME("IStorage16(%p)->(0x%08lx,%s,%p,%p),stub!\n",
-		This,ciidExclude,xguid,SNB16Exclude,pstgDest
+		This,ciidExclude,debugstr_guid(rgiidExclude),SNB16Exclude,pstgDest
 	);
 	return S_OK;
 }
diff --git a/dlls/oleaut32/ole2disp.c b/dlls/oleaut32/ole2disp.c
index 3fd4204..130536c 100644
--- a/dlls/oleaut32/ole2disp.c
+++ b/dlls/oleaut32/ole2disp.c
@@ -322,9 +322,7 @@
 HRESULT WINAPI RegisterActiveObject16(
 	IUnknown *punk, REFCLSID rclsid, DWORD dwFlags, unsigned long *pdwRegister
 ) {
-	char	buf[80];
-	WINE_StringFromCLSID(rclsid,buf);
-	FIXME("(%p,%s,0x%08lx,%p):stub\n",punk,buf,dwFlags,pdwRegister);
+	FIXME("(%p,%s,0x%08lx,%p):stub\n",punk,debugstr_guid(rclsid),dwFlags,pdwRegister);
 	return 0;
 }
 
diff --git a/dlls/oleaut32/oleaut.c b/dlls/oleaut32/oleaut.c
index 0d924ff..2b8fdee 100644
--- a/dlls/oleaut32/oleaut.c
+++ b/dlls/oleaut32/oleaut.c
@@ -17,13 +17,7 @@
 HRESULT WINAPI RegisterActiveObject(
 	LPUNKNOWN punk,REFCLSID rcid,DWORD dwFlags,LPDWORD pdwRegister
 ) {
-	char buf[80];
-
-	if (rcid)
-		WINE_StringFromCLSID(rcid,buf);
-	else
-		sprintf(buf,"<clsid-%p>",rcid);
-	FIXME("(%p,%s,0x%08lx,%p), stub!\n",punk,buf,dwFlags,pdwRegister);
+	FIXME("(%p,%s,0x%08lx,%p), stub!\n",punk,debugstr_guid(rcid),dwFlags,pdwRegister);
 	return E_FAIL;
 }
 
@@ -35,13 +29,7 @@
 
 HRESULT WINAPI GetActiveObject(REFCLSID rcid,LPVOID preserved,LPUNKNOWN *ppunk)
 {
-	char buf[80];
-
-	if (rcid)
-		WINE_StringFromCLSID(rcid,buf);
-	else
-		sprintf(buf,"<clsid-%p>",rcid);
-	FIXME("(%s,%p,%p),stub!\n",buf,preserved,ppunk);
+	FIXME("(%s,%p,%p),stub!\n",debugstr_guid(rcid),preserved,ppunk);
 	return E_FAIL;
 }
 
diff --git a/dlls/oleaut32/olefont.c b/dlls/oleaut32/olefont.c
index 6a1c082..3da087f 100644
--- a/dlls/oleaut32/olefont.c
+++ b/dlls/oleaut32/olefont.c
@@ -402,14 +402,7 @@
    */
   if ((*ppvObject)==0)
   {
-    char clsid[50];
-
-    WINE_StringFromCLSID((LPCLSID)riid,clsid);
-    
-    WARN(
-	 "() : asking for un supported interface %s\n", 
-	 clsid);
-
+    WARN("() : asking for un supported interface %s\n",debugstr_guid(riid));
     return E_NOINTERFACE;
   }
   
diff --git a/dlls/shell32/contmenu.c b/dlls/shell32/contmenu.c
index 84839d4..0b95a77 100644
--- a/dlls/shell32/contmenu.c
+++ b/dlls/shell32/contmenu.c
@@ -180,10 +180,7 @@
 {
 	ICOM_THIS(IContextMenuImpl, iface);
 
-	char    xriid[50];
-	WINE_StringFromCLSID((LPCLSID)riid,xriid);
-
-	TRACE("(%p)->(\n\tIID:\t%s,%p)\n",This,xriid,ppvObj);
+	TRACE("(%p)->(\n\tIID:\t%s,%p)\n",This,debugstr_guid(riid),ppvObj);
 
 	*ppvObj = NULL;
 
diff --git a/dlls/shell32/dataobject.c b/dlls/shell32/dataobject.c
index 949beb7..32baa73 100644
--- a/dlls/shell32/dataobject.c
+++ b/dlls/shell32/dataobject.c
@@ -81,9 +81,7 @@
 static HRESULT WINAPI IEnumFORMATETC_fnQueryInterface(LPENUMFORMATETC iface, REFIID riid, LPVOID* ppvObj)
 {
 	ICOM_THIS(IEnumFORMATETCImpl,iface);
-	char    xriid[50];
-	WINE_StringFromCLSID((LPCLSID)riid,xriid);
-	TRACE("(%p)->(\n\tIID:\t%s,%p)\n",This,xriid,ppvObj);
+	TRACE("(%p)->(\n\tIID:\t%s,%p)\n",This,debugstr_guid(riid),ppvObj);
 
 			*ppvObj = NULL;
 
@@ -413,9 +411,7 @@
 static HRESULT WINAPI IDataObject_fnQueryInterface(LPDATAOBJECT iface, REFIID riid, LPVOID * ppvObj)
 {
 	ICOM_THIS(IDataObjectImpl,iface);
-	char    xriid[50];
-	WINE_StringFromCLSID((LPCLSID)riid,xriid);
-	TRACE("(%p)->(\n\tIID:\t%s,%p)\n",This,xriid,ppvObj);
+	TRACE("(%p)->(\n\tIID:\t%s,%p)\n",This,debugstr_guid(riid),ppvObj);
 
 	*ppvObj = NULL;
 
diff --git a/dlls/shell32/enumidlist.c b/dlls/shell32/enumidlist.c
index 52ab64b..a75d15b 100644
--- a/dlls/shell32/enumidlist.c
+++ b/dlls/shell32/enumidlist.c
@@ -354,9 +354,7 @@
 {
 	ICOM_THIS(IEnumIDListImpl,iface);
 
-	char	xriid[50];
-	WINE_StringFromCLSID((LPCLSID)riid,xriid);
-	TRACE("(%p)->(\n\tIID:\t%s,%p)\n",This,xriid,ppvObj);
+	TRACE("(%p)->(\n\tIID:\t%s,%p)\n",This,debugstr_guid(riid),ppvObj);
 
 	*ppvObj = NULL;
 
diff --git a/dlls/shell32/folders.c b/dlls/shell32/folders.c
index 93d106f..672c9e2 100644
--- a/dlls/shell32/folders.c
+++ b/dlls/shell32/folders.c
@@ -63,9 +63,7 @@
 {
 	ICOM_THIS(IExtractIconAImpl,iface);
 
-	char	xriid[50];
-	 WINE_StringFromCLSID((LPCLSID)riid,xriid);
-	 TRACE("(%p)->(\n\tIID:\t%s,%p)\n",This,xriid,ppvObj);
+	 TRACE("(%p)->(\n\tIID:\t%s,%p)\n",This,debugstr_guid(riid),ppvObj);
 
 	*ppvObj = NULL;
 
diff --git a/dlls/shell32/memorystream.c b/dlls/shell32/memorystream.c
index a407ce5..ad21002 100644
--- a/dlls/shell32/memorystream.c
+++ b/dlls/shell32/memorystream.c
@@ -113,10 +113,7 @@
 {
 	ICOM_THIS(ISHFileStream, iface);
 
-	char    xriid[50];
-	WINE_StringFromCLSID((LPCLSID)riid,xriid);
-
-	TRACE("(%p)->(\n\tIID:\t%s,%p)\n",This,xriid,ppvObj);
+	TRACE("(%p)->(\n\tIID:\t%s,%p)\n",This,debugstr_guid(riid),ppvObj);
 
 	*ppvObj = NULL;
 
diff --git a/dlls/shell32/regstream.c b/dlls/shell32/regstream.c
index 2c10ac3..abae9b8 100644
--- a/dlls/shell32/regstream.c
+++ b/dlls/shell32/regstream.c
@@ -70,10 +70,7 @@
 {
 	ICOM_THIS(ISHRegStream, iface);
 
-	char    xriid[50];
-	WINE_StringFromCLSID((LPCLSID)riid,xriid);
-
-	TRACE("(%p)->(\n\tIID:\t%s,%p)\n",This,xriid,ppvObj);
+	TRACE("(%p)->(\n\tIID:\t%s,%p)\n",This,debugstr_guid(riid),ppvObj);
 
 	*ppvObj = NULL;
 
diff --git a/dlls/shell32/shelllink.c b/dlls/shell32/shelllink.c
index 4abc280..f78d25c 100644
--- a/dlls/shell32/shelllink.c
+++ b/dlls/shell32/shelllink.c
@@ -420,9 +420,7 @@
 {
 	ICOM_THIS(IShellLinkImpl, iface);
 	
-	char    xriid[50];
-	WINE_StringFromCLSID((LPCLSID)riid,xriid);
-	TRACE("(%p)->(\n\tIID:\t%s)\n",This,xriid);
+	TRACE("(%p)->(\n\tIID:\t%s)\n",This,debugstr_guid(riid));
 
 	*ppvObj = NULL;
 
diff --git a/dlls/shell32/shellole.c b/dlls/shell32/shellole.c
index 446162f..c0aa481 100644
--- a/dlls/shell32/shellole.c
+++ b/dlls/shell32/shellole.c
@@ -49,13 +49,10 @@
 	REFIID refiid,
 	LPVOID *ppv)
 {
-	char	xclsid[48], xiid[48];
 	DWORD	hres;
 	IID	iid;
 	CLSID * myclsid = (CLSID*)clsid;
 	
-	WINE_StringFromCLSID(refiid,xiid);
-
 	if (!clsid)
 	{
 	  if (!aclsid) return REGDB_E_CLASSNOTREG;
@@ -63,11 +60,8 @@
 	  myclsid = &iid;
 	}
 
-	WINE_StringFromCLSID(myclsid,xclsid);
-	WINE_StringFromCLSID(refiid,xiid);
-	  
 	TRACE("(%p,\n\tCLSID:\t%s, unk:%p\n\tIID:\t%s,%p)\n",
-		aclsid,xclsid,unknownouter,xiid,ppv);
+		aclsid,debugstr_guid(myclsid),unknownouter,debugstr_guid(refiid),ppv);
 
 	if IsEqualCLSID(myclsid, &CLSID_ShellFSFolder)
 	{
@@ -80,7 +74,8 @@
 	
 	if(hres!=S_OK)
 	{
-	  ERR("failed (0x%08lx) to create \n\tCLSID:\t%s\n\tIID:\t%s\n", hres, xclsid, xiid);
+	  ERR("failed (0x%08lx) to create \n\tCLSID:\t%s\n\tIID:\t%s\n",
+              hres, debugstr_guid(myclsid), debugstr_guid(refiid));
 	  ERR("class not found in registry\n");
 	}
 
@@ -95,10 +90,7 @@
 {	HRESULT	hres = E_OUTOFMEMORY;
 	LPCLASSFACTORY lpclf;
 
-	char xclsid[50],xiid[50];
-	WINE_StringFromCLSID((LPCLSID)rclsid,xclsid);
-	WINE_StringFromCLSID((LPCLSID)iid,xiid);
-	TRACE("\n\tCLSID:\t%s,\n\tIID:\t%s\n",xclsid,xiid);
+	TRACE("\n\tCLSID:\t%s,\n\tIID:\t%s\n",debugstr_guid(rclsid),debugstr_guid(iid));
 	
 	*ppv = NULL;
 
@@ -233,9 +225,7 @@
   LPCLASSFACTORY iface, REFIID riid, LPVOID *ppvObj)
 {
 	ICOM_THIS(IClassFactoryImpl,iface);
-	char	xriid[50];
-	WINE_StringFromCLSID((LPCLSID)riid,xriid);
-	TRACE("(%p)->(\n\tIID:\t%s)\n",This,xriid);
+	TRACE("(%p)->(\n\tIID:\t%s)\n",This,debugstr_guid(riid));
 
 	*ppvObj = NULL;
 
@@ -251,7 +241,7 @@
 	  TRACE("-- Interface: (%p)->(%p)\n",ppvObj,*ppvObj);
 	  return S_OK;
 	}
-	TRACE("-- Interface: %s E_NOINTERFACE\n", xriid);
+	TRACE("-- Interface: %s E_NOINTERFACE\n", debugstr_guid(riid));
 	return E_NOINTERFACE;
 }  
 /******************************************************************************
@@ -290,10 +280,8 @@
 	ICOM_THIS(IClassFactoryImpl,iface);
 	IUnknown *pObj = NULL;
 	HRESULT hres;
-	char	xriid[50];
 
-	WINE_StringFromCLSID((LPCLSID)riid,xriid);
-	TRACE("%p->(%p,\n\tIID:\t%s,%p)\n",This,pUnknown,xriid,ppObject);
+	TRACE("%p->(%p,\n\tIID:\t%s,%p)\n",This,pUnknown,debugstr_guid(riid),ppObject);
 
 	*ppObject = NULL;
 		
@@ -312,7 +300,7 @@
 	} 
 	else
 	{
-	  ERR("unknown IID requested\n\tIID:\t%s\n",xriid);
+	  ERR("unknown IID requested\n\tIID:\t%s\n",debugstr_guid(riid));
 	  return(E_NOINTERFACE);
 	}
 	
@@ -379,9 +367,6 @@
 IClassFactory * IDefClF_fnConstructor(LPFNCREATEINSTANCE lpfnCI, UINT * pcRefDll, REFIID riidInst)
 {
 	IDefClFImpl* lpclf;
-	char	xriidInst[50];
-
-	WINE_StringFromCLSID((LPCLSID)riidInst,xriidInst);
 
 	lpclf = (IDefClFImpl*)HeapAlloc(GetProcessHeap(),0,sizeof(IDefClFImpl));
 	lpclf->ref = 1;
@@ -394,7 +379,7 @@
 
 	lpclf->riidInst = riidInst;
 
-	TRACE("(%p)\n\tIID:\t%s\n",lpclf, xriidInst);
+	TRACE("(%p)\n\tIID:\t%s\n",lpclf, debugstr_guid(riidInst));
 	shell32_ObjCount++;
 	return (LPCLASSFACTORY)lpclf;
 }
@@ -405,9 +390,8 @@
   LPCLASSFACTORY iface, REFIID riid, LPVOID *ppvObj)
 {
 	ICOM_THIS(IDefClFImpl,iface);
-	char	xriid[50];
-	WINE_StringFromCLSID((LPCLSID)riid,xriid);
-	TRACE("(%p)->(\n\tIID:\t%s)\n",This,xriid);
+
+	TRACE("(%p)->(\n\tIID:\t%s)\n",This,debugstr_guid(riid));
 
 	*ppvObj = NULL;
 
@@ -423,7 +407,7 @@
 	  TRACE("-- Interface: (%p)->(%p)\n",ppvObj,*ppvObj);
 	  return S_OK;
 	}
-	TRACE("-- Interface: %s E_NOINTERFACE\n", xriid);
+	TRACE("-- Interface: %s E_NOINTERFACE\n", debugstr_guid(riid));
 	return E_NOINTERFACE;
 }  
 /******************************************************************************
@@ -466,10 +450,8 @@
   LPCLASSFACTORY iface, LPUNKNOWN pUnkOuter, REFIID riid, LPVOID *ppvObject)
 {
 	ICOM_THIS(IDefClFImpl,iface);
-	char	xriid[50];
 
-	WINE_StringFromCLSID((LPCLSID)riid,xriid);
-	TRACE("%p->(%p,\n\tIID:\t%s,%p)\n",This,pUnkOuter,xriid,ppvObject);
+	TRACE("%p->(%p,\n\tIID:\t%s,%p)\n",This,pUnkOuter,debugstr_guid(riid),ppvObject);
 
 	*ppvObject = NULL;
 		
@@ -483,7 +465,7 @@
 	  return This->lpfnCI(pUnkOuter, riid, ppvObject);
 	}
 
-	ERR("unknown IID requested\n\tIID:\t%s\n",xriid);
+	ERR("unknown IID requested\n\tIID:\t%s\n",debugstr_guid(riid));
 	return E_NOINTERFACE;
 }
 /******************************************************************************
@@ -516,13 +498,8 @@
 	UINT	*pcRefDll,		/* ref count of the dll */
 	REFIID	riidInst)		/* optional interface to the instance */
 {
-
-	char xriid[50],xriidInst[50];
-	WINE_StringFromCLSID((LPCLSID)riid,xriid);
-	WINE_StringFromCLSID((LPCLSID)riidInst,xriidInst);
-
 	TRACE("\n\tIID:\t%s %p %p %p \n\tIIDIns:\t%s\n",
-	xriid, ppv, lpfnCI, pcRefDll, xriidInst);
+              debugstr_guid(riid), ppv, lpfnCI, pcRefDll, debugstr_guid(riidInst));
 
 	if ( IsEqualCLSID(riid, &IID_IClassFactory) )
 	{
diff --git a/dlls/shell32/shlfolder.c b/dlls/shell32/shlfolder.c
index 6ec75c9..058dd37 100644
--- a/dlls/shell32/shlfolder.c
+++ b/dlls/shell32/shlfolder.c
@@ -274,11 +274,8 @@
 {
 	ICOM_THIS(IGenericSFImpl, iface);
 
-	char	xriid[50];	
-	WINE_StringFromCLSID((LPCLSID)riid,xriid);
-
 	_CALL_TRACE
-	TRACE("(%p)->(\n\tIID:\t%s,%p)\n",This,xriid,ppvObj);
+	TRACE("(%p)->(\n\tIID:\t%s,%p)\n",This,debugstr_guid(riid),ppvObj);
 
 	*ppvObj = NULL;
 
@@ -373,11 +370,9 @@
 	LPVOID * ppv)
 {
 	IGenericSFImpl *	sf;
-	char	xriid[50];	
 	HRESULT hr = S_OK;
-	WINE_StringFromCLSID((LPCLSID)riid,xriid);
 
-	TRACE("unkOut=%p riid=%s\n",pUnkOuter, xriid);
+	TRACE("unkOut=%p riid=%s\n",pUnkOuter, debugstr_guid(riid));
 
 	if(pUnkOuter && ! IsEqualIID(riid, &IID_IUnknown))
 	{
@@ -488,10 +483,8 @@
 {
 	_ICOM_THIS_From_IShellFolder2(IGenericSFImpl, iface)
 
-	char	xriid[50];	
-	WINE_StringFromCLSID((LPCLSID)riid,xriid);
 	_CALL_TRACE
-	TRACE("(%p)->(\n\tIID:\t%s,%p)\n",This,xriid,ppvObj);
+	TRACE("(%p)->(\n\tIID:\t%s,%p)\n",This,debugstr_guid(riid),ppvObj);
 
 	return IUnknown_QueryInterface(This->pUnkOuter, riid, ppvObj);
 }
@@ -645,14 +638,11 @@
 {
 	_ICOM_THIS_From_IShellFolder2(IGenericSFImpl, iface)
 	GUID		const * iid;
-	char		xriid[50];
 	IShellFolder	*pShellFolder, *pSubFolder;
 	IPersistFolder 	*pPersistFolder;
 	LPITEMIDLIST	absPidl;
 	
-	WINE_StringFromCLSID(riid,xriid);
-
-	TRACE("(%p)->(pidl=%p,%p,\n\tIID:\t%s,%p)\n",This,pidl,pbcReserved,xriid,ppvOut);
+	TRACE("(%p)->(pidl=%p,%p,\n\tIID:\t%s,%p)\n",This,pidl,pbcReserved,debugstr_guid(riid),ppvOut);
 
 	if(!pidl || !ppvOut) return E_INVALIDARG;
 
@@ -714,10 +704,8 @@
 {
 	_ICOM_THIS_From_IShellFolder2(IGenericSFImpl, iface)
 
-	char xriid[50];
-	WINE_StringFromCLSID(riid,xriid);
-
-	FIXME("(%p)->(pidl=%p,%p,\n\tIID:%s,%p) stub\n",This,pidl,pbcReserved,xriid,ppvOut);
+	FIXME("(%p)->(pidl=%p,%p,\n\tIID:%s,%p) stub\n",
+              This,pidl,pbcReserved,debugstr_guid(riid),ppvOut);
 
 	*ppvOut = NULL;
 	return E_NOTIMPL;
@@ -837,11 +825,9 @@
 	_ICOM_THIS_From_IShellFolder2(IGenericSFImpl, iface)
 
 	LPSHELLVIEW	pShellView;
-	char		xriid[50];
 	HRESULT		hr = E_INVALIDARG;
 
-	WINE_StringFromCLSID(riid,xriid);
-	TRACE("(%p)->(hwnd=0x%x,\n\tIID:\t%s,%p)\n",This,hwndOwner,xriid,ppvOut);
+	TRACE("(%p)->(hwnd=0x%x,\n\tIID:\t%s,%p)\n",This,hwndOwner,debugstr_guid(riid),ppvOut);
 	
 	if(ppvOut)
 	{
@@ -949,15 +935,12 @@
 {	
 	_ICOM_THIS_From_IShellFolder2(IGenericSFImpl, iface)
 
-	char		xclsid[50];
 	LPITEMIDLIST	pidl;
 	IUnknown*	pObj = NULL; 
 	HRESULT		hr = E_INVALIDARG;
 	
-	WINE_StringFromCLSID(riid,xclsid);
-
 	TRACE("(%p)->(%u,%u,apidl=%p,\n\tIID:%s,%p,%p)\n",
-	  This,hwndOwner,cidl,apidl,xclsid,prgfInOut,ppvOut);
+	  This,hwndOwner,cidl,apidl,debugstr_guid(riid),prgfInOut,ppvOut);
 
 	if (ppvOut)
 	{
@@ -1305,9 +1288,7 @@
 {
 	_ICOM_THIS_From_IShellFolder2(IGenericSFImpl, iface)
 
-	char	xriid[50];	
-	WINE_StringFromCLSID((LPCLSID)riid,xriid);
-	TRACE("(%p)->(\n\tIID:\t%s,%p)\n",This,xriid,ppvObj);
+	TRACE("(%p)->(\n\tIID:\t%s,%p)\n",This,debugstr_guid(riid),ppvObj);
 
 	*ppvObj = NULL;
 
@@ -1414,12 +1395,10 @@
 {
 	_ICOM_THIS_From_IShellFolder2(IGenericSFImpl, iface)
 	GUID		const * clsid;
-	char		xriid[50];
 	IShellFolder	*pShellFolder, *pSubFolder;
 	
-	WINE_StringFromCLSID(riid,xriid);
-
-	TRACE("(%p)->(pidl=%p,%p,\n\tIID:\t%s,%p)\n",This,pidl,pbcReserved,xriid,ppvOut);
+	TRACE("(%p)->(pidl=%p,%p,\n\tIID:\t%s,%p)\n",
+              This,pidl,pbcReserved,debugstr_guid(riid),ppvOut);
 
 	*ppvOut = NULL;
 
@@ -1485,11 +1464,9 @@
 	_ICOM_THIS_From_IShellFolder2(IGenericSFImpl, iface)
 
 	LPSHELLVIEW	pShellView;
-	char		xriid[50];
 	HRESULT		hr = E_INVALIDARG;
 
-	WINE_StringFromCLSID(riid,xriid);
-	TRACE("(%p)->(hwnd=0x%x,\n\tIID:\t%s,%p)\n",This,hwndOwner,xriid,ppvOut);
+	TRACE("(%p)->(hwnd=0x%x,\n\tIID:\t%s,%p)\n",This,hwndOwner,debugstr_guid(riid),ppvOut);
 	
 	if(ppvOut)
 	{
@@ -1880,13 +1857,11 @@
 {
 	_ICOM_THIS_From_IShellFolder2(IGenericSFImpl, iface)
 	GUID		const * clsid;
-	char		xriid[50];
 	IShellFolder	*pShellFolder, *pSubFolder;
 	LPITEMIDLIST	pidltemp;
 	
-	WINE_StringFromCLSID(riid,xriid);
-
-	TRACE("(%p)->(pidl=%p,%p,\n\tIID:\t%s,%p)\n",This,pidl,pbcReserved,xriid,ppvOut);
+	TRACE("(%p)->(pidl=%p,%p,\n\tIID:\t%s,%p)\n",
+              This,pidl,pbcReserved,debugstr_guid(riid),ppvOut);
 
 	if(!pidl || !ppvOut) return E_INVALIDARG;
 
@@ -1933,11 +1908,9 @@
 	_ICOM_THIS_From_IShellFolder2(IGenericSFImpl, iface)
 
 	LPSHELLVIEW	pShellView;
-	char		xriid[50];
 	HRESULT		hr = E_INVALIDARG;
 
-	WINE_StringFromCLSID(riid,xriid);
-	TRACE("(%p)->(hwnd=0x%x,\n\tIID:\t%s,%p)\n",This,hwndOwner,xriid,ppvOut);
+	TRACE("(%p)->(hwnd=0x%x,\n\tIID:\t%s,%p)\n",This,hwndOwner,debugstr_guid(riid),ppvOut);
 	
 	if(ppvOut)
 	{
diff --git a/dlls/shell32/shlview.c b/dlls/shell32/shlview.c
index b7e688c..ceb270a 100644
--- a/dlls/shell32/shlview.c
+++ b/dlls/shell32/shlview.c
@@ -1201,9 +1201,7 @@
 {
 	ICOM_THIS(IShellViewImpl, iface);
 
-	char    xriid[50];
-	WINE_StringFromCLSID((LPCLSID)riid,xriid);
-	TRACE("(%p)->(\n\tIID:\t%s,%p)\n",This,xriid,ppvObj);
+	TRACE("(%p)->(\n\tIID:\t%s,%p)\n",This,debugstr_guid(riid),ppvObj);
 
 	*ppvObj = NULL;
 
@@ -1531,10 +1529,7 @@
 {
 	ICOM_THIS(IShellViewImpl, iface);
 
-	char    xriid[50];
-	
-	WINE_StringFromCLSID((LPCLSID)riid,xriid);
-	TRACE("(%p)->(uItem=0x%08x,\n\tIID=%s, ppv=%p)\n",This, uItem, xriid, ppvOut);
+	TRACE("(%p)->(uItem=0x%08x,\n\tIID=%s, ppv=%p)\n",This, uItem, debugstr_guid(riid), ppvOut);
 
 	*ppvOut = NULL;
 
@@ -1623,13 +1618,10 @@
 	OLECMD * prgCmds,
 	OLECMDTEXT* pCmdText)
 {
-	char    xguid[50];
-
 	_ICOM_THIS_From_IOleCommandTarget(IShellViewImpl, iface);
 
-	WINE_StringFromCLSID((LPCLSID)pguidCmdGroup,xguid);
-
-	FIXME("(%p)->(%p(%s) 0x%08lx %p %p\n", This, pguidCmdGroup, xguid, cCmds, prgCmds, pCmdText);
+	FIXME("(%p)->(%p(%s) 0x%08lx %p %p\n",
+              This, pguidCmdGroup, debugstr_guid(pguidCmdGroup), cCmds, prgCmds, pCmdText);
 	return E_NOTIMPL;
 }
 
@@ -1646,13 +1638,10 @@
 	VARIANT* pvaIn,
 	VARIANT* pvaOut)
 {
-	char    xguid[50];
-
 	_ICOM_THIS_From_IOleCommandTarget(IShellViewImpl, iface);
 
-	WINE_StringFromCLSID((LPCLSID)pguidCmdGroup,xguid);
-
-	FIXME("(%p)->(\n\tTarget GUID:%s Command:0x%08lx Opt:0x%08lx %p %p)\n", This, xguid, nCmdID, nCmdexecopt, pvaIn, pvaOut);
+	FIXME("(%p)->(\n\tTarget GUID:%s Command:0x%08lx Opt:0x%08lx %p %p)\n",
+              This, debugstr_guid(pguidCmdGroup), nCmdID, nCmdexecopt, pvaIn, pvaOut);
 	return E_NOTIMPL;
 }
 
@@ -1675,13 +1664,9 @@
 	REFIID riid,
 	LPVOID *ppvObj)
 {
-	char	xriid[50];
-
 	_ICOM_THIS_From_IDropTarget(IShellViewImpl, iface);
 
-	WINE_StringFromCLSID((LPCLSID)riid,xriid);
-
-	TRACE("(%p)->(\n\tIID:\t%s,%p)\n",This,xriid,ppvObj);
+	TRACE("(%p)->(\n\tIID:\t%s,%p)\n",This,debugstr_guid(riid),ppvObj);
 
 	return IShellFolder_QueryInterface((IShellFolder*)This, riid, ppvObj);
 }
@@ -1777,13 +1762,9 @@
 	REFIID riid,
 	LPVOID *ppvObj)
 {
-	char	xriid[50];
-
 	_ICOM_THIS_From_IDropSource(IShellViewImpl, iface);
 
-	WINE_StringFromCLSID((LPCLSID)riid,xriid);
-
-	TRACE("(%p)->(\n\tIID:\t%s,%p)\n",This,xriid,ppvObj);
+	TRACE("(%p)->(\n\tIID:\t%s,%p)\n",This,debugstr_guid(riid),ppvObj);
 
 	return IShellFolder_QueryInterface((IShellFolder*)This, riid, ppvObj);
 }
@@ -1849,13 +1830,9 @@
 	REFIID riid,
 	LPVOID *ppvObj)
 {
-	char	xriid[50];
-
 	_ICOM_THIS_From_IViewObject(IShellViewImpl, iface);
 
-	WINE_StringFromCLSID((LPCLSID)riid,xriid);
-
-	TRACE("(%p)->(\n\tIID:\t%s,%p)\n",This,xriid,ppvObj);
+	TRACE("(%p)->(\n\tIID:\t%s,%p)\n",This,debugstr_guid(riid),ppvObj);
 
 	return IShellFolder_QueryInterface((IShellFolder*)This, riid, ppvObj);
 }
diff --git a/dlls/shell32/shv_bg_cmenu.c b/dlls/shell32/shv_bg_cmenu.c
index 2fe6910..4d65e41 100644
--- a/dlls/shell32/shv_bg_cmenu.c
+++ b/dlls/shell32/shv_bg_cmenu.c
@@ -53,10 +53,7 @@
 {
 	ICOM_THIS(BgCmImpl, iface);
 
-	char    xriid[50];
-	WINE_StringFromCLSID((LPCLSID)riid,xriid);
-
-	TRACE("(%p)->(\n\tIID:\t%s,%p)\n",This,xriid,ppvObj);
+	TRACE("(%p)->(\n\tIID:\t%s,%p)\n",This,debugstr_guid(riid),ppvObj);
 
 	*ppvObj = NULL;
 
diff --git a/graphics/d3ddevices.c b/graphics/d3ddevices.c
index f01de0f..efe730e 100644
--- a/graphics/d3ddevices.c
+++ b/graphics/d3ddevices.c
@@ -259,10 +259,8 @@
 						      LPVOID* ppvObj)
 {
   ICOM_THIS(IDirect3DDevice2Impl,iface);
-  char xrefiid[50];
   
-  WINE_StringFromCLSID((LPCLSID)riid,xrefiid);
-  FIXME("(%p)->(%s,%p): stub\n", This, xrefiid,ppvObj);
+  FIXME("(%p)->(%s,%p): stub\n", This, debugstr_guid(riid),ppvObj);
   
   return S_OK;
 }
@@ -1316,10 +1314,8 @@
 						     LPVOID* ppvObj)
 {
   ICOM_THIS(IDirect3DDeviceImpl,iface);
-  char xrefiid[50];
   
-  WINE_StringFromCLSID((LPCLSID)riid,xrefiid);
-  FIXME("(%p)->(%s,%p): stub\n", This, xrefiid,ppvObj);
+  FIXME("(%p)->(%s,%p): stub\n", This, debugstr_guid(riid),ppvObj);
   
   return S_OK;
 }
diff --git a/graphics/d3dexecutebuffer.c b/graphics/d3dexecutebuffer.c
index 559ccae..1a7eb5a 100644
--- a/graphics/d3dexecutebuffer.c
+++ b/graphics/d3dexecutebuffer.c
@@ -712,10 +712,8 @@
 							    LPVOID* ppvObj)
 {
   ICOM_THIS(IDirect3DExecuteBufferImpl,iface);
-  char xrefiid[50];
   
-  WINE_StringFromCLSID((LPCLSID)riid,xrefiid);
-  FIXME("(%p)->(%s,%p): stub\n", This, xrefiid,ppvObj);
+  FIXME("(%p)->(%s,%p): stub\n", This, debugstr_guid(riid),ppvObj);
   
   return S_OK;
 }
diff --git a/graphics/d3dlight.c b/graphics/d3dlight.c
index f8508b7..c8dacd5 100644
--- a/graphics/d3dlight.c
+++ b/graphics/d3dlight.c
@@ -144,10 +144,8 @@
 						    LPVOID* ppvObj)
 {
   ICOM_THIS(IDirect3DLightImpl,iface);
-  char xrefiid[50];
   
-  WINE_StringFromCLSID((LPCLSID)riid,xrefiid);
-  FIXME("(%p)->(%s,%p): stub\n", This, xrefiid,ppvObj);
+  FIXME("(%p)->(%s,%p): stub\n", This, debugstr_guid(riid),ppvObj);
   
   return S_OK;
 }
diff --git a/graphics/d3dmaterial.c b/graphics/d3dmaterial.c
index dbf4137..ee88f8d 100644
--- a/graphics/d3dmaterial.c
+++ b/graphics/d3dmaterial.c
@@ -105,10 +105,8 @@
 							LPVOID* ppvObj)
 {
   ICOM_THIS(IDirect3DMaterial2Impl,iface);
-  char xrefiid[50];
   
-  WINE_StringFromCLSID((LPCLSID)riid,xrefiid);
-  FIXME("(%p)->(%s,%p): stub\n", This, xrefiid,ppvObj);
+  FIXME("(%p)->(%s,%p): stub\n", This, debugstr_guid(riid),ppvObj);
   
   return S_OK;
 }
diff --git a/graphics/d3dtexture.c b/graphics/d3dtexture.c
index 28ce2df..572cc25 100644
--- a/graphics/d3dtexture.c
+++ b/graphics/d3dtexture.c
@@ -222,10 +222,8 @@
 							LPVOID* ppvObj)
 {
   ICOM_THIS(IDirect3DTexture2Impl,iface);
-  char xrefiid[50];
   
-  WINE_StringFromCLSID((LPCLSID)riid,xrefiid);
-  FIXME("(%p)->(%s,%p): stub\n", This, xrefiid,ppvObj);
+  FIXME("(%p)->(%s,%p): stub\n", This, debugstr_guid(riid),ppvObj);
   
   return S_OK;
 }
diff --git a/graphics/d3dviewport.c b/graphics/d3dviewport.c
index ccc671a..15c8ee3 100644
--- a/graphics/d3dviewport.c
+++ b/graphics/d3dviewport.c
@@ -88,10 +88,8 @@
 							LPVOID* ppvObj)
 {
   ICOM_THIS(IDirect3DViewport2Impl,iface);
-  char xrefiid[50];
   
-  WINE_StringFromCLSID((LPCLSID)riid,xrefiid);
-  FIXME("(%p)->(%s,%p): stub\n", This, xrefiid,ppvObj);
+  FIXME("(%p)->(%s,%p): stub\n", This, debugstr_guid(riid),ppvObj);
   
   return S_OK;
 }
diff --git a/graphics/ddraw.c b/graphics/ddraw.c
index c47df90..4c88786 100644
--- a/graphics/ddraw.c
+++ b/graphics/ddraw.c
@@ -1830,10 +1830,8 @@
 
 static HRESULT WINAPI IDirectDrawSurface4Impl_QueryInterface(LPDIRECTDRAWSURFACE4 iface,REFIID refiid,LPVOID *obj) {
     ICOM_THIS(IDirectDrawSurface4Impl,iface);
-    char    xrefiid[50];
 
-    WINE_StringFromCLSID((LPCLSID)refiid,xrefiid);
-    TRACE("(%p)->(%s,%p)\n",This,xrefiid,obj);
+    TRACE("(%p)->(%s,%p)\n",This,debugstr_guid(refiid),obj);
     
     /* All DirectDrawSurface versions (1, 2, 3 and 4) use
      * the same interface. And IUnknown does that too of course.
@@ -1875,7 +1873,7 @@
 	return S_OK;
     }
     
-    FIXME("(%p):interface for IID %s NOT found!\n",This,xrefiid);
+    FIXME("(%p):interface for IID %s NOT found!\n",This,debugstr_guid(refiid));
     return OLE_E_ENUM_NOMORE;
 }
 
@@ -2659,10 +2657,8 @@
         LPDIRECTDRAWPALETTE iface,REFIID refiid,LPVOID *obj ) 
 {
   ICOM_THIS(IDirectDrawPaletteImpl,iface);
-  char    xrefiid[50];
 
-  WINE_StringFromCLSID((LPCLSID)refiid,xrefiid);
-  FIXME("(%p)->(%s,%p) stub.\n",This,xrefiid,obj);
+  FIXME("(%p)->(%s,%p) stub.\n",This,debugstr_guid(refiid),obj);
 
   return S_OK;
 }
@@ -2701,10 +2697,8 @@
 ) {
         ICOM_THIS(IDirect3DImpl,iface);
 	/* FIXME: Not sure if this is correct */
-        char    xrefiid[50];
 
-        WINE_StringFromCLSID((LPCLSID)refiid,xrefiid);
-        TRACE("(%p)->(%s,%p)\n",This,xrefiid,obj);
+        TRACE("(%p)->(%s,%p)\n",This,debugstr_guid(refiid),obj);
         if ( ( IsEqualGUID( &IID_IDirectDraw,  refiid ) ) ||
 	     ( IsEqualGUID (&IID_IDirectDraw2, refiid ) ) ||
 	     ( IsEqualGUID( &IID_IDirectDraw4, refiid ) ) ) {
@@ -2738,7 +2732,7 @@
 
                 return S_OK;
         }
-        FIXME("(%p):interface for IID %s NOT found!\n",This,xrefiid);
+        FIXME("(%p):interface for IID %s NOT found!\n",This,debugstr_guid(refiid));
         return OLE_E_ENUM_NOMORE;
 }
 
@@ -2767,10 +2761,8 @@
 {
   ICOM_THIS(IDirect3DImpl,iface);
   /* FIXME: Not sure if this is correct */
-  char    xrefiid[50];
 
-  WINE_StringFromCLSID((LPCLSID)refiid,xrefiid);
-  FIXME("(%p)->(%s):stub.\n",This,xrefiid);
+  FIXME("(%p)->(%s):stub.\n",This,debugstr_guid(refiid));
   
   return DDERR_ALREADYINITIALIZED;
 }
@@ -2859,10 +2851,8 @@
 	ICOM_THIS(IDirect3D2Impl,iface);
 
 	/* FIXME: Not sure if this is correct */
-        char    xrefiid[50];
 
-        WINE_StringFromCLSID((LPCLSID)refiid,xrefiid);
-        TRACE("(%p)->(%s,%p)\n",This,xrefiid,obj);
+        TRACE("(%p)->(%s,%p)\n",This,debugstr_guid(refiid),obj);
         if ( ( IsEqualGUID( &IID_IDirectDraw,  refiid ) ) ||
 	     ( IsEqualGUID( &IID_IDirectDraw2, refiid ) ) ||
 	     ( IsEqualGUID( &IID_IDirectDraw4, refiid ) ) ) {
@@ -2896,7 +2886,7 @@
 
                 return S_OK;
         }
-        FIXME("(%p):interface for IID %s NOT found!\n",This,xrefiid);
+        FIXME("(%p):interface for IID %s NOT found!\n",This,debugstr_guid(refiid));
         return OLE_E_ENUM_NOMORE;
 }
 
@@ -2987,10 +2977,8 @@
 					      LPDIRECT3DDEVICE2 *device)
 {
   ICOM_THIS(IDirect3D2Impl,iface);
-  char	xbuf[50];
   
-  WINE_StringFromCLSID(rguid,xbuf);
-  FIXME("(%p)->(%s,%p,%p): stub\n",This,xbuf,surface,device);
+  FIXME("(%p)->(%s,%p,%p): stub\n",This,debugstr_guid(rguid),surface,device);
 
   if (is_OpenGL(rguid, (IDirectDrawSurfaceImpl*)surface, (IDirect3DDevice2Impl**)device, This)) {
     IDirect3D2_AddRef(iface);
@@ -4368,10 +4356,8 @@
 	LPDIRECTDRAW2 iface,REFIID refiid,LPVOID *obj
 ) {
         ICOM_THIS(IDirectDraw2Impl,iface);
-	char    xrefiid[50];
 
-	WINE_StringFromCLSID((LPCLSID)refiid,xrefiid);
-	TRACE("(%p)->(%s,%p)\n",This,xrefiid,obj);
+	TRACE("(%p)->(%s,%p)\n",This,debugstr_guid(refiid),obj);
 	if ( IsEqualGUID( &IID_IUnknown, refiid ) ) {
 		*obj = This;
 		IDirectDraw2_AddRef(iface);
@@ -4435,7 +4421,7 @@
 		
 		return S_OK;
 	}
-	WARN("(%p):interface for IID %s _NOT_ found!\n",This,xrefiid);
+	WARN("(%p):interface for IID %s _NOT_ found!\n",This,debugstr_guid(refiid));
         return OLE_E_ENUM_NOMORE;
 }
 #endif /* defined(HAVE_LIBXXF86DGA) */
@@ -4444,10 +4430,8 @@
 	LPDIRECTDRAW2 iface,REFIID refiid,LPVOID *obj
 ) {
         ICOM_THIS(IDirectDraw2Impl,iface);
-	char    xrefiid[50];
 
-	WINE_StringFromCLSID((LPCLSID)refiid,xrefiid);
-	TRACE("(%p)->(%s,%p)\n",This,xrefiid,obj);
+	TRACE("(%p)->(%s,%p)\n",This,debugstr_guid(refiid),obj);
 	if ( IsEqualGUID( &IID_IUnknown, refiid ) ) {
 		*obj = This;
 		IDirectDraw2_AddRef(iface);
@@ -4511,7 +4495,7 @@
 
 		return S_OK;
 	}
-	WARN("(%p):interface for IID %s _NOT_ found!\n",This,xrefiid);
+	WARN("(%p):interface for IID %s _NOT_ found!\n",This,debugstr_guid(refiid));
         return OLE_E_ENUM_NOMORE;
 }
 
@@ -5511,19 +5495,13 @@
 
 HRESULT WINAPI DirectDrawCreate( LPGUID lpGUID, LPDIRECTDRAW *lplpDD, LPUNKNOWN pUnkOuter ) {
         IDirectDrawImpl** ilplpDD=(IDirectDrawImpl**)lplpDD;
-	char	xclsid[50];
 	WNDCLASSA	wc;
         /* WND*            pParentWindow; */
 	HRESULT ret;
 
-	if (HIWORD(lpGUID))
-		WINE_StringFromCLSID(lpGUID,xclsid);
-	else {
-		sprintf(xclsid,"<guid-0x%08x>",(int)lpGUID);
-		lpGUID = NULL;
-	}
+	if (!HIWORD(lpGUID)) lpGUID = NULL;
 
-	TRACE("(%s,%p,%p)\n",xclsid,ilplpDD,pUnkOuter);
+	TRACE("(%s,%p,%p)\n",debugstr_guid(lpGUID),ilplpDD,pUnkOuter);
 
 	if ( ( !lpGUID ) ||
 	     ( IsEqualGUID( &IID_IDirectDraw,  lpGUID ) ) ||
@@ -5574,7 +5552,8 @@
 	return ret;
 
       err:
-	ERR("DirectDrawCreate(%s,%p,%p): did not recognize requested GUID\n",xclsid,lplpDD,pUnkOuter);
+	ERR("DirectDrawCreate(%s,%p,%p): did not recognize requested GUID\n",
+            debugstr_guid(lpGUID),lplpDD,pUnkOuter);
 	return DDERR_INVALIDDIRECTDRAWGUID;
 }
 
@@ -5594,13 +5573,8 @@
 static HRESULT WINAPI 
 DDCF_QueryInterface(LPCLASSFACTORY iface,REFIID riid,LPVOID *ppobj) {
 	ICOM_THIS(IClassFactoryImpl,iface);
-	char buf[80];
 
-	if (HIWORD(riid))
-	    WINE_StringFromCLSID(riid,buf);
-	else
-	    sprintf(buf,"<guid-0x%04x>",LOWORD(riid));
-	FIXME("(%p)->(%s,%p),stub!\n",This,buf,ppobj);
+	FIXME("(%p)->(%s,%p),stub!\n",This,debugstr_guid(riid),ppobj);
 	return E_NOINTERFACE;
 }
 
@@ -5620,10 +5594,8 @@
 	LPCLASSFACTORY iface,LPUNKNOWN pOuter,REFIID riid,LPVOID *ppobj
 ) {
 	ICOM_THIS(IClassFactoryImpl,iface);
-	char buf[80];
 
-	WINE_StringFromCLSID(riid,buf);
-	TRACE("(%p)->(%p,%s,%p)\n",This,pOuter,buf,ppobj);
+	TRACE("(%p)->(%p,%s,%p)\n",This,pOuter,debugstr_guid(riid),ppobj);
 	if ( ( IsEqualGUID( &IID_IDirectDraw,  riid ) ) ||
 	     ( IsEqualGUID( &IID_IDirectDraw2, riid ) ) ||
 	     ( IsEqualGUID( &IID_IDirectDraw4, riid ) ) ) {
@@ -5669,24 +5641,13 @@
  */
 DWORD WINAPI DDRAW_DllGetClassObject(REFCLSID rclsid,REFIID riid,LPVOID *ppv)
 {
-    char buf[80],xbuf[80];
-
-    if (HIWORD(rclsid))
-    	WINE_StringFromCLSID(rclsid,xbuf);
-    else
-    	sprintf(xbuf,"<guid-0x%04x>",LOWORD(rclsid));
-    if (HIWORD(riid))
-    	WINE_StringFromCLSID(riid,buf);
-    else
-    	sprintf(buf,"<guid-0x%04x>",LOWORD(riid));
-    WINE_StringFromCLSID(riid,xbuf);
-    TRACE("(%p,%p,%p)\n", xbuf, buf, ppv);
+    TRACE("(%p,%p,%p)\n", debugstr_guid(rclsid), debugstr_guid(riid), ppv);
     if ( IsEqualCLSID( &IID_IClassFactory, riid ) ) {
     	*ppv = (LPVOID)&DDRAW_CF;
 	IClassFactory_AddRef((IClassFactory*)*ppv);
     return S_OK;
     }
-    FIXME("(%p,%p,%p): no interface found.\n", xbuf, buf, ppv);
+    FIXME("(%p,%p,%p): no interface found.\n", debugstr_guid(rclsid), debugstr_guid(riid), ppv);
     return CLASS_E_CLASSNOTAVAILABLE;
 }
 
diff --git a/include/debugstr.h b/include/debugstr.h
index 4c53233..e170f1a 100644
--- a/include/debugstr.h
+++ b/include/debugstr.h
@@ -6,6 +6,7 @@
 /* These function return a printable version of a string, including
    quotes.  The string will be valid for some time, but not indefinitely
    as strings are re-used.  */
+struct _GUID;
 
 extern LPSTR debugstr_an (LPCSTR s, int n);
 extern LPSTR debugstr_a (LPCSTR s);
@@ -13,6 +14,7 @@
 extern LPSTR debugstr_w (LPCWSTR s);
 extern LPSTR debugres_a (LPCSTR res);
 extern LPSTR debugres_w (LPCWSTR res);
+extern LPSTR debugstr_guid( const struct _GUID *id );
 extern void debug_dumpstr (LPCSTR s);
 extern LPSTR debugstr_hex_dump (const void *ptr, int len);
 
diff --git a/misc/debugstr.c b/misc/debugstr.c
index 0a82fcc..c505e6c 100644
--- a/misc/debugstr.c
+++ b/misc/debugstr.c
@@ -6,6 +6,7 @@
 
 #include "debugstr.h"
 #include "debugtools.h"
+#include "wtypes.h"
 #include "xmalloc.h"
 
 /* ---------------------------------------------------------------------- */
@@ -152,6 +153,29 @@
 
 /* ---------------------------------------------------------------------- */
 
+LPSTR debugstr_guid( const GUID *id )
+{
+    LPSTR str;
+
+    if (!id) return "(null)";
+    if (!HIWORD(id))
+    {
+        str = gimme1(12);
+        sprintf( str, "<guid-0x%04x>", LOWORD(id) );
+    }
+    else
+    {
+        str = gimme1(40);
+        sprintf( str, "{%08lx-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x}",
+                 id->Data1, id->Data2, id->Data3,
+                 id->Data4[0], id->Data4[1], id->Data4[2], id->Data4[3],
+                 id->Data4[4], id->Data4[5], id->Data4[6], id->Data4[7] );
+    }
+    return str;
+}
+
+/* ---------------------------------------------------------------------- */
+
 void debug_dumpstr (LPCSTR s)
 {
   fputc ('"', stderr);
diff --git a/windows/dinput.c b/windows/dinput.c
index 0a5975e..696e533 100644
--- a/windows/dinput.c
+++ b/windows/dinput.c
@@ -293,10 +293,8 @@
 	LPUNKNOWN punk
 ) {
 	ICOM_THIS(IDirectInputAImpl,iface);
-	char	xbuf[50];
 	
-	WINE_StringFromCLSID(rguid,xbuf);
-	TRACE("(this=%p,%s,%p,%p)\n",This,xbuf,pdev,punk);
+	TRACE("(this=%p,%s,%p,%p)\n",This,debugstr_guid(rguid),pdev,punk);
 	if ((!memcmp(&GUID_SysKeyboard,rguid,sizeof(GUID_SysKeyboard))) ||          /* Generic Keyboard */
 	    (!memcmp(&DInput_Wine_Keyboard_GUID,rguid,sizeof(GUID_SysKeyboard)))) { /* Wine Keyboard */
                 SysKeyboardAImpl* newDevice;
@@ -340,10 +338,8 @@
 	LPDIRECTINPUTA iface,REFIID riid,LPVOID *ppobj
 ) {
 	ICOM_THIS(IDirectInputAImpl,iface);
-	char	xbuf[50];
 
-	WINE_StringFromCLSID(riid,xbuf);
-	TRACE("(this=%p,%s,%p)\n",This,xbuf,ppobj);
+	TRACE("(this=%p,%s,%p)\n",This,debugstr_guid(riid),ppobj);
 	if (!memcmp(&IID_IUnknown,riid,sizeof(*riid))) {
 		IDirectInputA_AddRef(iface);
 		*ppobj = This;
@@ -366,10 +362,8 @@
 static HRESULT WINAPI IDirectInputAImpl_GetDeviceStatus(LPDIRECTINPUTA iface,
 							REFGUID rguid) {
   ICOM_THIS(IDirectInputAImpl,iface);
-  char xbuf[50];
   
-  WINE_StringFromCLSID(rguid,xbuf);
-  FIXME("(%p)->(%s): stub\n",This,xbuf);
+  FIXME("(%p)->(%s): stub\n",This,debugstr_guid(rguid));
   
   return DI_OK;
 }
@@ -414,13 +408,7 @@
 	TRACE(dinput,"(df.dwNumObjs=%ld)\n",df->dwNumObjs);
 
 	for (i=0;i<df->dwNumObjs;i++) {
-		char	xbuf[50];
-
-		if (df->rgodf[i].pguid)
-			WINE_StringFromCLSID(df->rgodf[i].pguid,xbuf);
-		else
-			strcpy(xbuf,"<no guid>");
-		TRACE(dinput,"df.rgodf[%d].guid %s\n",i,xbuf);
+		TRACE(dinput,"df.rgodf[%d].guid %s\n",i,debugstr_guid(df->rgodf[i].pguid));
 		TRACE(dinput,"df.rgodf[%d].dwOfs %ld\n",i,df->rgodf[i].dwOfs);
 		TRACE(dinput,"dwType 0x%02lx,dwInstance %ld\n",DIDFT_GETTYPE(df->rgodf[i].dwType),DIDFT_GETINSTANCE(df->rgodf[i].dwType));
 		TRACE(dinput,"df.rgodf[%d].dwFlags 0x%08lx\n",i,df->rgodf[i].dwFlags);
@@ -462,13 +450,8 @@
 )
 {
 	ICOM_THIS(SysKeyboardAImpl,iface);
-	char			xbuf[50];
 
-	if (HIWORD(rguid))
-		WINE_StringFromCLSID(rguid,xbuf);
-	else
-		sprintf(xbuf,"<special guid %ld>",(DWORD)rguid);
-	TRACE("(this=%p,%s,%p)\n",This,xbuf,ph);
+	TRACE("(this=%p,%s,%p)\n",This,debugstr_guid(rguid),ph);
 	TRACE("(size=%ld,headersize=%ld,obj=%ld,how=%ld\n",
             ph->dwSize,ph->dwHeaderSize,ph->dwObj,ph->dwHow);
 	if (!HIWORD(rguid)) {
@@ -558,10 +541,8 @@
 )
 {
 	ICOM_THIS(IDirectInputDevice2AImpl,iface);
-	char	xbuf[50];
 
-	WINE_StringFromCLSID(riid,xbuf);
-	TRACE("(this=%p,%s,%p)\n",This,xbuf,ppobj);
+	TRACE("(this=%p,%s,%p)\n",This,debugstr_guid(riid),ppobj);
 	if (!memcmp(&IID_IUnknown,riid,sizeof(*riid))) {
 		IDirectInputDevice2_AddRef(iface);
 		*ppobj = This;
@@ -821,13 +802,8 @@
   TRACE("(df.dwNumObjs=%ld)\n",df->dwNumObjs);
 
   for (i=0;i<df->dwNumObjs;i++) {
-    char	xbuf[50];
-    
-    if (df->rgodf[i].pguid)
-      WINE_StringFromCLSID(df->rgodf[i].pguid,xbuf);
-    else
-      strcpy(xbuf,"<no guid>");
-    TRACE("df.rgodf[%d].guid %s (%p)\n",i,xbuf, df->rgodf[i].pguid);
+
+    TRACE("df.rgodf[%d].guid %s (%p)\n",i, debugstr_guid(df->rgodf[i].pguid), df->rgodf[i].pguid);
     TRACE("df.rgodf[%d].dwOfs %ld\n",i,df->rgodf[i].dwOfs);
     TRACE("dwType 0x%02x,dwInstance %d\n",DIDFT_GETTYPE(df->rgodf[i].dwType),DIDFT_GETINSTANCE(df->rgodf[i].dwType));
     TRACE("df.rgodf[%d].dwFlags 0x%08lx\n",i,df->rgodf[i].dwFlags);
@@ -1182,14 +1158,8 @@
 					    LPCDIPROPHEADER ph)
 {
   ICOM_THIS(SysMouseAImpl,iface);
-  char	xbuf[50];
 
-  if (HIWORD(rguid))
-    WINE_StringFromCLSID(rguid,xbuf);
-  else
-    sprintf(xbuf,"<special guid %ld>",(DWORD)rguid);
-
-  TRACE("(this=%p,%s,%p)\n",This,xbuf,ph);
+  TRACE("(this=%p,%s,%p)\n",This,debugstr_guid(rguid),ph);
   
   if (!HIWORD(rguid)) {
     switch ((DWORD)rguid) {
@@ -1205,7 +1175,7 @@
       break;
     }
     default:
-      FIXME("Unknown type %ld (%s)\n",(DWORD)rguid,xbuf);
+      FIXME("Unknown type %ld (%s)\n",(DWORD)rguid,debugstr_guid(rguid));
       break;
     }
   }
@@ -1262,13 +1232,7 @@
   TRACE("(df.dwNumObjs=%ld)\n",df->dwNumObjs);
 
   for (i=0;i<df->dwNumObjs;i++) {
-    char	xbuf[50];
-    
-    if (df->rgodf[i].pguid)
-      WINE_StringFromCLSID(df->rgodf[i].pguid,xbuf);
-    else
-      strcpy(xbuf,"<no guid>");
-    TRACE("df.rgodf[%d].guid %s (%p)\n",i,xbuf, df->rgodf[i].pguid);
+    TRACE("df.rgodf[%d].guid %s (%p)\n",i,debugstr_guid(df->rgodf[i].pguid), df->rgodf[i].pguid);
     TRACE("df.rgodf[%d].dwOfs %ld\n",i,df->rgodf[i].dwOfs);
     TRACE("dwType 0x%02x,dwInstance %d\n",DIDFT_GETTYPE(df->rgodf[i].dwType),DIDFT_GETINSTANCE(df->rgodf[i].dwType));
     TRACE("df.rgodf[%d].dwFlags 0x%08lx\n",i,df->rgodf[i].dwFlags);
@@ -1404,14 +1368,8 @@
 					    LPCDIPROPHEADER ph)
 {
   ICOM_THIS(JoystickAImpl,iface);
-  char	xbuf[50];
 
-  if (HIWORD(rguid))
-    WINE_StringFromCLSID(rguid,xbuf);
-  else
-    sprintf(xbuf,"<special guid %ld>",(DWORD)rguid);
-
-  FIXME("(this=%p,%s,%p)\n",This,xbuf,ph);
+  FIXME("(this=%p,%s,%p)\n",This,debugstr_guid(rguid),ph);
   FIXME("ph.dwSize = %ld, ph.dwHeaderSize =%ld, ph.dwObj = %ld, ph.dwHow= %ld\n",ph->dwSize, ph->dwHeaderSize,ph->dwObj,ph->dwHow);
   
   if (!HIWORD(rguid)) {
@@ -1438,7 +1396,7 @@
       break;
     }
     default:
-      FIXME("Unknown type %ld (%s)\n",(DWORD)rguid,xbuf);
+      FIXME("Unknown type %ld (%s)\n",(DWORD)rguid,debugstr_guid(rguid));
       break;
     }
   }
