diff --git a/dlls/x11drv/X11_calls b/dlls/x11drv/X11_calls
index 8bc7383..ea2a42d 100644
--- a/dlls/x11drv/X11_calls
+++ b/dlls/x11drv/X11_calls
@@ -4,77 +4,40 @@
 # To add a new call, put it on this list and run tools/make_X11wrappers.
 # Also read the comments at the top of tools/make_X11wrappers.
 #
-XAllocColor
-XAllocColorCells
-XBell
 XChangeGC
 XChangeProperty
-XChangeWindowAttributes
-XCopyArea
-XCopyPlane
-XCreateBitmapFromData
-XCreateColormap
-XCreatePixmap
-XDefineCursor
-XDeleteProperty
 XDrawArc
 XDrawLine
 XDrawLines
-XDrawRectangle
 XDrawString16
 XDrawText16
 XFillArc
-XFillPolygon
 XFillRectangle
-XFlush
 XFree
-XFreeColormap
-XFreeColors
 XFreeFont
-XFreeFontNames
 XFreePixmap
 XGetAtomName
 XGetFontProperty
 XGetGeometry
-XGetImage
-XGetScreenSaver
 XGetSelectionOwner
-XGetWindowAttributes
 XGetWindowProperty
-XGrabPointer
-XGrabServer
 XInternAtom
 XKeycodeToKeysym
 XKeysymToKeycode
 XKeysymToString
-XListDepths
-XListFonts
-XLoadQueryFont
 XMapWindow
-XOpenDisplay
-XOpenIM
-XQueryColor
-XQueryColors
 XQueryPointer
 XQueryTree
-XReconfigureWMWindow
-XRefreshKeyboardMapping
-XSendEvent
 XSetArcMode
 XSetClipRectangles
 XSetDashes
 XSetForeground
 XSetFunction
-XSetGraphicsExposures
 XSetLineAttributes
-XSetScreenSaver
 XSetSelectionOwner
 XSetSubwindowMode
 XStoreColor
 XSync
 XTextExtents16
 XTextWidth16
-XUngrabPointer
-XUngrabServer
-XUninstallColormap
 XUnmapWindow
diff --git a/dlls/x11drv/clipboard.c b/dlls/x11drv/clipboard.c
index 9901701..3fe78a4 100644
--- a/dlls/x11drv/clipboard.c
+++ b/dlls/x11drv/clipboard.c
@@ -1589,7 +1589,9 @@
 
     /* Delete the property on the window now that we are done
      * This will send a PropertyNotify event to the selection owner. */
-    TSXDeleteProperty(display,w,prop);
+    wine_tsx11_lock();
+    XDeleteProperty(display,w,prop);
+    wine_tsx11_unlock();
 
     /* Free the retrieved property data */
     HeapFree(GetProcessHeap(),0,val);
diff --git a/dlls/x11drv/event.c b/dlls/x11drv/event.c
index 67cb16e..78ee890 100644
--- a/dlls/x11drv/event.c
+++ b/dlls/x11drv/event.c
@@ -852,11 +852,8 @@
       }
       else
       {
-          if (TRACE_ON(clipboard))
-	  {
-              TRACE_(clipboard)("Request for property %s (%ld) failed\n", 
-                  TSXGetAtomName(display, event->target), event->target);
-          }
+          TRACE_(clipboard)("Request for property %s (%ld) failed\n",
+                            TSXGetAtomName(display, event->target), event->target);
       }
   }
 
@@ -874,7 +871,9 @@
     result.target = event->target;
     result.time = event->time;
     TRACE("Sending SelectionNotify event...\n");
-    TSXSendEvent(display,event->requestor,False,NoEventMask,(XEvent*)&result);
+    wine_tsx11_lock();
+    XSendEvent(display,event->requestor,False,NoEventMask,(XEvent*)&result);
+    wine_tsx11_unlock();
   }
 }
 
diff --git a/dlls/x11drv/keyboard.c b/dlls/x11drv/keyboard.c
index 2bf36a8..91ef618 100644
--- a/dlls/x11drv/keyboard.c
+++ b/dlls/x11drv/keyboard.c
@@ -1624,7 +1624,9 @@
 {
     HWND hwnd;
 
-    TSXRefreshKeyboardMapping(event);
+    wine_tsx11_lock();
+    XRefreshKeyboardMapping(event);
+    wine_tsx11_unlock();
     X11DRV_InitKeyboard( pKeyStateTable );
 
     hwnd = GetFocus();
@@ -2196,5 +2198,7 @@
  */
 void X11DRV_Beep(void)
 {
-  TSXBell(thread_display(), 0);
+    wine_tsx11_lock();
+    XBell(thread_display(), 0);
+    wine_tsx11_unlock();
 }
diff --git a/dlls/x11drv/mouse.c b/dlls/x11drv/mouse.c
index 8976fcb..38f6c5f 100644
--- a/dlls/x11drv/mouse.c
+++ b/dlls/x11drv/mouse.c
@@ -162,7 +162,9 @@
     if (data->cursor_window != win)
     {
         data->cursor_window = win;
-        if (data->cursor) TSXDefineCursor( data->display, win, data->cursor );
+        wine_tsx11_lock();
+        if (data->cursor) XDefineCursor( data->display, win, data->cursor );
+        wine_tsx11_unlock();
     }
 }
 
