diff --git a/Common/Context.h b/Common/Context.h
index 94f25b58cd2556913c5741eb581fcef509f968f8..114223458ebee3638e1625b00102a42b191e418b 100644
--- a/Common/Context.h
+++ b/Common/Context.h
@@ -197,7 +197,7 @@ public :
   // print options 
   struct{
     int format;
-    int eps_quality, eps_background, eps_font_size, eps_compress;
+    int eps_quality, eps_background, eps_font_size, eps_compress, eps_ps3shading;
     int eps_occlusion_culling, eps_best_root;
     char *eps_font;
     double eps_line_width_factor, eps_point_size_factor;
diff --git a/Common/DefaultOptions.h b/Common/DefaultOptions.h
index 3efac05c4e032a6e34875e498110b623bb4cd5ac..52fe606a89e386f8f3ee848be6536241df205bdb 100644
--- a/Common/DefaultOptions.h
+++ b/Common/DefaultOptions.h
@@ -1053,6 +1053,8 @@ StringXNumber PrintOptions_Number[] = {
     "Cull occluded primitives (to reduce PostScript/PDF file size)" },
   { F|O, "EpsPointSizeFactor" , opt_print_eps_point_size_factor , 1.0 ,
     "Size factor for points in PostScript/PDF output" },
+  { F|O, "EpsPS3Shading" , opt_print_eps_ps3shading , 0. ,
+    "Enable PostScript Level 3 shading" },
   { F|O, "EpsQuality" , opt_print_eps_quality , 1. ,
     "PostScript/PDF quality (1=simple sort, 2=BSP tree sort)" },
 
diff --git a/Common/Options.cpp b/Common/Options.cpp
index 296436ef52beed88fa7315d08882f9d6e415e5d5..e3a6a1d2562efc1fd5fb4a45dd8a41b7f90fc1ae 100644
--- a/Common/Options.cpp
+++ b/Common/Options.cpp
@@ -1,4 +1,4 @@
-// $Id: Options.cpp,v 1.139 2004-03-30 18:17:06 geuzaine Exp $
+// $Id: Options.cpp,v 1.140 2004-04-08 18:12:10 geuzaine Exp $
 //
 // Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle
 //
@@ -4754,6 +4754,13 @@ double opt_print_eps_compress(OPT_ARGS_NUM)
   return CTX.print.eps_compress;
 }
 
+double opt_print_eps_ps3shading(OPT_ARGS_NUM)
+{
+  if(action & GMSH_SET)
+    CTX.print.eps_ps3shading = (int)val;
+  return CTX.print.eps_ps3shading;
+}
+
 double opt_print_eps_quality(OPT_ARGS_NUM)
 {
   if(action & GMSH_SET)
diff --git a/Common/Options.h b/Common/Options.h
index 4b730fd3076a0886aedafd51278ced715a8673af..0726d3d6f55f6de1350948778eeb6ec5294774c6 100644
--- a/Common/Options.h
+++ b/Common/Options.h
@@ -480,6 +480,7 @@ double opt_view_point_type(OPT_ARGS_NUM);
 double opt_view_line_type(OPT_ARGS_NUM);
 double opt_print_format(OPT_ARGS_NUM);
 double opt_print_eps_compress(OPT_ARGS_NUM);
+double opt_print_eps_ps3shading(OPT_ARGS_NUM);
 double opt_print_eps_quality(OPT_ARGS_NUM);
 double opt_print_eps_occlusion_culling(OPT_ARGS_NUM);
 double opt_print_eps_best_root(OPT_ARGS_NUM);
diff --git a/Graphics/CreateFile.cpp b/Graphics/CreateFile.cpp
index 0c688e1f2de61d0f7d292cfa304c9b63c0cb0220..29b0b32160ec469441b54bc350694186b6a7f0cb 100644
--- a/Graphics/CreateFile.cpp
+++ b/Graphics/CreateFile.cpp
@@ -1,4 +1,4 @@
-// $Id: CreateFile.cpp,v 1.54 2004-03-06 00:19:19 geuzaine Exp $
+// $Id: CreateFile.cpp,v 1.55 2004-04-08 18:12:10 geuzaine Exp $
 //
 // Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle
 //
@@ -247,6 +247,7 @@ void CreateOutputFile(char *name, int format)
 	(CTX.print.eps_best_root ? GL2PS_BEST_ROOT : 0) |
 	(CTX.print.eps_background ? GL2PS_DRAW_BACKGROUND : 0) |
 	(CTX.print.eps_compress ? GL2PS_COMPRESS : 0) |
+	(CTX.print.eps_ps3shading ? 0 : GL2PS_NO_PS3_SHADING) |
 	(format == FORMAT_EPSTEX ? GL2PS_NO_TEXT : 0) |
 	(format == FORMAT_PDFTEX ? GL2PS_NO_TEXT : 0) |
 	(format == FORMAT_EPSTEX_RASTER ? GL2PS_NO_TEXT : 0) |