diff --git a/Fltk/Callbacks.cpp b/Fltk/Callbacks.cpp
index 268f65d6f70737118cab77db0ca655ce0ad4fe05..201af35438eb798669dabff544a7a7f741b93acd 100644
--- a/Fltk/Callbacks.cpp
+++ b/Fltk/Callbacks.cpp
@@ -1,4 +1,4 @@
-// $Id: Callbacks.cpp,v 1.474 2006-11-19 02:23:49 geuzaine Exp $
+// $Id: Callbacks.cpp,v 1.475 2006-11-21 08:01:05 guzik Exp $
 //
 // Copyright (C) 1997-2006 C. Geuzaine, J.-F. Remacle
 //
@@ -693,6 +693,12 @@ int _save_stl(char *name)
   return stl_dialog(name);
 }
 
+int _save_cgns(char *name)
+{
+  CreateOutputFile(name, FORMAT_CGNS);
+  return 1;
+}
+
 int _save_ps(char *name)
 {
   return gl2ps_dialog(name, "PS Options", FORMAT_PS);
@@ -752,6 +758,7 @@ int _save_auto(char *name)
   case FORMAT_UNV     : return _save_unv(name);
   case FORMAT_BDF     : return _save_bdf(name);
   case FORMAT_STL     : return _save_stl(name);
+  case FORMAT_CGNS    : return _save_cgns(name);
   case FORMAT_PS      : return _save_ps(name);
   case FORMAT_EPS     : return _save_eps(name);
   case FORMAT_PDF     : return _save_pdf(name);
@@ -789,6 +796,9 @@ void file_save_as_cb(CALLBACK_ARGS)
     {"Nastran bulk data file (*.bdf)", _save_bdf},
     {"STL surface mesh (*.stl)", _save_stl},
     {"VRML surface mesh (*.wrl)", _save_vrml},
+#if defined(HAVE_LIBCGNS)
+    {"CGNS (*.cgns)", _save_cgns},
+#endif
     {"   ", _save_auto},
     {"Encapsulated PostScript (*.eps)", _save_eps},
     {"GIF (*.gif)", _save_gif},
diff --git a/Parser/CreateFile.cpp b/Parser/CreateFile.cpp
index 8f1bb301f6315d5164c3a258d58c8ac122e369a8..62923bf3c8df4efea69bd1ecb55836a5d36d5f20 100644
--- a/Parser/CreateFile.cpp
+++ b/Parser/CreateFile.cpp
@@ -1,4 +1,4 @@
-// $Id: CreateFile.cpp,v 1.9 2006-10-10 00:44:42 geuzaine Exp $
+// $Id: CreateFile.cpp,v 1.10 2006-11-21 08:00:30 guzik Exp $
 //
 // Copyright (C) 1997-2006 C. Geuzaine, J.-F. Remacle
 //
@@ -59,6 +59,7 @@ int GuessFileFormatFromFileName(char *name)
   else if(!strcmp(ext, ".opt"))     return FORMAT_OPT;
   else if(!strcmp(ext, ".unv"))     return FORMAT_UNV;
   else if(!strcmp(ext, ".stl"))     return FORMAT_STL;
+  else if(!strcmp(ext, ".cgns"))    return FORMAT_CGNS;
   else if(!strcmp(ext, ".mesh"))    return FORMAT_MESH;
   else if(!strcmp(ext, ".bdf"))     return FORMAT_BDF;
   else if(!strcmp(ext, ".nas"))     return FORMAT_BDF;
@@ -89,6 +90,7 @@ void GetDefaultFileName(int format, char *name)
   case FORMAT_OPT:  strcpy(ext, ".opt"); break;
   case FORMAT_UNV:  strcpy(ext, ".unv"); break;
   case FORMAT_STL:  strcpy(ext, ".stl"); break;
+  case FORMAT_CGNS: strcpy(ext, ".cgns"); break;
   case FORMAT_MESH: strcpy(ext, ".mesh"); break;
   case FORMAT_BDF:  strcpy(ext, ".bdf"); break;
   case FORMAT_VRML: strcpy(ext, ".wrl"); break;
@@ -167,6 +169,10 @@ void CreateOutputFile(char *filename, int format)
 		     CTX.mesh.scaling_factor);
     break;
 
+  case FORMAT_CGNS:
+    GMODEL->writeCGNS(name, CTX.mesh.scaling_factor);
+    break;
+
   case FORMAT_POS:
     GMODEL->writePOS(name);
     break;