diff --git a/dlls/x11drv/ts_xlib.c b/dlls/x11drv/ts_xlib.c
index b8caf3a..4ba659c 100644
--- a/dlls/x11drv/ts_xlib.c
+++ b/dlls/x11drv/ts_xlib.c
@@ -13,33 +13,6 @@
 #include "ts_xlib.h"
 
 
-XFontStruct * TSXLoadQueryFont(Display* a0, const  char* a1)
-{
-  XFontStruct * r;
-  wine_tsx11_lock();
-  r = XLoadQueryFont(a0, a1);
-  wine_tsx11_unlock();
-  return r;
-}
-
-XImage * TSXGetImage(Display* a0, Drawable a1, int a2, int a3, unsigned int a4, unsigned int a5, unsigned long a6, int a7)
-{
-  XImage * r;
-  wine_tsx11_lock();
-  r = XGetImage(a0, a1, a2, a3, a4, a5, a6, a7);
-  wine_tsx11_unlock();
-  return r;
-}
-
-Display * TSXOpenDisplay(const  char* a0)
-{
-  Display * r;
-  wine_tsx11_lock();
-  r = XOpenDisplay(a0);
-  wine_tsx11_unlock();
-  return r;
-}
-
 char * TSXGetAtomName(Display* a0, Atom a1)
 {
   char * r;
@@ -58,7 +31,7 @@
   return r;
 }
 
-Atom  TSXInternAtom(Display* a0, const  char* a1, int a2)
+Atom  TSXInternAtom(Display* a0, const char* a1, int a2)
 {
   Atom  r;
   wine_tsx11_lock();
@@ -67,33 +40,6 @@
   return r;
 }
 
-Colormap  TSXCreateColormap(Display* a0, Window a1, Visual* a2, int a3)
-{
-  Colormap  r;
-  wine_tsx11_lock();
-  r = XCreateColormap(a0, a1, a2, a3);
-  wine_tsx11_unlock();
-  return r;
-}
-
-Pixmap  TSXCreatePixmap(Display* a0, Drawable a1, unsigned int a2, unsigned int a3, unsigned int a4)
-{
-  Pixmap  r;
-  wine_tsx11_lock();
-  r = XCreatePixmap(a0, a1, a2, a3, a4);
-  wine_tsx11_unlock();
-  return r;
-}
-
-Pixmap  TSXCreateBitmapFromData(Display* a0, Drawable a1, const  char* a2, unsigned int a3, unsigned int a4)
-{
-  Pixmap  r;
-  wine_tsx11_lock();
-  r = XCreateBitmapFromData(a0, a1, a2, a3, a4);
-  wine_tsx11_unlock();
-  return r;
-}
-
 Window  TSXGetSelectionOwner(Display* a0, Atom a1)
 {
   Window  r;
@@ -103,15 +49,6 @@
   return r;
 }
 
-char ** TSXListFonts(Display* a0, const  char* a1, int a2, int* a3)
-{
-  char ** r;
-  wine_tsx11_lock();
-  r = XListFonts(a0, a1, a2, a3);
-  wine_tsx11_unlock();
-  return r;
-}
-
 KeySym  TSXKeycodeToKeysym(Display* a0, unsigned int a1, int a2)
 {
   KeySym  r;
@@ -121,51 +58,6 @@
   return r;
 }
 
