diff --git a/src/channel.c b/src/channel.c
index c59758d..0d46c58 100644
--- a/src/channel.c
+++ b/src/channel.c
@@ -52,10 +52,6 @@
 # define fd_close(sd) close(sd)
 #endif
 
-#ifdef FEAT_GUI_W32
-extern HWND s_hwnd;			/* Gvim's Window handle */
-#endif
-
 #ifdef WIN32
     static int
 fd_read(sock_T fd, char *buf, size_t len)
@@ -296,9 +292,6 @@
 #ifdef FEAT_GUI_GTK
 	channel->ch_part[part].ch_inputHandler = 0;
 #endif
-#ifdef FEAT_GUI_W32
-	channel->ch_part[part].ch_inputHandler = -1;
-#endif
 	channel->ch_part[part].ch_timeout = 2000;
     }
 
@@ -421,15 +414,6 @@
 		messageFromNetbeans,
 		(gpointer)(long)channel->ch_part[part].ch_fd);
 #   endif
-#  else
-#   ifdef FEAT_GUI_W32
-    /* Tell Windows we are interested in receiving message when there
-     * is input on the editor connection socket.  */
-    if (channel->ch_part[part].ch_inputHandler == -1)
-	channel->ch_part[part].ch_inputHandler = WSAAsyncSelect(
-		channel->ch_part[part].ch_fd,
-		s_hwnd, WM_NETBEANS, FD_READ);
-#   endif
 #  endif
 # endif
 }
@@ -491,14 +475,6 @@
 #   endif
 	    channel->ch_part[part].ch_inputHandler = 0;
 	}
-#  else
-#   ifdef FEAT_GUI_W32
-	if (channel->ch_part[part].ch_inputHandler == 0)
-	{
-	    WSAAsyncSelect(channel->ch_part[part].ch_fd, s_hwnd, 0, 0);
-	    channel->ch_part[part].ch_inputHandler = -1;
-	}
-#   endif
 #  endif
 # endif
     }
@@ -1630,7 +1606,6 @@
 /*
  * Check for reading from "fd" with "timeout" msec.
  * Return FAIL when there is nothing to read.
- * Always returns OK for FEAT_GUI_W32.
  */
     static int
 channel_wait(channel_T *channel, sock_T fd, int timeout)
@@ -1662,12 +1637,7 @@
     else
 #endif
     {
-#if defined(FEAT_GUI_W32)
-	/* Can't check socket for Win32 GUI, always return OK. */
-	ch_log(channel, "Can't check, assuming there is something to read");
-	return OK;
-#else
-# if defined(HAVE_SELECT)
+#if defined(HAVE_SELECT)
 	struct timeval	tval;
 	fd_set		rfds;
 	int			ret;
@@ -1679,23 +1649,22 @@
 	for (;;)
 	{
 	    ret = select((int)fd + 1, &rfds, NULL, NULL, &tval);
-#  ifdef EINTR
+# ifdef EINTR
 	    SOCK_ERRNO;
 	    if (ret == -1 && errno == EINTR)
 		continue;
-#  endif
+# endif
 	    if (ret > 0)
 		return OK;
 	    break;
 	}
-# else
+#else
 	struct pollfd	fds;
 
 	fds.fd = fd;
 	fds.events = POLLIN;
 	if (poll(&fds, 1, timeout) > 0)
 	    return OK;
-# endif
 #endif
     }
     ch_log(channel, "Nothing to read");
@@ -1764,16 +1733,6 @@
 	if (len < MAXMSGSIZE)
 	    break;	/* did read everything that's available */
     }
-#ifdef FEAT_GUI_W32
-    if (use_socket && len == SOCKET_ERROR)
-    {
-	/* For Win32 GUI channel_wait() always returns OK and we handle the
-	 * situation that there is nothing to read here.
-	 * TODO: how about a timeout? */
-	if (WSAGetLastError() == WSAEWOULDBLOCK)
-	    return;
-    }
-#endif
 
     /* Reading a disconnection (readlen == 0), or an error.
      * TODO: call error callback. */
