diff --git a/dlls/avifil32/avifile.c b/dlls/avifil32/avifile.c
index 3349f07..653c51c 100644
--- a/dlls/avifil32/avifile.c
+++ b/dlls/avifil32/avifile.c
@@ -377,16 +377,16 @@
 	/* Only the szName at the end is different */
 	memcpy(&psiw,psi,sizeof(*psi)-sizeof(psi->szName));
 	lstrcpynAtoW(psiw.szName,psi->szName,sizeof(psi->szName));
-	return iface->lpvtbl->fnCreateStream(iface,ppavi,&psiw);
+	return IAVIFile_CreateStream(iface,ppavi,&psiw);
 }
 
 HRESULT WINAPI AVIFileCreateStreamW(IAVIFile*iface,PAVISTREAM*avis,AVISTREAMINFOW*asi) {
-	return iface->lpvtbl->fnCreateStream(iface,avis,asi);
+	return IAVIFile_CreateStream(iface,avis,asi);
 }
 
 
 HRESULT WINAPI AVIFileGetStream(IAVIFile*iface,PAVISTREAM*avis,DWORD fccType,LONG lParam) {
-	return iface->lpvtbl->fnGetStream(iface,avis,fccType,lParam);
+	return IAVIFile_GetStream(iface,avis,fccType,lParam);
 }
 
 HRESULT WINAPI AVIFileInfoA(PAVIFILE iface,LPAVIFILEINFOA afi,LONG size) {
@@ -395,7 +395,7 @@
 
 	if (size < sizeof(AVIFILEINFOA))
 		return AVIERR_BADSIZE;
-	hres = iface->lpvtbl->fnInfo(iface,&afiw,sizeof(afiw));
+	hres = IAVIFile_Info(iface,&afiw,sizeof(afiw));
 	memcpy(afi,&afiw,sizeof(*afi)-sizeof(afi->szFileType));
 	lstrcpynWtoA(afi->szFileType,afiw.szFileType,sizeof(afi->szFileType));
 	return hres;
@@ -403,7 +403,7 @@
 
 HRESULT WINAPI AVIStreamInfoW(PAVISTREAM iface,AVISTREAMINFOW *asi,LONG
  size) {
- 	return iface->lpvtbl->fnInfo(iface,asi,size);
+ 	return IAVIFile_Info(iface,asi,size);
 }
 
 HRESULT WINAPI AVIStreamInfoA(PAVISTREAM iface,AVISTREAMINFOA *asi,LONG
@@ -413,14 +413,14 @@
 
 	if (size<sizeof(AVISTREAMINFOA))
 		return AVIERR_BADSIZE;
- 	hres = iface->lpvtbl->fnInfo(iface,&asiw,sizeof(asiw));
+ 	hres = IAVIFile_Info(iface,&asiw,sizeof(asiw));
 	memcpy(asi,&asiw,sizeof(asiw)-sizeof(asiw.szName));
 	lstrcpynWtoA(asi->szName,asiw.szName,sizeof(asi->szName));
 	return hres;
 }
 
 HRESULT WINAPI AVIFileInfoW(PAVIFILE iface,LPAVIFILEINFOW afi,LONG size) {
-	return iface->lpvtbl->fnInfo(iface,afi,size);
+	return IAVIFile_Info(iface,afi,size);
 }
 
 HRESULT WINAPI AVIMakeCompressedStream(PAVISTREAM *ppsCompressed,PAVISTREAM ppsSource,AVICOMPRESSOPTIONS *aco,CLSID *pclsidHandler) {
@@ -435,7 +435,7 @@
 	FIXME_(avifile)("\tdwFlags: 0x%08lx\n",aco->dwFlags);
 
 	/* we just create a duplicate for now */
-	((IUnknown*)ppsSource)->lpvtbl->fnAddRef((IUnknown*)ppsSource);
+	IAVIStream_AddRef(ppsSource);
 	*ppsCompressed = ppsSource;
 	as = (IAVIStreamImpl*)ppsSource;
 
@@ -467,33 +467,33 @@
 }
 
 HRESULT WINAPI AVIStreamSetFormat(PAVISTREAM iface,LONG pos,LPVOID format,LONG formatsize) {
-	return iface->lpvtbl->fnSetFormat(iface,pos,format,formatsize);
+	return IAVIStream_SetFormat(iface,pos,format,formatsize);
 }
 
 HRESULT WINAPI AVIStreamReadFormat(PAVISTREAM iface,LONG pos,LPVOID format,LONG *formatsize) {
-	return iface->lpvtbl->fnReadFormat(iface,pos,format,formatsize);
+	return IAVIStream_ReadFormat(iface,pos,format,formatsize);
 }
 
 HRESULT WINAPI AVIStreamWrite(PAVISTREAM iface,LONG start,LONG samples,LPVOID buffer,LONG buffersize,DWORD flags,LONG *sampwritten,LONG *byteswritten) {
-	return iface->lpvtbl->fnWrite(iface,start,samples,buffer,buffersize,flags,sampwritten,byteswritten);
+	return IAVIStream_Write(iface,start,samples,buffer,buffersize,flags,sampwritten,byteswritten);
 }
 
 HRESULT WINAPI AVIStreamRead(PAVISTREAM iface,LONG start,LONG samples,LPVOID buffer,LONG buffersize,LONG *bytesread,LONG *samplesread) {
-	return iface->lpvtbl->fnRead(iface,start,samples,buffer,buffersize,bytesread,samplesread);
+	return IAVIStream_Read(iface,start,samples,buffer,buffersize,bytesread,samplesread);
 }
 
 HRESULT WINAPI AVIStreamWriteData(PAVISTREAM iface,DWORD fcc,LPVOID lp,LONG size) {
-	return iface->lpvtbl->fnWriteData(iface,fcc,lp,size);
+	return IAVIStream_WriteData(iface,fcc,lp,size);
 }
 
 HRESULT WINAPI AVIStreamReadData(PAVISTREAM iface,DWORD fcc,LPVOID lp,LONG *lpread) {
-	return iface->lpvtbl->fnReadData(iface,fcc,lp,lpread);
+	return IAVIStream_ReadData(iface,fcc,lp,lpread);
 }
 
 LONG WINAPI AVIStreamStart(PAVISTREAM iface) {
 	AVISTREAMINFOW	si;
 
-	iface->lpvtbl->fnInfo(iface,&si,sizeof(si));
+	IAVIStream_Info(iface,&si,sizeof(si));
 	return si.dwStart;
 }
 
@@ -501,14 +501,14 @@
 	AVISTREAMINFOW	si;
 	HRESULT			ret;
 
-	ret = iface->lpvtbl->fnInfo(iface,&si,sizeof(si));
+	ret = IAVIStream_Info(iface,&si,sizeof(si));
 	if (ret) /* error */
 		return 1;
 	return si.dwLength;
 }
 
 ULONG WINAPI AVIStreamRelease(PAVISTREAM iface) {
-	return ((LPUNKNOWN)iface)->lpvtbl->fnRelease((LPUNKNOWN)iface);
+	return IAVIStream_Release(iface);
 }
 
 PGETFRAME WINAPI AVIStreamGetFrameOpen(PAVISTREAM iface,LPBITMAPINFOHEADER bmi) {
@@ -517,16 +517,16 @@
 }
 
 LPVOID WINAPI AVIStreamGetFrame(PGETFRAME pg,LONG pos) {
-	return pg->lpvtbl->fnGetFrame(pg,pos);
+	return IGetFrame_GetFrame(pg,pos);
 }
 
 HRESULT WINAPI AVIStreamGetFrameClose(PGETFRAME pg) {
-	if (pg) ((LPUNKNOWN)pg)->lpvtbl->fnRelease((LPUNKNOWN)pg);
+	if (pg) IGetFrame_Release(pg);
 	return 0;
 }
 
 ULONG WINAPI AVIFileRelease(PAVIFILE iface) {
-	return ((LPUNKNOWN)iface)->lpvtbl->fnRelease((LPUNKNOWN)iface);
+	return IAVIFile_Release(iface);
 }
 
 void WINAPI AVIFileExit(void) {
diff --git a/dlls/dplayx/dplay.c b/dlls/dplayx/dplay.c
index 14ccc9a..ff3058e 100644
--- a/dlls/dplayx/dplay.c
+++ b/dlls/dplayx/dplay.c
@@ -50,7 +50,6 @@
 };
 
 