-int * TSXListDepths(Display* a0, int a1, int* a2)
-{
-  int * r;
-  wine_tsx11_lock();
-  r = XListDepths(a0, a1, a2);
-  wine_tsx11_unlock();
-  return r;
-}
-
-int   TSXReconfigureWMWindow(Display* a0, Window a1, int a2, unsigned int a3, XWindowChanges* a4)
-{
-  int   r;
-  wine_tsx11_lock();
-  r = XReconfigureWMWindow(a0, a1, a2, a3, a4);
-  wine_tsx11_unlock();
-  return r;
-}
-
-int   TSXAllocColor(Display* a0, Colormap a1, XColor* a2)
-{
-  int   r;
-  wine_tsx11_lock();
-  r = XAllocColor(a0, a1, a2);
-  wine_tsx11_unlock();
-  return r;
-}
-
-int   TSXAllocColorCells(Display* a0, Colormap a1, int a2, unsigned long* a3, unsigned int a4, unsigned long* a5, unsigned int a6)
-{
-  int   r;
-  wine_tsx11_lock();
-  r = XAllocColorCells(a0, a1, a2, a3, a4, a5, a6);
-  wine_tsx11_unlock();
-  return r;
-}
-
-int  TSXBell(Display* a0, int a1)
-{
-  int  r;
-  wine_tsx11_lock();
-  r = XBell(a0, a1);
-  wine_tsx11_unlock();
-  return r;
-}
-
 int  TSXChangeGC(Display* a0, GC a1, unsigned long a2, XGCValues* a3)
 {
   int  r;
@@ -175,7 +67,7 @@
   return r;
 }
 
-int  TSXChangeProperty(Display* a0, Window a1, Atom a2, Atom a3, int a4, int a5, const  unsigned char* a6, int a7)
+int  TSXChangeProperty(Display* a0, Window a1, Atom a2, Atom a3, int a4, int a5, const unsigned char* a6, int a7)
 {
   int  r;
   wine_tsx11_lock();
@@ -184,51 +76,6 @@
   return r;
 }
 
-int  TSXChangeWindowAttributes(Display* a0, Window a1, unsigned long a2, XSetWindowAttributes* a3)
-{
-  int  r;
-  wine_tsx11_lock();
-  r = XChangeWindowAttributes(a0, a1, a2, a3);
-  wine_tsx11_unlock();
-  return r;
-}
-
-int  TSXCopyArea(Display* a0, Drawable a1, Drawable a2, GC a3, int a4, int a5, unsigned int a6, unsigned int a7, int a8, int a9)
-{
-  int  r;
-  wine_tsx11_lock();
-  r = XCopyArea(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
-  wine_tsx11_unlock();
-  return r;
-}
-
-int  TSXCopyPlane(Display* a0, Drawable a1, Drawable a2, GC a3, int a4, int a5, unsigned int a6, unsigned int a7, int a8, int a9, unsigned long a10)
-{
-  int  r;
-  wine_tsx11_lock();
-  r = XCopyPlane(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10);
-  wine_tsx11_unlock();
-  return r;
-}
-
-int  TSXDefineCursor(Display* a0, Window a1, Cursor a2)
-{
-  int  r;
-  wine_tsx11_lock();
-  r = XDefineCursor(a0, a1, a2);
-  wine_tsx11_unlock();
-  return r;
-}
-
-int  TSXDeleteProperty(Display* a0, Window a1, Atom a2)
-{
-  int  r;
-  wine_tsx11_lock();
-  r = XDeleteProperty(a0, a1, a2);
-  wine_tsx11_unlock();
-  return r;
-}
-
 int  TSXDrawArc(Display* a0, Drawable a1, GC a2, int a3, int a4, unsigned int a5, unsigned int a6, int a7, int a8)
 {
   int  r;
@@ -256,16 +103,7 @@
   return r;
 }
 
-int  TSXDrawRectangle(Display* a0, Drawable a1, GC a2, int a3, int a4, unsigned int a5, unsigned int a6)
-{
-  int  r;
-  wine_tsx11_lock();
-  r = XDrawRectangle(a0, a1, a2, a3, a4, a5, a6);
-  wine_tsx11_unlock();
-  return r;
-}
-
-int  TSXDrawString16(Display* a0, Drawable a1, GC a2, int a3, int a4, const  XChar2b* a5, int a6)
+int  TSXDrawString16(Display* a0, Drawable a1, GC a2, int a3, int a4, const XChar2b* a5, int a6)
 {
   int  r;
   wine_tsx11_lock();
@@ -292,15 +130,6 @@
   return r;
 }
 
-int  TSXFillPolygon(Display* a0, Drawable a1, GC a2, XPoint* a3, int a4, int a5, int a6)
-{
-  int  r;
-  wine_tsx11_lock();
-  r = XFillPolygon(a0, a1, a2, a3, a4, a5, a6);
-  wine_tsx11_unlock();
-  return r;
-}
-
 int  TSXFillRectangle(Display* a0, Drawable a1, GC a2, int a3, int a4, unsigned int a5, unsigned int a6)
 {
   int  r;
@@ -310,15 +139,6 @@
   return r;
 }
 
-int  TSXFlush(Display* a0)
-{
-  int  r;
-  wine_tsx11_lock();
-  r = XFlush(a0);
-  wine_tsx11_unlock();
-  return r;
-}
-
 int  TSXFree(void* a0)
 {
   int  r;
@@ -328,24 +148,6 @@
   return r;
 }
 
-int  TSXFreeColormap(Display* a0, Colormap a1)
-{
-  int  r;
-  wine_tsx11_lock();
-  r = XFreeColormap(a0, a1);
-  wine_tsx11_unlock();
-  return r;
-}
-
-int  TSXFreeColors(Display* a0, Colormap a1, unsigned long* a2, int a3, unsigned long a4)
-{
-  int  r;
-  wine_tsx11_lock();
-  r = XFreeColors(a0, a1, a2, a3, a4);
-  wine_tsx11_unlock();
-  return r;
-}
-
 int  TSXFreeFont(Display* a0, XFontStruct* a1)
 {
   int  r;
@@ -355,15 +157,6 @@
   return r;
 }
 
-int  TSXFreeFontNames(char** a0)
-{
-  int  r;
-  wine_tsx11_lock();
-  r = XFreeFontNames(a0);
-  wine_tsx11_unlock();
-  return r;
-}
-
 int  TSXFreePixmap(Display* a0, Pixmap a1)
 {
   int  r;
@@ -373,29 +166,20 @@
   return r;
 }
 
-int   TSXGetFontProperty(XFontStruct* a0, Atom a1, unsigned long* a2)
+int  TSXGetFontProperty(XFontStruct* a0, Atom a1, unsigned long* a2)
 {
-  int   r;
+  int  r;
   wine_tsx11_lock();
   r = XGetFontProperty(a0, a1, a2);
   wine_tsx11_unlock();
   return r;
 }
 
-int   TSXGetGeometry(Display* a0, Drawable a1, Window* a2, int* a3, int* a4, unsigned int* a5, unsigned int* a6, unsigned int* a7, unsigned int* a8)
-{
-  int   r;
-  wine_tsx11_lock();
-  r = XGetGeometry(a0, a1, a2, a3, a4, a5, a6, a7, a8);
-  wine_tsx11_unlock();
-  return r;
-}
-
-int  TSXGetScreenSaver(Display* a0, int* a1, int* a2, int* a3, int* a4)
+int  TSXGetGeometry(Display* a0, Drawable a1, Window* a2, int* a3, int* a4, unsigned int* a5, unsigned int* a6, unsigned int* a7, unsigned int* a8)
 {
   int  r;
   wine_tsx11_lock();
-  r = XGetScreenSaver(a0, a1, a2, a3, a4);
+  r = XGetGeometry(a0, a1, a2, a3, a4, a5, a6, a7, a8);
   wine_tsx11_unlock();
   return r;
 }
@@ -409,33 +193,6 @@
   return r;
 }
 
