diff --git a/Common/DefaultOptions.h b/Common/DefaultOptions.h
index 895b09b2b14a850140789546dee3fb45cff0b341..e7638f1bc5d46b479ed142606a4f5efdb10601a5 100644
--- a/Common/DefaultOptions.h
+++ b/Common/DefaultOptions.h
@@ -469,7 +469,7 @@ StringXNumber GeneralOptions_Number[] = {
   { F|O, "AxesTicsZ" , opt_general_axes_tics2 , 5. ,
     "Number of tics on the Z-axis" },
   { F|O, "BackgroundGradient" , opt_general_background_gradient , 0. ,
-    "Draw background gradient (0=none, 1=vertical, 2=horizontal)" },
+    "Draw background gradient (0=none, 1=vertical, 2=horizontal, 3=radial)" },
   { F,   "Clip0" , opt_general_clip0 , 0. ,
     "Enable clipping plane 0 (Geometry=2^0, Mesh=2^1, View[i]=2^(2+i))" },
   { F,   "Clip0A" , opt_general_clip0a , 1.0 ,
diff --git a/Common/Options.cpp b/Common/Options.cpp
index de4c7437b67333449fab355b73cb8eae450c42fb..74952095b897a9fc686ad529f521754c2ab3bb2e 100644
--- a/Common/Options.cpp
+++ b/Common/Options.cpp
@@ -1,4 +1,4 @@
-// $Id: Options.cpp,v 1.267 2005-12-20 23:17:28 geuzaine Exp $
+// $Id: Options.cpp,v 1.268 2005-12-21 02:01:26 geuzaine Exp $
 //
 // Copyright (C) 1997-2005 C. Geuzaine, J.-F. Remacle
 //
@@ -3106,7 +3106,7 @@ double opt_general_background_gradient(OPT_ARGS_NUM)
 {
   if(action & GMSH_SET){
     CTX.bg_gradient = (int)val;
-    if(CTX.bg_gradient < 0 || CTX.bg_gradient > 2)
+    if(CTX.bg_gradient < 0 || CTX.bg_gradient > 3)
       CTX.bg_gradient = 0;
   }
 #if defined(HAVE_FLTK)
diff --git a/Fltk/GUI.cpp b/Fltk/GUI.cpp
index 3434d7718492bb8689bac9071e6a310cac5cfc5c..cf5cf06188a181b4f3b6945a765e7b341c5b9d08 100644
--- a/Fltk/GUI.cpp
+++ b/Fltk/GUI.cpp
@@ -1,4 +1,4 @@
-// $Id: GUI.cpp,v 1.474 2005-12-18 22:13:26 geuzaine Exp $
+// $Id: GUI.cpp,v 1.475 2005-12-21 02:01:27 geuzaine Exp $
 //
 // Copyright (C) 1997-2005 C. Geuzaine, J.-F. Remacle
 //
@@ -1985,6 +1985,7 @@ void GUI::create_option_window()
 	{"None", 0, 0, 0},
 	{"Vertical", 0, 0, 0},
 	{"Horizontal", 0, 0, 0},
+	{"Radial", 0, 0, 0},
 	{0}
       };
 
diff --git a/Graphics/Draw.cpp b/Graphics/Draw.cpp
index 558de666bd06cad54a417a8f20f6e92f2064df9f..770be8b0172b50688f6cfadf1c3331ca5f6d6383 100644
--- a/Graphics/Draw.cpp
+++ b/Graphics/Draw.cpp
@@ -1,4 +1,4 @@
-// $Id: Draw.cpp,v 1.88 2005-12-19 05:08:05 geuzaine Exp $
+// $Id: Draw.cpp,v 1.89 2005-12-21 02:01:28 geuzaine Exp $
 //
 // Copyright (C) 1997-2005 C. Geuzaine, J.-F. Remacle
 //
@@ -217,24 +217,42 @@ void InitProjection(int x, int y)
     glPushMatrix();
     glLoadIdentity();
     glTranslated(0., 0., -grad_z);
-    glBegin(GL_QUADS);
-    if(CTX.bg_gradient == 1){
+    if(CTX.bg_gradient == 1){ // vertical
+      glBegin(GL_QUADS);
       glColor4ubv((GLubyte *) & CTX.color.bg);
       glVertex3d(grad_xy * CTX.vxmin, grad_xy * CTX.vymin, 0.);
       glVertex3d(grad_xy * CTX.vxmax, grad_xy * CTX.vymin, 0.);
       glColor4ubv((GLubyte *) & CTX.color.bg_grad);
       glVertex3d(grad_xy * CTX.vxmax, grad_xy * CTX.vymax, 0.);
       glVertex3d(grad_xy * CTX.vxmin, grad_xy * CTX.vymax, 0.);
+      glEnd();
     }
-    else{
+    else if(CTX.bg_gradient == 2){ // horizontal
+      glBegin(GL_QUADS);
       glColor4ubv((GLubyte *) & CTX.color.bg);
       glVertex3d(grad_xy * CTX.vxmax, grad_xy * CTX.vymin, 0.);
       glVertex3d(grad_xy * CTX.vxmax, grad_xy * CTX.vymax, 0.);
       glColor4ubv((GLubyte *) & CTX.color.bg_grad);
       glVertex3d(grad_xy * CTX.vxmin, grad_xy * CTX.vymax, 0.);
       glVertex3d(grad_xy * CTX.vxmin, grad_xy * CTX.vymin, 0.);
+      glEnd();
+    }
+    else{ // radial
+      double cx = grad_xy * (CTX.vxmin + CTX.vxmax) / 2.;
+      double cy = grad_xy * (CTX.vymin + CTX.vymax) / 2.;
+      double r = MAX(CTX.vxmax - CTX.vxmin, CTX.vymax - CTX.vymin) / 2.;
+      glBegin(GL_TRIANGLE_FAN);
+      glColor4ubv((GLubyte *) & CTX.color.bg_grad);
+      glVertex3d(cx, cy, 0.);
+      glColor4ubv((GLubyte *) & CTX.color.bg);
+      glVertex3d(cx + r, cy, 0.);
+      int ntheta = 36;
+      for(int i = 1; i < ntheta + 1; i ++){
+	double theta = i * 2 * M_PI / (double)ntheta;
+	glVertex3d(cx + r * cos(theta), cy + r * sin(theta), 0.);	
+      }
+      glEnd();
     }
-    glEnd();
     glPopMatrix();
   }
 }