updated for version 7.2-089
diff --git a/src/gui_w48.c b/src/gui_w48.c
index 4de0c76..76ed6b7 100644
--- a/src/gui_w48.c
+++ b/src/gui_w48.c
@@ -1663,8 +1663,17 @@
     if (msg.message == WM_OLE)
     {
 	char_u *str = (char_u *)msg.lParam;
-	add_to_input_buf(str, (int)STRLEN(str));
-	vim_free(str);
+	if (str == NULL || *str == NUL)
+	{
+	    /* Message can't be ours, forward it.  Fixes problem with Ultramon
+	     * 3.0.4 */
+	    DispatchMessage(&msg);
+	}
+	else
+	{
+	    add_to_input_buf(str, (int)STRLEN(str));
+	    vim_free(str);  /* was allocated in CVim::SendKeys() */
+	}
 	return;
     }
 #endif
diff --git a/src/if_ole.cpp b/src/if_ole.cpp
index b2057f9..fc3077d 100644
--- a/src/if_ole.cpp
+++ b/src/if_ole.cpp
@@ -353,9 +353,13 @@
     }
 
     /* Pass the string to the main input loop. The memory will be freed when
-     * the message is processed.
+     * the message is processed.  Except for an empty message, we don't need
+     * to post it then.
      */
-    PostMessage(NULL, WM_OLE, 0, (LPARAM)str);
+    if (*str == NUL)
+	vim_free(str);
+    else
+	PostMessage(NULL, WM_OLE, 0, (LPARAM)str);
 
     return S_OK;
 }
diff --git a/src/version.c b/src/version.c
index b04c881..ff771c9 100644
--- a/src/version.c
+++ b/src/version.c
@@ -677,6 +677,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    89,
+/**/
     88,
 /**/
     87,