@@ -1970,17 +1929,12 @@
 
     for (channel = first_channel; channel != NULL; channel = channel->ch_next)
     {
-#  ifdef FEAT_GUI_W32
-	/* only check the pipes */
-	for (part = PART_OUT; part <= PART_ERR; ++part)
-#  else
-#   ifdef CHANNEL_PIPES
+#  ifdef CHANNEL_PIPES
 	/* check the socket and pipes */
 	for (part = PART_SOCK; part <= PART_ERR; ++part)
-#   else
+#  else
 	/* only check the socket */
 	part = PART_SOCK;
-#   endif
 #  endif
 	{
 	    fd = channel->ch_part[part].ch_fd;
diff --git a/src/gui_w32.c b/src/gui_w32.c
index 3a64691..edfe24e 100644
--- a/src/gui_w32.c
+++ b/src/gui_w32.c
@@ -1927,24 +1927,6 @@
     }
 #endif
 
-#ifdef FEAT_CHANNEL
-    if (msg.message == WM_NETBEANS)
-    {
-	int	    part;
-	channel_T   *channel = channel_fd2channel((sock_T)msg.wParam, &part);
-
-	if (channel != NULL)
-	{
-	    /* Disable error messages, they can mess up the display and throw
-	     * an exception. */
-	    ++emsg_off;
-	    channel_read(channel, part, "process_message");
-	    --emsg_off;
-	}
-	return;
-    }
-#endif
-
 #ifdef FEAT_SNIFF
     if (sniff_request_waiting && want_sniff_request)
     {
@@ -2245,7 +2227,18 @@
 	}
 
 #ifdef MESSAGE_QUEUE
-	parse_queued_messages();
+	/* Check channel while waiting message. */
+	for (;;)
+	{
+	    MSG msg;
+
+	    parse_queued_messages();
+
+	    if (pPeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE)
+		|| MsgWaitForMultipleObjects(0, NULL, FALSE, 100, QS_ALLEVENTS)
+								!= WAIT_TIMEOUT)
+		break;
+	}
 #endif
 
 	/*
diff --git a/src/os_win32.c b/src/os_win32.c
index 0470450..e93e6d0 100644
--- a/src/os_win32.c
+++ b/src/os_win32.c
@@ -1492,6 +1492,11 @@
 	{
 	    DWORD dwWaitTime = dwEndTime - dwNow;
 
+#ifdef FEAT_CHANNEL
+	    /* Check channel while waiting input. */
+	    if (dwWaitTime > 100)
+		dwWaitTime = 100;
+#endif
 #ifdef FEAT_MZSCHEME
 	    if (mzthreads_allowed() && p_mzq > 0
 				    && (msec < 0 || (long)dwWaitTime > p_mzq))
diff --git a/src/structs.h b/src/structs.h
index 95b33c3..5f70c73 100644
--- a/src/structs.h
+++ b/src/structs.h
@@ -1336,9 +1336,6 @@
 #ifdef FEAT_GUI_GTK
     gint	ch_inputHandler; /* Cookie for input */
 #endif
-#ifdef WIN32
-    int		ch_inputHandler; /* ret.value of WSAAsyncSelect() */
-#endif
 
     ch_mode_T	ch_mode;
     int		ch_timeout;	/* request timeout in msec */
diff --git a/src/testdir/test_channel.vim b/src/testdir/test_channel.vim
index 2e74e9f..69922b1 100644
--- a/src/testdir/test_channel.vim
+++ b/src/testdir/test_channel.vim
@@ -131,10 +131,10 @@
     call assert_false(1, 's:responseHandle was not set')
   else
     call assert_equal(handle, s:responseHandle)
+    unlet s:responseHandle
   endif
   call assert_equal('got it', s:responseMsg)
 
-  unlet s:responseHandle
   let s:responseMsg = ''
   call ch_sendexpr(handle, 'hello!', {'callback': function('s:RequestHandler')})
   sleep 10m
@@ -142,6 +142,7 @@
     call assert_false(1, 's:responseHandle was not set')
   else
     call assert_equal(handle, s:responseHandle)
+    unlet s:responseHandle
   endif
   call assert_equal('got it', s:responseMsg)
 
@@ -186,15 +187,12 @@
   call assert_equal('ok', ch_sendexpr(handle, 'empty-request'))
 
   " Reading while there is nothing available.
-  " TODO: make this work for MS-Windows
-  if has('unix')
-    call assert_equal(v:none, ch_read(handle, {'timeout': 0}))
-    let start = reltime()
-    call assert_equal(v:none, ch_read(handle, {'timeout': 333}))
-    let elapsed = reltime(start)
-    call assert_true(reltimefloat(elapsed) > 0.3)
-    call assert_true(reltimefloat(elapsed) < 0.6)
-  endif
+  call assert_equal(v:none, ch_read(handle, {'timeout': 0}))
+  let start = reltime()
+  call assert_equal(v:none, ch_read(handle, {'timeout': 333}))
+  let elapsed = reltime(start)
+  call assert_true(reltimefloat(elapsed) > 0.3)
+  call assert_true(reltimefloat(elapsed) < 0.6)
 
   " Send without waiting for a response, then wait for a response.
   call ch_sendexpr(handle, 'wait a bit',  {'callback': 0})
diff --git a/src/version.c b/src/version.c
index e5ba658..de06135 100644
--- a/src/version.c
+++ b/src/version.c
@@ -749,6 +749,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    1404,
+/**/
     1403,
 /**/
     1402,
diff --git a/src/vim.h b/src/vim.h
index 4156671..fc693b3 100644
--- a/src/vim.h
+++ b/src/vim.h
@@ -1897,10 +1897,6 @@
 #  ifdef FEAT_OLE
 #   define WM_OLE (WM_APP+0)
 #  endif
-#  ifdef FEAT_CHANNEL
-    /* message for channel socket event */
-#   define WM_NETBEANS (WM_APP+1)
-#  endif
 # endif
 
 /* Info about selected text */
