diff --git a/CTestConfig.cmake b/CTestConfig.cmake
index 22663f40baa35deb7b030f7fb7bd0ddca65b0e61..6265f30a311180698998c84b3bf107019eca75fc 100644
--- a/CTestConfig.cmake
+++ b/CTestConfig.cmake
@@ -14,3 +14,8 @@ set(BUILDNAME "${GMSH_OS}-${GMSH_PACKAGER}")
 
 set(CTEST_CUSTOM_MAXIMUM_NUMBER_OF_WARNINGS "1000")
 set(CTEST_CUSTOM_MAXIMUM_NUMBER_OF_ERRORS "1000")
+
+SET(CTEST_CUSTOM_ERROR_MATCH
+  ${CTEST_CUSTOM_ERROR_MATCH}
+  "Error.*"
+  )
diff --git a/Common/GmshMessage.cpp b/Common/GmshMessage.cpp
index 9cd7190adc0747d451d75b720ab358c38dd95c53..79d4ece02da64efc8a56e5d926a20d505770a5b3 100644
--- a/Common/GmshMessage.cpp
+++ b/Common/GmshMessage.cpp
@@ -59,6 +59,7 @@ int Msg::_progressMeterCurrent = 0;
 std::map<std::string, double> Msg::_timers;
 int Msg::_warningCount = 0;
 int Msg::_errorCount = 0;
+int Msg::_atLeastOneErrorInRun = 0;
 std::string Msg::_firstWarning;
 std::string Msg::_firstError;
 GmshMessage *Msg::_callback = 0;
@@ -218,7 +219,7 @@ void Msg::Exit(int level)
   MPI_Finalize();
 #endif
   FinalizeOnelab();
-  exit(_errorCount);
+  exit(_atLeastOneErrorInRun);
 }
 
 static int streamIsFile(FILE* stream)