-int   TSXGetWindowAttributes(Display* a0, Window a1, XWindowAttributes* a2)
-{
-  int   r;
-  wine_tsx11_lock();
-  r = XGetWindowAttributes(a0, a1, a2);
-  wine_tsx11_unlock();
-  return r;
-}
-
-int  TSXGrabPointer(Display* a0, Window a1, int a2, unsigned int a3, int a4, int a5, Window a6, Cursor a7, Time a8)
-{
-  int  r;
-  wine_tsx11_lock();
-  r = XGrabPointer(a0, a1, a2, a3, a4, a5, a6, a7, a8);
-  wine_tsx11_unlock();
-  return r;
-}
-
-int  TSXGrabServer(Display* a0)
-{
-  int  r;
-  wine_tsx11_lock();
-  r = XGrabServer(a0);
-  wine_tsx11_unlock();
-  return r;
-}
-
 KeyCode  TSXKeysymToKeycode(Display* a0, KeySym a1)
 {
   KeyCode  r;
@@ -454,56 +211,20 @@
   return r;
 }
 
-int  TSXQueryColor(Display* a0, Colormap a1, XColor* a2)
+int  TSXQueryPointer(Display* a0, Window a1, Window* a2, Window* a3, int* a4, int* a5, int* a6, int* a7, unsigned int* a8)
 {
   int  r;
   wine_tsx11_lock();
-  r = XQueryColor(a0, a1, a2);
-  wine_tsx11_unlock();
-  return r;
-}
-
-int  TSXQueryColors(Display* a0, Colormap a1, XColor* a2, int a3)
-{
-  int  r;
-  wine_tsx11_lock();
-  r = XQueryColors(a0, a1, a2, a3);
-  wine_tsx11_unlock();
-  return r;
-}
-
-int   TSXQueryPointer(Display* a0, Window a1, Window* a2, Window* a3, int* a4, int* a5, int* a6, int* a7, unsigned int* a8)
-{
-  int   r;
-  wine_tsx11_lock();
   r = XQueryPointer(a0, a1, a2, a3, a4, a5, a6, a7, a8);
   wine_tsx11_unlock();
   return r;
 }
 