-
 /* Get a new interface. To be used by QueryInterface. */ 
 extern 
 HRESULT directPlay_QueryInterface 
@@ -72,7 +71,7 @@
     lpDP->lpvtbl = &directPlay2WVT;
 
     InitializeCriticalSection( &lpDP->DP_lock );
-    IDirectPlayX_AddRef( lpDP );
+    IDirectPlayX_AddRef( (IDirectPlay4*)lpDP );
 
     *ppvObj = lpDP;
 
@@ -92,7 +91,7 @@
 
     lpDP->lpvtbl = &directPlay2AVT;
     InitializeCriticalSection( &lpDP->DP_lock );
-    IDirectPlayX_AddRef( lpDP );
+    IDirectPlayX_AddRef( (IDirectPlay4*)lpDP );
 
     *ppvObj = lpDP;
 
@@ -112,7 +111,7 @@
 
     lpDP->lpvtbl = &directPlay3WVT;
     InitializeCriticalSection( &lpDP->DP_lock );
-    IDirectPlayX_AddRef( lpDP );
+    IDirectPlayX_AddRef( (IDirectPlay4*)lpDP );
 
     *ppvObj = lpDP;
 
@@ -132,7 +131,7 @@
 
     lpDP->lpvtbl = &directPlay3AVT;
     InitializeCriticalSection( &lpDP->DP_lock );
