diff --git a/lib/modules/Protocols.pmod/X.pmod/Xlib.pmod b/lib/modules/Protocols.pmod/X.pmod/Xlib.pmod
index c9421ec8d9100be2e107087c62274cfa4592c5ca..5bd5ee22fdb1d0b45f42222842c8139ccb3fd744 100644
--- a/lib/modules/Protocols.pmod/X.pmod/Xlib.pmod
+++ b/lib/modules/Protocols.pmod/X.pmod/Xlib.pmod
@@ -749,8 +749,11 @@ class Display
 
     set_buffer( 65536 );
 
-    screen_number = (int) fields[2];
-    
+    if(sizeof(fields[2]))
+      screen_number = (int) fields[2][1..];
+    else
+      screen_number = 0;
+
     buffer = "";
     received = rec_buffer();
     pending_requests = ([]);
@@ -883,4 +886,19 @@ class Display
   {
     return roots[screen_number];
   }
+
+  object OpenFont_req(string name)
+  {
+    object req = Requests.OpenFont();
+    req->fid = alloc_id();
+    req->name = name;
+    return req;
+  }
+
+  object OpenFont(string name)
+  {
+    object req = OpenFont_req(name);
+    send_request(req);
+    return Types.Font(this_object(), req->fid);
+  }
 }
diff --git a/lib/modules/Protocols.pmod/X.pmod/_Xlib.pmod b/lib/modules/Protocols.pmod/X.pmod/_Xlib.pmod
index c3ecf665f51640f50bbaa8cbc8f2ea4c5307b16b..5cfbdc31bc4ea8c3c6b546e203a937952f1e194e 100644
--- a/lib/modules/Protocols.pmod/X.pmod/_Xlib.pmod
+++ b/lib/modules/Protocols.pmod/X.pmod/_Xlib.pmod
@@ -3,7 +3,7 @@
  * kluge
  */
 
-object display_re = Regexp("([^:]*):([0-9]+).([0-9]+)");
+object display_re = Regexp("^([^:]*):([0-9]+)(.[0-9]+|)$");
 
 string pad(string s)
 {