-int   TSXQueryTree(Display* a0, Window a1, Window* a2, Window* a3, Window** a4, unsigned int* a5)
-{
-  int   r;
-  wine_tsx11_lock();
-  r = XQueryTree(a0, a1, a2, a3, a4, a5);
-  wine_tsx11_unlock();
-  return r;
-}
-
-int  TSXRefreshKeyboardMapping(XMappingEvent* a0)
+int  TSXQueryTree(Display* a0, Window a1, Window* a2, Window* a3, Window** a4, unsigned int* a5)
 {
   int  r;
   wine_tsx11_lock();
-  r = XRefreshKeyboardMapping(a0);
-  wine_tsx11_unlock();
-  return r;
-}
-
-int   TSXSendEvent(Display* a0, Window a1, int a2, long a3, XEvent* a4)
-{
-  int   r;
-  wine_tsx11_lock();
-  r = XSendEvent(a0, a1, a2, a3, a4);
+  r = XQueryTree(a0, a1, a2, a3, a4, a5);
   wine_tsx11_unlock();
   return r;
 }
@@ -526,7 +247,7 @@
   return r;
 }
 
-int  TSXSetDashes(Display* a0, GC a1, int a2, const  char* a3, int a4)
+int  TSXSetDashes(Display* a0, GC a1, int a2, const char* a3, int a4)
 {
   int  r;
   wine_tsx11_lock();
@@ -553,15 +274,6 @@
   return r;
 }
 
-int  TSXSetGraphicsExposures(Display* a0, GC a1, int a2)
-{
-  int  r;
-  wine_tsx11_lock();
-  r = XSetGraphicsExposures(a0, a1, a2);
-  wine_tsx11_unlock();
-  return r;
-}
-
 int  TSXSetLineAttributes(Display* a0, GC a1, unsigned int a2, int a3, int a4, int a5)
 {
   int  r;
@@ -571,15 +283,6 @@
   return r;
 }
 
-int  TSXSetScreenSaver(Display* a0, int a1, int a2, int a3, int a4)
-{
-  int  r;
-  wine_tsx11_lock();
-  r = XSetScreenSaver(a0, a1, a2, a3, a4);
-  wine_tsx11_unlock();
-  return r;
-}
-
 int  TSXSetSelectionOwner(Display* a0, Atom a1, Window a2, Time a3)
 {
   int  r;
@@ -616,7 +319,7 @@
   return r;
 }
 
-int  TSXTextExtents16(XFontStruct* a0, const  XChar2b* a1, int a2, int* a3, int* a4, int* a5, XCharStruct* a6)
+int  TSXTextExtents16(XFontStruct* a0, const XChar2b* a1, int a2, int* a3, int* a4, int* a5, XCharStruct* a6)
 {
   int  r;
   wine_tsx11_lock();
@@ -625,7 +328,7 @@
   return r;
 }
 
-int  TSXTextWidth16(XFontStruct* a0, const  XChar2b* a1, int a2)
+int  TSXTextWidth16(XFontStruct* a0, const XChar2b* a1, int a2)
 {
   int  r;
   wine_tsx11_lock();
@@ -634,33 +337,6 @@
   return r;
 }
 
-int  TSXUngrabPointer(Display* a0, Time a1)
-{
-  int  r;
-  wine_tsx11_lock();
-  r = XUngrabPointer(a0, a1);
-  wine_tsx11_unlock();
-  return r;
-}
-
-int  TSXUngrabServer(Display* a0)
-{
-  int  r;
-  wine_tsx11_lock();
-  r = XUngrabServer(a0);
-  wine_tsx11_unlock();
-  return r;
-}
-
-int  TSXUninstallColormap(Display* a0, Colormap a1)
-{
-  int  r;
-  wine_tsx11_lock();
-  r = XUninstallColormap(a0, a1);
-  wine_tsx11_unlock();
-  return r;
-}
-
 int  TSXUnmapWindow(Display* a0, Window a1)
 {
   int  r;
@@ -670,13 +346,4 @@
   return r;
 }
 
-XIM  TSXOpenIM(Display* a0, struct _XrmHashBucketRec* a1, char* a2, char* a3)
-{
-  XIM  r;
-  wine_tsx11_lock();
-  r = XOpenIM(a0, a1, a2, a3);
-  wine_tsx11_unlock();
-  return r;
-}
-
 #endif /* defined(HAVE_X11_XLIB_H) */
