diff --git a/sys/dshowvideosink/dshowvideosink.cpp b/sys/dshowvideosink/dshowvideosink.cpp
index bbde078..b452800 100644
--- a/sys/dshowvideosink/dshowvideosink.cpp
+++ b/sys/dshowvideosink/dshowvideosink.cpp
@@ -41,6 +41,7 @@ GST_DEBUG_CATEGORY (dshowvideosink_debug);
 
 static GstCaps * gst_directshow_media_type_to_caps (AM_MEDIA_TYPE *mediatype);
 static gboolean gst_caps_to_directshow_media_type (GstCaps *caps, AM_MEDIA_TYPE *mediatype);
+static void gst_dshowvideosink_set_window_for_renderer (GstDshowVideoSink *sink);
 
 /* TODO: Support RGB! */
 static GstStaticPadTemplate sink_template = GST_STATIC_PAD_TEMPLATE ("sink",
@@ -643,11 +644,20 @@ static void gst_dshowvideosink_set_window_id (GstXOverlay * overlay, ULONG windo
     return;
   }
 
-  /* TODO: What if we already have a window? What if we're already playing? */
   sink->window_id = videowindow;
+
+  /* Update window if we're already playing. */
+  if (sink->connected && sink->filter_media_event) {
+    HRESULT hres;
+
+    gst_dshowvideosink_set_window_for_renderer (sink);
+
+    hres = sink->filter_media_event->SetNotifyWindow ((OAHWND)sink->window_id, WM_GRAPH_NOTIFY, 0);
+    GST_DEBUG_OBJECT (sink, "SetNotifyWindow(%p) returned %x", sink->window_id, hres);
+  }
 }
 
-static void gst_dshowvideosink_set_window_for_renderer (GstDshowVideoSink *sink)
+void gst_dshowvideosink_set_window_for_renderer (GstDshowVideoSink *sink)
 {
   /* Application has requested a specific window ID */
   sink->prevWndProc = (WNDPROC) SetWindowLong (sink->window_id, GWL_WNDPROC, (LONG)WndProcHook);