@@ -260,6 +261,7 @@ static int streamIsVT100(FILE* stream)
 void Msg::Fatal(const char *fmt, ...)
 {
   _errorCount++;
+  _atLeastOneErrorInRun = 1;
 
   char str[5000];
   va_list args;
@@ -307,6 +309,7 @@ void Msg::Fatal(const char *fmt, ...)
 void Msg::Error(const char *fmt, ...)
 {
   _errorCount++;
+  _atLeastOneErrorInRun = 1;
 
   if(_verbosity < 1) return;
 
diff --git a/Common/GmshMessage.h b/Common/GmshMessage.h
index b80018b8db569935f19ea54a3c1588c59399ce89..9ea88f30fa0bcff3121c2af6758c765765abc403 100644
--- a/Common/GmshMessage.h
+++ b/Common/GmshMessage.h
@@ -41,7 +41,7 @@ class Msg {
   // timers
   static std::map<std::string, double> _timers;
   // counters
-  static int _warningCount, _errorCount;
+  static int _warningCount, _errorCount, _atLeastOneErrorInRun;
   static std::string _firstWarning, _firstError;
   // callback
   static GmshMessage *_callback;
diff --git a/Parser/Gmsh.tab.cpp b/Parser/Gmsh.tab.cpp
index 64659610792a2d52f08aa94f2ea24628db0c58f8..346d4557f259a469acf4266defa9ed5123da5965 100644
--- a/Parser/Gmsh.tab.cpp
+++ b/Parser/Gmsh.tab.cpp
@@ -1123,26 +1123,26 @@ static const yytype_uint16 yyrline[] =
     3561,  3565,  3569,  3573,  3579,  3585,  3589,  3593,  3597,  3601,
     3620,  3633,  3636,  3652,  3655,  3672,  3675,  3681,  3684,  3691,
     3694,  3701,  3757,  3827,  3832,  3899,  3935,  3943,  3986,  4025,
-    4045,  4075,  4101,  4127,  4153,  4179,  4205,  4229,  4257,  4285,
-    4289,  4293,  4321,  4360,  4399,  4420,  4441,  4468,  4472,  4482,
-    4517,  4518,  4519,  4523,  4529,  4541,  4559,  4587,  4588,  4589,
-    4590,  4591,  4592,  4593,  4594,  4595,  4602,  4603,  4604,  4605,
-    4606,  4607,  4608,  4609,  4610,  4611,  4612,  4613,  4614,  4615,
-    4616,  4617,  4618,  4619,  4620,  4621,  4622,  4623,  4624,  4625,
-    4626,  4627,  4628,  4629,  4630,  4631,  4632,  4633,  4634,  4643,
-    4644,  4645,  4646,  4647,  4648,  4649,  4650,  4651,  4652,  4657,
-    4656,  4664,  4669,  4686,  4704,  4722,  4740,  4758,  4763,  4769,
-    4781,  4798,  4816,  4834,  4852,  4873,  4878,  4883,  4893,  4903,
-    4908,  4919,  4928,  4933,  4960,  4964,  4968,  4972,  4976,  4983,
-    4987,  4991,  4995,  5002,  5007,  5014,  5019,  5023,  5028,  5032,
-    5040,  5051,  5055,  5067,  5075,  5083,  5090,  5100,  5129,  5133,
-    5137,  5141,  5145,  5149,  5153,  5157,  5161,  5190,  5219,  5248,
-    5277,  5290,  5303,  5316,  5329,  5339,  5349,  5361,  5374,  5386,
-    5404,  5425,  5430,  5434,  5438,  5450,  5454,  5466,  5473,  5483,
-    5487,  5502,  5507,  5514,  5518,  5531,  5539,  5550,  5554,  5562,
-    5568,  5574,  5582,  5590,  5597,  5612,  5626,  5640,  5652,  5668,
-    5679,  5683,  5702,  5709,  5716,  5715,  5728,  5733,  5739,  5748,
-    5761,  5764
+    4045,  4075,  4101,  4127,  4153,  4179,  4205,  4227,  4255,  4283,
+    4287,  4291,  4319,  4358,  4397,  4418,  4439,  4466,  4470,  4480,
+    4515,  4516,  4517,  4521,  4527,  4539,  4557,  4585,  4586,  4587,
+    4588,  4589,  4590,  4591,  4592,  4593,  4600,  4601,  4602,  4603,
+    4604,  4605,  4606,  4607,  4608,  4609,  4610,  4611,  4612,  4613,
+    4614,  4615,  4616,  4617,  4618,  4619,  4620,  4621,  4622,  4623,
+    4624,  4625,  4626,  4627,  4628,  4629,  4630,  4631,  4632,  4641,
+    4642,  4643,  4644,  4645,  4646,  4647,  4648,  4649,  4650,  4655,
+    4654,  4662,  4667,  4684,  4702,  4720,  4738,  4756,  4761,  4767,
+    4779,  4796,  4814,  4832,  4850,  4871,  4876,  4881,  4891,  4901,
+    4906,  4917,  4926,  4931,  4958,  4962,  4966,  4970,  4974,  4981,
+    4985,  4989,  4993,  5000,  5005,  5012,  5017,  5021,  5026,  5030,
+    5038,  5049,  5053,  5065,  5073,  5081,  5088,  5098,  5127,  5131,
+    5135,  5139,  5143,  5147,  5151,  5155,  5159,  5188,  5217,  5246,
+    5275,  5288,  5301,  5314,  5327,  5337,  5347,  5359,  5372,  5384,
+    5402,  5423,  5428,  5432,  5436,  5448,  5452,  5464,  5471,  5481,
+    5485,  5500,  5505,  5512,  5516,  5529,  5537,  5548,  5552,  5560,
+    5566,  5572,  5580,  5588,  5595,  5610,  5624,  5638,  5650,  5666,
+    5677,  5681,  5700,  5707,  5714,  5713,  5726,  5731,  5737,  5746,
+    5759,  5762
 };
 #endif
 
@@ -9741,14 +9741,12 @@ yyreduce:
       else{
         int j_master = (int)(yyvsp[(8) - (12)].d);
         int j_slave = (int)(yyvsp[(3) - (12)].d);
-
         std::map<int,int> edgeCounterParts;
         for (int i = 0; i < List_Nbr((yyvsp[(5) - (12)].l)); i++){
           double ds,dm;
           List_Read((yyvsp[(5) - (12)].l),i,&ds);
           List_Read((yyvsp[(10) - (12)].l),i,&dm);
           edgeCounterParts[(int) ds] = (int) dm;
-          std::cout << "edge " << ds << " to " << dm << std::endl;
         }
         addPeriodicFace(j_slave,j_master,edgeCounterParts);
       }
@@ -9759,7 +9757,7 @@ yyreduce:
 
   case 327:
 /* Line 1787 of yacc.c  */
-#line 4230 "Gmsh.y"
+#line 4228 "Gmsh.y"
     {
       Surface *s = FindSurface((int)(yyvsp[(8) - (10)].d));
       if(s){
@@ -9791,7 +9789,7 @@ yyreduce:
 
   case 328:
 /* Line 1787 of yacc.c  */
-#line 4258 "Gmsh.y"
+#line 4256 "Gmsh.y"
     {
       Surface *s = FindSurface((int)(yyvsp[(8) - (10)].d));
       if(s){
@@ -9823,7 +9821,7 @@ yyreduce:
 
   case 329:
 /* Line 1787 of yacc.c  */
-#line 4286 "Gmsh.y"
+#line 4284 "Gmsh.y"
     {
       Msg::Error("Point in Volume not implemented yet");
     }
@@ -9831,7 +9829,7 @@ yyreduce:
 
   case 330:
 /* Line 1787 of yacc.c  */
-#line 4290 "Gmsh.y"
+#line 4288 "Gmsh.y"
     {
       Msg::Error("Line in Volume not implemented yet");
     }
@@ -9839,7 +9837,7 @@ yyreduce:
 
   case 331:
 /* Line 1787 of yacc.c  */
-#line 4294 "Gmsh.y"
+#line 4292 "Gmsh.y"
     {
       Volume *v = FindVolume((int)(yyvsp[(8) - (10)].d));
       if(v){
@@ -9871,7 +9869,7 @@ yyreduce:
 
   case 332:
 /* Line 1787 of yacc.c  */
-#line 4322 "Gmsh.y"
+#line 4320 "Gmsh.y"
     {
       if(!(yyvsp[(3) - (4)].l)){
 	List_T *tmp = Tree2List(GModel::current()->getGEOInternals()->Surfaces);
@@ -9914,7 +9912,7 @@ yyreduce:
 
   case 333:
 /* Line 1787 of yacc.c  */
-#line 4361 "Gmsh.y"
+#line 4359 "Gmsh.y"
     {
       if(!(yyvsp[(3) - (4)].l)){
 	List_T *tmp = Tree2List(GModel::current()->getGEOInternals()->Curves);
@@ -9957,7 +9955,7 @@ yyreduce:
 
   case 334:
 /* Line 1787 of yacc.c  */
-#line 4400 "Gmsh.y"
+#line 4398 "Gmsh.y"
     {
       if(!(yyvsp[(3) - (4)].l)){
         for(GModel::viter it = GModel::current()->firstVertex();
@@ -9982,7 +9980,7 @@ yyreduce:
 
   case 335:
 /* Line 1787 of yacc.c  */
-#line 4421 "Gmsh.y"
+#line 4419 "Gmsh.y"
     {
       if(!(yyvsp[(3) - (4)].l)){
         for(GModel::eiter it = GModel::current()->firstEdge();
@@ -10007,7 +10005,7 @@ yyreduce:
 
   case 336:
 /* Line 1787 of yacc.c  */
-#line 4442 "Gmsh.y"
+#line 4440 "Gmsh.y"
     {
       if(!(yyvsp[(3) - (4)].l)){
         for(GModel::fiter it = GModel::current()->firstFace();
@@ -10032,7 +10030,7 @@ yyreduce:
 
   case 337:
 /* Line 1787 of yacc.c  */
-#line 4469 "Gmsh.y"
+#line 4467 "Gmsh.y"
     {
       ReplaceAllDuplicates();
     }
@@ -10040,7 +10038,7 @@ yyreduce:
 
   case 338:
 /* Line 1787 of yacc.c  */
-#line 4473 "Gmsh.y"
+#line 4471 "Gmsh.y"
     {
       if(!strcmp((yyvsp[(2) - (3)].c), "Geometry"))
         ReplaceAllDuplicates();
@@ -10054,7 +10052,7 @@ yyreduce:
 
   case 339:
 /* Line 1787 of yacc.c  */
-#line 4483 "Gmsh.y"
+#line 4481 "Gmsh.y"
     {
       if(List_Nbr((yyvsp[(4) - (6)].l)) >= 2){
         double d;
@@ -10088,25 +10086,25 @@ yyreduce:
 
   case 340:
 /* Line 1787 of yacc.c  */
-#line 4517 "Gmsh.y"
+#line 4515 "Gmsh.y"
     { (yyval.c) = (char*)"Homology"; }
     break;
 
   case 341:
 /* Line 1787 of yacc.c  */
-#line 4518 "Gmsh.y"
+#line 4516 "Gmsh.y"
     { (yyval.c) = (char*)"Cohomology"; }
     break;
 
   case 342:
 /* Line 1787 of yacc.c  */
-#line 4519 "Gmsh.y"
+#line 4517 "Gmsh.y"
     { (yyval.c) = (char*)"Betti"; }
     break;
 
   case 343:
 /* Line 1787 of yacc.c  */
-#line 4524 "Gmsh.y"
+#line 4522 "Gmsh.y"
     {
       std::vector<int> domain, subdomain, dim;
       for(int i = 0; i < 4; i++) dim.push_back(i);
@@ -10116,7 +10114,7 @@ yyreduce:
 
   case 344:
 /* Line 1787 of yacc.c  */
-#line 4530 "Gmsh.y"
+#line 4528 "Gmsh.y"
     {
       std::vector<int> domain, subdomain, dim;
       for(int i = 0; i < List_Nbr((yyvsp[(3) - (5)].l)); i++){
@@ -10132,7 +10130,7 @@ yyreduce:
 
   case 345:
 /* Line 1787 of yacc.c  */
-#line 4542 "Gmsh.y"
+#line 4540 "Gmsh.y"
     {
       std::vector<int> domain, subdomain, dim;
       for(int i = 0; i < List_Nbr((yyvsp[(3) - (7)].l)); i++){
@@ -10154,7 +10152,7 @@ yyreduce:
 
   case 346:
 /* Line 1787 of yacc.c  */
-#line 4560 "Gmsh.y"
+#line 4558 "Gmsh.y"
     {
       std::vector<int> domain, subdomain, dim;
       for(int i = 0; i < List_Nbr((yyvsp[(6) - (10)].l)); i++){
@@ -10181,55 +10179,55 @@ yyreduce:
 
   case 347:
 /* Line 1787 of yacc.c  */
-#line 4587 "Gmsh.y"
+#line 4585 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (1)].d);           }
     break;
 
   case 348:
 /* Line 1787 of yacc.c  */
-#line 4588 "Gmsh.y"
+#line 4586 "Gmsh.y"
     { (yyval.d) = (yyvsp[(2) - (3)].d);           }
     break;
 
   case 349:
 /* Line 1787 of yacc.c  */
-#line 4589 "Gmsh.y"
+#line 4587 "Gmsh.y"
     { (yyval.d) = -(yyvsp[(2) - (2)].d);          }
     break;
 
   case 350:
 /* Line 1787 of yacc.c  */
-#line 4590 "Gmsh.y"
+#line 4588 "Gmsh.y"
     { (yyval.d) = (yyvsp[(2) - (2)].d);           }
     break;
 
   case 351:
 /* Line 1787 of yacc.c  */
-#line 4591 "Gmsh.y"
+#line 4589 "Gmsh.y"
     { (yyval.d) = !(yyvsp[(2) - (2)].d);          }
     break;
 
   case 352:
 /* Line 1787 of yacc.c  */
-#line 4592 "Gmsh.y"
+#line 4590 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) - (yyvsp[(3) - (3)].d);      }
     break;
 
   case 353:
 /* Line 1787 of yacc.c  */
-#line 4593 "Gmsh.y"
+#line 4591 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) + (yyvsp[(3) - (3)].d);      }
     break;
 
   case 354:
 /* Line 1787 of yacc.c  */
-#line 4594 "Gmsh.y"
+#line 4592 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) * (yyvsp[(3) - (3)].d);      }
     break;
 
   case 355:
 /* Line 1787 of yacc.c  */
-#line 4596 "Gmsh.y"
+#line 4594 "Gmsh.y"
     {
       if(!(yyvsp[(3) - (3)].d))
 	yymsg(0, "Division by zero in '%g / %g'", (yyvsp[(1) - (3)].d), (yyvsp[(3) - (3)].d));
@@ -10240,271 +10238,271 @@ yyreduce:
 
   case 356:
 /* Line 1787 of yacc.c  */
-#line 4602 "Gmsh.y"
+#line 4600 "Gmsh.y"
     { (yyval.d) = (int)(yyvsp[(1) - (3)].d) % (int)(yyvsp[(3) - (3)].d);  }
     break;
 
   case 357:
 /* Line 1787 of yacc.c  */
-#line 4603 "Gmsh.y"
+#line 4601 "Gmsh.y"
     { (yyval.d) = pow((yyvsp[(1) - (3)].d), (yyvsp[(3) - (3)].d));  }
     break;
 
   case 358:
 /* Line 1787 of yacc.c  */
-#line 4604 "Gmsh.y"
+#line 4602 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) < (yyvsp[(3) - (3)].d);      }
     break;
 
   case 359:
 /* Line 1787 of yacc.c  */
-#line 4605 "Gmsh.y"
+#line 4603 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) > (yyvsp[(3) - (3)].d);      }
     break;
 
   case 360:
 /* Line 1787 of yacc.c  */
-#line 4606 "Gmsh.y"
+#line 4604 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) <= (yyvsp[(3) - (3)].d);     }
     break;
 
   case 361:
 /* Line 1787 of yacc.c  */
-#line 4607 "Gmsh.y"
+#line 4605 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) >= (yyvsp[(3) - (3)].d);     }
     break;
 
   case 362:
 /* Line 1787 of yacc.c  */
-#line 4608 "Gmsh.y"
+#line 4606 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) == (yyvsp[(3) - (3)].d);     }
     break;
 
   case 363:
 /* Line 1787 of yacc.c  */
-#line 4609 "Gmsh.y"
+#line 4607 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) != (yyvsp[(3) - (3)].d);     }
     break;
 
   case 364:
 /* Line 1787 of yacc.c  */
-#line 4610 "Gmsh.y"
+#line 4608 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) && (yyvsp[(3) - (3)].d);     }
     break;
 
   case 365:
 /* Line 1787 of yacc.c  */
-#line 4611 "Gmsh.y"
+#line 4609 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) || (yyvsp[(3) - (3)].d);     }
     break;
 
   case 366:
 /* Line 1787 of yacc.c  */
-#line 4612 "Gmsh.y"
+#line 4610 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (5)].d) ? (yyvsp[(3) - (5)].d) : (yyvsp[(5) - (5)].d); }
     break;
 
   case 367:
 /* Line 1787 of yacc.c  */
-#line 4613 "Gmsh.y"
+#line 4611 "Gmsh.y"
     { (yyval.d) = exp((yyvsp[(3) - (4)].d));      }
     break;
 
   case 368:
 /* Line 1787 of yacc.c  */
-#line 4614 "Gmsh.y"
+#line 4612 "Gmsh.y"
     { (yyval.d) = log((yyvsp[(3) - (4)].d));      }
     break;
 
   case 369:
 /* Line 1787 of yacc.c  */
-#line 4615 "Gmsh.y"
+#line 4613 "Gmsh.y"
     { (yyval.d) = log10((yyvsp[(3) - (4)].d));    }
     break;
 
   case 370:
 /* Line 1787 of yacc.c  */
-#line 4616 "Gmsh.y"
+#line 4614 "Gmsh.y"
     { (yyval.d) = sqrt((yyvsp[(3) - (4)].d));     }
     break;
 
   case 371:
 /* Line 1787 of yacc.c  */
-#line 4617 "Gmsh.y"
+#line 4615 "Gmsh.y"
     { (yyval.d) = sin((yyvsp[(3) - (4)].d));      }
     break;
 
   case 372:
 /* Line 1787 of yacc.c  */
-#line 4618 "Gmsh.y"
+#line 4616 "Gmsh.y"
     { (yyval.d) = asin((yyvsp[(3) - (4)].d));     }
     break;
 
   case 373:
 /* Line 1787 of yacc.c  */
-#line 4619 "Gmsh.y"
+#line 4617 "Gmsh.y"
     { (yyval.d) = cos((yyvsp[(3) - (4)].d));      }
     break;
 
   case 374:
 /* Line 1787 of yacc.c  */
-#line 4620 "Gmsh.y"
+#line 4618 "Gmsh.y"
     { (yyval.d) = acos((yyvsp[(3) - (4)].d));     }
     break;
 
   case 375:
 /* Line 1787 of yacc.c  */
-#line 4621 "Gmsh.y"
+#line 4619 "Gmsh.y"
     { (yyval.d) = tan((yyvsp[(3) - (4)].d));      }
     break;
 
   case 376:
 /* Line 1787 of yacc.c  */
-#line 4622 "Gmsh.y"
+#line 4620 "Gmsh.y"
     { (yyval.d) = atan((yyvsp[(3) - (4)].d));     }
     break;
 
   case 377:
 /* Line 1787 of yacc.c  */
-#line 4623 "Gmsh.y"
+#line 4621 "Gmsh.y"
     { (yyval.d) = atan2((yyvsp[(3) - (6)].d), (yyvsp[(5) - (6)].d));}
     break;
 
   case 378:
 /* Line 1787 of yacc.c  */
-#line 4624 "Gmsh.y"
+#line 4622 "Gmsh.y"
     { (yyval.d) = sinh((yyvsp[(3) - (4)].d));     }
     break;
 
   case 379:
 /* Line 1787 of yacc.c  */
-#line 4625 "Gmsh.y"
+#line 4623 "Gmsh.y"
     { (yyval.d) = cosh((yyvsp[(3) - (4)].d));     }
     break;
 
   case 380:
 /* Line 1787 of yacc.c  */
-#line 4626 "Gmsh.y"
+#line 4624 "Gmsh.y"
     { (yyval.d) = tanh((yyvsp[(3) - (4)].d));     }
     break;
 
   case 381:
 /* Line 1787 of yacc.c  */
-#line 4627 "Gmsh.y"
+#line 4625 "Gmsh.y"
     { (yyval.d) = fabs((yyvsp[(3) - (4)].d));     }
     break;
 
   case 382:
 /* Line 1787 of yacc.c  */
-#line 4628 "Gmsh.y"
+#line 4626 "Gmsh.y"
     { (yyval.d) = floor((yyvsp[(3) - (4)].d));    }
     break;
 
   case 383:
 /* Line 1787 of yacc.c  */
-#line 4629 "Gmsh.y"
+#line 4627 "Gmsh.y"
     { (yyval.d) = ceil((yyvsp[(3) - (4)].d));     }
     break;
 
   case 384:
 /* Line 1787 of yacc.c  */
-#line 4630 "Gmsh.y"
+#line 4628 "Gmsh.y"
     { (yyval.d) = floor((yyvsp[(3) - (4)].d) + 0.5); }
     break;
 
   case 385:
 /* Line 1787 of yacc.c  */
-#line 4631 "Gmsh.y"
+#line 4629 "Gmsh.y"
     { (yyval.d) = fmod((yyvsp[(3) - (6)].d), (yyvsp[(5) - (6)].d)); }
     break;
 
   case 386:
 /* Line 1787 of yacc.c  */
-#line 4632 "Gmsh.y"
+#line 4630 "Gmsh.y"
     { (yyval.d) = fmod((yyvsp[(3) - (6)].d), (yyvsp[(5) - (6)].d)); }
     break;
 
   case 387:
 /* Line 1787 of yacc.c  */
-#line 4633 "Gmsh.y"
+#line 4631 "Gmsh.y"
     { (yyval.d) = sqrt((yyvsp[(3) - (6)].d) * (yyvsp[(3) - (6)].d) + (yyvsp[(5) - (6)].d) * (yyvsp[(5) - (6)].d)); }
     break;
 
   case 388:
 /* Line 1787 of yacc.c  */
-#line 4634 "Gmsh.y"
+#line 4632 "Gmsh.y"
     { (yyval.d) = (yyvsp[(3) - (4)].d) * (double)rand() / (double)RAND_MAX; }
     break;
 
   case 389:
 /* Line 1787 of yacc.c  */
-#line 4643 "Gmsh.y"
+#line 4641 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (1)].d); }
     break;
 
   case 390:
 /* Line 1787 of yacc.c  */
-#line 4644 "Gmsh.y"
+#line 4642 "Gmsh.y"
     { (yyval.d) = 3.141592653589793; }
     break;
 
   case 391:
 /* Line 1787 of yacc.c  */
-#line 4645 "Gmsh.y"
+#line 4643 "Gmsh.y"
     { (yyval.d) = Msg::GetCommRank(); }
     break;
 
   case 392:
 /* Line 1787 of yacc.c  */
-#line 4646 "Gmsh.y"
+#line 4644 "Gmsh.y"
     { (yyval.d) = Msg::GetCommSize(); }
     break;
 
   case 393:
 /* Line 1787 of yacc.c  */
-#line 4647 "Gmsh.y"
+#line 4645 "Gmsh.y"
     { (yyval.d) = GetGmshMajorVersion(); }
     break;
 
   case 394:
 /* Line 1787 of yacc.c  */
-#line 4648 "Gmsh.y"
+#line 4646 "Gmsh.y"
     { (yyval.d) = GetGmshMinorVersion(); }
     break;
 
   case 395:
 /* Line 1787 of yacc.c  */
-#line 4649 "Gmsh.y"
+#line 4647 "Gmsh.y"
     { (yyval.d) = GetGmshPatchVersion(); }
     break;
 
   case 396:
 /* Line 1787 of yacc.c  */
-#line 4650 "Gmsh.y"
+#line 4648 "Gmsh.y"
     { (yyval.d) = Cpu(); }
     break;
 
   case 397:
 /* Line 1787 of yacc.c  */
-#line 4651 "Gmsh.y"
+#line 4649 "Gmsh.y"
     { (yyval.d) = GetMemoryUsage()/1024./1024.; }
     break;
 
   case 398:
 /* Line 1787 of yacc.c  */
-#line 4652 "Gmsh.y"
+#line 4650 "Gmsh.y"
     { (yyval.d) = TotalRam(); }
     break;
 
   case 399:
 /* Line 1787 of yacc.c  */
-#line 4657 "Gmsh.y"
+#line 4655 "Gmsh.y"
     { floatOptions.clear(); charOptions.clear(); }
     break;
 
   case 400:
 /* Line 1787 of yacc.c  */
-#line 4659 "Gmsh.y"
+#line 4657 "Gmsh.y"
     {
       std::vector<double> val(1, (yyvsp[(3) - (6)].d));
       Msg::ExchangeOnelabParameter("", val, floatOptions, charOptions);
@@ -10514,7 +10512,7 @@ yyreduce:
 
   case 401:
 /* Line 1787 of yacc.c  */
-#line 4665 "Gmsh.y"
+#line 4663 "Gmsh.y"
     {
       (yyval.d) = Msg::GetOnelabNumber((yyvsp[(3) - (4)].c));
       Free((yyvsp[(3) - (4)].c));
@@ -10523,7 +10521,7 @@ yyreduce:
 
   case 402:
 /* Line 1787 of yacc.c  */
-#line 4670 "Gmsh.y"
+#line 4668 "Gmsh.y"
     {
       if(!gmsh_yysymbols.count((yyvsp[(1) - (1)].c))){
 	yymsg(0, "Unknown variable '%s'", (yyvsp[(1) - (1)].c));
@@ -10544,7 +10542,7 @@ yyreduce:
 
   case 403:
 /* Line 1787 of yacc.c  */
-#line 4687 "Gmsh.y"
+#line 4685 "Gmsh.y"
     {
       int index = (int)(yyvsp[(3) - (4)].d);
       if(!gmsh_yysymbols.count((yyvsp[(1) - (4)].c))){
@@ -10566,7 +10564,7 @@ yyreduce:
 
   case 404:
 /* Line 1787 of yacc.c  */
-#line 4705 "Gmsh.y"
+#line 4703 "Gmsh.y"
     {
       int index = (int)(yyvsp[(3) - (4)].d);
       if(!gmsh_yysymbols.count((yyvsp[(1) - (4)].c))){
@@ -10588,7 +10586,7 @@ yyreduce:
 
   case 405:
 /* Line 1787 of yacc.c  */
-#line 4723 "Gmsh.y"
+#line 4721 "Gmsh.y"
     {
       int index = (int)(yyvsp[(3) - (4)].d);
       if(!gmsh_yysymbols.count((yyvsp[(1) - (4)].c))){
@@ -10610,7 +10608,7 @@ yyreduce:
 
   case 406:
 /* Line 1787 of yacc.c  */
-#line 4741 "Gmsh.y"
+#line 4739 "Gmsh.y"
     {
       int index = (int)(yyvsp[(3) - (4)].d);
       if(!gmsh_yysymbols.count((yyvsp[(1) - (4)].c))){
@@ -10632,7 +10630,7 @@ yyreduce:
 
   case 407:
 /* Line 1787 of yacc.c  */
-#line 4759 "Gmsh.y"
+#line 4757 "Gmsh.y"
     {
       (yyval.d) = gmsh_yysymbols.count((yyvsp[(3) - (4)].c));
       Free((yyvsp[(3) - (4)].c));
@@ -10641,7 +10639,7 @@ yyreduce:
 
   case 408:
 /* Line 1787 of yacc.c  */
-#line 4764 "Gmsh.y"
+#line 4762 "Gmsh.y"
     {
       std::string tmp = FixRelativePath(gmsh_yyname, (yyvsp[(3) - (4)].c));
       (yyval.d) = !StatFile(tmp);
@@ -10651,7 +10649,7 @@ yyreduce:
 
   case 409:
 /* Line 1787 of yacc.c  */
-#line 4770 "Gmsh.y"
+#line 4768 "Gmsh.y"
     {
       if(!gmsh_yysymbols.count((yyvsp[(2) - (4)].c))){
 	yymsg(0, "Unknown variable '%s'", (yyvsp[(2) - (4)].c));
@@ -10667,7 +10665,7 @@ yyreduce:
 
   case 410:
 /* Line 1787 of yacc.c  */
-#line 4782 "Gmsh.y"
+#line 4780 "Gmsh.y"
     {
       if(!gmsh_yysymbols.count((yyvsp[(1) - (2)].c))){
 	yymsg(0, "Unknown variable '%s'", (yyvsp[(1) - (2)].c));
@@ -10688,7 +10686,7 @@ yyreduce:
 
   case 411:
 /* Line 1787 of yacc.c  */
-#line 4799 "Gmsh.y"
+#line 4797 "Gmsh.y"
     {
       int index = (int)(yyvsp[(3) - (5)].d);
       if(!gmsh_yysymbols.count((yyvsp[(1) - (5)].c))){
@@ -10710,7 +10708,7 @@ yyreduce:
 
   case 412:
 /* Line 1787 of yacc.c  */
-#line 4817 "Gmsh.y"
+#line 4815 "Gmsh.y"
     {
       int index = (int)(yyvsp[(3) - (5)].d);
       if(!gmsh_yysymbols.count((yyvsp[(1) - (5)].c))){
@@ -10732,7 +10730,7 @@ yyreduce:
 
   case 413:
 /* Line 1787 of yacc.c  */
-#line 4835 "Gmsh.y"
+#line 4833 "Gmsh.y"
     {
       int index = (int)(yyvsp[(3) - (5)].d);
       if(!gmsh_yysymbols.count((yyvsp[(1) - (5)].c))){
@@ -10754,7 +10752,7 @@ yyreduce:
 
   case 414:
 /* Line 1787 of yacc.c  */
-#line 4853 "Gmsh.y"
+#line 4851 "Gmsh.y"
     {
       int index = (int)(yyvsp[(3) - (5)].d);
       if(!gmsh_yysymbols.count((yyvsp[(1) - (5)].c))){
@@ -10776,7 +10774,7 @@ yyreduce:
 
   case 415:
 /* Line 1787 of yacc.c  */
-#line 4874 "Gmsh.y"
+#line 4872 "Gmsh.y"
     {
       NumberOption(GMSH_GET, (yyvsp[(1) - (3)].c), 0, (yyvsp[(3) - (3)].c), (yyval.d));
       Free((yyvsp[(1) - (3)].c)); Free((yyvsp[(3) - (3)].c));
@@ -10785,7 +10783,7 @@ yyreduce:
 
   case 416:
 /* Line 1787 of yacc.c  */
-#line 4879 "Gmsh.y"
+#line 4877 "Gmsh.y"
     {
       NumberOption(GMSH_GET, (yyvsp[(1) - (6)].c), (int)(yyvsp[(3) - (6)].d), (yyvsp[(6) - (6)].c), (yyval.d));
       Free((yyvsp[(1) - (6)].c)); Free((yyvsp[(6) - (6)].c));
@@ -10794,7 +10792,7 @@ yyreduce:
 
   case 417:
 /* Line 1787 of yacc.c  */
-#line 4884 "Gmsh.y"
+#line 4882 "Gmsh.y"
     {
       double d = 0.;
       if(NumberOption(GMSH_GET, (yyvsp[(1) - (4)].c), 0, (yyvsp[(3) - (4)].c), d)){
@@ -10808,7 +10806,7 @@ yyreduce:
 
   case 418:
 /* Line 1787 of yacc.c  */
-#line 4894 "Gmsh.y"
+#line 4892 "Gmsh.y"
     {
       double d = 0.;
       if(NumberOption(GMSH_GET, (yyvsp[(1) - (7)].c), (int)(yyvsp[(3) - (7)].d), (yyvsp[(6) - (7)].c), d)){
@@ -10822,7 +10820,7 @@ yyreduce:
 
   case 419:
 /* Line 1787 of yacc.c  */
-#line 4904 "Gmsh.y"
+#line 4902 "Gmsh.y"
     {
       (yyval.d) = Msg::GetValue((yyvsp[(3) - (6)].c), (yyvsp[(5) - (6)].d));
       Free((yyvsp[(3) - (6)].c));
@@ -10831,7 +10829,7 @@ yyreduce:
 
   case 420:
 /* Line 1787 of yacc.c  */
-#line 4909 "Gmsh.y"
+#line 4907 "Gmsh.y"
     {
       int matches = 0;
       for(int i = 0; i < List_Nbr((yyvsp[(3) - (6)].l)); i++){
@@ -10846,7 +10844,7 @@ yyreduce:
 
   case 421:
 /* Line 1787 of yacc.c  */
-#line 4920 "Gmsh.y"
+#line 4918 "Gmsh.y"
     {
       std::string s((yyvsp[(3) - (6)].c)), substr((yyvsp[(5) - (6)].c));
       if(s.find(substr) != std::string::npos)
@@ -10859,7 +10857,7 @@ yyreduce:
 
   case 422:
 /* Line 1787 of yacc.c  */
-#line 4929 "Gmsh.y"
+#line 4927 "Gmsh.y"
     {
       (yyval.d) = strcmp((yyvsp[(3) - (6)].c), (yyvsp[(5) - (6)].c));
       Free((yyvsp[(3) - (6)].c)); Free((yyvsp[(5) - (6)].c));
@@ -10868,7 +10866,7 @@ yyreduce:
 
   case 423:
 /* Line 1787 of yacc.c  */
-#line 4934 "Gmsh.y"
+#line 4932 "Gmsh.y"
     {
       int align = 0, font = 0, fontsize = CTX::instance()->glFontSize;
       if(List_Nbr((yyvsp[(3) - (4)].l)) % 2){
@@ -10896,7 +10894,7 @@ yyreduce:
 
   case 424:
 /* Line 1787 of yacc.c  */
-#line 4961 "Gmsh.y"
+#line 4959 "Gmsh.y"
     {
       memcpy((yyval.v), (yyvsp[(1) - (1)].v), 5*sizeof(double));
     }
@@ -10904,7 +10902,7 @@ yyreduce:
 
   case 425:
 /* Line 1787 of yacc.c  */
-#line 4965 "Gmsh.y"
+#line 4963 "Gmsh.y"
     {
       for(int i = 0; i < 5; i++) (yyval.v)[i] = -(yyvsp[(2) - (2)].v)[i];
     }
@@ -10912,7 +10910,7 @@ yyreduce:
 
   case 426:
 /* Line 1787 of yacc.c  */
-#line 4969 "Gmsh.y"
+#line 4967 "Gmsh.y"
     {
       for(int i = 0; i < 5; i++) (yyval.v)[i] = (yyvsp[(2) - (2)].v)[i];
     }
@@ -10920,7 +10918,7 @@ yyreduce:
 
   case 427:
 /* Line 1787 of yacc.c  */
-#line 4973 "Gmsh.y"
+#line 4971 "Gmsh.y"
     {
       for(int i = 0; i < 5; i++) (yyval.v)[i] = (yyvsp[(1) - (3)].v)[i] - (yyvsp[(3) - (3)].v)[i];
     }
@@ -10928,7 +10926,7 @@ yyreduce:
 
   case 428:
 /* Line 1787 of yacc.c  */
-#line 4977 "Gmsh.y"
+#line 4975 "Gmsh.y"
     {
       for(int i = 0; i < 5; i++) (yyval.v)[i] = (yyvsp[(1) - (3)].v)[i] + (yyvsp[(3) - (3)].v)[i];
     }
@@ -10936,7 +10934,7 @@ yyreduce:
 
   case 429:
 /* Line 1787 of yacc.c  */
-#line 4984 "Gmsh.y"
+#line 4982 "Gmsh.y"
     {
       (yyval.v)[0] = (yyvsp[(2) - (11)].d);  (yyval.v)[1] = (yyvsp[(4) - (11)].d);  (yyval.v)[2] = (yyvsp[(6) - (11)].d);  (yyval.v)[3] = (yyvsp[(8) - (11)].d); (yyval.v)[4] = (yyvsp[(10) - (11)].d);
     }
@@ -10944,7 +10942,7 @@ yyreduce:
 
   case 430:
 /* Line 1787 of yacc.c  */
-#line 4988 "Gmsh.y"
+#line 4986 "Gmsh.y"
     {
       (yyval.v)[0] = (yyvsp[(2) - (9)].d);  (yyval.v)[1] = (yyvsp[(4) - (9)].d);  (yyval.v)[2] = (yyvsp[(6) - (9)].d);  (yyval.v)[3] = (yyvsp[(8) - (9)].d); (yyval.v)[4] = 1.0;
     }
@@ -10952,7 +10950,7 @@ yyreduce:
 
   case 431:
 /* Line 1787 of yacc.c  */
-#line 4992 "Gmsh.y"
+#line 4990 "Gmsh.y"
     {
       (yyval.v)[0] = (yyvsp[(2) - (7)].d);  (yyval.v)[1] = (yyvsp[(4) - (7)].d);  (yyval.v)[2] = (yyvsp[(6) - (7)].d);  (yyval.v)[3] = 0.0; (yyval.v)[4] = 1.0;
     }
@@ -10960,7 +10958,7 @@ yyreduce:
 
   case 432:
 /* Line 1787 of yacc.c  */
-#line 4996 "Gmsh.y"
+#line 4994 "Gmsh.y"
     {
       (yyval.v)[0] = (yyvsp[(2) - (7)].d);  (yyval.v)[1] = (yyvsp[(4) - (7)].d);  (yyval.v)[2] = (yyvsp[(6) - (7)].d);  (yyval.v)[3] = 0.0; (yyval.v)[4] = 1.0;
     }
@@ -10968,7 +10966,7 @@ yyreduce:
 
   case 433:
 /* Line 1787 of yacc.c  */
-#line 5003 "Gmsh.y"
+#line 5001 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(List_T*));
       List_Add((yyval.l), &((yyvsp[(1) - (1)].l)));
@@ -10977,7 +10975,7 @@ yyreduce:
 
   case 434:
 /* Line 1787 of yacc.c  */
-#line 5008 "Gmsh.y"
+#line 5006 "Gmsh.y"
     {
       List_Add((yyval.l), &((yyvsp[(3) - (3)].l)));
     }
@@ -10985,7 +10983,7 @@ yyreduce:
 
   case 435:
 /* Line 1787 of yacc.c  */
-#line 5015 "Gmsh.y"
+#line 5013 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(double));
       List_Add((yyval.l), &((yyvsp[(1) - (1)].d)));
@@ -10994,7 +10992,7 @@ yyreduce:
 
   case 436:
 /* Line 1787 of yacc.c  */
-#line 5020 "Gmsh.y"
+#line 5018 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(1) - (1)].l);
     }
@@ -11002,7 +11000,7 @@ yyreduce:
 
   case 437:
 /* Line 1787 of yacc.c  */
-#line 5024 "Gmsh.y"
+#line 5022 "Gmsh.y"
     {
       // creates an empty list
       (yyval.l) = List_Create(2, 1, sizeof(double));
@@ -11011,7 +11009,7 @@ yyreduce:
 
   case 438:
 /* Line 1787 of yacc.c  */
-#line 5029 "Gmsh.y"
+#line 5027 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(2) - (3)].l);
     }
@@ -11019,7 +11017,7 @@ yyreduce:
 
   case 439:
 /* Line 1787 of yacc.c  */
-#line 5033 "Gmsh.y"
+#line 5031 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(3) - (4)].l);
       for(int i = 0; i < List_Nbr((yyval.l)); i++){
@@ -11031,7 +11029,7 @@ yyreduce:
 
   case 440:
 /* Line 1787 of yacc.c  */
-#line 5041 "Gmsh.y"
+#line 5039 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(4) - (5)].l);
       for(int i = 0; i < List_Nbr((yyval.l)); i++){
@@ -11043,7 +11041,7 @@ yyreduce:
 
   case 441:
 /* Line 1787 of yacc.c  */
-#line 5052 "Gmsh.y"
+#line 5050 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(1) - (1)].l);
     }
@@ -11051,7 +11049,7 @@ yyreduce:
 
   case 442:
 /* Line 1787 of yacc.c  */
-#line 5056 "Gmsh.y"
+#line 5054 "Gmsh.y"
     {
       if(!strcmp((yyvsp[(1) - (1)].c), "*") || !strcmp((yyvsp[(1) - (1)].c), "all"))
         (yyval.l) = 0;
@@ -11064,7 +11062,7 @@ yyreduce:
 
   case 443:
 /* Line 1787 of yacc.c  */
-#line 5068 "Gmsh.y"
+#line 5066 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(2) - (2)].l);
       for(int i = 0; i < List_Nbr((yyval.l)); i++){
@@ -11076,7 +11074,7 @@ yyreduce:
 
   case 444:
 /* Line 1787 of yacc.c  */
-#line 5076 "Gmsh.y"
+#line 5074 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(3) - (3)].l);
       for(int i = 0; i < List_Nbr((yyval.l)); i++){
@@ -11088,7 +11086,7 @@ yyreduce:
 
   case 445:
 /* Line 1787 of yacc.c  */
-#line 5084 "Gmsh.y"
+#line 5082 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(double));
       for(double d = (yyvsp[(1) - (3)].d); ((yyvsp[(1) - (3)].d) < (yyvsp[(3) - (3)].d)) ? (d <= (yyvsp[(3) - (3)].d)) : (d >= (yyvsp[(3) - (3)].d));
@@ -11099,7 +11097,7 @@ yyreduce:
 
   case 446:
 /* Line 1787 of yacc.c  */
-#line 5091 "Gmsh.y"
+#line 5089 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(double));
       if(!(yyvsp[(5) - (5)].d)){  //|| ($1 < $3 && $5 < 0) || ($1 > $3 && $5 > 0)
@@ -11113,7 +11111,7 @@ yyreduce:
 
   case 447:
 /* Line 1787 of yacc.c  */
-#line 5101 "Gmsh.y"
+#line 5099 "Gmsh.y"
     {
       // Returns the coordinates of a point and fills a list with it.
       // This allows to ensure e.g. that relative point positions are
@@ -11146,7 +11144,7 @@ yyreduce:
 
   case 448:
 /* Line 1787 of yacc.c  */
-#line 5130 "Gmsh.y"
+#line 5128 "Gmsh.y"
     {
       (yyval.l) = GetAllElementaryEntityNumbers(0);
     }
@@ -11154,7 +11152,7 @@ yyreduce:
 
   case 449:
 /* Line 1787 of yacc.c  */
-#line 5134 "Gmsh.y"
+#line 5132 "Gmsh.y"
     {
       (yyval.l) = GetAllElementaryEntityNumbers(1);
     }
@@ -11162,7 +11160,7 @@ yyreduce:
 
   case 450:
 /* Line 1787 of yacc.c  */
-#line 5138 "Gmsh.y"
+#line 5136 "Gmsh.y"
     {
       (yyval.l) = GetAllElementaryEntityNumbers(2);
     }
@@ -11170,7 +11168,7 @@ yyreduce:
 
   case 451:
 /* Line 1787 of yacc.c  */
-#line 5142 "Gmsh.y"
+#line 5140 "Gmsh.y"
     {
       (yyval.l) = GetAllElementaryEntityNumbers(3);
     }
@@ -11178,7 +11176,7 @@ yyreduce:
 
   case 452:
 /* Line 1787 of yacc.c  */
-#line 5146 "Gmsh.y"
+#line 5144 "Gmsh.y"
     {
       (yyval.l) = GetAllPhysicalEntityNumbers(0);
     }
@@ -11186,7 +11184,7 @@ yyreduce:
 
   case 453:
 /* Line 1787 of yacc.c  */
-#line 5150 "Gmsh.y"
+#line 5148 "Gmsh.y"
     {
       (yyval.l) = GetAllPhysicalEntityNumbers(1);
     }
@@ -11194,7 +11192,7 @@ yyreduce:
 
   case 454:
 /* Line 1787 of yacc.c  */
-#line 5154 "Gmsh.y"
+#line 5152 "Gmsh.y"
     {
       (yyval.l) = GetAllPhysicalEntityNumbers(2);
     }
@@ -11202,7 +11200,7 @@ yyreduce:
 
   case 455:
 /* Line 1787 of yacc.c  */
-#line 5158 "Gmsh.y"
+#line 5156 "Gmsh.y"
     {
       (yyval.l) = GetAllPhysicalEntityNumbers(3);
     }
@@ -11210,7 +11208,7 @@ yyreduce:
 
   case 456:
 /* Line 1787 of yacc.c  */
-#line 5162 "Gmsh.y"
+#line 5160 "Gmsh.y"
     {
       (yyval.l) = List_Create(10, 1, sizeof(double));
       for(int i = 0; i < List_Nbr((yyvsp[(4) - (5)].l)); i++){
@@ -11243,7 +11241,7 @@ yyreduce:
 
   case 457:
 /* Line 1787 of yacc.c  */
-#line 5191 "Gmsh.y"
+#line 5189 "Gmsh.y"
     {
       (yyval.l) = List_Create(10, 1, sizeof(double));
       for(int i = 0; i < List_Nbr((yyvsp[(4) - (5)].l)); i++){
@@ -11276,7 +11274,7 @@ yyreduce:
 
   case 458:
 /* Line 1787 of yacc.c  */
-#line 5220 "Gmsh.y"
+#line 5218 "Gmsh.y"
     {
       (yyval.l) = List_Create(10, 1, sizeof(double));
       for(int i = 0; i < List_Nbr((yyvsp[(4) - (5)].l)); i++){
@@ -11309,7 +11307,7 @@ yyreduce:
 
   case 459:
 /* Line 1787 of yacc.c  */
-#line 5249 "Gmsh.y"
+#line 5247 "Gmsh.y"
     {
       (yyval.l) = List_Create(10, 1, sizeof(double));
       for(int i = 0; i < List_Nbr((yyvsp[(4) - (5)].l)); i++){
@@ -11342,7 +11340,7 @@ yyreduce:
 
   case 460:
 /* Line 1787 of yacc.c  */
-#line 5279 "Gmsh.y"
+#line 5277 "Gmsh.y"
     {
       (yyval.l) = List_Create(10, 1, sizeof(double));
       GModel::current()->importGEOInternals();
@@ -11358,7 +11356,7 @@ yyreduce:
 
   case 461:
 /* Line 1787 of yacc.c  */
-#line 5292 "Gmsh.y"
+#line 5290 "Gmsh.y"
     {
       (yyval.l) = List_Create(10, 1, sizeof(double));
       GModel::current()->importGEOInternals();
@@ -11374,7 +11372,7 @@ yyreduce:
 
   case 462:
 /* Line 1787 of yacc.c  */
-#line 5305 "Gmsh.y"
+#line 5303 "Gmsh.y"
     {
       (yyval.l) = List_Create(10, 1, sizeof(double));
       GModel::current()->importGEOInternals();
@@ -11390,7 +11388,7 @@ yyreduce:
 
   case 463:
 /* Line 1787 of yacc.c  */
-#line 5318 "Gmsh.y"
+#line 5316 "Gmsh.y"
     {
       (yyval.l) = List_Create(10, 1, sizeof(double));
       GModel::current()->importGEOInternals();
@@ -11406,7 +11404,7 @@ yyreduce:
 
   case 464:
 /* Line 1787 of yacc.c  */
-#line 5330 "Gmsh.y"
+#line 5328 "Gmsh.y"
     {
       (yyval.l) = List_Create(List_Nbr((yyvsp[(1) - (1)].l)), 1, sizeof(double));
       for(int i = 0; i < List_Nbr((yyvsp[(1) - (1)].l)); i++){
@@ -11420,7 +11418,7 @@ yyreduce:
 
   case 465:
 /* Line 1787 of yacc.c  */
-#line 5340 "Gmsh.y"
+#line 5338 "Gmsh.y"
     {
       (yyval.l) = List_Create(List_Nbr((yyvsp[(1) - (1)].l)), 1, sizeof(double));
       for(int i = 0; i < List_Nbr((yyvsp[(1) - (1)].l)); i++){
@@ -11434,7 +11432,7 @@ yyreduce:
 
   case 466:
 /* Line 1787 of yacc.c  */
-#line 5350 "Gmsh.y"
+#line 5348 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(double));
       if(!gmsh_yysymbols.count((yyvsp[(1) - (3)].c)))
@@ -11450,7 +11448,7 @@ yyreduce:
 
   case 467:
 /* Line 1787 of yacc.c  */
-#line 5362 "Gmsh.y"
+#line 5360 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(double));
       if(!gmsh_yysymbols.count((yyvsp[(1) - (3)].c)))
@@ -11466,7 +11464,7 @@ yyreduce:
 
   case 468:
 /* Line 1787 of yacc.c  */
-#line 5375 "Gmsh.y"
+#line 5373 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(double));
       if(!gmsh_yysymbols.count((yyvsp[(3) - (4)].c)))
@@ -11482,7 +11480,7 @@ yyreduce:
 
   case 469:
 /* Line 1787 of yacc.c  */
-#line 5387 "Gmsh.y"
+#line 5385 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(double));
       if(!gmsh_yysymbols.count((yyvsp[(1) - (6)].c)))
@@ -11504,7 +11502,7 @@ yyreduce:
 
   case 470:
 /* Line 1787 of yacc.c  */
-#line 5405 "Gmsh.y"
+#line 5403 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(double));
       if(!gmsh_yysymbols.count((yyvsp[(1) - (6)].c)))
@@ -11526,7 +11524,7 @@ yyreduce:
 
   case 471:
 /* Line 1787 of yacc.c  */
-#line 5426 "Gmsh.y"
+#line 5424 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(double));
       List_Add((yyval.l), &((yyvsp[(1) - (1)].d)));
@@ -11535,7 +11533,7 @@ yyreduce:
 
   case 472:
 /* Line 1787 of yacc.c  */
-#line 5431 "Gmsh.y"
+#line 5429 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(1) - (1)].l);
     }
@@ -11543,7 +11541,7 @@ yyreduce:
 
   case 473:
 /* Line 1787 of yacc.c  */
-#line 5435 "Gmsh.y"
+#line 5433 "Gmsh.y"
     {
       List_Add((yyval.l), &((yyvsp[(3) - (3)].d)));
     }
@@ -11551,7 +11549,7 @@ yyreduce:
 
   case 474:
 /* Line 1787 of yacc.c  */
-#line 5439 "Gmsh.y"
+#line 5437 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(3) - (3)].l)); i++){
 	double d;
@@ -11564,7 +11562,7 @@ yyreduce:
 
   case 475:
 /* Line 1787 of yacc.c  */
-#line 5451 "Gmsh.y"
+#line 5449 "Gmsh.y"
     {
       (yyval.u) = CTX::instance()->packColor((int)(yyvsp[(2) - (9)].d), (int)(yyvsp[(4) - (9)].d), (int)(yyvsp[(6) - (9)].d), (int)(yyvsp[(8) - (9)].d));
     }
@@ -11572,7 +11570,7 @@ yyreduce:
 
   case 476:
 /* Line 1787 of yacc.c  */
-#line 5455 "Gmsh.y"
+#line 5453 "Gmsh.y"
     {
       (yyval.u) = CTX::instance()->packColor((int)(yyvsp[(2) - (7)].d), (int)(yyvsp[(4) - (7)].d), (int)(yyvsp[(6) - (7)].d), 255);
     }
@@ -11580,7 +11578,7 @@ yyreduce:
 
   case 477:
 /* Line 1787 of yacc.c  */
-#line 5467 "Gmsh.y"
+#line 5465 "Gmsh.y"
     {
       int flag;
       (yyval.u) = GetColorForString(-1, (yyvsp[(1) - (1)].c), &flag);
@@ -11591,7 +11589,7 @@ yyreduce:
 
   case 478:
 /* Line 1787 of yacc.c  */
-#line 5474 "Gmsh.y"
+#line 5472 "Gmsh.y"
     {
       unsigned int val = 0;
       ColorOption(GMSH_GET, (yyvsp[(1) - (5)].c), 0, (yyvsp[(5) - (5)].c), val);
@@ -11602,7 +11600,7 @@ yyreduce:
 
   case 479:
 /* Line 1787 of yacc.c  */
-#line 5484 "Gmsh.y"
+#line 5482 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(2) - (3)].l);
     }
@@ -11610,7 +11608,7 @@ yyreduce:
 
   case 480:
 /* Line 1787 of yacc.c  */
-#line 5488 "Gmsh.y"
+#line 5486 "Gmsh.y"
     {
       (yyval.l) = List_Create(256, 10, sizeof(unsigned int));
       GmshColorTable *ct = GetColorTable((int)(yyvsp[(3) - (6)].d));
@@ -11626,7 +11624,7 @@ yyreduce:
 
   case 481:
 /* Line 1787 of yacc.c  */
-#line 5503 "Gmsh.y"
+#line 5501 "Gmsh.y"
     {
       (yyval.l) = List_Create(256, 10, sizeof(unsigned int));
       List_Add((yyval.l), &((yyvsp[(1) - (1)].u)));
@@ -11635,7 +11633,7 @@ yyreduce:
 
   case 482:
 /* Line 1787 of yacc.c  */
-#line 5508 "Gmsh.y"
+#line 5506 "Gmsh.y"
     {
       List_Add((yyval.l), &((yyvsp[(3) - (3)].u)));
     }
@@ -11643,7 +11641,7 @@ yyreduce:
 
   case 483:
 /* Line 1787 of yacc.c  */
-#line 5515 "Gmsh.y"
+#line 5513 "Gmsh.y"
     {
       (yyval.c) = (yyvsp[(1) - (1)].c);
     }
@@ -11651,7 +11649,7 @@ yyreduce:
 
   case 484:
 /* Line 1787 of yacc.c  */
-#line 5519 "Gmsh.y"
+#line 5517 "Gmsh.y"
     {
       if(!gmsh_yystringsymbols.count((yyvsp[(1) - (1)].c))){
 	yymsg(0, "Unknown string variable '%s'", (yyvsp[(1) - (1)].c));
@@ -11668,7 +11666,7 @@ yyreduce:
 
   case 485:
 /* Line 1787 of yacc.c  */
-#line 5532 "Gmsh.y"
+#line 5530 "Gmsh.y"
     {
       std::string out;
       StringOption(GMSH_GET, (yyvsp[(1) - (3)].c), 0, (yyvsp[(3) - (3)].c), out);
@@ -11680,7 +11678,7 @@ yyreduce:
 
   case 486:
 /* Line 1787 of yacc.c  */
-#line 5540 "Gmsh.y"
+#line 5538 "Gmsh.y"
     {
       std::string out;
       StringOption(GMSH_GET, (yyvsp[(1) - (6)].c), (int)(yyvsp[(3) - (6)].d), (yyvsp[(6) - (6)].c), out);
@@ -11692,7 +11690,7 @@ yyreduce:
 
   case 487:
 /* Line 1787 of yacc.c  */
-#line 5551 "Gmsh.y"
+#line 5549 "Gmsh.y"
     {
       (yyval.c) = (yyvsp[(1) - (1)].c);
     }
@@ -11700,7 +11698,7 @@ yyreduce:
 
   case 488:
 /* Line 1787 of yacc.c  */
-#line 5555 "Gmsh.y"
+#line 5553 "Gmsh.y"
     {
       (yyval.c) = (char *)Malloc(32 * sizeof(char));
       time_t now;
@@ -11712,7 +11710,7 @@ yyreduce:
 
   case 489:
 /* Line 1787 of yacc.c  */
-#line 5563 "Gmsh.y"
+#line 5561 "Gmsh.y"
     {
       std::string exe = Msg::GetExecutableName();
       (yyval.c) = (char *)Malloc(exe.size() + 1);
@@ -11722,7 +11720,7 @@ yyreduce:
 
   case 490:
 /* Line 1787 of yacc.c  */
-#line 5569 "Gmsh.y"
+#line 5567 "Gmsh.y"
     {
       std::string action = Msg::GetGmshOnelabAction();
       (yyval.c) = (char *)Malloc(action.size() + 1);
@@ -11732,7 +11730,7 @@ yyreduce:
 
   case 491:
 /* Line 1787 of yacc.c  */
-#line 5575 "Gmsh.y"
+#line 5573 "Gmsh.y"
     {
       const char *env = GetEnvironmentVar((yyvsp[(3) - (4)].c));
       if(!env) env = "";
@@ -11744,7 +11742,7 @@ yyreduce:
 
   case 492:
 /* Line 1787 of yacc.c  */
-#line 5583 "Gmsh.y"
+#line 5581 "Gmsh.y"
     {
       std::string s = Msg::GetString((yyvsp[(3) - (6)].c), (yyvsp[(5) - (6)].c));
       (yyval.c) = (char *)Malloc((s.size() + 1) * sizeof(char));
@@ -11756,7 +11754,7 @@ yyreduce:
 
   case 493:
 /* Line 1787 of yacc.c  */
-#line 5591 "Gmsh.y"
+#line 5589 "Gmsh.y"
     {
       std::string s = Msg::GetOnelabString((yyvsp[(3) - (4)].c));
       (yyval.c) = (char *)Malloc((s.size() + 1) * sizeof(char));
@@ -11767,7 +11765,7 @@ yyreduce:
 
   case 494:
 /* Line 1787 of yacc.c  */
-#line 5598 "Gmsh.y"
+#line 5596 "Gmsh.y"
     {
       int size = 1;
       for(int i = 0; i < List_Nbr((yyvsp[(3) - (4)].l)); i++)
@@ -11786,7 +11784,7 @@ yyreduce:
 
   case 495:
 /* Line 1787 of yacc.c  */
-#line 5613 "Gmsh.y"
+#line 5611 "Gmsh.y"
     {
       (yyval.c) = (char *)Malloc((strlen((yyvsp[(3) - (4)].c)) + 1) * sizeof(char));
       int i;
@@ -11804,7 +11802,7 @@ yyreduce:
 
   case 496:
 /* Line 1787 of yacc.c  */
-#line 5627 "Gmsh.y"
+#line 5625 "Gmsh.y"
     {
       (yyval.c) = (char *)Malloc((strlen((yyvsp[(3) - (4)].c)) + 1) * sizeof(char));
       int i;
@@ -11822,7 +11820,7 @@ yyreduce:
 
   case 497:
 /* Line 1787 of yacc.c  */
-#line 5641 "Gmsh.y"
+#line 5639 "Gmsh.y"
     {
       std::string input = (yyvsp[(3) - (8)].c);
       std::string substr_old = (yyvsp[(5) - (8)].c);
@@ -11838,7 +11836,7 @@ yyreduce:
 
   case 498:
 /* Line 1787 of yacc.c  */
-#line 5653 "Gmsh.y"
+#line 5651 "Gmsh.y"
     {
       int size = 1;
       for(int i = 0; i < List_Nbr((yyvsp[(3) - (4)].l)); i++)
@@ -11858,7 +11856,7 @@ yyreduce:
 
   case 499:
 /* Line 1787 of yacc.c  */
-#line 5669 "Gmsh.y"
+#line 5667 "Gmsh.y"
     {
       if((yyvsp[(3) - (8)].d)){
         (yyval.c) = (yyvsp[(5) - (8)].c);
@@ -11873,7 +11871,7 @@ yyreduce:
 
   case 500:
 /* Line 1787 of yacc.c  */
-#line 5680 "Gmsh.y"
+#line 5678 "Gmsh.y"
     {
       (yyval.c) = (yyvsp[(3) - (4)].c);
     }
@@ -11881,7 +11879,7 @@ yyreduce:
 
   case 501:
 /* Line 1787 of yacc.c  */
-#line 5684 "Gmsh.y"
+#line 5682 "Gmsh.y"
     {
       char tmpstring[5000];
       int i = PrintListOfDouble((yyvsp[(3) - (6)].c), (yyvsp[(5) - (6)].l), tmpstring);
@@ -11904,7 +11902,7 @@ yyreduce:
 
   case 502:
 /* Line 1787 of yacc.c  */
-#line 5703 "Gmsh.y"
+#line 5701 "Gmsh.y"
     {
       std::string tmp = FixRelativePath(gmsh_yyname, (yyvsp[(3) - (4)].c));
       (yyval.c) = (char*)Malloc((tmp.size() + 1) * sizeof(char));
@@ -11915,7 +11913,7 @@ yyreduce:
 
   case 503:
 /* Line 1787 of yacc.c  */
-#line 5710 "Gmsh.y"
+#line 5708 "Gmsh.y"
     {
       std::string tmp = SplitFileName(GetAbsolutePath(gmsh_yyname))[0];
       (yyval.c) = (char*)Malloc((tmp.size() + 1) * sizeof(char));
@@ -11925,13 +11923,13 @@ yyreduce:
 
   case 504:
 /* Line 1787 of yacc.c  */
-#line 5716 "Gmsh.y"
+#line 5714 "Gmsh.y"
     { floatOptions.clear(); charOptions.clear(); }
     break;
 
   case 505:
 /* Line 1787 of yacc.c  */
-#line 5718 "Gmsh.y"
+#line 5716 "Gmsh.y"
     {
       std::string val((yyvsp[(3) - (6)].c));
       Msg::ExchangeOnelabParameter("", val, floatOptions, charOptions);
@@ -11943,7 +11941,7 @@ yyreduce:
 
   case 506:
 /* Line 1787 of yacc.c  */
-#line 5729 "Gmsh.y"
+#line 5727 "Gmsh.y"
     {
       (yyval.l) = List_Create(20,20,sizeof(char*));
       List_Add((yyval.l), &((yyvsp[(1) - (1)].c)));
@@ -11952,13 +11950,13 @@ yyreduce:
 
   case 507:
 /* Line 1787 of yacc.c  */
-#line 5734 "Gmsh.y"
+#line 5732 "Gmsh.y"
     { List_Add((yyval.l), &((yyvsp[(3) - (3)].c))); }
     break;
 
   case 508:
 /* Line 1787 of yacc.c  */
-#line 5740 "Gmsh.y"
+#line 5738 "Gmsh.y"
     {
       char tmpstr[256];
       sprintf(tmpstr, "_%d", (int)(yyvsp[(4) - (5)].d));
@@ -11970,7 +11968,7 @@ yyreduce:
 
   case 509:
 /* Line 1787 of yacc.c  */
-#line 5749 "Gmsh.y"
+#line 5747 "Gmsh.y"
     {
       char tmpstr[256];
       sprintf(tmpstr, "_%d", (int)(yyvsp[(4) - (5)].d));
@@ -11982,19 +11980,19 @@ yyreduce:
 
   case 510:
 /* Line 1787 of yacc.c  */
-#line 5762 "Gmsh.y"
+#line 5760 "Gmsh.y"
     { (yyval.c) = (yyvsp[(1) - (1)].c); }
     break;
 
   case 511:
 /* Line 1787 of yacc.c  */
-#line 5765 "Gmsh.y"
+#line 5763 "Gmsh.y"
     { (yyval.c) = (yyvsp[(1) - (1)].c); }
     break;
 
 
 /* Line 1787 of yacc.c  */
-#line 11998 "Gmsh.tab.cpp"
+#line 11996 "Gmsh.tab.cpp"
       default: break;
     }
   /* User semantic actions sometimes alter yychar, and that requires
@@ -12226,7 +12224,7 @@ yyreturn:
 
 
 /* Line 2050 of yacc.c  */
-#line 5769 "Gmsh.y"
+#line 5767 "Gmsh.y"
 
 
 void assignVariable(const std::string &name, int index, int assignType,
@@ -12458,7 +12456,6 @@ void yymsg(int level, const char *fmt, ...)
   }
 }
 
-
 void addPeriodicFace(int iTarget,int iSource,
                      const std::vector<double>& affineTransform)
 {
@@ -12485,10 +12482,10 @@ void addPeriodicFace(int iTarget,int iSource,
 {
   Surface *target = FindSurface(abs(iTarget));
 
-  std::cout << "Encoding periodic connection between " << iTarget << " and " << iSource << std::endl;
+  Msg::Info("Encoding periodic connection between %d and %d", iTarget, iSource);
   std::map<int,int>::const_iterator sIter = edgeCounterparts.begin();
-  for (;sIter!=edgeCounterparts.end();++sIter) {
-    std::cout << sIter->first << " - " << sIter->second << std::endl;
+  for (; sIter != edgeCounterparts.end(); ++sIter) {
+    Msg::Info("%d - %d", sIter->first, sIter->second);
   }
 
   if (target) {
@@ -12501,8 +12498,9 @@ void addPeriodicFace(int iTarget,int iSource,
   else{
     GFace *target = GModel::current()->getFaceByTag(abs(iTarget));
     GFace *source = GModel::current()->getFaceByTag(abs(iSource));
-    if (!target || !source)  Msg::Error("Could not find surface %d or %d for periodic copy",
-                                        iTarget,iSource);
+    if (!target || !source)
+      Msg::Error("Could not find surface %d or %d for periodic copy",
+                 iTarget,iSource);
     target->setMeshMaster(source,edgeCounterparts);
   }
 }
@@ -12520,8 +12518,9 @@ void addPeriodicEdge(int iTarget,int iSource,
   else{
     GEdge *target = GModel::current()->getEdgeByTag(abs(iTarget));
     GEdge *source = GModel::current()->getEdgeByTag(abs(iSource));
-    if (!target || !source) Msg::Error("Could not find surface %d or %d for periodic copy",
-                                       iTarget,iSource);
+    if (!target || !source)
+      Msg::Error("Could not find surface %d or %d for periodic copy",
+                 iTarget,iSource);
     if (affineTransform.size() == 16) {
       target->setMeshMaster(source,affineTransform);
     }
@@ -12531,10 +12530,8 @@ void addPeriodicEdge(int iTarget,int iSource,
   }
 }
 
-void computeAffineTransformation(SPoint3& origin,
-                                 SPoint3& axis,
-                                 double angle,
-                                 SPoint3& translation,
+void computeAffineTransformation(SPoint3& origin, SPoint3& axis,
+                                 double angle, SPoint3& translation,
                                  std::vector<double>& tfo)
 {
   tfo.resize(16,0.0);
diff --git a/Parser/Gmsh.y b/Parser/Gmsh.y
index ef0e9e9d595de3d90d0404e18b1f4970fcb99d37..78511883e282b3193184a18c712635db9400ce8a 100644
--- a/Parser/Gmsh.y
+++ b/Parser/Gmsh.y
@@ -4212,14 +4212,12 @@ Constraints :
       else{
         int j_master = (int)$8;
         int j_slave = (int)$3;
-
         std::map<int,int> edgeCounterParts;
         for (int i = 0; i < List_Nbr($5); i++){
           double ds,dm;
           List_Read($5,i,&ds);
           List_Read($10,i,&dm);
           edgeCounterParts[(int) ds] = (int) dm;
-          std::cout << "edge " << ds << " to " << dm << std::endl;
         }
         addPeriodicFace(j_slave,j_master,edgeCounterParts);
       }
@@ -5997,7 +5995,6 @@ void yymsg(int level, const char *fmt, ...)
   }
 }
 
-
 void addPeriodicFace(int iTarget,int iSource,
                      const std::vector<double>& affineTransform)
 {
@@ -6024,10 +6021,10 @@ void addPeriodicFace(int iTarget,int iSource,
 {
   Surface *target = FindSurface(abs(iTarget));
 
-  std::cout << "Encoding periodic connection between " << iTarget << " and " << iSource << std::endl;
+  Msg::Info("Encoding periodic connection between %d and %d", iTarget, iSource);
   std::map<int,int>::const_iterator sIter = edgeCounterparts.begin();
-  for (;sIter!=edgeCounterparts.end();++sIter) {
-    std::cout << sIter->first << " - " << sIter->second << std::endl;
+  for (; sIter != edgeCounterparts.end(); ++sIter) {
+    Msg::Info("%d - %d", sIter->first, sIter->second);
   }
 
   if (target) {
@@ -6040,8 +6037,9 @@ void addPeriodicFace(int iTarget,int iSource,
   else{
     GFace *target = GModel::current()->getFaceByTag(abs(iTarget));
     GFace *source = GModel::current()->getFaceByTag(abs(iSource));
-    if (!target || !source)  Msg::Error("Could not find surface %d or %d for periodic copy",
-                                        iTarget,iSource);
+    if (!target || !source)
+      Msg::Error("Could not find surface %d or %d for periodic copy",
+                 iTarget,iSource);
     target->setMeshMaster(source,edgeCounterparts);
   }
 }
@@ -6059,8 +6057,9 @@ void addPeriodicEdge(int iTarget,int iSource,
   else{
     GEdge *target = GModel::current()->getEdgeByTag(abs(iTarget));
     GEdge *source = GModel::current()->getEdgeByTag(abs(iSource));
-    if (!target || !source) Msg::Error("Could not find surface %d or %d for periodic copy",
-                                       iTarget,iSource);
+    if (!target || !source)
+      Msg::Error("Could not find surface %d or %d for periodic copy",
+                 iTarget,iSource);
     if (affineTransform.size() == 16) {
       target->setMeshMaster(source,affineTransform);
     }
@@ -6070,10 +6069,8 @@ void addPeriodicEdge(int iTarget,int iSource,
   }
 }
 
-void computeAffineTransformation(SPoint3& origin,
-                                 SPoint3& axis,
-                                 double angle,
-                                 SPoint3& translation,
+void computeAffineTransformation(SPoint3& origin, SPoint3& axis,
+                                 double angle, SPoint3& translation,
                                  std::vector<double>& tfo)
 {
   tfo.resize(16,0.0);
diff --git a/doc/VERSIONS.txt b/doc/VERSIONS.txt
index e08b88b1900ede23e967f461641b38cd79f4d241..a7f08210b806be0a2aefc31f64b4cc4402f77d01 100644
--- a/doc/VERSIONS.txt
+++ b/doc/VERSIONS.txt
@@ -2,8 +2,8 @@
 variables; new Physical specification with both label and numeric id; improved
 visibility browser navigation; geometrical entities and post-processing views
 can now react to double-clicks, via new generic DoubleClicked options; images
-can now be used as glyphs in post-processing views, using tex annotations with
-the `file://' prefix; Views can be grouped and presented in subtrees;
+can now be used as glyphs in post-processing views, using text annotations with
+the `file://' prefix; Views can be grouped and organized in subtrees;
 generalized periodic meshing constraints; code cleanups.
 
 2.9.3 (April 18, 2015): updated versions of PETSc/SLEPc and OpenCASCADE/OCE