-    IDirectPlayX_AddRef( lpDP );
+    IDirectPlayX_AddRef( (IDirectPlay4*)lpDP );
 
     *ppvObj = lpDP;
 
@@ -152,7 +151,7 @@
 
     lpDP->lpvtbl = &directPlay4WVT;
     InitializeCriticalSection( &lpDP->DP_lock );
-    IDirectPlayX_AddRef( lpDP );
+    IDirectPlayX_AddRef( (IDirectPlay4*)lpDP );
 
     *ppvObj = lpDP;
 
@@ -172,7 +171,7 @@
 
     lpDP->lpvtbl = &directPlay4AVT;
     InitializeCriticalSection( &lpDP->DP_lock );
-    IDirectPlayX_AddRef( lpDP );
+    IDirectPlayX_AddRef( (IDirectPlay4*)lpDP );
 
     *ppvObj = lpDP;
 
diff --git a/dlls/dplayx/dplobby.c b/dlls/dplayx/dplobby.c
index d7c1a77..1eb994c 100644
--- a/dlls/dplayx/dplobby.c
+++ b/dlls/dplayx/dplobby.c
@@ -131,7 +131,7 @@
   {
     InitializeCriticalSection( &lpDPL->unk->DPL_lock );
 
-    IDirectPlayLobby_AddRef( lpDPL );
+    IDirectPlayLobby_AddRef( (IDirectPlayLobby*)lpDPL );
 
     return TRUE; 
   }
@@ -475,7 +475,7 @@
       IsEqualGUID( &IID_IDirectPlayLobby3A, riid )
     )
   {
-    IDirectPlayLobby_AddRef( This );
+    IDirectPlayLobby_AddRef( (IDirectPlayLobby*)This );
     *ppvObj = This;
     return S_OK;
   }
@@ -498,7 +498,7 @@
       IsEqualGUID( &IID_IDirectPlayLobby3, riid )
     )
   {
-    IDirectPlayLobby_AddRef( This );
+    IDirectPlayLobby_AddRef( (IDirectPlayLobby*)This );
     *ppvObj = This;
     return S_OK;
   }
diff --git a/dlls/oleaut32/typelib.c b/dlls/oleaut32/typelib.c
index 55b8d64..a040e4e 100644
--- a/dlls/oleaut32/typelib.c
+++ b/dlls/oleaut32/typelib.c
@@ -1230,7 +1230,7 @@
             IsEqualIID(riid,&IID_ITypeLib2))
         *ppvObject = This;
     if(*ppvObject){
-        (*(LPTYPELIB*)ppvObject)->lpvtbl->fnAddRef(This);
+        ITypeLib_AddRef(This);
         TRACE_(typelib)("-- Interface: (%p)->(%p)\n",ppvObject,*ppvObject);
         return S_OK;
     }
@@ -1626,7 +1626,7 @@
             IsEqualIID(riid,&IID_ITypeInfo2))
         *ppvObject = This;
     if(*ppvObject){
-        (*(LPTYPEINFO*)ppvObject)->lpvtbl->fnAddRef(iface);
+        ITypeInfo_AddRef(iface);
         TRACE_(typelib)("-- Interface: (%p)->(%p)\n",ppvObject,*ppvObject);
         return S_OK;
     }
