diff --git a/lib/modules/Protocols.pmod/X.pmod/Extensions.pmod b/lib/modules/Protocols.pmod/X.pmod/Extensions.pmod
index 040e9cf13754b32642374f3902d31937aabf9caa..6feb81d55392e32a8f99399ebf7dd10b7db92c2d 100644
--- a/lib/modules/Protocols.pmod/X.pmod/Extensions.pmod
+++ b/lib/modules/Protocols.pmod/X.pmod/Extensions.pmod
@@ -34,6 +34,13 @@ static class extension
   }
 }
 
+class ScreenSaver
+{
+  inherit extension;
+  constant name = "MIT-SCREEN-SAVER";
+  
+
+}
 
 class Shape
 {
diff --git a/lib/modules/Protocols.pmod/X.pmod/Requests.pmod b/lib/modules/Protocols.pmod/X.pmod/Requests.pmod
index c5dcba9208c8f435bd54ea14a68c75a90f18b552..ca8187e05a7857ef6a4320296c96ff7633dae1bf 100644
--- a/lib/modules/Protocols.pmod/X.pmod/Requests.pmod
+++ b/lib/modules/Protocols.pmod/X.pmod/Requests.pmod
@@ -803,6 +803,35 @@ class Bell {
   string to_string() { return build_request("", percent); }
 }
 
+class CopyArea
+{
+  inherit request;
+  constant reqType = 62;
+  object gc;
+  object area;
+  object src, dst;
+  int x,y; 
+  
+  string to_string()
+  {
+    return build_request(sprintf("%4c" "%4c" "%4c" "%2c%2c" "%2c%2c" "%2c%2c",
+				 src->id, dst->id, gc->id, area->x, area->y,
+				 x, y, area->width, area->height));
+  }
+}
+
+class CopyPlane
+{
+  inherit CopyArea;
+  constant reqType = 63;
+  int plane;
+  
+  string to_string()
+  {
+    return ::to_string()+sprintf("%4c", plane);
+  }
+}
+
 class AllocColor
 {
   inherit request;
diff --git a/lib/modules/Protocols.pmod/X.pmod/Types.pmod b/lib/modules/Protocols.pmod/X.pmod/Types.pmod
index ae613aefd0cb688e19444ad966b9809773d03e84..8c26d219b5ec203302ab8e2a28d08c929233ca71 100644
--- a/lib/modules/Protocols.pmod/X.pmod/Types.pmod
+++ b/lib/modules/Protocols.pmod/X.pmod/Types.pmod
@@ -253,6 +253,23 @@ class Drawable
   int depth;
   object colormap, parent, visual;
 
+  object CopyArea_req(object gc, object src, object area, int x, int y)
+  {
+    object r= Requests.CopyArea();
+    r->gc = gc;
+    r->src = src;
+    r->area = area;
+    r->dst = this_object();
+    r->x = x;
+    r->y = y;
+    return r;
+  }
+
+  object CopyArea(object gc, object src, object area, int x, int y)
+  {
+    display->send_request( CopyArea_req( gc,src,area,x,y ));
+  }
+
   object CreateGC_req()
   {
     object req = Requests.CreateGC();