diff --git a/Common/CommandLine.cpp b/Common/CommandLine.cpp
index 73011a72e12b1bbda025caff409cdd0a5dcb6c05..e8d8c1fae94f86f40caff3a37257d206c0632a48 100644
--- a/Common/CommandLine.cpp
+++ b/Common/CommandLine.cpp
@@ -36,6 +36,10 @@
 #include "periodical.h"
 #endif
 
+#if defined(HAVE_PARSER)
+#include "Parser.h"
+#endif
+
 int GetGmshMajorVersion(){ return GMSH_MAJOR_VERSION; }
 int GetGmshMinorVersion(){ return GMSH_MINOR_VERSION; }
 int GetGmshPatchVersion(){ return GMSH_PATCH_VERSION; }
@@ -123,7 +127,9 @@ std::vector<std::pair<std::string, std::string> > GetUsage()
   s.push_back(mp("-watch pattern",     "Pattern of files to merge as they become available"));
   s.push_back(mp("-v int",             "Set verbosity level"));
   s.push_back(mp("-nopopup",           "Don't popup dialog windows in scripts"));
-  s.push_back(mp("-string \"string\"", "Parse option string at startup"));
+  s.push_back(mp("-string \"string\"", "Parse command string at startup"));
+  s.push_back(mp("-setnumber name value", "Set constant number name=value"));
+  s.push_back(mp("-setstring name value", "Set constant string name=value"));
   s.push_back(mp("-option file",       "Parse option file at startup"));
   s.push_back(mp("-convert files",     "Convert files into latest binary formats, then exit"));
   s.push_back(mp("-version",           "Show version number"));
@@ -542,6 +548,27 @@ void GetOptions(int argc, char *argv[])
         else
           Msg::Fatal("Missing string");
       }
