diff --git a/lib/modules/Protocols.pmod/X.pmod/Xlib.pmod b/lib/modules/Protocols.pmod/X.pmod/Xlib.pmod
index c56b413e0831e9bcae486f7a6885638578003c75..c9421ec8d9100be2e107087c62274cfa4592c5ca 100644
--- a/lib/modules/Protocols.pmod/X.pmod/Xlib.pmod
+++ b/lib/modules/Protocols.pmod/X.pmod/Xlib.pmod
@@ -4,6 +4,8 @@
 
 #include "error.h"
 
+#define DEBUG
+
 constant XPORT = 6000;
 
 class rec_buffer
@@ -171,6 +173,10 @@ class Display
   mapping pending_requests; /* Pending requests */
   object pending_actions;   /* Actions awaiting handling */
 
+#ifdef DEBUG
+  mapping debug_requests = ([ ]);
+#endif
+  
   void create()
   { /* Delay initialization of id_manager */
     atom_manager::create();
@@ -407,6 +413,9 @@ class Display
 		       errorCode, m->sequenceNumber, m->resourceID,
 		       m->minorCode, m->majorCode);
 		m->errorCode = _Xlib.error_codes[errorCode];
+#ifdef DEBUG
+		m->failed_request = debug_requests[m->sequenceNumber];
+#endif
 #if 0
 		if (m->errorCode == "Success")
 		  {
@@ -794,8 +803,12 @@ class Display
 
   int send_request(object req, mixed|void handler)
   {
-    send(req->to_string());
-    return sequence_number++;
+    string data = req->to_string();
+    send(data);
+#ifdef DEBUG
+    debug_requests[sequence_number & 0x7fff] = data;
+#endif DEBUG
+    return sequence_number++ & 0x7fff;
   }
 
   array blocking_request(object req)