diff --git a/dlls/mshtml/navigate.c b/dlls/mshtml/navigate.c
index dc707269484..514f2bd2b68 100644
--- a/dlls/mshtml/navigate.c
+++ b/dlls/mshtml/navigate.c
@@ -491,3 +491,28 @@ void hlink_frame_navigate(HTMLDocument *doc, IHlinkFrame *hlink_frame,
IMoniker_Release(mon);
}
+
+HRESULT start_binding(BSCallback *bscallback, IMoniker *mon)
+{
+ IStream *str = NULL;
+ IBindCtx *bctx;
+ HRESULT hres;
+
+ hres = CreateAsyncBindCtx(0, STATUSCLB(bscallback), NULL, &bctx);
+ if(FAILED(hres)) {
+ WARN("CreateAsyncBindCtx failed: %08lx\n", hres);
+ return hres;
+ }
+
+ hres = IMoniker_BindToStorage(mon, bctx, NULL, &IID_IStream, (void**)&str);
+ IBindCtx_Release(bctx);
+ if(FAILED(hres)) {
+ WARN("BindToStorage failed: %08lx\n", hres);
+ return hres;
+ }
+
+ if(str)
+ IStream_Release(str);
+
+ return S_OK;
+}
diff --git a/dlls/mshtml/persist.c b/dlls/mshtml/persist.c
index 55462ad61b8..71270914689 100644
--- a/dlls/mshtml/persist.c
+++ b/dlls/mshtml/persist.c
@@ -228,7 +228,12 @@ static HRESULT WINAPI PersistMoniker_Load(IPersistMoniker *iface, BOOL fFullyAva
if(post_data_stream)
nsIInputStream_Release(post_data_stream);
+ if(!bscallback->nschannel)
+ ERR("bscallback->nschannel == NULL\n");
+
if(NS_SUCCEEDED(nsres)) {
+ /* FIXME: don't return here (URL Moniker needs to be good enough) */
+
IBindStatusCallback_Release(STATUSCLB(bscallback));
CoTaskMemFree(url);
return S_OK;
@@ -244,10 +249,12 @@ static HRESULT WINAPI PersistMoniker_Load(IPersistMoniker *iface, BOOL fFullyAva
if(pibc)
FIXME("not supported pibc\n");
+ hres = start_binding(bscallback, pimkName);
+
IBindStatusCallback_Release(STATUSCLB(bscallback));
CoTaskMemFree(url);
- return S_OK;
+ return hres;
}
static HRESULT WINAPI PersistMoniker_Save(IPersistMoniker *iface, IMoniker *pimkName,