+#if defined(HAVE_PARSER)
+      else if(!strcmp(argv[i] + 1, "setstring")) {
+        i++;
+	if (i + 1 < argc && argv[i][0] != '-' && argv[i + 1][0] != '-') {
+          gmsh_yystringsymbols[argv[i]] = argv[i + 1];
+          i += 2;
+	}
+        else
+          Msg::Fatal("Missing name and/or value for string definition");
+      }
+      else if (!strcmp(argv[i]+1, "setnumber")) {
+        i++;
+	if (i + 1 < argc && argv[i][0] != '-' && argv[i + 1][0] != '-') {
+          std::vector<double> val(1, atof(argv[i + 1]));
+          gmsh_yysymbols[argv[i]].value = val;
+          i += 2;
+	}
+        else
+          Msg::Error("Missing name and/or value for number definition");
+      }
+#endif
       else if(!strcmp(argv[i] + 1, "option")) {
         i++;
         if(argv[i])
diff --git a/Common/OpenFile.cpp b/Common/OpenFile.cpp
index 1ae820e65e1b9fa15ddc8849e21d143dcfdcb5f7..8f0729c94adee1a46a04d49c9877b0257bfa7d72 100644
--- a/Common/OpenFile.cpp
+++ b/Common/OpenFile.cpp
@@ -595,6 +595,7 @@ void ClearProject()
 #endif
 #if defined(HAVE_PARSER)
   gmsh_yysymbols.clear();
+  gmsh_yystringsymbols.clear();
 #endif
   for(int i = GModel::list.size() - 1; i >= 0; i--)
     delete GModel::list[i];
@@ -638,11 +639,15 @@ void OpenProject(const std::string &fileName, bool setWindowTitle)
     GModel::current()->destroy();
     GModel::current()->getGEOInternals()->destroy();
     // don't clear the parser variables if we just launched gmsh with the
-    // -string command line option
+    // -string, -setstring or -setnumber command line options
 #if defined(HAVE_PARSER)
     std::string c = Msg::GetCommandLineArgs();
-    if(c.find("-string") == std::string::npos)
+    if(c.find("-string") == std::string::npos &&
+       c.find("-setstring") == std::string::npos &&
+       c.find("-setnumber") == std::string::npos){
       gmsh_yysymbols.clear();
+      gmsh_yystringsymbols.clear();
+    }
 #endif
   }
   else{
@@ -650,6 +655,7 @@ void OpenProject(const std::string &fileName, bool setWindowTitle)
     // variables and add a new model
 #if defined(HAVE_PARSER)
     gmsh_yysymbols.clear();
+    gmsh_yystringsymbols.clear();
 #endif
     new GModel();
     GModel::current(GModel::list.size() - 1);
diff --git a/Parser/Gmsh.tab.cpp b/Parser/Gmsh.tab.cpp
index ccb96bd4a5055d16464a19dac85c07b93bbc63d5..58e08c8290fe4b7dc99846a52cb093dd9c5f8aca 100644
--- a/Parser/Gmsh.tab.cpp
+++ b/Parser/Gmsh.tab.cpp
@@ -457,9 +457,9 @@ std::string gmsh_yyname;
 int gmsh_yyerrorstate = 0;
 int gmsh_yyviewindex = 0;
 std::map<std::string, gmsh_yysymbol> gmsh_yysymbols;
+std::map<std::string, std::string> gmsh_yystringsymbols;
 
 // Static parser variables (accessible only in this file)
-static std::map<std::string, std::string> gmsh_yystringsymbols;
 #if defined(HAVE_POST)
 static PViewDataList *ViewData;
 #endif
diff --git a/Parser/Gmsh.y b/Parser/Gmsh.y
index 62984d3820ffff45705100daae3bcdaa5be6ca3b..d3f0314008432f44ecf5fe751195e3a46f83e5aa 100644
--- a/Parser/Gmsh.y
+++ b/Parser/Gmsh.y
@@ -56,9 +56,9 @@ std::string gmsh_yyname;
 int gmsh_yyerrorstate = 0;
 int gmsh_yyviewindex = 0;
 std::map<std::string, gmsh_yysymbol> gmsh_yysymbols;
+std::map<std::string, std::string> gmsh_yystringsymbols;
 
 // Static parser variables (accessible only in this file)
-static std::map<std::string, std::string> gmsh_yystringsymbols;
 #if defined(HAVE_POST)
 static PViewDataList *ViewData;
 #endif
diff --git a/Parser/Parser.h b/Parser/Parser.h
index 9a9dc7a50a0a691f3f18bd02a575a035c6a9526d..d3e312eb00f24fe704c3e8e4454e0897028fe593 100644
--- a/Parser/Parser.h
+++ b/Parser/Parser.h
@@ -29,5 +29,6 @@ extern int gmsh_yyviewindex;
 extern std::string gmsh_yyname;
 extern int gmsh_yyerrorstate;
 extern std::map<std::string, gmsh_yysymbol> gmsh_yysymbols;
+extern std::map<std::string, std::string> gmsh_yystringsymbols;
 
 #endif
diff --git a/doc/texinfo/commandline.texi b/doc/texinfo/commandline.texi
index b73a7d56eead560af70d827d531589d3e5e07dff..99be7c084c61edbe2834f3e03fdcdd4605c78e71 100644
--- a/doc/texinfo/commandline.texi
+++ b/doc/texinfo/commandline.texi
@@ -126,7 +126,11 @@ Set verbosity level
 @item -nopopup
 Don't popup dialog windows in scripts
 @item -string "string"
-Parse option string at startup
+Parse command string at startup
+@item -setnumber name value
+Set constant number name=value
+@item -setstring name value
+Set constant string name=value
 @item -option file
 Parse option file at startup
 @item -convert files
diff --git a/doc/texinfo/opt_fields.texi b/doc/texinfo/opt_fields.texi
index 44e86d2a4db95547fd1316d800a321ecb5cfaa8d..35f445cdd946afced5aa004c2d151c0bc86791ff 100644
--- a/doc/texinfo/opt_fields.texi
+++ b/doc/texinfo/opt_fields.texi
@@ -92,6 +92,14 @@ default value: @code{@{@}}
 Indices of faces in the geometric model for which a boundary layer is needed@*
 type: list@*
 default value: @code{@{@}}
+@item FanNodesList
+Indices of vertices in the geometric model for which a fan is created@*
+type: list@*
+default value: @code{@{@}}
+@item FansList
+Indices of edges in the geometric model for which a fan is created@*
+type: list@*
+default value: @code{@{@}}
 @item IntersectMetrics
 Intersect metrics of all faces@*
 type: integer@*
@@ -104,10 +112,6 @@ default value: @code{@{@}}
 Generate recombined elements in the boundary layer@*
 type: integer@*
 default value: @code{0}
-@item fan_angle
-Threshold angle for creating a mesh fan in the boundary layer@*
-type: float@*
-default value: @code{30}
 @item hfar
 Element size far from the wall@*
 type: float@*
@@ -347,7 +351,7 @@ default value: @code{1}
 @item Z2
 Z coordinate of endpoint 2@*
 type: float@*
-default value: @code{5.98152627002258e-154}
+default value: @code{2.26338226046034e+146}
 @end table
 
 @item Gradient
diff --git a/doc/texinfo/opt_mesh.texi b/doc/texinfo/opt_mesh.texi
index 79d6a0fc81634b3ce52952fb85628a7b8b318d18..0861c0fd837bf5e5f543dcaf87d48ddcf5407b00 100644
--- a/doc/texinfo/opt_mesh.texi
+++ b/doc/texinfo/opt_mesh.texi
@@ -209,6 +209,11 @@ Allow transfinite contraints to be modified for Blossom or by global mesh size f
 Default value: @code{0}@*
 Saved in: @code{General.OptionsFileName}
 
+@item Mesh.NewtonConvergenceTestXYZ
+Force inverse surface mapping algorithm (Newton-Raphson) to converge in real coordinates (experimental)@*
+Default value: @code{0}@*
+Saved in: @code{General.OptionsFileName}
+
 @item Mesh.Format
 Mesh output format (1=msh, 2=unv, 10=automatic, 19=vrml, 27=stl, 30=mesh, 31=bdf, 32=cgns, 33=med, 40=ply2)@*
 Default value: @code{10}@*
diff --git a/doc/texinfo/opt_plugin.texi b/doc/texinfo/opt_plugin.texi
index 49975f1dbc8d20bb0dbd5829a945595cdbf16716..1b3b5ae20ab7590c8c69e952917f84305dc9b51f 100644
--- a/doc/texinfo/opt_plugin.texi
+++ b/doc/texinfo/opt_plugin.texi
@@ -417,6 +417,27 @@ Default value: @code{-1}
 Default value: @code{-1}
 @end table
 
+@item Plugin(FaultZone)
+Plugin(FaultZone) convert all the embedded lines of an existing surfacic mesh to flat quadrangles. Flat quadrangles represent joint elements suitable to model a fault zone with Code_Aster.
+
+`SurfaceTag' must be an existing plane surface containing embedded lines. Embedded lines must have been added to the surface via the command Line {} In Surface {}. The surface must be meshed with quadratic incomplete elements.
+
+`Thickness' is the thichness of the flat quadrangles. Set a value different to zero can be helpfull to check the connectivity. 
+
+`Prefix' is the prefix of the name of physicals containing the new embedded. All physicals containing embedded lines are replaced by physicals containing the coresponding joint elements.
+String options:
+@table @code
+@item Prefix
+Default value: @code{"FAMI_"}
+@end table
+Numeric options:
+@table @code
+@item SurfaceTag
+Default value: @code{1}
+@item Thickness
+Default value: @code{0}
+@end table
+
 @item Plugin(FieldFromAmplitudePhase)
 Plugin(FieldFromAmplitudePhase) builds a complex field 'u' from amplitude 'a' (complex) and phase 'phi' given in two different 'Views' u = a * exp(k*phi), with k the wavenumber. 
 
diff --git a/doc/texinfo/opt_solver.texi b/doc/texinfo/opt_solver.texi
index 69294e6948f00d4dcd8ec7db9a7b2fd9722f37b7..f219e2637f461f3db871eabd7ff6fd05499f3359 100644
--- a/doc/texinfo/opt_solver.texi
+++ b/doc/texinfo/opt_solver.texi
@@ -204,6 +204,11 @@ Enable default solver plugins?@*
 Default value: @code{0}@*
 Saved in: @code{General.OptionsFileName}
 
+@item Solver.ShowInvisibleParameters
+Show all parameters, even those marked invisible@*
+Default value: @code{0}@*
+Saved in: @code{General.OptionsFileName}
+
 @item Solver.Timeout
 Time (in seconds) before closing the socket if no connection is happening@*
 Default value: @code{5}@*