diff --git a/Common/CreateFile.cpp b/Common/CreateFile.cpp
index 721ba257217b6b62760a396c8b505b3a27b22bd2..f744e81f1ec5484322bf62cc01199dc48c4b51c5 100644
--- a/Common/CreateFile.cpp
+++ b/Common/CreateFile.cpp
@@ -71,6 +71,7 @@ int GetFileFormatFromExtension(const std::string &ext)
   else if(ext == ".pdf")  return FORMAT_PDF;
   else if(ext == ".tex")  return FORMAT_TEX;
   else if(ext == ".svg")  return FORMAT_SVG;
+  else if(ext == ".tikz") return FORMAT_TIKZ;
   else if(ext == ".ppm")  return FORMAT_PPM;
   else if(ext == ".yuv")  return FORMAT_YUV;
   else if(ext == ".brep") return FORMAT_BREP;
@@ -120,12 +121,13 @@ std::string GetDefaultFileName(int format)
   case FORMAT_JPEG: name += ".jpg"; break;
   case FORMAT_MPEG: name += ".mpg"; break;
   case FORMAT_PNG:  name += ".png"; break;
-  case FORMAT_PGF:  name += ".todo"; break;
+  case FORMAT_PGF:  name += ".pgf"; break;
   case FORMAT_PS:   name += ".ps"; break;
   case FORMAT_EPS:  name += ".eps"; break;
   case FORMAT_PDF:  name += ".pdf"; break;
   case FORMAT_TEX:  name += ".tex"; break;
   case FORMAT_SVG:  name += ".svg"; break;
+  case FORMAT_TIKZ: name += ".tikz"; break;
   case FORMAT_PPM:  name += ".ppm"; break;
   case FORMAT_YUV:  name += ".yuv"; break;
   case FORMAT_BREP: name += ".brep"; break;
@@ -437,6 +439,7 @@ void CreateOutputFile(const std::string &fileName, int format,
   case FORMAT_EPS:
   case FORMAT_PDF:
   case FORMAT_SVG:
+  case FORMAT_TIKZ:
     {
       if(!FlGui::available()) break;
 
@@ -460,6 +463,7 @@ void CreateOutputFile(const std::string &fileName, int format,
         (format == FORMAT_PDF) ? GL2PS_PDF :
         (format == FORMAT_PS) ? GL2PS_PS :
         (format == FORMAT_SVG) ? GL2PS_SVG :
+        (format == FORMAT_TIKZ) ? GL2PS_PGF :
         GL2PS_EPS;
       int pssort =
         (CTX::instance()->print.epsQuality == 3) ? GL2PS_NO_SORT :
diff --git a/Common/GmshDefines.h b/Common/GmshDefines.h
index e80216beef89d4a488c5d2abaaa5db4c56d5844d..630462e3fd90e1cf2571754bc7be9ec00270d903 100644
--- a/Common/GmshDefines.h
+++ b/Common/GmshDefines.h
@@ -54,6 +54,7 @@
 #define FORMAT_PVTU  45
 #define FORMAT_X3D   46
 #define FORMAT_TOCHNOG 47
+#define FORMAT_TIKZ  48
 
 // Element types
 #define TYPE_PNT     1
diff --git a/Fltk/fileDialogs.cpp b/Fltk/fileDialogs.cpp
index 2dda82b3a82b3ef8741eb2633cb26e11307afd14..b0e7ce1e1c36e328819816fbb2a319dede208f61 100644
--- a/Fltk/fileDialogs.cpp
+++ b/Fltk/fileDialogs.cpp
@@ -688,26 +688,23 @@ static void activate_gl2ps_choices(int format, int quality, Fl_Check_Button *b[5
     b[1]->deactivate();
     b[2]->deactivate();
     b[3]->deactivate();
-    b[4]->deactivate();
     break;
   case 1: // simple sort
   case 3: // unsorted
     b[1]->activate();
-    b[2]->activate();
-    b[3]->deactivate();
-    if(format == FORMAT_PDF || format == FORMAT_SVG)
-      b[4]->deactivate();
+    b[2]->deactivate();
+    if(format == FORMAT_PS || format == FORMAT_EPS)
+      b[3]->activate();
     else
-      b[4]->activate();
+      b[3]->deactivate();
     break;
   case 2: // bsp sort
     b[1]->activate();
     b[2]->activate();
-    b[3]->activate();
-    if(format == FORMAT_PDF || format == FORMAT_SVG)
-      b[4]->deactivate();
+    if(format == FORMAT_PS || format == FORMAT_EPS)
+      b[3]->activate();
     else
-      b[4]->activate();
+      b[3]->deactivate();
     break;
   }
 }
diff --git a/Fltk/graphicWindow.cpp b/Fltk/graphicWindow.cpp
index 7689c0d2ca0cbeb1ae6c411ecc04812bb458aa64..edc64013964b43f0fd61156db2f5a71e0d7c2fe4 100644
--- a/Fltk/graphicWindow.cpp
+++ b/Fltk/graphicWindow.cpp
@@ -335,6 +335,8 @@ static int _save_ppm(const char *name){ return genericBitmapFileDialog
     (name, "PPM Options", FORMAT_PPM); }
 static int _save_svg(const char *name){ return gl2psFileDialog
     (name, "SVG Options", FORMAT_SVG); }
+static int _save_tikz(const char *name){ return gl2psFileDialog
+    (name, "TIKZ Options", FORMAT_TIKZ); }
 static int _save_yuv(const char *name){ return genericBitmapFileDialog
     (name, "YUV Options", FORMAT_YUV); }
 static int _save_view_pos(const char *name){ return posFileDialog(name); }
@@ -389,6 +391,7 @@ static int _save_auto(const char *name)
   case FORMAT_PS   : return _save_ps(name);
   case FORMAT_PPM  : return _save_ppm(name);
   case FORMAT_SVG  : return _save_svg(name);
+  case FORMAT_TIKZ : return _save_tikz(name);
   case FORMAT_YUV  : return _save_yuv(name);
   default :
     CreateOutputFile(name, FORMAT_AUTO);
@@ -455,6 +458,7 @@ static void file_export_cb(Fl_Widget *w, void *data)
     {"Image - PostScript" TT "*.ps", _save_ps},
     {"Image - PPM" TT "*.ppm", _save_ppm},
     {"Image - SVG" TT "*.svg", _save_svg},
+    {"Image - TIKZ" TT "*.tikz", _save_tikz},
     {"Image - YUV" TT "*.yuv", _save_yuv},
 #if defined(HAVE_MPEG_ENCODE)
     {"Movie - MPEG" TT "*.mpg", _save_mpeg},
diff --git a/Graphics/drawGlyph.cpp b/Graphics/drawGlyph.cpp
index 5834e8934baa4cbc95abc34aac76b76a58407d5d..557e59f4e99f432377f18b94fbbf33de873996d1 100644
--- a/Graphics/drawGlyph.cpp
+++ b/Graphics/drawGlyph.cpp
@@ -86,7 +86,8 @@ void drawContext::drawString(const std::string &s, double x, double y, double z,
             (CTX::instance()->print.fileFormat == FORMAT_PS ||
              CTX::instance()->print.fileFormat == FORMAT_EPS ||
              CTX::instance()->print.fileFormat == FORMAT_PDF ||
-             CTX::instance()->print.fileFormat == FORMAT_SVG)){
+             CTX::instance()->print.fileFormat == FORMAT_SVG ||
+             CTX::instance()->print.fileFormat == FORMAT_TIKZ)){
       gl2psText(s.c_str(), font_name.c_str(), font_size);
     }
     else{