diff --git a/dlls/x11drv/ts_xlib.h b/dlls/x11drv/ts_xlib.h
index 056fa56..dc5e643 100644
--- a/dlls/x11drv/ts_xlib.h
+++ b/dlls/x11drv/ts_xlib.h
@@ -19,80 +19,43 @@
 extern void wine_tsx11_lock(void);
 extern void wine_tsx11_unlock(void);
 
-extern XFontStruct * TSXLoadQueryFont(Display*, const  char*);
-extern XImage * TSXGetImage(Display*, Drawable, int, int, unsigned int, unsigned int, unsigned long, int);
-extern Display * TSXOpenDisplay(const  char*);
 extern char * TSXGetAtomName(Display*, Atom);
 extern char * TSXKeysymToString(KeySym);
-extern Atom  TSXInternAtom(Display*, const  char*, int);
-extern Colormap  TSXCreateColormap(Display*, Window, Visual*, int);
-extern Pixmap  TSXCreatePixmap(Display*, Drawable, unsigned int, unsigned int, unsigned int);
-extern Pixmap  TSXCreateBitmapFromData(Display*, Drawable, const  char*, unsigned int, unsigned int);
+extern Atom  TSXInternAtom(Display*, const char*, int);
 extern Window  TSXGetSelectionOwner(Display*, Atom);
-extern char ** TSXListFonts(Display*, const  char*, int, int*);
 extern KeySym  TSXKeycodeToKeysym(Display*, unsigned int, int);
-extern int * TSXListDepths(Display*, int, int*);
-extern int   TSXReconfigureWMWindow(Display*, Window, int, unsigned int, XWindowChanges*);
-extern int   TSXAllocColor(Display*, Colormap, XColor*);
-extern int   TSXAllocColorCells(Display*, Colormap, int, unsigned long*, unsigned int, unsigned long*, unsigned int);
-extern int  TSXBell(Display*, int);
 extern int  TSXChangeGC(Display*, GC, unsigned long, XGCValues*);
-extern int  TSXChangeProperty(Display*, Window, Atom, Atom, int, int, const  unsigned char*, int);
-extern int  TSXChangeWindowAttributes(Display*, Window, unsigned long, XSetWindowAttributes*);
-extern int  TSXCopyArea(Display*, Drawable, Drawable, GC, int, int, unsigned int, unsigned int, int, int);
-extern int  TSXCopyPlane(Display*, Drawable, Drawable, GC, int, int, unsigned int, unsigned int, int, int, unsigned long);
-extern int  TSXDefineCursor(Display*, Window, Cursor);
-extern int  TSXDeleteProperty(Display*, Window, Atom);
+extern int  TSXChangeProperty(Display*, Window, Atom, Atom, int, int, const unsigned char*, int);
 extern int  TSXDrawArc(Display*, Drawable, GC, int, int, unsigned int, unsigned int, int, int);
 extern int  TSXDrawLine(Display*, Drawable, GC, int, int, int, int);
 extern int  TSXDrawLines(Display*, Drawable, GC, XPoint*, int, int);
-extern int  TSXDrawRectangle(Display*, Drawable, GC, int, int, unsigned int, unsigned int);
-extern int  TSXDrawString16(Display*, Drawable, GC, int, int, const  XChar2b*, int);
+extern int  TSXDrawString16(Display*, Drawable, GC, int, int, const XChar2b*, int);
 extern int  TSXDrawText16(Display*, Drawable, GC, int, int, XTextItem16*, int);
 extern int  TSXFillArc(Display*, Drawable, GC, int, int, unsigned int, unsigned int, int, int);
-extern int  TSXFillPolygon(Display*, Drawable, GC, XPoint*, int, int, int);
 extern int  TSXFillRectangle(Display*, Drawable, GC, int, int, unsigned int, unsigned int);
-extern int  TSXFlush(Display*);
 extern int  TSXFree(void*);
-extern int  TSXFreeColormap(Display*, Colormap);
-extern int  TSXFreeColors(Display*, Colormap, unsigned long*, int, unsigned long);
 extern int  TSXFreeFont(Display*, XFontStruct*);
-extern int  TSXFreeFontNames(char**);
 extern int  TSXFreePixmap(Display*, Pixmap);
-extern int   TSXGetFontProperty(XFontStruct*, Atom, unsigned long*);
-extern int   TSXGetGeometry(Display*, Drawable, Window*, int*, int*, unsigned int*, unsigned int*, unsigned int*, unsigned int*);
-extern int  TSXGetScreenSaver(Display*, int*, int*, int*, int*);
+extern int  TSXGetFontProperty(XFontStruct*, Atom, unsigned long*);
+extern int  TSXGetGeometry(Display*, Drawable, Window*, int*, int*, unsigned int*, unsigned int*, unsigned int*, unsigned int*);
 extern int  TSXGetWindowProperty(Display*, Window, Atom, long, long, int, Atom, Atom*, int*, unsigned long*, unsigned long*, unsigned char**);
