diff --git a/Common/GmshMessage.cpp b/Common/GmshMessage.cpp
index c278761ddaa98f0bdfd3aabce525e1fda0293a37..b4262049015e46dbc0f44fc7b8c3c261e419f527 100644
--- a/Common/GmshMessage.cpp
+++ b/Common/GmshMessage.cpp
@@ -197,7 +197,7 @@ void Msg::Fatal(const char *fmt, ...)
 {
   _errorCount++;
 
-  char str[1024];
+  char str[5000];
   va_list args;
   va_start(args, fmt);
   vsnprintf(str, sizeof(str), fmt, args);
@@ -242,7 +242,7 @@ void Msg::Error(const char *fmt, ...)
 
   if(_verbosity < 1) return;
 
-  char str[1024];
+  char str[5000];
   va_list args;
   va_start(args, fmt);
   vsnprintf(str, sizeof(str), fmt, args);
@@ -279,7 +279,7 @@ void Msg::Warning(const char *fmt, ...)
 
   if(_commRank || _verbosity < 2) return;
 
-  char str[1024];
+  char str[5000];
   va_list args;
   va_start(args, fmt);
   vsnprintf(str, sizeof(str), fmt, args);
@@ -310,7 +310,7 @@ void Msg::Info(const char *fmt, ...)
 {
   if(_commRank || _verbosity < 4) return;
 
-  char str[1024];
+  char str[5000];
   va_list args;
   va_start(args, fmt);
   vsnprintf(str, sizeof(str), fmt, args);
@@ -337,7 +337,7 @@ void Msg::Direct(const char *fmt, ...)
 {
   if(_commRank || _verbosity < 3) return;
 
-  char str[1024];
+  char str[5000];
   va_list args;
   va_start(args, fmt);
   vsnprintf(str, sizeof(str), fmt, args);
@@ -350,7 +350,7 @@ void Msg::Direct(int level, const char *fmt, ...)
 {
   if(_commRank || _verbosity < level) return;
 
-  char str[1024];
+  char str[5000];
   va_list args;
   va_start(args, fmt);
   vsnprintf(str, sizeof(str), fmt, args);
@@ -390,7 +390,7 @@ void Msg::StatusBar(int num, bool log, const char *fmt, ...)
   if(_commRank || _verbosity < 4) return;
   if(num < 1 || num > 3) return;
 
-  char str[1024];
+  char str[5000];
   va_list args;
   va_start(args, fmt);
   vsnprintf(str, sizeof(str), fmt, args);
@@ -421,7 +421,7 @@ void Msg::Debug(const char *fmt, ...)
 {
   if(_verbosity < 99) return;
 
-  char str[1024];
+  char str[5000];
   va_list args;
   va_start(args, fmt);
   vsnprintf(str, sizeof(str), fmt, args);
@@ -454,7 +454,7 @@ void Msg::ProgressMeter(int n, int N, bool log, const char *fmt, ...)
   double percent = 100. * (double)n/(double)N;
 
   if(percent >= _progressMeterCurrent || n > N - 1){
-    char str[1024], str2[1024];
+    char str[5000], str2[5000];
     va_list args;
     va_start(args, fmt);
     vsnprintf(str, sizeof(str), fmt, args);
diff --git a/Parser/Gmsh.tab.cpp b/Parser/Gmsh.tab.cpp
index ed81f9fecf0fe558182b8c983507e5480c5f5ec4..5082e571b508bef77762500228e0aeae14acbeb4 100644
--- a/Parser/Gmsh.tab.cpp
+++ b/Parser/Gmsh.tab.cpp
@@ -4191,7 +4191,7 @@ yyreduce:
 /* Line 1464 of yacc.c  */
 #line 231 "Gmsh.y"
     {
-      char tmpstring[1024];
+      char tmpstring[5000];
       int i = PrintListOfDouble((yyvsp[(3) - (7)].c), (yyvsp[(5) - (7)].l), tmpstring);
       if(i < 0)
 	yymsg(0, "Too few arguments in Printf");
@@ -4209,7 +4209,7 @@ yyreduce:
 /* Line 1464 of yacc.c  */
 #line 244 "Gmsh.y"
     {
-      char tmpstring[1024];
+      char tmpstring[5000];
       int i = PrintListOfDouble((yyvsp[(3) - (7)].c), (yyvsp[(5) - (7)].l), tmpstring);
       if(i < 0)
 	yymsg(0, "Too few arguments in Error");
@@ -4227,7 +4227,7 @@ yyreduce:
 /* Line 1464 of yacc.c  */
 #line 257 "Gmsh.y"
     {
-      char tmpstring[1024];
+      char tmpstring[5000];
       int i = PrintListOfDouble((yyvsp[(3) - (9)].c), (yyvsp[(5) - (9)].l), tmpstring);
       if(i < 0)
 	yymsg(0, "Too few arguments in Printf");
@@ -5189,7 +5189,7 @@ yyreduce:
 	    List_Read((yyvsp[(9) - (11)].l), i, &id);
 	    vl.push_back((int)id);
 	  }
-    option->list(vl);
+          option->list(vl);
 	}
 	else
 	  yymsg(0, "Unknown option '%s' in field %i of type '%s'",
@@ -10144,7 +10144,7 @@ yyreduce:
 /* Line 1464 of yacc.c  */
 #line 4481 "Gmsh.y"
     {
-      char tmpstring[1024];
+      char tmpstring[5000];
       int i = PrintListOfDouble((yyvsp[(3) - (6)].c), (yyvsp[(5) - (6)].l), tmpstring);
       if(i < 0){
 	yymsg(0, "Too few arguments in Sprintf");
@@ -10383,8 +10383,8 @@ yyreturn:
 
 int PrintListOfDouble(char *format, List_T *list, char *buffer)
 {
-  // if format does not contain formatting characters, simply append values to
-  // format using %g formatting; useful for quick debugging of lists
+  // if format does not contain formatting characters, dump the list (useful for
+  // quick debugging of lists)
   int numFormats = 0;
   for(int i = 0; i < strlen(format); i++)
     if(format[i] == '%') numFormats++;
@@ -10394,7 +10394,7 @@ int PrintListOfDouble(char *format, List_T *list, char *buffer)
       double d;
       List_Read(list, i, &d);
       char tmp[256];
-      sprintf(tmp, " %g", d);
+      sprintf(tmp, " [%d]%g", i, d);
       strcat(buffer, tmp);
     }
     return 0;
diff --git a/Parser/Gmsh.y b/Parser/Gmsh.y
index 6cf6896d2d8c51efd6346da134040c058109d9d0..df744443322f91ca3e7b546222a1263a2e74b285 100644
--- a/Parser/Gmsh.y
+++ b/Parser/Gmsh.y
@@ -229,7 +229,7 @@ Printf :
     }
   | tPrintf '(' tBIGSTR ',' RecursiveListOfDouble ')' tEND
     {
-      char tmpstring[1024];
+      char tmpstring[5000];
       int i = PrintListOfDouble($3, $5, tmpstring);
       if(i < 0)
 	yymsg(0, "Too few arguments in Printf");
@@ -242,7 +242,7 @@ Printf :
     }
   | tError '(' tBIGSTR ',' RecursiveListOfDouble ')' tEND
     {
-      char tmpstring[1024];
+      char tmpstring[5000];
       int i = PrintListOfDouble($3, $5, tmpstring);
       if(i < 0)
 	yymsg(0, "Too few arguments in Error");
@@ -255,7 +255,7 @@ Printf :
     }
   | tPrintf '(' tBIGSTR ',' RecursiveListOfDouble ')' SendToFile StringExprVar tEND
     {
-      char tmpstring[1024];
+      char tmpstring[5000];
       int i = PrintListOfDouble($3, $5, tmpstring);
       if(i < 0)
 	yymsg(0, "Too few arguments in Printf");
@@ -1028,7 +1028,7 @@ Affectation :
 	    List_Read($9, i, &id);
 	    vl.push_back((int)id);
 	  }
-    option->list(vl);
+          option->list(vl);
 	}
 	else
 	  yymsg(0, "Unknown option '%s' in field %i of type '%s'",
@@ -4479,7 +4479,7 @@ StringExpr :
     }
   | tSprintf '(' StringExprVar ',' RecursiveListOfDouble ')'
     {
-      char tmpstring[1024];
+      char tmpstring[5000];
       int i = PrintListOfDouble($3, $5, tmpstring);
       if(i < 0){
 	yymsg(0, "Too few arguments in Sprintf");
@@ -4502,8 +4502,8 @@ StringExpr :
 
 int PrintListOfDouble(char *format, List_T *list, char *buffer)
 {
-  // if format does not contain formatting characters, simply append values to
-  // format using %g formatting; useful for quick debugging of lists
+  // if format does not contain formatting characters, dump the list (useful for
+  // quick debugging of lists)
   int numFormats = 0;
   for(int i = 0; i < strlen(format); i++)
     if(format[i] == '%') numFormats++;
@@ -4513,7 +4513,7 @@ int PrintListOfDouble(char *format, List_T *list, char *buffer)
       double d;
       List_Read(list, i, &d);
       char tmp[256];
-      sprintf(tmp, " %g", d);
+      sprintf(tmp, " [%d]%g", i, d);
       strcat(buffer, tmp);
     }
     return 0;
diff --git a/doc/VERSIONS.txt b/doc/VERSIONS.txt
index b393ffba034933d0f57e141809d27beacefb17af..b2cdce7bbe5f2b3e06a92a9c04243e91e9eb6968 100644
--- a/doc/VERSIONS.txt
+++ b/doc/VERSIONS.txt
@@ -1,3 +1,5 @@
+faster STEP/BRep import; minor bug fixes.
+
 2.6.1 (July 15, 2012): minor improvements and bug fixes.
 
 2.6.0 (Jun 19, 2012): new quadrilateral meshing algorithms (Blossom and