diff --git a/lib/modules/Protocols.pmod/X.pmod/Types.pmod b/lib/modules/Protocols.pmod/X.pmod/Types.pmod
index c9cd2f33cd4a84ab3e71a023f98802c601915f7a..e70cf700dbb52165bbd4cbd50a7d2ef4d337329a 100644
--- a/lib/modules/Protocols.pmod/X.pmod/Types.pmod
+++ b/lib/modules/Protocols.pmod/X.pmod/Types.pmod
@@ -565,6 +565,33 @@ class Window
       }
     return a;
   }
+
+  object GetProperty_req(object property, object|void type)
+  {
+    object req = Requests.GetProperty();
+    req->window = id;
+    req->property = property->id;
+    if (type)
+      req->type = type->id;
+    
+    return req;
+  }
+
+  mapping GetProperty(object property, object|void type)
+  {
+    object req = GetProperty_req(property, type);
+    array a = display->blocking_request(req);
+
+    if (!a[0])
+      return 0;
+
+    mapping m = a[1];
+    if (type && (m->type == type->id))
+      m->type = type;
+    else
+      m->type = display->lookup_atom(m->type);
+    return m;
+  }
   
   // Shape extension
   void ShapeRectangles( string kind, int xo, int yo, string operation,