-extern int   TSXGetWindowAttributes(Display*, Window, XWindowAttributes*);
-extern int  TSXGrabPointer(Display*, Window, int, unsigned int, int, int, Window, Cursor, Time);
-extern int  TSXGrabServer(Display*);
 extern KeyCode  TSXKeysymToKeycode(Display*, KeySym);
 extern int  TSXMapWindow(Display*, Window);
-extern int  TSXQueryColor(Display*, Colormap, XColor*);
-extern int  TSXQueryColors(Display*, Colormap, XColor*, int);
-extern int   TSXQueryPointer(Display*, Window, Window*, Window*, int*, int*, int*, int*, unsigned int*);
-extern int   TSXQueryTree(Display*, Window, Window*, Window*, Window**, unsigned int*);
-extern int  TSXRefreshKeyboardMapping(XMappingEvent*);
-extern int   TSXSendEvent(Display*, Window, int, long, XEvent*);
+extern int  TSXQueryPointer(Display*, Window, Window*, Window*, int*, int*, int*, int*, unsigned int*);
+extern int  TSXQueryTree(Display*, Window, Window*, Window*, Window**, unsigned int*);
 extern int  TSXSetArcMode(Display*, GC, int);
 extern int  TSXSetClipRectangles(Display*, GC, int, int, XRectangle*, int, int);
-extern int  TSXSetDashes(Display*, GC, int, const  char*, int);
+extern int  TSXSetDashes(Display*, GC, int, const char*, int);
 extern int  TSXSetForeground(Display*, GC, unsigned long);
 extern int  TSXSetFunction(Display*, GC, int);
-extern int  TSXSetGraphicsExposures(Display*, GC, int);
 extern int  TSXSetLineAttributes(Display*, GC, unsigned int, int, int, int);
-extern int  TSXSetScreenSaver(Display*, int, int, int, int);
 extern int  TSXSetSelectionOwner(Display*, Atom, Window, Time);
 extern int  TSXSetSubwindowMode(Display*, GC, int);
 extern int  TSXStoreColor(Display*, Colormap, XColor*);
 extern int  TSXSync(Display*, int);
-extern int  TSXTextExtents16(XFontStruct*, const  XChar2b*, int, int*, int*, int*, XCharStruct*);
-extern int  TSXTextWidth16(XFontStruct*, const  XChar2b*, int);
-extern int  TSXUngrabPointer(Display*, Time);
-extern int  TSXUngrabServer(Display*);
-extern int  TSXUninstallColormap(Display*, Colormap);
+extern int  TSXTextExtents16(XFontStruct*, const XChar2b*, int, int*, int*, int*, XCharStruct*);
+extern int  TSXTextWidth16(XFontStruct*, const XChar2b*, int);
 extern int  TSXUnmapWindow(Display*, Window);
-extern XIM  TSXOpenIM(Display*, struct _XrmHashBucketRec*, char*, char*);
 
 #endif /* defined(HAVE_X11_XLIB_H) */
 
diff --git a/dlls/x11drv/window.c b/dlls/x11drv/window.c
index 0d33423..eb9ed45 100644
--- a/dlls/x11drv/window.c
+++ b/dlls/x11drv/window.c
@@ -1256,8 +1256,10 @@
 
     if (!hwnd)  /* If setting the focus to 0, uninstall the colormap */
     {
+        wine_tsx11_lock();
         if (X11DRV_PALETTE_PaletteFlags & X11DRV_PALETTE_PRIVATE)
-            TSXUninstallColormap( display, X11DRV_PALETTE_PaletteXColormap );
+            XUninstallColormap( display, X11DRV_PALETTE_PaletteXColormap );
+        wine_tsx11_unlock();
         return;
     }
 
diff --git a/dlls/x11drv/winpos.c b/dlls/x11drv/winpos.c
index 6a5bcdf..f8f31fc 100644
--- a/dlls/x11drv/winpos.c
+++ b/dlls/x11drv/winpos.c
@@ -2205,8 +2205,11 @@
             WND *ptr = WIN_FindWndPtr( list[i] );
             if (!ptr) continue;
             if (!IsRectEmpty( &ptr->rectWindow ) && get_whole_window(ptr))
-                TSXReconfigureWMWindow( display, get_whole_window(ptr), 0,
-                                        CWStackMode, &winChanges );
+            {
+                wine_tsx11_lock();
+                XReconfigureWMWindow( display, get_whole_window(ptr), 0, CWStackMode, &winChanges );
+                wine_tsx11_unlock();
+            }
             WIN_ReleaseWndPtr( ptr );
         }
     }
