diff --git a/graphics/psdrv/Makefile.in b/graphics/psdrv/Makefile.in
index 5bd5ed1..f55dbcd 100644
--- a/graphics/psdrv/Makefile.in
+++ b/graphics/psdrv/Makefile.in
@@ -10,6 +10,7 @@
 	bitblt.c \
 	bitmap.c \
 	brush.c \
+	clipping.c \
 	color.c \
 	driver.c \
 	escape.c \
diff --git a/graphics/psdrv/clipping.c b/graphics/psdrv/clipping.c
new file mode 100644
index 0000000..091b3bd
--- /dev/null
+++ b/graphics/psdrv/clipping.c
@@ -0,0 +1,51 @@
+/*
+ *	PostScript clipping functions
+ *
+ *	Copyright 1999  Luc Tourangau 
+ *
+ */
+
+#include "gdi.h"
+#include "psdrv.h"
+#include "region.h"
+#include "debugtools.h"
+
+DEFAULT_DEBUG_CHANNEL(psdrv)
+
+/***********************************************************************
+ *           PSDRV_SetDeviceClipping
+ */
+VOID PSDRV_SetDeviceClipping( DC *dc )
+{
+    CHAR szArrayName[] = "clippath";
+    RGNOBJ *obj = (RGNOBJ *)GDI_GetObjPtr(dc->w.hGCClipRgn, REGION_MAGIC);
+    if (!obj)
+    {
+        ERR_(psdrv)("Rgn is 0. Please report this.\n");
+	return;
+    }
+
+    TRACE_(psdrv)("dc=%p", dc);
+    
+    if (obj->rgn->numRects > 0)
+    {
+        INT i;
+        RECT *pRect = obj->rgn->rects;
+
+        PSDRV_WriteArrayDef(dc, szArrayName, obj->rgn->numRects * 4);
+
+        for (i = 0; i < obj->rgn->numRects; i++, pRect++)
+        {
+            PSDRV_WriteArrayPut(dc, szArrayName, i * 4,
+                                pRect->left);
+            PSDRV_WriteArrayPut(dc, szArrayName, i * 4 + 1,
+                                pRect->top);
+            PSDRV_WriteArrayPut(dc, szArrayName, i * 4 + 2, 
+                                pRect->right - pRect->left);
+            PSDRV_WriteArrayPut(dc, szArrayName, i * 4 + 3, 
+                                pRect->bottom - pRect->top);
+        }
+    }
+    
+    PSDRV_WriteRectClip(dc, szArrayName);
+}
diff --git a/graphics/psdrv/init.c b/graphics/psdrv/init.c
index b02e372..cf6bf28 100644
--- a/graphics/psdrv/init.c
+++ b/graphics/psdrv/init.c
@@ -149,10 +149,9 @@
 /* dmDriverVersion */	0x001,
 /* dmSize */		sizeof(DEVMODEA),
 /* dmDriverExtra */	0,
-/* dmFields */		DM_ORIENTATION | DM_PAPERSIZE | DM_PAPERLENGTH |
-			DM_PAPERWIDTH | DM_SCALE | DM_COPIES | 
-			DM_DEFAULTSOURCE | DM_COLOR | DM_DUPLEX | 
-			DM_YRESOLUTION | DM_TTOPTION,
+/* dmFields */		DM_ORIENTATION | DM_PAPERSIZE | DM_SCALE | 
+			DM_COPIES | DM_DEFAULTSOURCE | DM_COLOR | 
+			DM_DUPLEX | DM_YRESOLUTION | DM_TTOPTION,
    { /* u1 */
      { /* s1 */
 /* dmOrientation */	DMORIENT_PORTRAIT,
diff --git a/graphics/psdrv/ps.c b/graphics/psdrv/ps.c
index 3a5d275..01394d4 100644
--- a/graphics/psdrv/ps.c
+++ b/graphics/psdrv/ps.c
@@ -161,12 +161,24 @@
 static char pseoclip[] =
 "eoclip\n";
 
+static char psrectclip[] =
+"%s rectclip\n"; 
+
 static char pshatch[] =
 "hatch\n";
 
 static char psrotate[] = /* ang */
 "%.1f rotate\n";
 
+static char psarrayget[] = 
+"%s %d get\n";
+
+static char psarrayput[] = 
+"%s %d %ld put\n";
+
+static char psarraydef[] = 
+"/%s %d array def\n";
+
 char *PSDRV_ANSIVector[256] = {
 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* 0x00 */
 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 
@@ -552,9 +564,6 @@
     PSDRV_PDEVICE *physDev = (PSDRV_PDEVICE *)dc->physDev;
     char buf[256];
 
-    if(PSDRV_CmpColor(&physDev->inkColor, color))
-        return TRUE;
-
     PSDRV_CopyColor(&physDev->inkColor, color);
     switch(color->type) {
     case PSCOLOR_RGB:
@@ -880,6 +889,38 @@
     return TRUE;
 }
 
+BOOL PSDRV_WriteArrayGet(DC *dc, CHAR *pszArrayName, INT nIndex)
+{
+    char buf[100];
+
+    sprintf(buf, psarrayget, pszArrayName, nIndex);
+    return PSDRV_WriteSpool(dc, buf, strlen(buf));
+}
+
+BOOL PSDRV_WriteArrayPut(DC *dc, CHAR *pszArrayName, INT nIndex, LONG lObject)
+{
+    char buf[100];
+
+    sprintf(buf, psarrayput, pszArrayName, nIndex, lObject);
+    return PSDRV_WriteSpool(dc, buf, strlen(buf));
+}
+
+BOOL PSDRV_WriteArrayDef(DC *dc, CHAR *pszArrayName, INT nSize)
+{
+    char buf[100];
+
+    sprintf(buf, psarraydef, pszArrayName, nSize);
+    return PSDRV_WriteSpool(dc, buf, strlen(buf));
+}
+
+BOOL PSDRV_WriteRectClip(DC *dc, CHAR *pszArrayName)
+{
+    char buf[100];
+
+    sprintf(buf, psrectclip, pszArrayName);
+    return PSDRV_WriteSpool(dc, buf, strlen(buf));
+}
+
 
 BOOL PSDRV_WritePatternDict(DC *dc, BITMAP *bm, BYTE *bits)
 {
