diff -up xserver/configure.ac.vnc xserver/configure.ac
--- xserver/configure.ac.vnc	2011-05-11 11:02:51.229669941 +0200
+++ xserver/configure.ac	2011-05-11 11:03:07.754072695 +0200
@@ -31,7 +31,7 @@ RELEASE_DATE="5 November 2008"
 REMEMBER_REMEMBER="The Fifth of November"
 AC_CONFIG_SRCDIR([Makefile.am])
 AM_INIT_AUTOMAKE([dist-bzip2 foreign])
-AM_MAINTAINER_MODE
+m4_pattern_allow([AC_DEFINE])
 
 dnl this gets generated by autoheader, and thus contains all the defines.  we
 dnl don't ever actually use it, internally.
@@ -54,6 +54,7 @@ dnl kdrive-config.h covers the kdrive DD
 AC_CONFIG_HEADERS(include/kdrive-config.h)
 
 AC_PROG_CC
+AC_PROG_CXX
 AM_PROG_AS
 AC_PROG_INSTALL
 AC_PROG_LN_S
@@ -1010,7 +1011,7 @@ AC_DEFINE(SHAPE, 1, [Support SHAPE exten
 
 AC_DEFINE(XKB, 1, [Build XKB])
 AC_DEFINE(XKB_IN_SERVER, 1, [Build XKB server])
-AC_DEFINE(XKB_DFLT_DISABLED, 0, [Disable XKB per default])
+AC_DEFINE(XKB_DFLT_DISABLED, 1, [Disable XKB per default])
 REQUIRED_MODULES="$REQUIRED_MODULES xkbfile"
 XKB_LIB='$(top_builddir)/xkb/libxkb.la'
 XKB_STUB_LIB='$(top_builddir)/xkb/libxkbstubs.la'
@@ -1220,6 +1221,9 @@ if test "x$XVFB" = xyes; then
 	AC_SUBST([XVFB_SYS_LIBS])
 fi
 
+dnl Xvnc DDX
+AC_SUBST([XVNC_CPPFLAGS], ["-DHAVE_DIX_CONFIG_H $XEXT_INC $FB_INC $MI_INC $RENDER_INC $RANDR_INC"])
+AC_SUBST([XVNC_LIBS], ["$FB_LIB $FIXES_LIB $XEXT_LIB $CONFIG_LIB $DBE_LIB $XTRAP_LIB $RECORD_LIB $GLX_LIBS $RENDER_LIB $RANDR_LIB $DAMAGE_LIB $MIEXT_DAMAGE_LIB $MIEXT_SHADOW_LIB $XI_LIB $XKB_LIB $XKB_STUB_LIB $COMPOSITE_LIB $XPSTUBS_LIB"])
 
 dnl Xnest DDX
 
@@ -1314,6 +1318,8 @@ xorg_bus_ppcpci=no
 xorg_bus_sparcpci=no
 xorg_bus_sparc=no
 
+AC_DEFINE_UNQUOTED(XORG_VERSION_CURRENT, [$VENDOR_RELEASE], [Current Xorg version])
+
 if test "x$XORG" = xyes -o "x$XGL" = xyes; then
 	XORG_DDXINCS='-I$(top_srcdir)/hw/xfree86 -I$(top_srcdir)/hw/xfree86/include -I$(top_srcdir)/hw/xfree86/common'
 	XORG_OSINCS='-I$(top_srcdir)/hw/xfree86/os-support -I$(top_srcdir)/hw/xfree86/os-support/bus -I$(top_srcdir)/os'
@@ -1521,7 +1527,6 @@ if test "x$XORG" = xyes -o "x$XGL" = xye
 	AC_DEFINE(XORGSERVER, 1, [Building Xorg server])
 	AC_DEFINE(XFree86Server, 1, [Building XFree86 server])
 	AC_DEFINE(XFree86LOADER, 1, [Building loadable XFree86 server])
-	AC_DEFINE_UNQUOTED(XORG_VERSION_CURRENT, [$VENDOR_RELEASE], [Current Xorg version])
 	AC_DEFINE(NEED_XF86_TYPES, 1, [Need XFree86 typedefs])
 	AC_DEFINE(NEED_XF86_PROTOTYPES, 1, [Need XFree86 helper functions])
 	AC_DEFINE(__XSERVERNAME__, "Xorg", [Name of X server])
@@ -2184,6 +2189,7 @@ hw/dmx/input/Makefile
 hw/dmx/glxProxy/Makefile
 hw/dmx/Makefile
 hw/vfb/Makefile
+hw/vnc/Makefile
 hw/xgl/Makefile
 hw/xgl/egl/Makefile
 hw/xgl/egl/module/Makefile
diff -up xserver/hw/Makefile.am.vnc xserver/hw/Makefile.am
--- xserver/hw/Makefile.am.vnc	2011-05-11 11:02:51.809648976 +0200
+++ xserver/hw/Makefile.am	2011-05-11 11:03:07.754072695 +0200
@@ -43,7 +43,8 @@ SUBDIRS =			\
 	$(DMX_SUBDIRS)		\
 	$(KDRIVE_SUBDIRS)	\
 	$(XQUARTZ_SUBDIRS)	\
-	$(XPRINT_SUBDIRS)
+	$(XPRINT_SUBDIRS)	\
+	vnc
 
 DIST_SUBDIRS = dmx xfree86 vfb xnest xwin xquartz kdrive xgl xprint
 
diff -up xserver/mi/miinitext.c.vnc xserver/mi/miinitext.c
--- xserver/mi/miinitext.c.vnc	2011-05-11 11:02:53.156600294 +0200
+++ xserver/mi/miinitext.c	2011-05-11 11:03:31.079229673 +0200
@@ -292,6 +292,9 @@ extern void BigReqExtensionInit(INITARGS
 #ifdef MITMISC
 extern void MITMiscExtensionInit(INITARGS);
 #endif
+#ifdef TIGERVNC
+extern void vncExtensionInit(INITARGS);
+#endif
 #ifdef XIDLE
 extern void XIdleExtensionInit(INITARGS);
 #endif
@@ -566,6 +569,9 @@ InitExtensions(argc, argv)
 #ifdef MITMISC
     if (!noMITMiscExtension) MITMiscExtensionInit();
 #endif
+#ifdef TIGERVNC
+    vncExtensionInit();
+#endif
 #ifdef XIDLE
     if (!noXIdleExtension) XIdleExtensionInit();
 #endif
--- xserver/os/WaitFor.c.orig	2011-10-07 12:57:57.000000000 +0200
+++ xserver/os/WaitFor.c	2011-10-07 13:21:11.000000000 +0200
@@ -125,6 +125,9 @@
 static void CheckAllTimers(void);
 static OsTimerPtr timers = NULL;
 
+extern void vncWriteBlockHandler(fd_set *fds);
+extern void vncWriteWakeupHandler(int nfds, fd_set *fds);
+
 /*****************
  * WaitForSomething:
  *     Make the server suspend until there is
@@ -150,6 +153,7 @@
     INT32 timeout = 0;
     fd_set clientsReadable;
     fd_set clientsWritable;
+    fd_set socketsWritable;
     int curclient;
     int selecterr;
     int nready;
@@ -220,23 +224,29 @@
 	SmartScheduleStopTimer ();
 
 #endif
+	FD_ZERO(&socketsWritable);
+	vncWriteBlockHandler(&socketsWritable);
 	BlockHandler((pointer)&wt, (pointer)&LastSelectMask);
 	if (NewOutputPending)
 	    FlushAllOutput();
 	/* keep this check close to select() call to minimize race */
 	if (dispatchException)
 	    i = -1;
-	else if (AnyClientsWriteBlocked)
-	{
-	    XFD_COPYSET(&ClientsWriteBlocked, &clientsWritable);
-	    i = Select (MaxClients, &LastSelectMask, &clientsWritable, NULL, wt);
-	}
-	else 
-	{
-	    i = Select (MaxClients, &LastSelectMask, NULL, NULL, wt);
+	else {
+	    if (AnyClientsWriteBlocked)
+		XFD_ORSET(&socketsWritable, &ClientsWriteBlocked, &socketsWritable);
+
+	    if (XFD_ANYSET(&socketsWritable)) {
+		i = Select (MaxClients, &LastSelectMask, &socketsWritable, NULL, wt);
+		if (AnyClientsWriteBlocked)
+		    XFD_ANDSET(&clientsWritable, &socketsWritable, &ClientsWriteBlocked);
+	    } else {
+		i = Select (MaxClients, &LastSelectMask, NULL, NULL, wt);
+	    }
 	}
 	selecterr = GetErrno();
 	WakeupHandler(i, (pointer)&LastSelectMask);
+	vncWriteWakeupHandler(i, &socketsWritable);
 #ifdef SMART_SCHEDULE
 	SmartScheduleStartTimer ();
 #endif