diff --git a/Common/CommandLine.cpp b/Common/CommandLine.cpp
index f0e3b18e0ec5d337eb563598155b4911d8107d34..09b8c78e0c84f55ffd0424a6333290ef411fe361 100644
--- a/Common/CommandLine.cpp
+++ b/Common/CommandLine.cpp
@@ -1,4 +1,4 @@
-// $Id: CommandLine.cpp,v 1.99 2007-04-26 09:47:37 remacle Exp $
+// $Id: CommandLine.cpp,v 1.100 2007-05-05 02:08:57 geuzaine Exp $
 //
 // Copyright (C) 1997-2007 C. Geuzaine, J.-F. Remacle
 //
@@ -83,6 +83,7 @@ void Print_Usage(char *name){
   Msg(DIRECT, "  -o file               Specify mesh output file name");
   Msg(DIRECT, "  -format string        Set output mesh format (msh, msh1, msh2, unv, vrml, stl, mesh,");
   Msg(DIRECT, "                          bdf, p3d, cgns, med)");
+  Msg(DIRECT, "  -bin                  Use binary format when available");  
   Msg(DIRECT, "  -algo string          Select mesh algorithm (iso, netgen, tetgen)");
   Msg(DIRECT, "  -smooth int           Set number of mesh smoothing steps");
   Msg(DIRECT, "  -optimize             Optimize quality of tetrahedral elements");
@@ -425,6 +426,10 @@ void Get_Options(int argc, char *argv[])
           exit(1);
         }
       }
