diff --git a/dlls/msctf/documentmgr.c b/dlls/msctf/documentmgr.c
index 9551999..c875145 100644
--- a/dlls/msctf/documentmgr.c
+++ b/dlls/msctf/documentmgr.c
@@ -42,11 +42,17 @@
 
 typedef struct tagDocumentMgr {
     const ITfDocumentMgrVtbl *DocumentMgrVtbl;
+    const ITfSourceVtbl *SourceVtbl;
     LONG refCount;
 
     ITfContext*  contextStack[2]; /* limit of 2 contexts */
 } DocumentMgr;
 
+static inline DocumentMgr *impl_from_ITfSourceVtbl(ITfSource *iface)
+{
+    return (DocumentMgr *)((char *)iface - FIELD_OFFSET(DocumentMgr,SourceVtbl));
+}
+
 static void DocumentMgr_Destructor(DocumentMgr *This)
 {
     TRACE("destroying %p\n", This);
@@ -66,6 +72,10 @@
     {
         *ppvOut = This;
     }
+    else if (IsEqualIID(iid, &IID_ITfSource))
+    {
+        *ppvOut = &This->SourceVtbl;
+    }
 
     if (*ppvOut)
     {
@@ -205,6 +215,53 @@
     DocumentMgr_EnumContexts
 };
 
+
+static HRESULT WINAPI Source_QueryInterface(ITfSource *iface, REFIID iid, LPVOID *ppvOut)
+{
+    DocumentMgr *This = impl_from_ITfSourceVtbl(iface);
+    return DocumentMgr_QueryInterface((ITfDocumentMgr*)This, iid, *ppvOut);
+}
+
+static ULONG WINAPI Source_AddRef(ITfSource *iface)
+{
+    DocumentMgr *This = impl_from_ITfSourceVtbl(iface);
+    return DocumentMgr_AddRef((ITfDocumentMgr*)This);
+}
+
+static ULONG WINAPI Source_Release(ITfSource *iface)
+{
+    DocumentMgr *This = impl_from_ITfSourceVtbl(iface);
+    return DocumentMgr_Release((ITfDocumentMgr*)This);
+}
+
+/*****************************************************
+ * ITfSource functions
+ *****************************************************/
+static WINAPI HRESULT DocumentMgrSource_AdviseSink(ITfSource *iface,
+        REFIID riid, IUnknown *punk, DWORD *pdwCookie)
+{
+    DocumentMgr *This = impl_from_ITfSourceVtbl(iface);
+    FIXME("STUB:(%p)\n",This);
+    return E_NOTIMPL;
+}
+
+static WINAPI HRESULT DocumentMgrSource_UnadviseSink(ITfSource *iface, DWORD pdwCookie)
+{
+    DocumentMgr *This = impl_from_ITfSourceVtbl(iface);
+    FIXME("STUB:(%p)\n",This);
+    return E_NOTIMPL;
+}
+
+static const ITfSourceVtbl DocumentMgr_SourceVtbl =
+{
+    Source_QueryInterface,
+    Source_AddRef,
+    Source_Release,
+
+    DocumentMgrSource_AdviseSink,
+    DocumentMgrSource_UnadviseSink,
+};
+
 HRESULT DocumentMgr_Constructor(ITfDocumentMgr **ppOut)
 {
     DocumentMgr *This;
@@ -214,6 +271,7 @@
         return E_OUTOFMEMORY;
 
     This->DocumentMgrVtbl= &DocumentMgr_DocumentMgrVtbl;
+    This->SourceVtbl = &DocumentMgr_SourceVtbl;
     This->refCount = 1;
 
     TRACE("returning %p\n", This);
