diff --git a/dlls/msacm/msacm32_main.c b/dlls/msacm/msacm32_main.c
index 6a9b834..274f9d5 100644
--- a/dlls/msacm/msacm32_main.c
+++ b/dlls/msacm/msacm32_main.c
@@ -20,6 +20,7 @@
 /**********************************************************************/
 	
 static DWORD MSACM_dwProcessesAttached = 0;
+HINSTANCE	MSACM_hInstance32 = 0;
 
 /***********************************************************************
  *           MSACM_LibMain (MSACM32.init) 
@@ -32,6 +33,7 @@
     case DLL_PROCESS_ATTACH:
 	if (MSACM_dwProcessesAttached == 0) {
 	    MSACM_hHeap = HeapCreate(0, 0x10000, 0);
+	    MSACM_hInstance32 = hInstDLL;
 	    MSACM_RegisterAllDrivers();
 	}
 	MSACM_dwProcessesAttached++;
@@ -42,6 +44,7 @@
 	    MSACM_UnregisterAllDrivers();
 	    HeapDestroy(MSACM_hHeap);
 	    MSACM_hHeap = (HANDLE) NULL;
+	    MSACM_hInstance32 = (HINSTANCE)NULL;
 	}
 	break;
     case DLL_THREAD_ATTACH:
@@ -87,14 +90,15 @@
 /***********************************************************************
  *           acmMetrics (MSACM32.36)
  */
-MMRESULT WINAPI acmMetrics(HACMOBJ hao, UINT uMetric, LPVOID  pMetric)
+MMRESULT WINAPI acmMetrics(HACMOBJ hao, UINT uMetric, LPVOID pMetric)
 {
-    PWINE_ACMOBJ 	pao = MSACM_GetObj(hao);
+    PWINE_ACMOBJ 	pao = MSACM_GetObj(hao, WINE_ACMOBJ_DONTCARE);
     BOOL 		bLocal = TRUE;
     PWINE_ACMDRIVERID	padid;
     DWORD		val = 0;
+    MMRESULT		mmr = MMSYSERR_NOERROR;
 
-    FIXME("(0x%08x, %d, %p): stub\n", hao, uMetric, pMetric);
+    TRACE("(0x%08x, %d, %p);\n", hao, uMetric, pMetric);
     
     switch (uMetric) {
     case ACM_METRIC_COUNT_DRIVERS:
@@ -107,7 +111,7 @@
 	    if (padid->bEnabled /* && (local(padid) || !bLocal) */)
 		val++;
 	*(LPDWORD)pMetric = val;
-	return 0;
+	break;
 
     case ACM_METRIC_COUNT_CODECS:
 	if (!pao)
@@ -120,7 +124,7 @@
 	    if (padid->bEnabled /* && (local(padid) || !bLocal) */)
 		val++;
 	*(LPDWORD)pMetric = val;
-	return 0;
+	break;
 
     case ACM_METRIC_COUNT_CONVERTERS:
 	bLocal = FALSE;
@@ -131,7 +135,7 @@
 	    if (padid->bEnabled /* && (local(padid) || !bLocal) */)
 		val++;
 	*(LPDWORD)pMetric = val;
-	return 0;
+	break;
 
     case ACM_METRIC_COUNT_FILTERS:
 	bLocal = FALSE;
@@ -142,7 +146,7 @@
 	    if (padid->bEnabled /* && (local(padid) || !bLocal) */)
 		val++;
 	*(LPDWORD)pMetric = val;
-	return 0;
+	break;
 
     case ACM_METRIC_COUNT_DISABLED:
 	bLocal = FALSE;
@@ -154,14 +158,33 @@
 	    if (!padid->bEnabled /* && (local(padid) || !bLocal) */)
 		val++;
 	*(LPDWORD)pMetric = val;
-	return 0;
+	break;
     
     case ACM_METRIC_MAX_SIZE_FORMAT:
-        /* FIXME: According to MSDN, this should return the size of the largest WAVEFORMATEX
-           structure in the system. How is this calculated? */
-        *(LPDWORD)pMetric = sizeof (WAVEFORMATEX);   
-        return 0;
-        
+	{
+	    ACMFORMATTAGDETAILSW	aftd;
+
+	    aftd.cbStruct = sizeof(aftd);
+	    aftd.dwFormatTag = WAVE_FORMAT_UNKNOWN;
+
+	    if (hao == (HACMOBJ)NULL) {
+		mmr = acmFormatTagDetailsW((HACMDRIVER)NULL, &aftd, ACM_FORMATTAGDETAILSF_LARGESTSIZE);
+	    } else if (MSACM_GetObj(hao, WINE_ACMOBJ_DRIVER)) {
+		mmr = acmFormatTagDetailsW((HACMDRIVER)hao, &aftd, ACM_FORMATTAGDETAILSF_LARGESTSIZE);
+	    } else if (MSACM_GetObj(hao, WINE_ACMOBJ_DRIVERID)) {
+		HACMDRIVER	had;
+		
+		if (acmDriverOpen(&had, (HACMDRIVERID)hao, 0) == 0) {
+		    mmr = acmFormatTagDetailsW((HACMDRIVER)hao, &aftd, ACM_FORMATTAGDETAILSF_LARGESTSIZE);
+		    acmDriverClose(had, 0);
+		}
+	    } else {
+		mmr = MMSYSERR_INVALHANDLE;
+	    }
+	    if (mmr == MMSYSERR_NOERROR) *(LPDWORD)pMetric = aftd.cbFormatSize;
+	}
+        break;
+
     case ACM_METRIC_COUNT_HARDWARE:
     case ACM_METRIC_HARDWARE_WAVE_INPUT:
     case ACM_METRIC_HARDWARE_WAVE_OUTPUT:
@@ -169,7 +192,8 @@
     case ACM_METRIC_DRIVER_SUPPORT:
     case ACM_METRIC_DRIVER_PRIORITY:
     default:
-	return MMSYSERR_NOTSUPPORTED;
+	FIXME("(0x%08x, %d, %p): stub\n", hao, uMetric, pMetric);
+	mmr = MMSYSERR_NOTSUPPORTED;
     }
-    return MMSYSERR_NOERROR;
+    return mmr;
 }