+      else if(!strcmp(argv[i] + 1, "bin")) {
+        i++;
+	CTX.mesh.stl_binary = CTX.mesh.msh_binary = 1;
+      }
       else if(!strcmp(argv[i] + 1, "algo")) {
         i++;
         if(argv[i] != NULL) {
diff --git a/Geo/GModelIO_Fourier.cpp b/Geo/GModelIO_Fourier.cpp
index e70198ca8f5f98c673b1e763ccb05cad70bd56a9..91b4729dee5ee2a20ce6159fbfd7ded13ef68726 100644
--- a/Geo/GModelIO_Fourier.cpp
+++ b/Geo/GModelIO_Fourier.cpp
@@ -1,19 +1,101 @@
 #include "GModel.h"
-#include "fourierFace.h"
+#include "GVertex.h"
+#include "GEdge.h"
+#include "GFace.h"
 #include "gmshFace.h"
 #include "Message.h"
 #include "Context.h"
 #include "Views.h"
+#include "Range.h"
+#include "model.h"
+#include "meshGFace.h"
 
 extern Context_T CTX;
 
 #if defined(HAVE_FOURIER_MODEL)
 
-#include "model.h"
-#include "meshGFace.h"
-
 static model *FM = 0;
 
+class fourierVertex : public GVertex {
+ private:
+  MVertex *_v;
+ public:
+  fourierVertex(GModel *m, MVertex *v) : GVertex(m, v->getNum()), _v(v)
+  {
+    mesh_vertices.push_back(v);
+  }
+  virtual ~fourierVertex() {}
+  virtual GPoint point() const { return GPoint(_v->x(), _v->y(), _v->z(), this); }
+  virtual double x() const { return _v->x(); }
+  virtual double y() const { return _v->y(); }
+  virtual double z() const { return _v->z(); }
+  virtual double prescribedMeshSizeAtVertex() const { return 0.1; }
+  ModelType getNativeType() const { return FourierModel; }
+};
+
+class fourierEdge : public GEdge {
+ public:
+  fourierEdge(GModel *m, int num, GVertex *v1, GVertex *v2);
+  virtual ~fourierEdge() {}
+  double period() const { throw ; }
+  virtual bool periodic(int dim=0) const { return false; }
+  virtual Range<double> parBounds(int i) const { throw; }
+  virtual GeomType geomType() const { throw; }
+  virtual bool degenerate(int) const { return false; }
+  virtual bool continuous(int dim) const { return true; }
+  virtual GPoint point(double p) const { throw; }
+  virtual GPoint closestPoint(const SPoint3 & queryPoint) { throw; }
+  virtual int containsPoint(const SPoint3 &pt) const { throw; }
+  virtual int containsParam(double pt) const { throw; }
+  virtual SVector3 firstDer(double par) const { throw; }
+  virtual SPoint2 reparamOnFace(GFace * face, double epar, int dir) const { throw; }
+  virtual double parFromPoint(const SPoint3 &pt) const { throw; }
+  virtual int minimumMeshSegments () const { throw; }
+  virtual int minimumDrawSegments () const { throw; }
+  ModelType getNativeType() const { return FourierModel; }
+};
+
+class fourierFace : public GFace {
+ private:
+  // flag to know if is the face is already meshed
+  int _discrete;
+  // floag to know if the face is just a plane
+  int _plane;
+  // vertices and edges purely local to the face (not shared with the model)
+  GVertex *_v[4];
+  GEdge *_e[4];
+ public:
+  fourierFace(GModel *m, int num);
+  fourierFace(GFace *f, std::vector<MVertex*> &loop, std::vector<MVertex*> &hole);
+  virtual ~fourierFace();
+
+  void meshBoundary();
+
+  Range<double> parBounds(int i) const; 
+  virtual int paramDegeneracies(int dir, double *par) { return 0; }
+  
+  virtual GPoint point(double par1, double par2) const; 
+  virtual GPoint closestPoint(const SPoint3 & queryPoint) const ; 
+  
+  virtual int containsPoint(const SPoint3 &pt) const;  
+  virtual int containsParam(const SPoint2 &pt) const; 
+  
+  virtual SVector3 normal(const SPoint2 &param) const; 
+  virtual Pair<SVector3,SVector3> firstDer(const SPoint2 &param) const {throw;} 
+  
+  virtual GEntity::GeomType geomType() const; 
+  virtual int geomDirection() const { return 1; }
+  
+  virtual bool continuous(int dim) const { return true; }
+  virtual bool periodic(int dim) const { return false; }
+  virtual bool degenerate(int dim) const { return false; }
+  virtual double period(int dir) const {throw;}
+  ModelType getNativeType() const { return FourierModel; }
+  void * getNativePtr() const {throw;} 
+  virtual bool surfPeriodic(int dim) const {throw;}
+  virtual SPoint2 parFromPoint(const SPoint3 &) const;
+};
+
 void debugVertices(std::vector<MVertex*> &vertices, std::string file, 
 		   bool parametric, int num=0)
 {
diff --git a/Geo/fourierFace.h b/Geo/fourierFace.h
deleted file mode 100644
index 0c56386f0ad299ffda90145982ab1524b7eff8d3..0000000000000000000000000000000000000000
--- a/Geo/fourierFace.h
+++ /dev/null
@@ -1,95 +0,0 @@
-#ifndef _FOURIER_MODEL_H_
-#define _FOURIER_MODEL_H_
-
-#include "GModel.h"
-
-#if defined(HAVE_FOURIER_MODEL)
-
-#include "GVertex.h"
-#include "GEdge.h"
-#include "GFace.h"
-#include "Range.h"
-
-class fourierVertex : public GVertex {
- private:
-  MVertex *_v;
- public:
-  fourierVertex(GModel *m, MVertex *v) : GVertex(m, v->getNum()), _v(v)
-  {
-    mesh_vertices.push_back(v);
-  }
-  virtual ~fourierVertex() {}
-  virtual GPoint point() const { return GPoint(_v->x(), _v->y(), _v->z(), this); }
-  virtual double x() const { return _v->x(); }
-  virtual double y() const { return _v->y(); }
-  virtual double z() const { return _v->z(); }
-  virtual double prescribedMeshSizeAtVertex() const { return 0.1; }
-  ModelType getNativeType() const { return FourierModel; }
-};
-
-class fourierEdge : public GEdge {
- public:
-  fourierEdge(GModel *m, int num, GVertex *v1, GVertex *v2);
-  virtual ~fourierEdge() {}
-  double period() const { throw ; }
-  virtual bool periodic(int dim=0) const { return false; }
-  virtual Range<double> parBounds(int i) const { throw; }
-  virtual GeomType geomType() const { throw; }
-  virtual bool degenerate(int) const { return false; }
-  virtual bool continuous(int dim) const { return true; }
-  virtual GPoint point(double p) const { throw; }
-  virtual GPoint closestPoint(const SPoint3 & queryPoint) { throw; }
-  virtual int containsPoint(const SPoint3 &pt) const { throw; }
-  virtual int containsParam(double pt) const { throw; }
-  virtual SVector3 firstDer(double par) const { throw; }
-  virtual SPoint2 reparamOnFace(GFace * face, double epar, int dir) const { throw; }
-  virtual double parFromPoint(const SPoint3 &pt) const { throw; }
-  virtual int minimumMeshSegments () const { throw; }
-  virtual int minimumDrawSegments () const { throw; }
-  ModelType getNativeType() const { return FourierModel; }
-};
-
-class fourierFace : public GFace {
- private:
-  // flag to know if is the face is already meshed
-  int _discrete;
-  // floag to know if the face is just a plane
-  int _plane;
-  // vertices and edges purely local to the face (not shared with the model)
-  GVertex *_v[4];
-  GEdge *_e[4];
- public:
-  fourierFace(GModel *m, int num);
-  fourierFace(GFace *f, std::vector<MVertex*> &loop, std::vector<MVertex*> &hole);
-  virtual ~fourierFace();
-
-  void meshBoundary();
-
-  Range<double> parBounds(int i) const; 
-  virtual int paramDegeneracies(int dir, double *par) { return 0; }
-  
-  virtual GPoint point(double par1, double par2) const; 
-  virtual GPoint closestPoint(const SPoint3 & queryPoint) const ; 
-  
-  virtual int containsPoint(const SPoint3 &pt) const;  
-  virtual int containsParam(const SPoint2 &pt) const; 
-  
-  virtual SVector3 normal(const SPoint2 &param) const; 
-  virtual Pair<SVector3,SVector3> firstDer(const SPoint2 &param) const {throw;} 
-  
-  virtual GEntity::GeomType geomType() const; 
-  virtual int geomDirection() const { return 1; }
-  
-  virtual bool continuous(int dim) const { return true; }
-  virtual bool periodic(int dim) const { return false; }
-  virtual bool degenerate(int dim) const { return false; }
-  virtual double period(int dir) const {throw;}
-  ModelType getNativeType() const { return FourierModel; }
-  void * getNativePtr() const {throw;} 
-  virtual bool surfPeriodic(int dim) const {throw;}
-  virtual SPoint2 parFromPoint(const SPoint3 &) const;
-};
-
-#endif
-
-#endif
diff --git a/doc/texinfo/command_line.texi b/doc/texinfo/command_line.texi
index a638438d0395a880a8f9390634e8552df7bf0b51..d8d5e241ea80a6e4d2d714b82493ead26ba7daf3 100644
--- a/doc/texinfo/command_line.texi
+++ b/doc/texinfo/command_line.texi
@@ -20,6 +20,8 @@ Save all elements (discard physical group definitions)
 Specify mesh output file name
 @item -format string
 Set output mesh format (msh, unv, vrml, stl, mesh, bdf, p3d, cgns, med)
+@item -bin
+Use binary format when available
 @item -algo string
 Select mesh algorithm (iso, netgen, tetgen)
 @item -smooth int