diff --git a/unix/xserver/hw/vnc/vncExtInit.cc b/unix/xserver/hw/vnc/vncExtInit.cc
index 7d865ed..898d2f6 100644
--- a/unix/xserver/hw/vnc/vncExtInit.cc
+++ b/unix/xserver/hw/vnc/vncExtInit.cc
@@ -59,6 +59,7 @@
 #include "XserverDesktop.h"
 #include "vncHooks.h"
 #include "vncExtInit.h"
+#include "xorg-version.h"
 
 extern "C" {
 
@@ -449,10 +450,16 @@
       ev.window = cur->window;
       ev.time = GetTimeInMillis();
       if (cur->client->swapped) {
+#if XORG < 112
         int n;
         swaps(&ev.sequenceNumber, n);
         swapl(&ev.window, n);
         swapl(&ev.time, n);
+#else
+        swaps(&ev.sequenceNumber);
+        swapl(&ev.window);
+        swapl(&ev.time);
+#endif
       }
       WriteToClient(cur->client, sizeof(xVncExtClientCutTextNotifyEvent),
                     (char *)&ev);
@@ -495,9 +502,14 @@
       ev.sequenceNumber = cur->client->sequence;
       ev.window = cur->window;
       if (cur->client->swapped) {
+#if XORG < 112
         int n;
         swaps(&ev.sequenceNumber, n);
         swapl(&ev.window, n);
+#else
+        swaps(&ev.sequenceNumber);
+        swapl(&ev.window);
+#endif
       }
       WriteToClient(cur->client, sizeof(xVncExtQueryConnectNotifyEvent),
                     (char *)&ev);
@@ -538,10 +550,16 @@
       ev.window = cur->window;
       ev.selection = selection;
       if (cur->client->swapped) {
+#if XORG < 112
         int n;
         swaps(&ev.sequenceNumber, n);
         swapl(&ev.window, n);
         swapl(&ev.selection, n);
+#else
+        swaps(&ev.sequenceNumber);
+        swapl(&ev.window);
+        swapl(&ev.selection);
+#endif
       }
       WriteToClient(cur->client, sizeof(xVncExtSelectionChangeNotifyEvent),
                     (char *)&ev);
@@ -562,7 +580,6 @@
   param.buf[stuff->paramLen] = 0;
 
   xVncExtSetParamReply rep;
-  int n;
   rep.type = X_Reply;
   rep.length = 0;
   rep.success = 0;
@@ -603,8 +620,14 @@
 
 deny:
   if (client->swapped) {
+#if XORG < 112
+    int n;
     swaps(&rep.sequenceNumber, n);
     swapl(&rep.length, n);
+#else
+    swaps(&rep.sequenceNumber);
+    swapl(&rep.length);
+#endif
   }
   WriteToClient(client, sizeof(xVncExtSetParamReply), (char *)&rep);
   return (client->noClientException);
@@ -612,9 +635,13 @@
 
 static int SProcVncExtSetParam(ClientPtr client)
 {
-  register char n;
   REQUEST(xVncExtSetParamReq);
+#if XORG < 112
+  register char n;
   swaps(&stuff->length, n);
+#else
+  swaps(&stuff->length);
+#endif
   REQUEST_AT_LEAST_SIZE(xVncExtSetParamReq);
   return ProcVncExtSetParam(client);
 }
@@ -628,7 +655,6 @@
   param.buf[stuff->paramLen] = 0;
 
   xVncExtGetParamReply rep;
-  int n;
   rep.type = X_Reply;
   rep.sequenceNumber = client->sequence;
   rep.success = 0;
@@ -646,9 +672,16 @@
   rep.length = (len + 3) >> 2;
   rep.valueLen = len;
   if (client->swapped) {
+#if XORG < 112
+    int n;
     swaps(&rep.sequenceNumber, n);
     swapl(&rep.length, n);
     swaps(&rep.valueLen, n);
+#else
+    swaps(&rep.sequenceNumber);
+    swapl(&rep.length);
+    swaps(&rep.valueLen);
+#endif
   }
   WriteToClient(client, sizeof(xVncExtGetParamReply), (char *)&rep);
   if (value)
@@ -659,9 +692,13 @@
 
 static int SProcVncExtGetParam(ClientPtr client)
 {
-  register char n;
   REQUEST(xVncExtGetParamReq);
+#if XORG < 112
+  register char n;
   swaps(&stuff->length, n);
+#else
+  swaps(&stuff->length);
+#endif
   REQUEST_AT_LEAST_SIZE(xVncExtGetParamReq);
   return ProcVncExtGetParam(client);
 }
@@ -675,7 +712,6 @@
   param.buf[stuff->paramLen] = 0;
 
   xVncExtGetParamDescReply rep;
-  int n;
   rep.type = X_Reply;
   rep.sequenceNumber = client->sequence;
   rep.success = 0;
@@ -690,9 +726,16 @@
   rep.length = (len + 3) >> 2;
   rep.descLen = len;
   if (client->swapped) {
+#if XORG < 112
+    int n;
     swaps(&rep.sequenceNumber, n);
     swapl(&rep.length, n);
     swaps(&rep.descLen, n);
+#else
+    swaps(&rep.sequenceNumber);
+    swapl(&rep.length);
+    swaps(&rep.descLen);
+#endif
   }
   WriteToClient(client, sizeof(xVncExtGetParamDescReply), (char *)&rep);
   if (desc)
@@ -702,9 +745,13 @@
 
 static int SProcVncExtGetParamDesc(ClientPtr client)
 {
-  register char n;
   REQUEST(xVncExtGetParamDescReq);
+#if XORG < 112
+  register char n;
   swaps(&stuff->length, n);
+#else
+  swaps(&stuff->length);
+#endif
   REQUEST_AT_LEAST_SIZE(xVncExtGetParamDescReq);
   return ProcVncExtGetParamDesc(client);
 }
@@ -715,7 +762,6 @@
   REQUEST_SIZE_MATCH(xVncExtListParamsReq);
 
   xVncExtListParamsReply rep;
-  int n;
   rep.type = X_Reply;
   rep.sequenceNumber = client->sequence;
 
@@ -731,9 +777,16 @@
   rep.length = (len + 3) >> 2;
   rep.nParams = nParams;
   if (client->swapped) {
+#if XORG < 112
+    int n;
     swaps(&rep.sequenceNumber, n);
     swapl(&rep.length, n);
     swaps(&rep.nParams, n);
+#else
+    swaps(&rep.sequenceNumber);
+    swapl(&rep.length);
+    swaps(&rep.nParams);
+#endif
   }
   WriteToClient(client, sizeof(xVncExtListParamsReply), (char *)&rep);
   rdr::U8* data = new rdr::U8[len];
@@ -753,9 +806,13 @@
 
 static int SProcVncExtListParams(ClientPtr client)
 {
-  register char n;
   REQUEST(xVncExtListParamsReq);
+#if XORG < 112
+  register char n;
   swaps(&stuff->length, n);
+#else
+  swaps(&stuff->length);
+#endif
   REQUEST_SIZE_MATCH(xVncExtListParamsReq);
   return ProcVncExtListParams(client);
 }
@@ -778,11 +835,19 @@
 
 static int SProcVncExtSetServerCutText(ClientPtr client)
 {
-  register char n;
   REQUEST(xVncExtSetServerCutTextReq);
+#if XORG < 112
+  register char n;
   swaps(&stuff->length, n);
+#else
+  swaps(&stuff->length);
+#endif
   REQUEST_AT_LEAST_SIZE(xVncExtSetServerCutTextReq);
+#if XORG < 112
   swapl(&stuff->textLen, n);
+#else
+  swapl(&stuff->textLen);
+#endif
   return ProcVncExtSetServerCutText(client);
 }
 
@@ -792,15 +857,21 @@
   REQUEST_SIZE_MATCH(xVncExtGetClientCutTextReq);
 
   xVncExtGetClientCutTextReply rep;
-  int n;
   rep.type = X_Reply;
   rep.length = (clientCutTextLen + 3) >> 2;
   rep.sequenceNumber = client->sequence;
   rep.textLen = clientCutTextLen;
   if (client->swapped) {
+#if XORG < 112
+    int n;
     swaps(&rep.sequenceNumber, n);
     swapl(&rep.length, n);
     swapl(&rep.textLen, n);
+#else
+    swaps(&rep.sequenceNumber);
+    swapl(&rep.length);
+    swapl(&rep.textLen);
+#endif
   }
   WriteToClient(client, sizeof(xVncExtGetClientCutTextReply), (char *)&rep);
   if (clientCutText)
@@ -810,9 +881,13 @@
 
 static int SProcVncExtGetClientCutText(ClientPtr client)
 {
-  register char n;
   REQUEST(xVncExtGetClientCutTextReq);
+#if XORG < 112
+  register char n;
   swaps(&stuff->length, n);
+#else
+  swaps(&stuff->length);
+#endif
   REQUEST_SIZE_MATCH(xVncExtGetClientCutTextReq);
   return ProcVncExtGetClientCutText(client);
 }
@@ -842,12 +917,21 @@
 
 static int SProcVncExtSelectInput(ClientPtr client)
 {
-  register char n;
   REQUEST(xVncExtSelectInputReq);
+#if XORG < 112
+  register char n;
   swaps(&stuff->length, n);
+#else
+  swaps(&stuff->length);
+#endif
   REQUEST_SIZE_MATCH(xVncExtSelectInputReq);
+#if XORG < 112
   swapl(&stuff->window, n);
   swapl(&stuff->mask, n);
+#else
+  swapl(&stuff->window);
+  swapl(&stuff->mask);
+#endif
   return ProcVncExtSelectInput(client);
 }
 
@@ -893,9 +977,14 @@
   rep.length = 0;
   rep.sequenceNumber = client->sequence;
   if (client->swapped) {
+#if XORG < 112
     int n;
     swaps(&rep.sequenceNumber, n);
     swapl(&rep.length, n);
+#else
+    swaps(&rep.sequenceNumber);
+    swapl(&rep.length);
+#endif
   }
   WriteToClient(client, sizeof(xVncExtConnectReply), (char *)&rep);
   return (client->noClientException);
@@ -903,9 +992,13 @@
 
 static int SProcVncExtConnect(ClientPtr client)
 {
-  register char n;
   REQUEST(xVncExtConnectReq);
+#if XORG < 112
+  register char n;
   swaps(&stuff->length, n);
+#else
+  swaps(&stuff->length);
+#endif
   REQUEST_AT_LEAST_SIZE(xVncExtConnectReq);
   return ProcVncExtConnect(client);
 }
@@ -925,7 +1018,6 @@
     qcTimeout = 0;
 
   xVncExtGetQueryConnectReply rep;
-  int n;
   rep.type = X_Reply;
   rep.sequenceNumber = client->sequence;
   rep.timeout = qcTimeout;
@@ -934,11 +1026,20 @@
   rep.opaqueId = (CARD32)(long)queryConnectId;
   rep.length = (rep.userLen + rep.addrLen + 3) >> 2;
   if (client->swapped) {
+#if XORG < 112
+    int n;
     swaps(&rep.sequenceNumber, n);
     swapl(&rep.userLen, n);
     swapl(&rep.addrLen, n);
     swapl(&rep.timeout, n);
     swapl(&rep.opaqueId, n);
+#else
+    swaps(&rep.sequenceNumber);
+    swapl(&rep.userLen);
+    swapl(&rep.addrLen);
+    swapl(&rep.timeout);
+    swapl(&rep.opaqueId);
+#endif
   }
   WriteToClient(client, sizeof(xVncExtGetQueryConnectReply), (char *)&rep);
   if (qcTimeout)
@@ -950,9 +1051,13 @@
 
 static int SProcVncExtGetQueryConnect(ClientPtr client)
 {
-  register char n;
   REQUEST(xVncExtGetQueryConnectReq);
+#if XORG < 112
+  register char n;
   swaps(&stuff->length, n);
+#else
+  swaps(&stuff->length);
+#endif
   REQUEST_SIZE_MATCH(xVncExtGetQueryConnectReq);
   return ProcVncExtGetQueryConnect(client);
 }
@@ -977,10 +1082,15 @@
 
 static int SProcVncExtApproveConnect(ClientPtr client)
 {
-  register char n;
   REQUEST(xVncExtApproveConnectReq);
+#if XORG < 112
+  register char n;
   swaps(&stuff->length, n);
   swapl(&stuff->opaqueId, n);
+#else
+  swaps(&stuff->length);
+  swapl(&stuff->opaqueId);
+#endif
   REQUEST_SIZE_MATCH(xVncExtApproveConnectReq);
   return ProcVncExtApproveConnect(client);
 }
diff --git a/unix/xserver/hw/vnc/xf86vncModule.cc b/unix/xserver/hw/vnc/xf86vncModule.cc
index 547ab06..b1ab275 100644
--- a/unix/xserver/hw/vnc/xf86vncModule.cc
+++ b/unix/xserver/hw/vnc/xf86vncModule.cc
@@ -28,6 +28,8 @@
 #include <rfb/ScreenSet.h>
 #include <rfb/screenTypes.h>
 
+#include "xorg-version.h"
+
 extern "C" {
 #define class c_class
 #define private c_private
@@ -94,7 +96,12 @@
     ScrnInfoPtr pScrn = xf86Screens[scr];
 
     for (ParameterIterator i(Configuration::global()); i.param; i.next()) {
-      char* val = xf86FindOptionValue(pScrn->options, i.param->getName());
+      const char *val;
+#if XORG < 112
+      val = xf86FindOptionValue(pScrn->options, i.param->getName());
+#else
+      val = xf86FindOptionValue((XF86OptionPtr)pScrn->options, i.param->getName());
+#endif
       if (val)
         i.param->setParam(val);
     }
diff --git a/unix/xserver/hw/vnc/xorg-version.h b/unix/xserver/hw/vnc/xorg-version.h
index 3b6a689..9a2db93 100644
--- a/unix/xserver/hw/vnc/xorg-version.h
+++ b/unix/xserver/hw/vnc/xorg-version.h
@@ -38,6 +38,8 @@
 #define XORG 110
 #elif XORG_VERSION_CURRENT < ((1 * 10000000) + (11 * 100000) + (99 * 1000))
 #define XORG 111
+#elif XORG_VERSION_CURRENT < ((1 * 10000000) + (12 * 100000) + (99 * 1000))
+#define XORG 112
 #else
 #error "X.Org newer than 1.10 is not supported"
 #endif
diff --git a/unix/xserver112.patch b/unix/xserver112.patch
new file mode 100644
index 0000000..712889c
--- /dev/null
+++ b/unix/xserver112.patch
@@ -0,0 +1,91 @@
+diff -up xserver/configure.ac.vnc xserver/configure.ac
+--- xserver/configure.ac.vnc	2012-08-28 15:01:35.142325880 +0200
++++ xserver/configure.ac	2012-08-28 15:02:06.292300682 +0200
+@@ -30,7 +30,6 @@ AC_INIT([xorg-server], 1.12.4, [https://
+ RELEASE_DATE="2012-08-27"
+ AC_CONFIG_SRCDIR([Makefile.am])
+ AM_INIT_AUTOMAKE([foreign dist-bzip2])
+-AM_MAINTAINER_MODE
+ 
+ # Require xorg-macros minimum of 1.14 for XORG_COMPILER_BRAND in XORG_DEFAULT_OPTIONS
+ m4_ifndef([XORG_MACROS_VERSION],
+@@ -72,6 +71,7 @@ dnl forcing an entire recompile.x
+ AC_CONFIG_HEADERS(include/version-config.h)
+ 
+ AM_PROG_AS
++AC_PROG_CXX
+ AC_PROG_LN_S
+ AC_LIBTOOL_WIN32_DLL
+ AC_DISABLE_STATIC
+@@ -1493,6 +1493,10 @@ 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 $RECORD_LIB $GLX_LIBS $RANDR_LIB $RENDER_LIB $DAMAGE_LIB $MIEXT_SYNC_LIB $MIEXT_DAMAGE_LIB $MIEXT_SHADOW_LIB $XI_LIB $XKB_LIB $XKB_STUB_LIB $COMPOSITE_LIB $MAIN_LIB"])
++AC_SUBST([XVNC_SYS_LIBS], ["$GLX_SYS_LIBS"])
+ 
+ dnl Xnest DDX
+ 
+@@ -1527,6 +1531,8 @@ if test "x$XORG" = xauto; then
+ fi
+ AC_MSG_RESULT([$XORG])
+ 
++AC_DEFINE_UNQUOTED(XORG_VERSION_CURRENT, [$VENDOR_RELEASE], [Current Xorg version])
++
+ if test "x$XORG" = 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'
+@@ -1743,7 +1749,6 @@ if test "x$XORG" = xyes; then
+ 	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])
+@@ -2209,6 +2214,7 @@ hw/dmx/Makefile
+ hw/dmx/man/Makefile
+ hw/vfb/Makefile
+ hw/vfb/man/Makefile
++hw/vnc/Makefile
+ hw/xnest/Makefile
+ hw/xnest/man/Makefile
+ hw/xwin/Makefile
+diff -up xserver/hw/Makefile.am.vnc xserver/hw/Makefile.am
+--- xserver/hw/Makefile.am.vnc	2012-08-28 15:01:35.225325813 +0200
++++ xserver/hw/Makefile.am	2012-08-28 15:02:06.292300682 +0200
+@@ -33,7 +33,8 @@ SUBDIRS =			\
+ 	$(XNEST_SUBDIRS)	\
+ 	$(DMX_SUBDIRS)		\
+ 	$(KDRIVE_SUBDIRS)	\
+-	$(XQUARTZ_SUBDIRS)
++	$(XQUARTZ_SUBDIRS)	\
++	vnc
+ 
+ DIST_SUBDIRS = dmx xfree86 vfb xnest xwin xquartz kdrive
+ 
+diff -up xserver/mi/miinitext.c.vnc xserver/mi/miinitext.c
+--- xserver/mi/miinitext.c.vnc	2012-08-28 15:01:35.311325743 +0200
++++ xserver/mi/miinitext.c	2012-08-28 15:02:06.293300681 +0200
+@@ -266,6 +266,9 @@ extern void DamageExtensionInit(INITARGS
+ extern void CompositeExtensionInit(INITARGS);
+ #endif
+ extern void GEExtensionInit(INITARGS);
++#ifdef TIGERVNC
++extern void vncExtensionInit(INITARGS);
++#endif
+ 
+ /* The following is only a small first step towards run-time
+  * configurable extensions.
+@@ -449,6 +452,9 @@ InitExtensions(int argc, char *argv[])
+     if (!noXFree86BigfontExtension)
+         XFree86BigfontExtensionInit();
+ #endif
++#ifdef TIGERVNC
++    vncExtensionInit();
++#endif
+ #if !defined(NO_HW_ONLY_EXTS)
+ #if defined(XF86VIDMODE)
+     if (!noXFree86VidModeExtension)