@@ -1773,9 +1773,9 @@
                 result=This->lpvtbl->fnGetRefTypeInfo(iface, 
                         This->impltypelist->reference, &pTInfo);
                 if(SUCCEEDED(result)){
-                    result=pTInfo->lpvtbl->fnGetNames(pTInfo, memid, rgBstrNames,
+                    result=ITypeInfo_GetNames(pTInfo, memid, rgBstrNames,
                             cMaxNames, pcNames);
-                    pTInfo->lpvtbl->fnRelease(pTInfo);
+                    ITypeInfo_Release(pTInfo);
                     return result;
                 }
                 WARN_(typelib)("Could not search inherited interface!\n");
@@ -1882,11 +1882,11 @@
             This->TypeAttr.cImplTypes ){
         /* recursive search */
         ITypeInfo *pTInfo;
-        ret=This->lpvtbl->fnGetRefTypeInfo(iface, 
+        ret=ITypeInfo_GetRefTypeInfo(iface, 
                 This->impltypelist->reference, &pTInfo);
         if(SUCCEEDED(ret)){
-            ret=pTInfo->lpvtbl->fnGetIDsOfNames(pTInfo, rgszNames, cNames, pMemId );
-            pTInfo->lpvtbl->fnRelease(pTInfo);
+            ret=ITypeInfo_GetIDsOfNames(pTInfo, rgszNames, cNames, pMemId );
+            ITypeInfo_Release(pTInfo);
             return ret;
         }
         WARN_(typelib)("Could not search inherited interface!\n");
@@ -1977,10 +1977,10 @@
         result=This->lpvtbl->fnGetContainingTypeLib(iface, &pTLib, 
                 &Index);
         if(SUCCEEDED(result)){
-            result=pTLib->lpvtbl->fnGetTypeInfo(pTLib,
+            result=ITypeLib_GetTypeInfo(pTLib,
                     HREFTYPE_INDEX(hRefType),
                     ppTInfo);
-            pTLib->lpvtbl->fnRelease(pTLib );
+            ITypeLib_Release(pTLib );
         }
     } else{
         /* imported type lib */
@@ -1993,7 +1993,7 @@
             return TYPE_E_ELEMENTNOTFOUND; /* FIXME : correct? */
         pTypeLib=pRefType->pImpTLInfo->pImpTypeLib;
         if(pTypeLib) /* typelib already loaded */
-            result=pTypeLib->lpvtbl->fnGetTypeInfoOfGuid(
+            result=ITypeLib_GetTypeInfoOfGuid(
                     (LPTYPELIB)pTypeLib, &pRefType->guid, ppTInfo);
         else{
             result=LoadRegTypeLib( &pRefType->pImpTLInfo->guid,
@@ -2005,7 +2005,7 @@
                 SysFreeString(libnam);
             }
             if(SUCCEEDED(result)){
-                result=pTypeLib->lpvtbl->fnGetTypeInfoOfGuid(
+                result=ITypeLib_GetTypeInfoOfGuid(
                         (LPTYPELIB)pTypeLib, &pRefType->guid, ppTInfo);
                 pRefType->pImpTLInfo->pImpTypeLib=pTypeLib;
            }
@@ -2065,7 +2065,7 @@
 	ICOM_THIS( TLBTypeInfo, iface);
     *ppTLib=(LPTYPELIB )(This->pTypeLib);
     *pIndex=This->index;
-    (*ppTLib)->lpvtbl->fnAddRef(*ppTLib);
+    ITypeLib_AddRef(*ppTLib);
     TRACE_(typelib)("(%p) returns (%p) index %d!\n", This, *ppTLib, *pIndex);
     return S_OK;
 }
diff --git a/dlls/shell32/brsfolder.c b/dlls/shell32/brsfolder.c
index 422f5b8..de3d5ad 100644
--- a/dlls/shell32/brsfolder.c
+++ b/dlls/shell32/brsfolder.c
@@ -168,7 +168,7 @@
 	SetCursor(LoadCursorA(0, IDC_ARROWA));
 
 	if (lpe)
-	  lpe->lpvtbl->fnRelease(lpe);
+	  IEnumIDList_Release(lpe);
 	if (pidlTemp )
 	  SHFree(pidlTemp);
 }
diff --git a/dlls/shell32/shellord.c b/dlls/shell32/shellord.c
index c7a27b3..30eba9a 100644
--- a/dlls/shell32/shellord.c
+++ b/dlls/shell32/shellord.c
@@ -844,7 +844,7 @@
 	if (!SHELL32_IExplorerInterface)
 	  return E_FAIL;
 
-	SHELL32_IExplorerInterface->lpvtbl->fnAddRef(SHELL32_IExplorerInterface);
+	IUnknown_AddRef(SHELL32_IExplorerInterface);
 	return NOERROR;
 }
 /*************************************************************************
