diff --git a/dlls/msctf/documentmgr.c b/dlls/msctf/documentmgr.c
index fec3de3..2b03166 100644
--- a/dlls/msctf/documentmgr.c
+++ b/dlls/msctf/documentmgr.c
@@ -41,8 +41,8 @@
 WINE_DEFAULT_DEBUG_CHANNEL(msctf);
 
 typedef struct tagDocumentMgr {
-    const ITfDocumentMgrVtbl *DocumentMgrVtbl;
-    const ITfSourceVtbl *SourceVtbl;
+    ITfDocumentMgr ITfDocumentMgr_iface;
+    ITfSource ITfSource_iface;
     LONG refCount;
 
     /* Aggregation */
@@ -53,7 +53,7 @@
 } DocumentMgr;
 
 typedef struct tagEnumTfContext {
-    const IEnumTfContextsVtbl *Vtbl;
+    IEnumTfContexts IEnumTfContexts_iface;
     LONG refCount;
 
     DWORD   index;
@@ -62,9 +62,19 @@
 
 static HRESULT EnumTfContext_Constructor(DocumentMgr* mgr, IEnumTfContexts **ppOut);
 
-static inline DocumentMgr *impl_from_ITfSourceVtbl(ITfSource *iface)
+static inline DocumentMgr *impl_from_ITfDocumentMgr(ITfDocumentMgr *iface)
 {
-    return (DocumentMgr *)((char *)iface - FIELD_OFFSET(DocumentMgr,SourceVtbl));
+    return CONTAINING_RECORD(iface, DocumentMgr, ITfDocumentMgr_iface);
+}
+
+static inline DocumentMgr *impl_from_ITfSource(ITfSource *iface)
+{
+    return CONTAINING_RECORD(iface, DocumentMgr, ITfSource_iface);
+}
+
+static inline EnumTfContext *impl_from_IEnumTfContexts(IEnumTfContexts *iface)\
+{
+    return CONTAINING_RECORD(iface, EnumTfContext, IEnumTfContexts_iface);
 }
 
 static void DocumentMgr_Destructor(DocumentMgr *This)
@@ -73,7 +83,7 @@
     TRACE("destroying %p\n", This);
 
     TF_GetThreadMgr(&tm);
-    ThreadMgr_OnDocumentMgrDestruction(tm, (ITfDocumentMgr*)This);
+    ThreadMgr_OnDocumentMgrDestruction(tm, &This->ITfDocumentMgr_iface);
 
     if (This->contextStack[0])
         ITfContext_Release(This->contextStack[0]);
@@ -85,7 +95,7 @@
 
 static HRESULT WINAPI DocumentMgr_QueryInterface(ITfDocumentMgr *iface, REFIID iid, LPVOID *ppvOut)
 {
-    DocumentMgr *This = (DocumentMgr *)iface;
+    DocumentMgr *This = impl_from_ITfDocumentMgr(iface);
     *ppvOut = NULL;
 
     if (IsEqualIID(iid, &IID_IUnknown) || IsEqualIID(iid, &IID_ITfDocumentMgr))
@@ -94,7 +104,7 @@
     }
     else if (IsEqualIID(iid, &IID_ITfSource))
     {
-        *ppvOut = &This->SourceVtbl;
+        *ppvOut = &This->ITfSource_iface;
     }
     else if (IsEqualIID(iid, &IID_ITfCompartmentMgr))
     {
@@ -113,13 +123,13 @@
 
 static ULONG WINAPI DocumentMgr_AddRef(ITfDocumentMgr *iface)
 {
-    DocumentMgr *This = (DocumentMgr *)iface;
+    DocumentMgr *This = impl_from_ITfDocumentMgr(iface);
     return InterlockedIncrement(&This->refCount);
 }
 
 static ULONG WINAPI DocumentMgr_Release(ITfDocumentMgr *iface)
 {
-    DocumentMgr *This = (DocumentMgr *)iface;
+    DocumentMgr *This = impl_from_ITfDocumentMgr(iface);
     ULONG ret;
 
     ret = InterlockedDecrement(&This->refCount);
@@ -136,14 +146,14 @@
         DWORD dwFlags, IUnknown *punk, ITfContext **ppic,
         TfEditCookie *pecTextStore)
 {
-    DocumentMgr *This = (DocumentMgr *)iface;
+    DocumentMgr *This = impl_from_ITfDocumentMgr(iface);
     TRACE("(%p) 0x%x 0x%x %p %p %p\n",This,tidOwner,dwFlags,punk,ppic,pecTextStore);
     return Context_Constructor(tidOwner, punk, iface, ppic, pecTextStore);
 }
 
 static HRESULT WINAPI DocumentMgr_Push(ITfDocumentMgr *iface, ITfContext *pic)
 {
-    DocumentMgr *This = (DocumentMgr *)iface;
+    DocumentMgr *This = impl_from_ITfDocumentMgr(iface);
     ITfContext *check;
 
     TRACE("(%p) %p\n",This,pic);
@@ -168,7 +178,7 @@
 
 static HRESULT WINAPI DocumentMgr_Pop(ITfDocumentMgr *iface, DWORD dwFlags)
 {
-    DocumentMgr *This = (DocumentMgr *)iface;
+    DocumentMgr *This = impl_from_ITfDocumentMgr(iface);
     TRACE("(%p) 0x%x\n",This,dwFlags);
 
     if (dwFlags == TF_POPF_ALL)
@@ -210,7 +220,7 @@
 
 static HRESULT WINAPI DocumentMgr_GetTop(ITfDocumentMgr *iface, ITfContext **ppic)
 {
-    DocumentMgr *This = (DocumentMgr *)iface;
+    DocumentMgr *This = impl_from_ITfDocumentMgr(iface);
     TRACE("(%p)\n",This);
     if (!ppic)
         return E_INVALIDARG;
@@ -225,7 +235,7 @@
 
 static HRESULT WINAPI DocumentMgr_GetBase(ITfDocumentMgr *iface, ITfContext **ppic)
 {
-    DocumentMgr *This = (DocumentMgr *)iface;
+    DocumentMgr *This = impl_from_ITfDocumentMgr(iface);
     ITfContext *tgt;
 
     TRACE("(%p)\n",This);
@@ -247,7 +257,7 @@
 
 static HRESULT WINAPI DocumentMgr_EnumContexts(ITfDocumentMgr *iface, IEnumTfContexts **ppEnum)
 {
-    DocumentMgr *This = (DocumentMgr *)iface;
+    DocumentMgr *This = impl_from_ITfDocumentMgr(iface);
     TRACE("(%p) %p\n",This,ppEnum);
     return EnumTfContext_Constructor(This, ppEnum);
 }
@@ -269,20 +279,20 @@
 
 static HRESULT WINAPI Source_QueryInterface(ITfSource *iface, REFIID iid, LPVOID *ppvOut)
 {
-    DocumentMgr *This = impl_from_ITfSourceVtbl(iface);
-    return DocumentMgr_QueryInterface((ITfDocumentMgr*)This, iid, *ppvOut);
+    DocumentMgr *This = impl_from_ITfSource(iface);
+    return DocumentMgr_QueryInterface(&This->ITfDocumentMgr_iface, iid, *ppvOut);
 }
 
 static ULONG WINAPI Source_AddRef(ITfSource *iface)
 {
-    DocumentMgr *This = impl_from_ITfSourceVtbl(iface);
-    return DocumentMgr_AddRef((ITfDocumentMgr*)This);
+    DocumentMgr *This = impl_from_ITfSource(iface);
+    return DocumentMgr_AddRef(&This->ITfDocumentMgr_iface);
 }
 
 static ULONG WINAPI Source_Release(ITfSource *iface)
 {
-    DocumentMgr *This = impl_from_ITfSourceVtbl(iface);
-    return DocumentMgr_Release((ITfDocumentMgr*)This);
+    DocumentMgr *This = impl_from_ITfSource(iface);
+    return DocumentMgr_Release(&This->ITfDocumentMgr_iface);
 }
 
 /*****************************************************
@@ -291,14 +301,14 @@
 static HRESULT WINAPI DocumentMgrSource_AdviseSink(ITfSource *iface,
         REFIID riid, IUnknown *punk, DWORD *pdwCookie)
 {
-    DocumentMgr *This = impl_from_ITfSourceVtbl(iface);
+    DocumentMgr *This = impl_from_ITfSource(iface);
     FIXME("STUB:(%p)\n",This);
     return E_NOTIMPL;
 }
 
 static HRESULT WINAPI DocumentMgrSource_UnadviseSink(ITfSource *iface, DWORD pdwCookie)
 {
-    DocumentMgr *This = impl_from_ITfSourceVtbl(iface);
+    DocumentMgr *This = impl_from_ITfSource(iface);
     FIXME("STUB:(%p)\n",This);
     return E_NOTIMPL;
 }
@@ -321,15 +331,15 @@
     if (This == NULL)
         return E_OUTOFMEMORY;
 
-    This->DocumentMgrVtbl= &DocumentMgr_DocumentMgrVtbl;
-    This->SourceVtbl = &DocumentMgr_SourceVtbl;
+    This->ITfDocumentMgr_iface.lpVtbl = &DocumentMgr_DocumentMgrVtbl;
+    This->ITfSource_iface.lpVtbl = &DocumentMgr_SourceVtbl;
     This->refCount = 1;
     This->ThreadMgrSink = ThreadMgrSink;
 
     CompartmentMgr_Constructor((IUnknown*)This, &IID_IUnknown, (IUnknown**)&This->CompartmentMgr);
 
     TRACE("returning %p\n", This);
-    *ppOut = (ITfDocumentMgr*)This;
+    *ppOut = &This->ITfDocumentMgr_iface;
     return S_OK;
 }
 
@@ -344,7 +354,7 @@
 
 static HRESULT WINAPI EnumTfContext_QueryInterface(IEnumTfContexts *iface, REFIID iid, LPVOID *ppvOut)
 {
-    EnumTfContext *This = (EnumTfContext *)iface;
+    EnumTfContext *This = impl_from_IEnumTfContexts(iface);
     *ppvOut = NULL;
 
     if (IsEqualIID(iid, &IID_IUnknown) || IsEqualIID(iid, &IID_IEnumTfContexts))
@@ -364,13 +374,13 @@
 
 static ULONG WINAPI EnumTfContext_AddRef(IEnumTfContexts *iface)
 {
-    EnumTfContext *This = (EnumTfContext*)iface;
+    EnumTfContext *This = impl_from_IEnumTfContexts(iface);
     return InterlockedIncrement(&This->refCount);
 }
 
 static ULONG WINAPI EnumTfContext_Release(IEnumTfContexts *iface)
 {
-    EnumTfContext *This = (EnumTfContext *)iface;
+    EnumTfContext *This = impl_from_IEnumTfContexts(iface);
     ULONG ret;
 
     ret = InterlockedDecrement(&This->refCount);
@@ -382,7 +392,7 @@
 static HRESULT WINAPI EnumTfContext_Next(IEnumTfContexts *iface,
     ULONG ulCount, ITfContext **rgContext, ULONG *pcFetched)
 {
-    EnumTfContext *This = (EnumTfContext *)iface;
+    EnumTfContext *This = impl_from_IEnumTfContexts(iface);
     ULONG fetched = 0;
 
     TRACE("(%p)\n",This);
@@ -411,7 +421,7 @@
 
 static HRESULT WINAPI EnumTfContext_Skip( IEnumTfContexts* iface, ULONG celt)
 {
-    EnumTfContext *This = (EnumTfContext *)iface;
+    EnumTfContext *This = impl_from_IEnumTfContexts(iface);
     TRACE("(%p)\n",This);
     This->index += celt;
     return S_OK;
@@ -419,7 +429,7 @@
 
 static HRESULT WINAPI EnumTfContext_Reset( IEnumTfContexts* iface)
 {
-    EnumTfContext *This = (EnumTfContext *)iface;
+    EnumTfContext *This = impl_from_IEnumTfContexts(iface);
     TRACE("(%p)\n",This);
     This->index = 0;
     return S_OK;
@@ -428,7 +438,7 @@
 static HRESULT WINAPI EnumTfContext_Clone( IEnumTfContexts *iface,
     IEnumTfContexts **ppenum)
 {
-    EnumTfContext *This = (EnumTfContext *)iface;
+    EnumTfContext *This = impl_from_IEnumTfContexts(iface);
     HRESULT res;
 
     TRACE("(%p)\n",This);
@@ -438,7 +448,7 @@
     res = EnumTfContext_Constructor(This->docmgr, ppenum);
     if (SUCCEEDED(res))
     {
-        EnumTfContext *new_This = (EnumTfContext *)*ppenum;
+        EnumTfContext *new_This = impl_from_IEnumTfContexts(*ppenum);
         new_This->index = This->index;
     }
     return res;
@@ -463,11 +473,11 @@
     if (This == NULL)
         return E_OUTOFMEMORY;
 
-    This->Vtbl= &IEnumTfContexts_Vtbl;
+    This->IEnumTfContexts_iface.lpVtbl = &IEnumTfContexts_Vtbl;
     This->refCount = 1;
     This->docmgr = mgr;
 
     TRACE("returning %p\n", This);
-    *ppOut = (IEnumTfContexts*)This;
+    *ppOut = &This->IEnumTfContexts_iface;
     return S_OK;
 }
