diff -Naur compiz_old/gnome/window-decorator/gnome-window-decorator.c compiz_new/gnome/window-decorator/gnome-window-decorator.c
--- compiz_old/gnome/window-decorator/gnome-window-decorator.c	2006-04-25 19:54:55.000000000 +0200
+++ compiz_new/gnome/window-decorator/gnome-window-decorator.c	2006-04-25 20:01:01.000000000 +0200
@@ -76,6 +76,9 @@
 #define COMPIZ_SHADOW_OFFSET_Y_KEY \
     GCONF_DIR "/shadow_offset_y"
 
+#define COMPIZ_SHADOW_COLOR_KEY \
+    GCONF_DIR "/shadow_color"
+
 #define STROKE_ALPHA 0.6
 
 #define ICON_SPACE 20
@@ -117,10 +120,13 @@
 #define WM_MOVERESIZE_SIZE_KEYBOARD     9
 #define WM_MOVERESIZE_MOVE_KEYBOARD    10
 
-#define SHADOW_RADIUS   8.0
-#define SHADOW_OPACITY  0.5
-#define SHADOW_OFFSET_X 1
-#define SHADOW_OFFSET_Y 1
+#define SHADOW_RADIUS      8.0
+#define SHADOW_OPACITY     0.5
+#define SHADOW_COLOR_RED   0x0000
+#define SHADOW_COLOR_GREEN 0x0000
+#define SHADOW_COLOR_BLUE  0x0000
+#define SHADOW_OFFSET_X    1
+#define SHADOW_OFFSET_Y    1
 
 #define N_QUADS_MAX 24
 
@@ -177,6 +183,9 @@
 
 static gdouble shadow_radius   = SHADOW_RADIUS;
 static gdouble shadow_opacity  = SHADOW_OPACITY;
+static gint    shadow_color[3] = {SHADOW_COLOR_RED,
+								  SHADOW_COLOR_GREEN,
+								  SHADOW_COLOR_BLUE};
 static gint    shadow_offset_x = SHADOW_OFFSET_X;
 static gint    shadow_offset_y = SHADOW_OFFSET_Y;
 
@@ -4316,7 +4325,7 @@
     cairo_t		*cr;
     decor_t		d;
     double		save_decoration_alpha;
-    static XRenderColor color = { 0x0000, 0x0000, 0x0000, 0xffff };
+    static XRenderColor color;
     static XRenderColor clear = { 0x0000, 0x0000, 0x0000, 0x0000 };
     static XRenderColor white = { 0xffff, 0xffff, 0xffff, 0xffff };
     XTransform          transform = {
@@ -4326,6 +4335,10 @@
 	    { 0,       0,                      1 << 16 },
 	}
     };
+	color.red   = shadow_color[0];
+	color.green = shadow_color[1];
+	color.blue  = shadow_color[2];
+	color.alpha = 0xffff;
 
     /* compute a gaussian convolution kernel */
     params = create_gaussian_kernel (shadow_radius,
@@ -4685,6 +4698,8 @@
 {
     double   radius, opacity;
     int      offset;
+	gchar*   colorName = NULL;
+	GdkColor color;
     gboolean changed = FALSE;
 
     radius = gconf_client_get_float (client,
@@ -4727,6 +4742,19 @@
 	changed = TRUE;
     }
 
+    colorName = gconf_client_get_string (client,
+				   COMPIZ_SHADOW_COLOR_KEY,
+				   NULL);
+    if (colorName);
+	{
+	gdk_color_parse (colorName, &color);
+	shadow_color[0] = color.red;
+	shadow_color[1] = color.green;
+	shadow_color[2] = color.blue;
+	changed = TRUE;
+	g_free (colorName);
+    }
+
     return changed;
 }
 
@@ -4756,7 +4784,8 @@
     else if (strcmp (key, COMPIZ_SHADOW_RADIUS_KEY)   == 0 ||
 	     strcmp (key, COMPIZ_SHADOW_OPACITY_KEY)  == 0 ||
 	     strcmp (key, COMPIZ_SHADOW_OFFSET_X_KEY) == 0 ||
-	     strcmp (key, COMPIZ_SHADOW_OFFSET_Y_KEY) == 0)
+	     strcmp (key, COMPIZ_SHADOW_OFFSET_Y_KEY) == 0 ||
+	     strcmp (key, COMPIZ_SHADOW_COLOR_KEY) == 0)
     {
 	if (shadow_settings_changed (client))
 	    changed = TRUE;
diff -Naur compiz_old/plugins/decoration.c compiz_new/plugins/decoration.c
--- compiz_old/plugins/decoration.c	2006-04-25 19:54:55.000000000 +0200
+++ compiz_new/plugins/decoration.c	2006-04-25 20:02:46.000000000 +0200
@@ -123,11 +123,16 @@
 #define DECOR_SHADOW_OFFSET_MIN     -16
 #define DECOR_SHADOW_OFFSET_MAX      16
 
+#define DECOR_SHADOW_COLOR_RED_DEFAULT   0x0000
+#define DECOR_SHADOW_COLOR_GREEN_DEFAULT 0x0000
+#define DECOR_SHADOW_COLOR_BLUE_DEFAULT  0x0000
+
 #define DECOR_DISPLAY_OPTION_SHADOW_RADIUS   0
 #define DECOR_DISPLAY_OPTION_SHADOW_OPACITY  1
 #define DECOR_DISPLAY_OPTION_SHADOW_OFFSET_X 2
 #define DECOR_DISPLAY_OPTION_SHADOW_OFFSET_Y 3
-#define DECOR_DISPLAY_OPTION_NUM             4
+#define DECOR_DISPLAY_OPTION_SHADOW_COLOR    4
+#define DECOR_DISPLAY_OPTION_NUM             5
 
 static int displayPrivateIndex;
 
@@ -135,6 +140,7 @@
     int		    screenPrivateIndex;
     HandleEventProc handleEvent;
     DecorTexture    *textures;
+	unsigned short int color[3];
     Atom	    supportingDmCheckAtom;
     Atom	    winDecorAtom;
     Atom	    decorAtom[DECOR_NUM];
@@ -217,6 +223,13 @@
     case DECOR_DISPLAY_OPTION_SHADOW_OFFSET_Y:
 	if (compSetIntOption (o, value))
 	    return TRUE;
+	break;
+    case DECOR_DISPLAY_OPTION_SHADOW_COLOR:
+	if (compSetColorOption (o, value))
+	{
+	    memcpy (dd->color, o->value.c, sizeof (dd->color));
+	    return TRUE;
+	}
     default:
 	break;
     }
@@ -266,6 +279,16 @@
     o->value.i		= DECOR_SHADOW_OFFSET_DEFAULT;
     o->rest.i.min	= DECOR_SHADOW_OFFSET_MIN;
     o->rest.i.max	= DECOR_SHADOW_OFFSET_MAX;
+
+    o = &dd->opt[DECOR_DISPLAY_OPTION_SHADOW_COLOR];
+    o->name		= "shadow_color";
+    o->shortDesc	= "Shadow Color";
+    o->longDesc		= "Drop shadow color";
+    o->type		= CompOptionTypeColor;
+    o->value.c[0] = DECOR_SHADOW_COLOR_RED_DEFAULT;
+    o->value.c[1] = DECOR_SHADOW_COLOR_GREEN_DEFAULT;
+    o->value.c[2] = DECOR_SHADOW_COLOR_BLUE_DEFAULT;
+    o->value.c[3] = 0xffff;
 }
 
 static Bool