diff --git a/dlls/x11drv/x11ddraw.c b/dlls/x11drv/x11ddraw.c
index 996f4d5..b1818c0 100644
--- a/dlls/x11drv/x11ddraw.c
+++ b/dlls/x11drv/x11ddraw.c
@@ -83,11 +83,15 @@
       win = root_window;
     }
 
-    TSXGrabPointer(display, win, True, 0, GrabModeAsync, GrabModeAsync, win, None, CurrentTime);
+    wine_tsx11_lock();
+    XGrabPointer(display, win, True, 0, GrabModeAsync, GrabModeAsync, win, None, CurrentTime);
+    wine_tsx11_unlock();
   }
   else
   {
-    TSXUngrabPointer(display, CurrentTime);
+    wine_tsx11_lock();
+    XUngrabPointer(display, CurrentTime);
+    wine_tsx11_unlock();
   }
 
   return 0;
@@ -212,7 +216,12 @@
 static DWORD PASCAL X11DRV_DDHAL_DestroyPalette(LPDDHAL_DESTROYPALETTEDATA data)
 {
   Colormap pal = data->lpDDPalette->u1.dwReserved1;
-  if (pal) TSXFreeColormap(gdi_display, pal);
+  if (pal)
+  {
+      wine_tsx11_lock();
+      XFreeColormap(gdi_display, pal);
+      wine_tsx11_unlock();
+  }
   data->ddRVal = DD_OK;
   return DDHAL_DRIVER_HANDLED;
 }
@@ -426,14 +435,16 @@
   int n;
 
   if (pal) {
+    wine_tsx11_lock();
     c.flags = DoRed|DoGreen|DoBlue;
     c.pixel = dwBase;
     for (n=0; n<dwNumEntries; n++,c.pixel++) {
       c.red   = lpEntries[n].peRed   << 8;
       c.green = lpEntries[n].peGreen << 8;
       c.blue  = lpEntries[n].peBlue  << 8;
-      TSXStoreColor(gdi_display, pal, &c);
+      XStoreColor(gdi_display, pal, &c);
     }
-    TSXFlush(gdi_display); /* update display immediately */
+    XFlush(gdi_display); /* update display immediately */
+    wine_tsx11_unlock();
   }
 }
diff --git a/dlls/x11drv/x11drv_main.c b/dlls/x11drv/x11drv_main.c
index 03e610a..d2c196c 100644
--- a/dlls/x11drv/x11drv_main.c
+++ b/dlls/x11drv/x11drv_main.c
@@ -309,7 +309,7 @@
 
     /* Open display */
 
-    if (!(display = TSXOpenDisplay( NULL )))
+    if (!(display = XOpenDisplay( NULL )))
     {
         MESSAGE( "x11drv: Can't open display: %s\n", XDisplayName(NULL) );
         ExitProcess(1);
@@ -325,10 +325,10 @@
     if (screen_depth)  /* depth specified */
     {
         int depth_count, i;
-        int *depth_list = TSXListDepths(display, DefaultScreen(display), &depth_count);
+        int *depth_list = XListDepths(display, DefaultScreen(display), &depth_count);
         for (i = 0; i < depth_count; i++)
             if (depth_list[i] == screen_depth) break;
-        TSXFree( depth_list );
+        XFree( depth_list );
         if (i >= depth_count)
 	{
             MESSAGE( "x11drv: Depth %d not supported on this screen.\n", screen_depth );
@@ -508,7 +508,9 @@
 BOOL X11DRV_GetScreenSaveActive(void)
 {
     int timeout, temp;
-    TSXGetScreenSaver(gdi_display, &timeout, &temp, &temp, &temp);
+    wine_tsx11_lock();
+    XGetScreenSaver(gdi_display, &timeout, &temp, &temp, &temp);
+    wine_tsx11_unlock();
     return timeout != 0;
 }
 
@@ -522,11 +524,13 @@
     int timeout, interval, prefer_blanking, allow_exposures;
     static int last_timeout = 15 * 60;
 
-    TSXGetScreenSaver(gdi_display, &timeout, &interval, &prefer_blanking,
-                      &allow_exposures);
+    wine_tsx11_lock();
+    XGetScreenSaver(gdi_display, &timeout, &interval, &prefer_blanking,
+                    &allow_exposures);
     if (timeout) last_timeout = timeout;
 
     timeout = bActivate ? last_timeout : 0;
-    TSXSetScreenSaver(gdi_display, timeout, interval, prefer_blanking,
-                      allow_exposures);
+    XSetScreenSaver(gdi_display, timeout, interval, prefer_blanking,
+                    allow_exposures);
+    wine_tsx11_unlock();
 }
