diff --git a/Common/ListUtils.cpp b/Common/ListUtils.cpp
index 922e13aebd5a2f0b73d089af8a1f8106a8eb6355..2cbb0eb33ed1871420b5a99879028aa44774904a 100644
--- a/Common/ListUtils.cpp
+++ b/Common/ListUtils.cpp
@@ -306,231 +306,6 @@ void List_Insert_In_List(List_T *a, int i, List_T *b)
     memcpy(List_Pointer_Fast(b, i + j), List_Pointer_Fast(a, j), b->size);
 }
 
-void swap_bytes(char *array, int size, int n)
-{
-  int i, c;
-  char *x, *a;
-
-  x = (char *)Malloc(size);
-
-  for(i = 0; i < n; i++) {
-    a = &array[i * size];
-    memcpy(x, a, size);
-    for(c = 0; c < size; c++)
-      a[size - 1 - c] = x[c];
-  }
-
-  Free(x);
-}
-
-List_T *List_CreateFromFile(int n, int incr, int size, FILE * file, int format,
-                            int swap)
-{
-  int i, error = 0;
-  List_T *liste;
-
-  if(!n){
-    liste = List_Create(1, incr, size);
-    return liste;
-  }
-
-  liste = List_Create(n, incr, size);
-  liste->n = n;
-  switch (format) {
-  case LIST_FORMAT_ASCII:
-    if(size == sizeof(double)){
-      for(i = 0; i < n; i++){
-        if(!fscanf(file, "%lf", (double *)&liste->array[i * size])){
-          error = 1;
-          break;
-        }
-      }
-    }
-    else if(size == sizeof(float)){
-      for(i = 0; i < n; i++){
-        if(!fscanf(file, "%f", (float *)&liste->array[i * size])){
-          error = 1;
-          break;
-        }
-      }
-    }
-    else if(size == sizeof(int)){
-      for(i = 0; i < n; i++){
-        if(!fscanf(file, "%d", (int *)&liste->array[i * size])){
-          error = 1;
-          break;
-        }
-      }
-    }
-    else if(size == sizeof(char)){
-      for(i = 0; i < n; i++){
-        char c = (char)fgetc(file);
-        if(c == EOF){
-          error = 1;
-          break;
-        }
-        else{
-          liste->array[i * size] = c;
-        }
-      }
-    }
-    else{
-      Msg::Error("Bad type of data to create list from (size = %d)", size);
-      error = 1;
-    }
-    break;
-  case LIST_FORMAT_BINARY:
-    if(!fread(liste->array, size, n, file)){
-      error = 1;
-      break;
-    }
-    if(swap)
-      swap_bytes(liste->array, size, n);
-    break;
-  default:
-    Msg::Error("Unknown list format");
-    error = 1;
-    break;
-  }
-
-  if(error){
-    Msg::Error("Read error");
-    liste->n = 0;
-  }
-
-  return liste;
-}
-
-static int safe_fwrite(const void *ptr, size_t size, size_t nmemb, FILE * stream)
-{
-  size_t result = fwrite(ptr, size, nmemb, stream);
-
-  if(result < nmemb) {
-    if(result >= 0)     /* Partial write */
-      Msg::Error("Disk full");
-    else
-      Msg::Error(strerror(errno));
-    if(fflush(stream) < 0)
-      Msg::Error("EOF reached");
-    if(fclose(stream) < 0)
-      Msg::Error(strerror(errno));
-    return 1;
-  }
-  return 0;
-}
-
-void List_WriteToFile(List_T * liste, FILE * file, int format)
-{
-  int i, n;
-
-  if(!(n = List_Nbr(liste)))
-    return;
-
-  switch (format) {
-  case LIST_FORMAT_ASCII:
-    if(liste->size == sizeof(double))
-      for(i = 0; i < n; i++)
-        fprintf(file, " %.16g", *((double *)&liste->array[i * liste->size]));
-    else if(liste->size == sizeof(float))
-      for(i = 0; i < n; i++)
-        fprintf(file, " %.16g", *((float *)&liste->array[i * liste->size]));
-    else if(liste->size == sizeof(int))
-      for(i = 0; i < n; i++)
-        fprintf(file, " %d", *((int *)&liste->array[i * liste->size]));
-    else if(liste->size == sizeof(char))
-      for(i = 0; i < n; i++)
-        fputc(*((char *)&liste->array[i * liste->size]), file);
-    else
-      Msg::Error("Bad type of data to write list to file (size = %d)",
-          liste->size);
-    break;
-  case LIST_FORMAT_BINARY:
-    safe_fwrite(liste->array, liste->size, n, file);
-    break;
-  default:
-    Msg::Error("Unknown list format");
-    break;
-  }
-}
-
-// For backward compatibility
-
-List_T *List_CreateFromFileOld(int n, int incr, int size, FILE * file, int format,
-                               int swap)
-{
-  int i, error = 0;
-  List_T *liste;
-
-  if(!n){
-    liste = List_Create(1, incr, size);
-    return liste;
-  }
-
-  liste = List_Create(n, incr, size);
-  liste->n = n;
-  switch (format) {
-  case LIST_FORMAT_ASCII:
-    if(size == sizeof(double)){
-      for(i = 0; i < n; i++){
-        if(!fscanf(file, "%lf", (double *)&liste->array[i * size])){
-          error = 1;
-          break;
-        }
-      }
-    }
-    else if(size == sizeof(float)){
-      for(i = 0; i < n; i++){
-        if(!fscanf(file, "%f", (float *)&liste->array[i * size])){
-          error = 1;
-          break;
-        }
-      }
-    }
-    else if(size == sizeof(int)){
-      for(i = 0; i < n; i++){
-        if(!fscanf(file, "%d", (int *)&liste->array[i * size])){
-          error = 1;
-          break;
-        }
-      }
-    }
-    else if(size == sizeof(char)){
-      for(i = 0; i < n; i++){
-        if(!fscanf(file, "%c", (char *)&liste->array[i * size])){
-          error = 1;
-          break;
-        }
-        if(liste->array[i * size] == '^')
-          liste->array[i * size] = '\0';
-      }
-    }
-    else {
-      Msg::Error("Bad type of data to create list from (size = %d)", size);
-      error = 1;
-    }
-    return liste;
-  case LIST_FORMAT_BINARY:
-    if(!fread(liste->array, size, n, file)){
-      error = 1;
-      break;
-    }
-    if(swap)
-      swap_bytes(liste->array, size, n);
-    return liste;
-  default:
-    Msg::Error("Unknown list format");
-    error = 1;
-    break;
-  }
-
-  if(error){
-    Msg::Error("Read error");
-    liste->n = 0;
-  }
-
-  return liste;
-}
-
 // Comparison functions
 
 int fcmp_int(const void *a, const void *b)
diff --git a/Common/ListUtils.h b/Common/ListUtils.h
index ebf2d4220b313e4a5c3550c68e55738785e74ac2..4e659d8df1db8e4b1e2b6780157ecf44fa8af9c2 100644
--- a/Common/ListUtils.h
+++ b/Common/ListUtils.h
@@ -46,15 +46,9 @@ void    List_Reset(List_T *liste);
 void    List_Action(List_T *liste, void (*action)(void *data, void *dummy));
 void    List_Copy(List_T *a , List_T *b);
 void    List_Merge(List_T *a , List_T *b);
-List_T *List_CreateFromFile(int n, int incr, int size, FILE *file, int format, int swap);
-void    List_WriteToFile(List_T *liste, FILE *file, int format);
 void    List_Remove (List_T *a, int i);
-//insert a in b before i
 void    List_Insert_In_List (List_T *a, int i, List_T *b);
 
-// for backward compatibility
-List_T *List_CreateFromFileOld(int n, int incr, int size, FILE *file, int format, int swap);
-
 int fcmp_int(const void *a, const void *b);
 int fcmp_absint(const void *a, const void *b);
 int fcmp_double(const void *a, const void *b);
diff --git a/Common/Makefile b/Common/Makefile
index 36e3c13d2805fe91be1f33c3d1b3813a87fa27bb..c3ae321d7346e01c9bb789602d1fdc158715e67b 100644
--- a/Common/Makefile
+++ b/Common/Makefile
@@ -60,18 +60,20 @@ depend:
 Gmsh${OBJEXT}: Gmsh.cpp GmshConfig.h GmshDefines.h ../Numeric/GmshPredicates.h \
   ../Geo/GModel.h ../Geo/GVertex.h ../Geo/GEntity.h ../Geo/Range.h \
   ../Geo/SPoint3.h ../Geo/SBoundingBox3d.h ../Geo/SPoint3.h \
-  ../Geo/GPoint.h ../Geo/SPoint2.h ../Geo/GEdge.h ../Geo/GEntity.h \
-  ../Geo/GVertex.h ../Geo/SVector3.h ../Geo/SPoint3.h ../Geo/SPoint3.h \
-  ../Geo/SPoint2.h ../Geo/GFace.h ../Geo/GEntity.h ../Geo/GPoint.h \
-  ../Geo/GEdgeLoop.h ../Geo/GEdge.h ../Geo/SPoint2.h ../Geo/SVector3.h \
-  ../Geo/Pair.h ../Geo/GRegion.h ../Geo/GEntity.h ../Geo/SPoint3.h \
-  ../Geo/SBoundingBox3d.h GmshMessage.h OpenFile.h CreateFile.h Options.h \
-  ../Post/ColorTable.h CommandLine.h OS.h ../Mesh/Generator.h \
-  ../Mesh/Field.h ../Common/GmshConfig.h ../Geo/STensor3.h \
-  ../Geo/SVector3.h ../Numeric/GmshMatrix.h ../Common/GmshMessage.h \
-  ../Numeric/Numeric.h ../Numeric/GmshMatrix.h ../Post/PView.h Context.h \
-  ../Geo/CGNSOptions.h ../Mesh/meshPartitionOptions.h \
-  ../Mesh/meshPartition.h GmshDaemon.h ../Plugin/PluginManager.h
+  ../Geo/SOrientedBoundingBox.h ../Geo/SVector3.h ../Geo/SPoint3.h \
+  ../Geo/SPoint2.h ../Geo/Pair.h ../Geo/GPoint.h ../Geo/SPoint2.h \
+  ../Geo/GEdge.h ../Geo/GEntity.h ../Geo/GVertex.h ../Geo/SVector3.h \
+  ../Geo/SPoint3.h ../Geo/SPoint2.h ../Geo/GFace.h ../Geo/GEntity.h \
+  ../Geo/GPoint.h ../Geo/GEdgeLoop.h ../Geo/GEdge.h ../Geo/SPoint2.h \
+  ../Geo/SVector3.h ../Geo/Pair.h ../Geo/GRegion.h ../Geo/GEntity.h \
+  ../Geo/SPoint3.h ../Geo/SBoundingBox3d.h GmshMessage.h OpenFile.h \
+  CreateFile.h Options.h ../Post/ColorTable.h CommandLine.h OS.h \
+  ../Mesh/Generator.h ../Mesh/Field.h ../Common/GmshConfig.h \
+  ../Geo/STensor3.h ../Geo/SVector3.h ../Numeric/GmshMatrix.h \
+  ../Common/GmshMessage.h ../Numeric/Numeric.h ../Numeric/GmshMatrix.h \
+  ../Post/PView.h Context.h ../Geo/CGNSOptions.h \
+  ../Mesh/meshPartitionOptions.h ../Mesh/meshPartition.h GmshDaemon.h \
+  ../Plugin/PluginManager.h
 GmshMessage${OBJEXT}: GmshMessage.cpp GmshConfig.h GmshMessage.h Gmsh.h \
   Options.h ../Post/ColorTable.h Context.h ../Geo/CGNSOptions.h \
   ../Mesh/meshPartitionOptions.h OS.h ../Fltk/GUI.h \
@@ -81,9 +83,10 @@ Context${OBJEXT}: Context.cpp GmshConfig.h Context.h ../Geo/CGNSOptions.h \
   ../Mesh/meshPartitionOptions.h
 Options${OBJEXT}: Options.cpp GmshConfig.h GmshDefines.h ../Geo/GModel.h \
   ../Geo/GVertex.h ../Geo/GEntity.h ../Geo/Range.h ../Geo/SPoint3.h \
-  ../Geo/SBoundingBox3d.h ../Geo/SPoint3.h ../Geo/GPoint.h \
-  ../Geo/SPoint2.h ../Geo/GEdge.h ../Geo/GEntity.h ../Geo/GVertex.h \
-  ../Geo/SVector3.h ../Geo/SPoint3.h ../Geo/SPoint3.h ../Geo/SPoint2.h \
+  ../Geo/SBoundingBox3d.h ../Geo/SPoint3.h ../Geo/SOrientedBoundingBox.h \
+  ../Geo/SVector3.h ../Geo/SPoint3.h ../Geo/SPoint2.h ../Geo/Pair.h \
+  ../Geo/GPoint.h ../Geo/SPoint2.h ../Geo/GEdge.h ../Geo/GEntity.h \
+  ../Geo/GVertex.h ../Geo/SVector3.h ../Geo/SPoint3.h ../Geo/SPoint2.h \
   ../Geo/GFace.h ../Geo/GEntity.h ../Geo/GPoint.h ../Geo/GEdgeLoop.h \
   ../Geo/GEdge.h ../Geo/SPoint2.h ../Geo/SVector3.h ../Geo/Pair.h \
   ../Geo/GRegion.h ../Geo/GEntity.h ../Geo/SPoint3.h \
@@ -96,9 +99,9 @@ Options${OBJEXT}: Options.cpp GmshConfig.h GmshDefines.h ../Geo/GModel.h \
   ../Post/PView.h ../Mesh/BackgroundMesh.h ../Post/PViewOptions.h \
   ../Post/ColorTable.h ../Post/PViewData.h ../Post/adaptiveData.h \
   ../Plugin/PluginManager.h ../Plugin/Plugin.h ../Common/Options.h \
-  ../Post/PViewDataList.h ../Post/PViewData.h ../Common/ListUtils.h \
-  ../Fltk/GUI.h ../Fltk/Solvers.h ../Fltk/menuWindow.h \
-  ../Fltk/popupButton.h ../Fltk/graphicWindow.h ../Fltk/openglWindow.h \
+  ../Post/PViewDataList.h ../Post/PViewData.h ../Fltk/GUI.h \
+  ../Fltk/Solvers.h ../Fltk/menuWindow.h ../Fltk/popupButton.h \
+  ../Fltk/graphicWindow.h ../Fltk/openglWindow.h \
   ../Graphics/drawContext.h ../Fltk/optionWindow.h \
   ../Fltk/spherePositionWidget.h ../Fltk/colorbarWindow.h \
   ../Fltk/solverWindow.h ../Fltk/manipWindow.h ../Fltk/messageWindow.h \
@@ -108,12 +111,14 @@ CommandLine${OBJEXT}: CommandLine.cpp GmshConfig.h GmshDefines.h GmshVersion.h \
   ../Mesh/meshPartitionOptions.h Options.h ../Post/ColorTable.h \
   ../Geo/GModel.h ../Geo/GVertex.h ../Geo/GEntity.h ../Geo/Range.h \
   ../Geo/SPoint3.h ../Geo/SBoundingBox3d.h ../Geo/SPoint3.h \
-  ../Geo/GPoint.h ../Geo/SPoint2.h ../Geo/GEdge.h ../Geo/GEntity.h \
-  ../Geo/GVertex.h ../Geo/SVector3.h ../Geo/SPoint3.h ../Geo/SPoint3.h \
-  ../Geo/SPoint2.h ../Geo/GFace.h ../Geo/GEntity.h ../Geo/GPoint.h \
-  ../Geo/GEdgeLoop.h ../Geo/GEdge.h ../Geo/SPoint2.h ../Geo/SVector3.h \
-  ../Geo/Pair.h ../Geo/GRegion.h ../Geo/GEntity.h ../Geo/SPoint3.h \
-  ../Geo/SBoundingBox3d.h CreateFile.h OS.h ../Post/PView.h
+  ../Geo/SOrientedBoundingBox.h ../Geo/SVector3.h ../Geo/SPoint3.h \
+  ../Geo/SPoint2.h ../Geo/Pair.h ../Geo/GPoint.h ../Geo/SPoint2.h \
+  ../Geo/GEdge.h ../Geo/GEntity.h ../Geo/GVertex.h ../Geo/SVector3.h \
+  ../Geo/SPoint3.h ../Geo/SPoint2.h ../Geo/GFace.h ../Geo/GEntity.h \
+  ../Geo/GPoint.h ../Geo/GEdgeLoop.h ../Geo/GEdge.h ../Geo/SPoint2.h \
+  ../Geo/SVector3.h ../Geo/Pair.h ../Geo/GRegion.h ../Geo/GEntity.h \
+  ../Geo/SPoint3.h ../Geo/SBoundingBox3d.h CreateFile.h OS.h \
+  ../Post/PView.h
 OS${OBJEXT}: OS.cpp GmshMessage.h
 OpenFile${OBJEXT}: OpenFile.cpp GmshConfig.h GmshMessage.h ../Geo/Geo.h \
   ../Common/GmshDefines.h ../Geo/gmshSurface.h ../Geo/Pair.h \
@@ -124,23 +129,27 @@ OpenFile${OBJEXT}: OpenFile.cpp GmshConfig.h GmshMessage.h ../Geo/Geo.h \
   ../Common/avl.h ../Common/ListUtils.h ../Geo/SPoint2.h \
   ../Geo/ExtrudeParams.h ../Common/SmoothData.h ../Geo/GModel.h \
   ../Geo/GVertex.h ../Geo/GEntity.h ../Geo/Range.h ../Geo/SPoint3.h \
-  ../Geo/SBoundingBox3d.h ../Geo/GPoint.h ../Geo/SPoint2.h ../Geo/GEdge.h \
-  ../Geo/GEntity.h ../Geo/GVertex.h ../Geo/SVector3.h ../Geo/SPoint3.h \
-  ../Geo/SPoint2.h ../Geo/GFace.h ../Geo/GEntity.h ../Geo/GPoint.h \
-  ../Geo/GEdgeLoop.h ../Geo/GEdge.h ../Geo/SPoint2.h ../Geo/SVector3.h \
-  ../Geo/Pair.h ../Geo/GRegion.h ../Geo/GEntity.h ../Geo/SPoint3.h \
-  ../Geo/SBoundingBox3d.h ../Mesh/HighOrder.h ../Geo/MFace.h \
-  ../Geo/MVertex.h ../Geo/SPoint2.h ../Geo/SPoint3.h ../Geo/MEdge.h \
-  ../Geo/MVertex.h ../Geo/SVector3.h ../Geo/SVector3.h Context.h \
-  ../Geo/CGNSOptions.h ../Mesh/meshPartitionOptions.h OpenFile.h \
-  CommandLine.h ../Graphics/ReadImg.h OS.h StringUtils.h \
+  ../Geo/SBoundingBox3d.h ../Geo/SOrientedBoundingBox.h ../Geo/SVector3.h \
+  ../Geo/SPoint2.h ../Geo/Pair.h ../Geo/GPoint.h ../Geo/SPoint2.h \
+  ../Geo/GEdge.h ../Geo/GEntity.h ../Geo/GVertex.h ../Geo/SVector3.h \
+  ../Geo/SPoint3.h ../Geo/SPoint2.h ../Geo/GFace.h ../Geo/GEntity.h \
+  ../Geo/GPoint.h ../Geo/GEdgeLoop.h ../Geo/GEdge.h ../Geo/SPoint2.h \
+  ../Geo/SVector3.h ../Geo/Pair.h ../Geo/GRegion.h ../Geo/GEntity.h \
+  ../Geo/SPoint3.h ../Geo/SBoundingBox3d.h ../Mesh/HighOrder.h \
+  ../Geo/MFace.h ../Geo/MVertex.h ../Geo/SPoint2.h ../Geo/SPoint3.h \
+  ../Geo/MEdge.h ../Geo/MVertex.h ../Geo/SVector3.h ../Geo/SVector3.h \
+  Context.h ../Geo/CGNSOptions.h ../Mesh/meshPartitionOptions.h \
+  OpenFile.h CommandLine.h ../Graphics/ReadImg.h OS.h StringUtils.h \
+  ../Geo/GeomMeshMatcher.h ../Geo/GModel.h ../Geo/GVertex.h \
+  ../Geo/GEdge.h ../Geo/GFace.h ../Geo/GRegion.h ../Geo/Pair.h \
   ../Parser/Parser.h ../Post/PView.h ../Post/PViewData.h ../Fltk/GUI.h \
   ../Fltk/Draw.h
 CreateFile${OBJEXT}: CreateFile.cpp GmshConfig.h GmshMessage.h ../Geo/GModel.h \
   ../Geo/GVertex.h ../Geo/GEntity.h ../Geo/Range.h ../Geo/SPoint3.h \
-  ../Geo/SBoundingBox3d.h ../Geo/SPoint3.h ../Geo/GPoint.h \
-  ../Geo/SPoint2.h ../Geo/GEdge.h ../Geo/GEntity.h ../Geo/GVertex.h \
-  ../Geo/SVector3.h ../Geo/SPoint3.h ../Geo/SPoint3.h ../Geo/SPoint2.h \
+  ../Geo/SBoundingBox3d.h ../Geo/SPoint3.h ../Geo/SOrientedBoundingBox.h \
+  ../Geo/SVector3.h ../Geo/SPoint3.h ../Geo/SPoint2.h ../Geo/Pair.h \
+  ../Geo/GPoint.h ../Geo/SPoint2.h ../Geo/GEdge.h ../Geo/GEntity.h \
+  ../Geo/GVertex.h ../Geo/SVector3.h ../Geo/SPoint3.h ../Geo/SPoint2.h \
   ../Geo/GFace.h ../Geo/GEntity.h ../Geo/GPoint.h ../Geo/GEdgeLoop.h \
   ../Geo/GEdge.h ../Geo/SPoint2.h ../Geo/SVector3.h ../Geo/Pair.h \
   ../Geo/GRegion.h ../Geo/GEntity.h ../Geo/SPoint3.h \
diff --git a/Fltk/Makefile b/Fltk/Makefile
index e4d3f6eb1c5de18c6fe03fd8b1a887a328681b16..98d64602984c02875e79df29cb5e5ba499440144 100644
--- a/Fltk/Makefile
+++ b/Fltk/Makefile
@@ -75,9 +75,10 @@ Main${OBJEXT}: Main.cpp GUI.h menuWindow.h popupButton.h ../Common/Gmsh.h \
   ../Parser/Parser.h ../Common/OpenFile.h ../Common/CommandLine.h \
   Solvers.h ../Plugin/PluginManager.h ../Geo/GModel.h ../Geo/GVertex.h \
   ../Geo/GEntity.h ../Geo/Range.h ../Geo/SPoint3.h \
-  ../Geo/SBoundingBox3d.h ../Geo/SPoint3.h ../Geo/GPoint.h \
-  ../Geo/SPoint2.h ../Geo/GEdge.h ../Geo/GEntity.h ../Geo/GVertex.h \
-  ../Geo/SVector3.h ../Geo/SPoint3.h ../Geo/SPoint3.h ../Geo/SPoint2.h \
+  ../Geo/SBoundingBox3d.h ../Geo/SPoint3.h ../Geo/SOrientedBoundingBox.h \
+  ../Geo/SVector3.h ../Geo/SPoint3.h ../Geo/SPoint2.h ../Geo/Pair.h \
+  ../Geo/GPoint.h ../Geo/SPoint2.h ../Geo/GEdge.h ../Geo/GEntity.h \
+  ../Geo/GVertex.h ../Geo/SVector3.h ../Geo/SPoint3.h ../Geo/SPoint2.h \
   ../Geo/GFace.h ../Geo/GEntity.h ../Geo/GPoint.h ../Geo/GEdgeLoop.h \
   ../Geo/GEdge.h ../Geo/SPoint2.h ../Geo/SVector3.h ../Geo/Pair.h \
   ../Geo/GRegion.h ../Geo/GEntity.h ../Geo/SPoint3.h \
@@ -94,20 +95,21 @@ GUI${OBJEXT}: GUI.cpp GUI.h graphicWindow.h openglWindow.h \
   solverWindow.h aboutWindow.h fileDialogs.h Draw.h \
   ../Common/GmshDefines.h ../Common/GmshMessage.h ../Geo/GModel.h \
   ../Geo/GVertex.h ../Geo/GEntity.h ../Geo/Range.h ../Geo/SPoint3.h \
-  ../Geo/SBoundingBox3d.h ../Geo/GPoint.h ../Geo/SPoint2.h ../Geo/GEdge.h \
-  ../Geo/GEntity.h ../Geo/GVertex.h ../Geo/SVector3.h ../Geo/SPoint3.h \
-  ../Geo/SPoint3.h ../Geo/SPoint2.h ../Geo/GFace.h ../Geo/GEntity.h \
-  ../Geo/GPoint.h ../Geo/GEdgeLoop.h ../Geo/GEdge.h ../Geo/SPoint2.h \
-  ../Geo/SVector3.h ../Geo/Pair.h ../Geo/GRegion.h ../Geo/GEntity.h \
-  ../Geo/SPoint3.h ../Geo/SBoundingBox3d.h ../Geo/MElement.h \
-  ../Geo/MVertex.h ../Geo/SPoint2.h ../Geo/SPoint3.h ../Geo/MEdge.h \
-  ../Geo/MVertex.h ../Geo/SVector3.h ../Geo/MFace.h ../Geo/MVertex.h \
-  ../Geo/MEdge.h ../Geo/SVector3.h ../Numeric/FunctionSpace.h \
-  ../Numeric/GmshMatrix.h ../Numeric/Gauss.h ../Post/PView.h Solvers.h \
-  ../Mesh/Field.h ../Geo/STensor3.h ../Geo/SVector3.h \
-  ../Numeric/Numeric.h ../Numeric/GmshMatrix.h ../Plugin/Plugin.h \
-  ../Common/Options.h ../Post/PViewDataList.h ../Post/PViewData.h \
-  ../Common/ListUtils.h ../Plugin/PluginManager.h ../Common/OpenFile.h \
+  ../Geo/SBoundingBox3d.h ../Geo/SOrientedBoundingBox.h ../Geo/SVector3.h \
+  ../Geo/SPoint3.h ../Geo/SPoint2.h ../Geo/Pair.h ../Geo/GPoint.h \
+  ../Geo/SPoint2.h ../Geo/GEdge.h ../Geo/GEntity.h ../Geo/GVertex.h \
+  ../Geo/SVector3.h ../Geo/SPoint3.h ../Geo/SPoint2.h ../Geo/GFace.h \
+  ../Geo/GEntity.h ../Geo/GPoint.h ../Geo/GEdgeLoop.h ../Geo/GEdge.h \
+  ../Geo/SPoint2.h ../Geo/SVector3.h ../Geo/Pair.h ../Geo/GRegion.h \
+  ../Geo/GEntity.h ../Geo/SPoint3.h ../Geo/SBoundingBox3d.h \
+  ../Geo/MElement.h ../Geo/MVertex.h ../Geo/SPoint2.h ../Geo/SPoint3.h \
+  ../Geo/MEdge.h ../Geo/MVertex.h ../Geo/SVector3.h ../Geo/MFace.h \
+  ../Geo/MVertex.h ../Geo/MEdge.h ../Geo/SVector3.h \
+  ../Numeric/FunctionSpace.h ../Numeric/GmshMatrix.h ../Numeric/Gauss.h \
+  ../Post/PView.h Solvers.h ../Mesh/Field.h ../Geo/STensor3.h \
+  ../Geo/SVector3.h ../Numeric/Numeric.h ../Numeric/GmshMatrix.h \
+  ../Plugin/Plugin.h ../Common/Options.h ../Post/PViewDataList.h \
+  ../Post/PViewData.h ../Plugin/PluginManager.h ../Common/OpenFile.h \
   Win32Icon.h ../Common/Context.h ../Geo/CGNSOptions.h \
   ../Mesh/meshPartitionOptions.h
 graphicWindow${OBJEXT}: graphicWindow.cpp GUI.h graphicWindow.h openglWindow.h \
@@ -122,18 +124,20 @@ openglWindow${OBJEXT}: openglWindow.cpp openglWindow.h ../Graphics/drawContext.h
   contextWindow.h visibilityWindow.h ../Common/GmshConfig.h \
   ../Common/GmshDefines.h ../Common/GmshMessage.h ../Geo/GModel.h \
   ../Geo/GVertex.h ../Geo/GEntity.h ../Geo/Range.h ../Geo/SPoint3.h \
-  ../Geo/SBoundingBox3d.h ../Geo/GPoint.h ../Geo/SPoint2.h ../Geo/GEdge.h \
-  ../Geo/GEntity.h ../Geo/GVertex.h ../Geo/SVector3.h ../Geo/SPoint3.h \
-  ../Geo/SPoint3.h ../Geo/SPoint2.h ../Geo/GFace.h ../Geo/GEntity.h \
-  ../Geo/GPoint.h ../Geo/GEdgeLoop.h ../Geo/GEdge.h ../Geo/SPoint2.h \
-  ../Geo/SVector3.h ../Geo/Pair.h ../Geo/GRegion.h ../Geo/GEntity.h \
-  ../Geo/SPoint3.h ../Geo/SBoundingBox3d.h ../Geo/MElement.h \
-  ../Geo/MVertex.h ../Geo/SPoint2.h ../Geo/SPoint3.h ../Geo/MEdge.h \
-  ../Geo/MVertex.h ../Geo/SVector3.h ../Geo/MFace.h ../Geo/MVertex.h \
-  ../Geo/MEdge.h ../Geo/SVector3.h ../Numeric/FunctionSpace.h \
-  ../Numeric/GmshMatrix.h ../Numeric/Gauss.h Draw.h ../Numeric/Numeric.h \
-  ../Numeric/GmshMatrix.h GUI.h ../Common/VertexArray.h \
-  ../Common/Context.h ../Geo/CGNSOptions.h ../Mesh/meshPartitionOptions.h
+  ../Geo/SBoundingBox3d.h ../Geo/SOrientedBoundingBox.h ../Geo/SVector3.h \
+  ../Geo/SPoint3.h ../Geo/SPoint2.h ../Geo/Pair.h ../Geo/GPoint.h \
+  ../Geo/SPoint2.h ../Geo/GEdge.h ../Geo/GEntity.h ../Geo/GVertex.h \
+  ../Geo/SVector3.h ../Geo/SPoint3.h ../Geo/SPoint2.h ../Geo/GFace.h \
+  ../Geo/GEntity.h ../Geo/GPoint.h ../Geo/GEdgeLoop.h ../Geo/GEdge.h \
+  ../Geo/SPoint2.h ../Geo/SVector3.h ../Geo/Pair.h ../Geo/GRegion.h \
+  ../Geo/GEntity.h ../Geo/SPoint3.h ../Geo/SBoundingBox3d.h \
+  ../Geo/MElement.h ../Geo/MVertex.h ../Geo/SPoint2.h ../Geo/SPoint3.h \
+  ../Geo/MEdge.h ../Geo/MVertex.h ../Geo/SVector3.h ../Geo/MFace.h \
+  ../Geo/MVertex.h ../Geo/MEdge.h ../Geo/SVector3.h \
+  ../Numeric/FunctionSpace.h ../Numeric/GmshMatrix.h ../Numeric/Gauss.h \
+  Draw.h ../Numeric/Numeric.h ../Numeric/GmshMatrix.h GUI.h \
+  ../Common/VertexArray.h ../Common/Context.h ../Geo/CGNSOptions.h \
+  ../Mesh/meshPartitionOptions.h
 menuWindow${OBJEXT}: menuWindow.cpp ../Common/GmshConfig.h \
   ../Common/GmshMessage.h GUI.h Draw.h menuWindow.h popupButton.h \
   mainWindow.h graphicWindow.h openglWindow.h ../Graphics/drawContext.h \
@@ -144,34 +148,36 @@ menuWindow${OBJEXT}: menuWindow.cpp ../Common/GmshConfig.h \
   solverWindow.h aboutWindow.h fileDialogs.h partitionDialog.h \
   projectionEditor.h ../Geo/fourierProjectionFace.h ../Geo/GModel.h \
   ../Geo/GVertex.h ../Geo/GEntity.h ../Geo/Range.h ../Geo/SPoint3.h \
-  ../Geo/SBoundingBox3d.h ../Geo/GPoint.h ../Geo/SPoint2.h ../Geo/GEdge.h \
-  ../Geo/GEntity.h ../Geo/GVertex.h ../Geo/SVector3.h ../Geo/SPoint3.h \
-  ../Geo/SPoint3.h ../Geo/SPoint2.h ../Geo/GFace.h ../Geo/GEntity.h \
-  ../Geo/GPoint.h ../Geo/GEdgeLoop.h ../Geo/GEdge.h ../Geo/SPoint2.h \
-  ../Geo/SVector3.h ../Geo/Pair.h ../Geo/GRegion.h ../Geo/GEntity.h \
-  ../Geo/SPoint3.h ../Geo/SBoundingBox3d.h ../Geo/Range.h \
-  classificationEditor.h ../Geo/MElement.h ../Common/GmshDefines.h \
-  ../Geo/MVertex.h ../Geo/SPoint2.h ../Geo/SPoint3.h ../Geo/MEdge.h \
-  ../Geo/MVertex.h ../Geo/SVector3.h ../Geo/MFace.h ../Geo/MVertex.h \
-  ../Geo/MEdge.h ../Geo/SVector3.h ../Numeric/FunctionSpace.h \
-  ../Numeric/GmshMatrix.h ../Numeric/Gauss.h ../Common/Options.h \
-  Solvers.h ../Common/CommandLine.h ../Mesh/Generator.h \
-  ../Mesh/HighOrder.h ../Post/PView.h ../Post/PViewData.h \
-  ../Post/PViewOptions.h ../Post/ColorTable.h ../Mesh/Field.h \
-  ../Geo/STensor3.h ../Geo/SVector3.h ../Numeric/Numeric.h \
-  ../Numeric/GmshMatrix.h ../Common/OS.h ../Common/StringUtils.h \
-  ../Common/OpenFile.h ../Common/CreateFile.h ../Geo/findLinks.h \
-  ../Common/ListUtils.h ../Geo/GeoStringInterface.h ../Common/Context.h \
-  ../Geo/CGNSOptions.h ../Mesh/meshPartitionOptions.h
+  ../Geo/SBoundingBox3d.h ../Geo/SOrientedBoundingBox.h ../Geo/SVector3.h \
+  ../Geo/SPoint3.h ../Geo/SPoint2.h ../Geo/Pair.h ../Geo/GPoint.h \
+  ../Geo/SPoint2.h ../Geo/GEdge.h ../Geo/GEntity.h ../Geo/GVertex.h \
+  ../Geo/SVector3.h ../Geo/SPoint3.h ../Geo/SPoint2.h ../Geo/GFace.h \
+  ../Geo/GEntity.h ../Geo/GPoint.h ../Geo/GEdgeLoop.h ../Geo/GEdge.h \
+  ../Geo/SPoint2.h ../Geo/SVector3.h ../Geo/Pair.h ../Geo/GRegion.h \
+  ../Geo/GEntity.h ../Geo/SPoint3.h ../Geo/SBoundingBox3d.h \
+  ../Geo/Range.h classificationEditor.h ../Geo/MElement.h \
+  ../Common/GmshDefines.h ../Geo/MVertex.h ../Geo/SPoint2.h \
+  ../Geo/SPoint3.h ../Geo/MEdge.h ../Geo/MVertex.h ../Geo/SVector3.h \
+  ../Geo/MFace.h ../Geo/MVertex.h ../Geo/MEdge.h ../Geo/SVector3.h \
+  ../Numeric/FunctionSpace.h ../Numeric/GmshMatrix.h ../Numeric/Gauss.h \
+  ../Common/Options.h Solvers.h ../Common/CommandLine.h \
+  ../Mesh/Generator.h ../Mesh/HighOrder.h ../Post/PView.h \
+  ../Post/PViewData.h ../Post/PViewOptions.h ../Post/ColorTable.h \
+  ../Mesh/Field.h ../Geo/STensor3.h ../Geo/SVector3.h \
+  ../Numeric/Numeric.h ../Numeric/GmshMatrix.h ../Common/OS.h \
+  ../Common/StringUtils.h ../Common/OpenFile.h ../Common/CreateFile.h \
+  ../Geo/findLinks.h ../Common/ListUtils.h ../Geo/GeoStringInterface.h \
+  ../Common/Context.h ../Geo/CGNSOptions.h ../Mesh/meshPartitionOptions.h
 optionWindow${OBJEXT}: optionWindow.cpp ../Common/GmshConfig.h \
   ../Common/GmshDefines.h ../Common/GmshMessage.h GUI.h optionWindow.h \
   spherePositionWidget.h colorbarWindow.h ../Post/ColorTable.h \
   paletteWindow.h menuWindow.h popupButton.h extraDialogs.h Draw.h \
   ../Common/Options.h Solvers.h ../Geo/GModel.h ../Geo/GVertex.h \
   ../Geo/GEntity.h ../Geo/Range.h ../Geo/SPoint3.h \
-  ../Geo/SBoundingBox3d.h ../Geo/SPoint3.h ../Geo/GPoint.h \
-  ../Geo/SPoint2.h ../Geo/GEdge.h ../Geo/GEntity.h ../Geo/GVertex.h \
-  ../Geo/SVector3.h ../Geo/SPoint3.h ../Geo/SPoint3.h ../Geo/SPoint2.h \
+  ../Geo/SBoundingBox3d.h ../Geo/SPoint3.h ../Geo/SOrientedBoundingBox.h \
+  ../Geo/SVector3.h ../Geo/SPoint3.h ../Geo/SPoint2.h ../Geo/Pair.h \
+  ../Geo/GPoint.h ../Geo/SPoint2.h ../Geo/GEdge.h ../Geo/GEntity.h \
+  ../Geo/GVertex.h ../Geo/SVector3.h ../Geo/SPoint3.h ../Geo/SPoint2.h \
   ../Geo/GFace.h ../Geo/GEntity.h ../Geo/GPoint.h ../Geo/GEdgeLoop.h \
   ../Geo/GEdge.h ../Geo/SPoint2.h ../Geo/SVector3.h ../Geo/Pair.h \
   ../Geo/GRegion.h ../Geo/GEntity.h ../Geo/SPoint3.h \
@@ -188,9 +194,10 @@ colorbarWindow${OBJEXT}: colorbarWindow.cpp colorbarWindow.h \
 fieldWindow${OBJEXT}: fieldWindow.cpp GUI.h Draw.h fieldWindow.h paletteWindow.h \
   fileDialogs.h ../Common/GmshDefines.h ../Geo/GModel.h ../Geo/GVertex.h \
   ../Geo/GEntity.h ../Geo/Range.h ../Geo/SPoint3.h \
-  ../Geo/SBoundingBox3d.h ../Geo/SPoint3.h ../Geo/GPoint.h \
-  ../Geo/SPoint2.h ../Geo/GEdge.h ../Geo/GEntity.h ../Geo/GVertex.h \
-  ../Geo/SVector3.h ../Geo/SPoint3.h ../Geo/SPoint3.h ../Geo/SPoint2.h \
+  ../Geo/SBoundingBox3d.h ../Geo/SPoint3.h ../Geo/SOrientedBoundingBox.h \
+  ../Geo/SVector3.h ../Geo/SPoint3.h ../Geo/SPoint2.h ../Geo/Pair.h \
+  ../Geo/GPoint.h ../Geo/SPoint2.h ../Geo/GEdge.h ../Geo/GEntity.h \
+  ../Geo/GVertex.h ../Geo/SVector3.h ../Geo/SPoint3.h ../Geo/SPoint2.h \
   ../Geo/GFace.h ../Geo/GEntity.h ../Geo/GPoint.h ../Geo/GEdgeLoop.h \
   ../Geo/GEdge.h ../Geo/SPoint2.h ../Geo/SVector3.h ../Geo/Pair.h \
   ../Geo/GRegion.h ../Geo/GEntity.h ../Geo/SPoint3.h \
@@ -205,21 +212,22 @@ pluginWindow${OBJEXT}: pluginWindow.cpp GUI.h Draw.h pluginWindow.h \
   ../Plugin/PluginManager.h ../Plugin/Plugin.h ../Common/Options.h \
   ../Post/ColorTable.h ../Common/GmshMessage.h ../Post/PViewDataList.h \
   ../Post/PViewData.h ../Geo/SBoundingBox3d.h ../Geo/SPoint3.h \
-  ../Numeric/GmshMatrix.h ../Common/GmshConfig.h ../Common/ListUtils.h \
-  ../Common/Context.h ../Geo/CGNSOptions.h ../Mesh/meshPartitionOptions.h
+  ../Numeric/GmshMatrix.h ../Common/GmshConfig.h ../Common/Context.h \
+  ../Geo/CGNSOptions.h ../Mesh/meshPartitionOptions.h
 statisticsWindow${OBJEXT}: statisticsWindow.cpp GUI.h Draw.h statisticsWindow.h \
   paletteWindow.h ../Geo/GModel.h ../Geo/GVertex.h ../Geo/GEntity.h \
   ../Geo/Range.h ../Geo/SPoint3.h ../Geo/SBoundingBox3d.h \
-  ../Geo/SPoint3.h ../Geo/GPoint.h ../Geo/SPoint2.h ../Geo/GEdge.h \
-  ../Geo/GEntity.h ../Geo/GVertex.h ../Geo/SVector3.h ../Geo/SPoint3.h \
-  ../Geo/SPoint3.h ../Geo/SPoint2.h ../Geo/GFace.h ../Geo/GEntity.h \
-  ../Geo/GPoint.h ../Geo/GEdgeLoop.h ../Geo/GEdge.h ../Geo/SPoint2.h \
-  ../Geo/SVector3.h ../Geo/Pair.h ../Geo/GRegion.h ../Geo/GEntity.h \
-  ../Geo/SPoint3.h ../Geo/SBoundingBox3d.h ../Geo/MElement.h \
-  ../Common/GmshDefines.h ../Geo/MVertex.h ../Geo/SPoint2.h \
-  ../Geo/SPoint3.h ../Geo/MEdge.h ../Geo/MVertex.h ../Geo/SVector3.h \
-  ../Geo/MFace.h ../Geo/MVertex.h ../Geo/MEdge.h ../Geo/SVector3.h \
-  ../Common/GmshMessage.h ../Numeric/FunctionSpace.h \
+  ../Geo/SPoint3.h ../Geo/SOrientedBoundingBox.h ../Geo/SVector3.h \
+  ../Geo/SPoint3.h ../Geo/SPoint2.h ../Geo/Pair.h ../Geo/GPoint.h \
+  ../Geo/SPoint2.h ../Geo/GEdge.h ../Geo/GEntity.h ../Geo/GVertex.h \
+  ../Geo/SVector3.h ../Geo/SPoint3.h ../Geo/SPoint2.h ../Geo/GFace.h \
+  ../Geo/GEntity.h ../Geo/GPoint.h ../Geo/GEdgeLoop.h ../Geo/GEdge.h \
+  ../Geo/SPoint2.h ../Geo/SVector3.h ../Geo/Pair.h ../Geo/GRegion.h \
+  ../Geo/GEntity.h ../Geo/SPoint3.h ../Geo/SBoundingBox3d.h \
+  ../Geo/MElement.h ../Common/GmshDefines.h ../Geo/MVertex.h \
+  ../Geo/SPoint2.h ../Geo/SPoint3.h ../Geo/MEdge.h ../Geo/MVertex.h \
+  ../Geo/SVector3.h ../Geo/MFace.h ../Geo/MVertex.h ../Geo/MEdge.h \
+  ../Geo/SVector3.h ../Common/GmshMessage.h ../Numeric/FunctionSpace.h \
   ../Numeric/GmshMatrix.h ../Common/GmshConfig.h ../Numeric/Gauss.h \
   ../Post/PView.h ../Mesh/Generator.h ../Common/Context.h \
   ../Geo/CGNSOptions.h ../Mesh/meshPartitionOptions.h
@@ -229,19 +237,21 @@ visibilityWindow${OBJEXT}: visibilityWindow.cpp ../Common/GmshConfig.h GUI.h \
   ../Geo/SBoundingBox3d.h ../Geo/SPoint3.h ../Common/GmshDefines.h \
   ../Common/GmshMessage.h ../Geo/GModel.h ../Geo/GVertex.h \
   ../Geo/GEntity.h ../Geo/Range.h ../Geo/SPoint3.h \
-  ../Geo/SBoundingBox3d.h ../Geo/GPoint.h ../Geo/SPoint2.h ../Geo/GEdge.h \
-  ../Geo/GEntity.h ../Geo/GVertex.h ../Geo/SVector3.h ../Geo/SPoint3.h \
-  ../Geo/SPoint3.h ../Geo/SPoint2.h ../Geo/GFace.h ../Geo/GEntity.h \
-  ../Geo/GPoint.h ../Geo/GEdgeLoop.h ../Geo/GEdge.h ../Geo/SPoint2.h \
-  ../Geo/SVector3.h ../Geo/Pair.h ../Geo/GRegion.h ../Geo/GEntity.h \
-  ../Geo/SPoint3.h ../Geo/SBoundingBox3d.h ../Geo/MElement.h \
-  ../Geo/MVertex.h ../Geo/SPoint2.h ../Geo/SPoint3.h ../Geo/MEdge.h \
-  ../Geo/MVertex.h ../Geo/SVector3.h ../Geo/MFace.h ../Geo/MVertex.h \
-  ../Geo/MEdge.h ../Geo/SVector3.h ../Numeric/FunctionSpace.h \
-  ../Numeric/GmshMatrix.h ../Numeric/Gauss.h ../Post/PView.h \
-  ../Post/PViewData.h ../Geo/GeoStringInterface.h ../Common/ListUtils.h \
-  ../Common/Options.h ../Post/ColorTable.h ../Common/Context.h \
-  ../Geo/CGNSOptions.h ../Mesh/meshPartitionOptions.h ../Parser/Parser.h
+  ../Geo/SBoundingBox3d.h ../Geo/SOrientedBoundingBox.h ../Geo/SVector3.h \
+  ../Geo/SPoint3.h ../Geo/SPoint2.h ../Geo/Pair.h ../Geo/GPoint.h \
+  ../Geo/SPoint2.h ../Geo/GEdge.h ../Geo/GEntity.h ../Geo/GVertex.h \
+  ../Geo/SVector3.h ../Geo/SPoint3.h ../Geo/SPoint2.h ../Geo/GFace.h \
+  ../Geo/GEntity.h ../Geo/GPoint.h ../Geo/GEdgeLoop.h ../Geo/GEdge.h \
+  ../Geo/SPoint2.h ../Geo/SVector3.h ../Geo/Pair.h ../Geo/GRegion.h \
+  ../Geo/GEntity.h ../Geo/SPoint3.h ../Geo/SBoundingBox3d.h \
+  ../Geo/MElement.h ../Geo/MVertex.h ../Geo/SPoint2.h ../Geo/SPoint3.h \
+  ../Geo/MEdge.h ../Geo/MVertex.h ../Geo/SVector3.h ../Geo/MFace.h \
+  ../Geo/MVertex.h ../Geo/MEdge.h ../Geo/SVector3.h \
+  ../Numeric/FunctionSpace.h ../Numeric/GmshMatrix.h ../Numeric/Gauss.h \
+  ../Post/PView.h ../Post/PViewData.h ../Geo/GeoStringInterface.h \
+  ../Common/ListUtils.h ../Common/Options.h ../Post/ColorTable.h \
+  ../Common/Context.h ../Geo/CGNSOptions.h ../Mesh/meshPartitionOptions.h \
+  ../Parser/Parser.h
 clippingWindow${OBJEXT}: clippingWindow.cpp GUI.h Draw.h clippingWindow.h \
   paletteWindow.h ../Common/GmshDefines.h ../Post/PView.h \
   ../Geo/SPoint3.h ../Post/PViewOptions.h ../Post/ColorTable.h \
@@ -258,19 +268,21 @@ manipWindow${OBJEXT}: manipWindow.cpp GUI.h Draw.h manipWindow.h paletteWindow.h
 contextWindow${OBJEXT}: contextWindow.cpp GUI.h Draw.h contextWindow.h \
   paletteWindow.h ../Geo/GModel.h ../Geo/GVertex.h ../Geo/GEntity.h \
   ../Geo/Range.h ../Geo/SPoint3.h ../Geo/SBoundingBox3d.h \
-  ../Geo/SPoint3.h ../Geo/GPoint.h ../Geo/SPoint2.h ../Geo/GEdge.h \
-  ../Geo/GEntity.h ../Geo/GVertex.h ../Geo/SVector3.h ../Geo/SPoint3.h \
-  ../Geo/SPoint3.h ../Geo/SPoint2.h ../Geo/GFace.h ../Geo/GEntity.h \
-  ../Geo/GPoint.h ../Geo/GEdgeLoop.h ../Geo/GEdge.h ../Geo/SPoint2.h \
-  ../Geo/SVector3.h ../Geo/Pair.h ../Geo/GRegion.h ../Geo/GEntity.h \
-  ../Geo/SPoint3.h ../Geo/SBoundingBox3d.h ../Geo/GeoStringInterface.h \
-  ../Common/ListUtils.h ../Common/OpenFile.h ../Common/Context.h \
-  ../Geo/CGNSOptions.h ../Mesh/meshPartitionOptions.h
+  ../Geo/SPoint3.h ../Geo/SOrientedBoundingBox.h ../Geo/SVector3.h \
+  ../Geo/SPoint3.h ../Geo/SPoint2.h ../Geo/Pair.h ../Geo/GPoint.h \
+  ../Geo/SPoint2.h ../Geo/GEdge.h ../Geo/GEntity.h ../Geo/GVertex.h \
+  ../Geo/SVector3.h ../Geo/SPoint3.h ../Geo/SPoint2.h ../Geo/GFace.h \
+  ../Geo/GEntity.h ../Geo/GPoint.h ../Geo/GEdgeLoop.h ../Geo/GEdge.h \
+  ../Geo/SPoint2.h ../Geo/SVector3.h ../Geo/Pair.h ../Geo/GRegion.h \
+  ../Geo/GEntity.h ../Geo/SPoint3.h ../Geo/SBoundingBox3d.h \
+  ../Geo/GeoStringInterface.h ../Common/ListUtils.h ../Common/OpenFile.h \
+  ../Common/Context.h ../Geo/CGNSOptions.h ../Mesh/meshPartitionOptions.h
 solverWindow${OBJEXT}: solverWindow.cpp ../Geo/GModel.h ../Geo/GVertex.h \
   ../Geo/GEntity.h ../Geo/Range.h ../Geo/SPoint3.h \
-  ../Geo/SBoundingBox3d.h ../Geo/SPoint3.h ../Geo/GPoint.h \
-  ../Geo/SPoint2.h ../Geo/GEdge.h ../Geo/GEntity.h ../Geo/GVertex.h \
-  ../Geo/SVector3.h ../Geo/SPoint3.h ../Geo/SPoint3.h ../Geo/SPoint2.h \
+  ../Geo/SBoundingBox3d.h ../Geo/SPoint3.h ../Geo/SOrientedBoundingBox.h \
+  ../Geo/SVector3.h ../Geo/SPoint3.h ../Geo/SPoint2.h ../Geo/Pair.h \
+  ../Geo/GPoint.h ../Geo/SPoint2.h ../Geo/GEdge.h ../Geo/GEntity.h \
+  ../Geo/GVertex.h ../Geo/SVector3.h ../Geo/SPoint3.h ../Geo/SPoint2.h \
   ../Geo/GFace.h ../Geo/GEntity.h ../Geo/GPoint.h ../Geo/GEdgeLoop.h \
   ../Geo/GEdge.h ../Geo/SPoint2.h ../Geo/SVector3.h ../Geo/Pair.h \
   ../Geo/GRegion.h ../Geo/GEntity.h ../Geo/SPoint3.h \
@@ -288,20 +300,22 @@ fileDialogs${OBJEXT}: fileDialogs.cpp ../Common/GmshConfig.h \
   ../Common/CreateFile.h ../Common/Options.h ../Post/ColorTable.h Draw.h \
   ../Geo/GModel.h ../Geo/GVertex.h ../Geo/GEntity.h ../Geo/Range.h \
   ../Geo/SPoint3.h ../Geo/SBoundingBox3d.h ../Geo/SPoint3.h \
-  ../Geo/GPoint.h ../Geo/SPoint2.h ../Geo/GEdge.h ../Geo/GEntity.h \
-  ../Geo/GVertex.h ../Geo/SVector3.h ../Geo/SPoint3.h ../Geo/SPoint3.h \
-  ../Geo/SPoint2.h ../Geo/GFace.h ../Geo/GEntity.h ../Geo/GPoint.h \
-  ../Geo/GEdgeLoop.h ../Geo/GEdge.h ../Geo/SPoint2.h ../Geo/SVector3.h \
-  ../Geo/Pair.h ../Geo/GRegion.h ../Geo/GEntity.h ../Geo/SPoint3.h \
-  ../Geo/SBoundingBox3d.h ../Common/Context.h ../Geo/CGNSOptions.h \
-  ../Mesh/meshPartitionOptions.h
+  ../Geo/SOrientedBoundingBox.h ../Geo/SVector3.h ../Geo/SPoint3.h \
+  ../Geo/SPoint2.h ../Geo/Pair.h ../Geo/GPoint.h ../Geo/SPoint2.h \
+  ../Geo/GEdge.h ../Geo/GEntity.h ../Geo/GVertex.h ../Geo/SVector3.h \
+  ../Geo/SPoint3.h ../Geo/SPoint2.h ../Geo/GFace.h ../Geo/GEntity.h \
+  ../Geo/GPoint.h ../Geo/GEdgeLoop.h ../Geo/GEdge.h ../Geo/SPoint2.h \
+  ../Geo/SVector3.h ../Geo/Pair.h ../Geo/GRegion.h ../Geo/GEntity.h \
+  ../Geo/SPoint3.h ../Geo/SBoundingBox3d.h ../Common/Context.h \
+  ../Geo/CGNSOptions.h ../Mesh/meshPartitionOptions.h
 extraDialogs${OBJEXT}: extraDialogs.cpp GUI.h paletteWindow.h \
   ../Common/GmshDefines.h ../Common/OpenFile.h ../Common/CreateFile.h \
   ../Common/Options.h ../Post/ColorTable.h Draw.h ../Geo/GModel.h \
   ../Geo/GVertex.h ../Geo/GEntity.h ../Geo/Range.h ../Geo/SPoint3.h \
-  ../Geo/SBoundingBox3d.h ../Geo/SPoint3.h ../Geo/GPoint.h \
-  ../Geo/SPoint2.h ../Geo/GEdge.h ../Geo/GEntity.h ../Geo/GVertex.h \
-  ../Geo/SVector3.h ../Geo/SPoint3.h ../Geo/SPoint3.h ../Geo/SPoint2.h \
+  ../Geo/SBoundingBox3d.h ../Geo/SPoint3.h ../Geo/SOrientedBoundingBox.h \
+  ../Geo/SVector3.h ../Geo/SPoint3.h ../Geo/SPoint2.h ../Geo/Pair.h \
+  ../Geo/GPoint.h ../Geo/SPoint2.h ../Geo/GEdge.h ../Geo/GEntity.h \
+  ../Geo/GVertex.h ../Geo/SVector3.h ../Geo/SPoint3.h ../Geo/SPoint2.h \
   ../Geo/GFace.h ../Geo/GEntity.h ../Geo/GPoint.h ../Geo/GEdgeLoop.h \
   ../Geo/GEdge.h ../Geo/SPoint2.h ../Geo/SVector3.h ../Geo/Pair.h \
   ../Geo/GRegion.h ../Geo/GEntity.h ../Geo/SPoint3.h \
@@ -310,9 +324,10 @@ extraDialogs${OBJEXT}: extraDialogs.cpp GUI.h paletteWindow.h \
 projectionEditor${OBJEXT}: projectionEditor.cpp ../Common/GmshConfig.h GUI.h \
   projectionEditor.h ../Geo/fourierProjectionFace.h ../Geo/GModel.h \
   ../Geo/GVertex.h ../Geo/GEntity.h ../Geo/Range.h ../Geo/SPoint3.h \
-  ../Geo/SBoundingBox3d.h ../Geo/SPoint3.h ../Geo/GPoint.h \
-  ../Geo/SPoint2.h ../Geo/GEdge.h ../Geo/GEntity.h ../Geo/GVertex.h \
-  ../Geo/SVector3.h ../Geo/SPoint3.h ../Geo/SPoint3.h ../Geo/SPoint2.h \
+  ../Geo/SBoundingBox3d.h ../Geo/SPoint3.h ../Geo/SOrientedBoundingBox.h \
+  ../Geo/SVector3.h ../Geo/SPoint3.h ../Geo/SPoint2.h ../Geo/Pair.h \
+  ../Geo/GPoint.h ../Geo/SPoint2.h ../Geo/GEdge.h ../Geo/GEntity.h \
+  ../Geo/GVertex.h ../Geo/SVector3.h ../Geo/SPoint3.h ../Geo/SPoint2.h \
   ../Geo/GFace.h ../Geo/GEntity.h ../Geo/GPoint.h ../Geo/GEdgeLoop.h \
   ../Geo/GEdge.h ../Geo/SPoint2.h ../Geo/SVector3.h ../Geo/Pair.h \
   ../Geo/GRegion.h ../Geo/GEntity.h ../Geo/SPoint3.h \
@@ -331,9 +346,10 @@ projectionEditor${OBJEXT}: projectionEditor.cpp ../Common/GmshConfig.h GUI.h \
 classificationEditor${OBJEXT}: classificationEditor.cpp GUI.h \
   classificationEditor.h ../Geo/GModel.h ../Geo/GVertex.h \
   ../Geo/GEntity.h ../Geo/Range.h ../Geo/SPoint3.h \
-  ../Geo/SBoundingBox3d.h ../Geo/SPoint3.h ../Geo/GPoint.h \
-  ../Geo/SPoint2.h ../Geo/GEdge.h ../Geo/GEntity.h ../Geo/GVertex.h \
-  ../Geo/SVector3.h ../Geo/SPoint3.h ../Geo/SPoint3.h ../Geo/SPoint2.h \
+  ../Geo/SBoundingBox3d.h ../Geo/SPoint3.h ../Geo/SOrientedBoundingBox.h \
+  ../Geo/SVector3.h ../Geo/SPoint3.h ../Geo/SPoint2.h ../Geo/Pair.h \
+  ../Geo/GPoint.h ../Geo/SPoint2.h ../Geo/GEdge.h ../Geo/GEntity.h \
+  ../Geo/GVertex.h ../Geo/SVector3.h ../Geo/SPoint3.h ../Geo/SPoint2.h \
   ../Geo/GFace.h ../Geo/GEntity.h ../Geo/GPoint.h ../Geo/GEdgeLoop.h \
   ../Geo/GEdge.h ../Geo/SPoint2.h ../Geo/SVector3.h ../Geo/Pair.h \
   ../Geo/GRegion.h ../Geo/GEntity.h ../Geo/SPoint3.h \
@@ -347,23 +363,25 @@ classificationEditor${OBJEXT}: classificationEditor.cpp GUI.h \
   ../Common/Options.h ../Common/Context.h ../Geo/CGNSOptions.h \
   ../Mesh/meshPartitionOptions.h ../Geo/MLine.h ../Geo/MElement.h \
   ../Mesh/meshGFaceDelaunayInsertion.h ../Geo/MTriangle.h \
-  ../Geo/MElement.h ../Mesh/meshGFaceOptimize.h \
-  ../Mesh/meshGFaceDelaunayInsertion.h ../Geo/discreteEdge.h \
-  ../Geo/GModel.h ../Geo/GEdge.h ../Geo/discreteVertex.h ../Geo/GModel.h \
-  ../Geo/GVertex.h ../Geo/MVertex.h ../Geo/discreteFace.h ../Geo/GModel.h \
-  ../Geo/GFace.h ../Geo/discreteEdge.h ../Geo/MEdge.h
+  ../Geo/MElement.h ../Geo/STensor3.h ../Geo/SVector3.h \
+  ../Mesh/meshGFaceOptimize.h ../Mesh/meshGFaceDelaunayInsertion.h \
+  ../Geo/discreteEdge.h ../Geo/GModel.h ../Geo/GEdge.h \
+  ../Geo/discreteVertex.h ../Geo/GModel.h ../Geo/GVertex.h \
+  ../Geo/MVertex.h ../Geo/discreteFace.h ../Geo/GModel.h ../Geo/GFace.h \
+  ../Geo/discreteEdge.h ../Geo/MEdge.h
 partitionDialog${OBJEXT}: partitionDialog.cpp ../Common/GmshConfig.h \
   ../Common/GmshDefines.h ../Common/GmshMessage.h GUI.h paletteWindow.h \
   ../Geo/GModel.h ../Geo/GVertex.h ../Geo/GEntity.h ../Geo/Range.h \
   ../Geo/SPoint3.h ../Geo/SBoundingBox3d.h ../Geo/SPoint3.h \
-  ../Geo/GPoint.h ../Geo/SPoint2.h ../Geo/GEdge.h ../Geo/GEntity.h \
-  ../Geo/GVertex.h ../Geo/SVector3.h ../Geo/SPoint3.h ../Geo/SPoint3.h \
-  ../Geo/SPoint2.h ../Geo/GFace.h ../Geo/GEntity.h ../Geo/GPoint.h \
-  ../Geo/GEdgeLoop.h ../Geo/GEdge.h ../Geo/SPoint2.h ../Geo/SVector3.h \
-  ../Geo/Pair.h ../Geo/GRegion.h ../Geo/GEntity.h ../Geo/SPoint3.h \
-  ../Geo/SBoundingBox3d.h Draw.h ../Common/Options.h ../Post/ColorTable.h \
-  ../Mesh/meshPartition.h ../Common/Context.h ../Geo/CGNSOptions.h \
-  ../Mesh/meshPartitionOptions.h
+  ../Geo/SOrientedBoundingBox.h ../Geo/SVector3.h ../Geo/SPoint3.h \
+  ../Geo/SPoint2.h ../Geo/Pair.h ../Geo/GPoint.h ../Geo/SPoint2.h \
+  ../Geo/GEdge.h ../Geo/GEntity.h ../Geo/GVertex.h ../Geo/SVector3.h \
+  ../Geo/SPoint3.h ../Geo/SPoint2.h ../Geo/GFace.h ../Geo/GEntity.h \
+  ../Geo/GPoint.h ../Geo/GEdgeLoop.h ../Geo/GEdge.h ../Geo/SPoint2.h \
+  ../Geo/SVector3.h ../Geo/Pair.h ../Geo/GRegion.h ../Geo/GEntity.h \
+  ../Geo/SPoint3.h ../Geo/SBoundingBox3d.h Draw.h ../Common/Options.h \
+  ../Post/ColorTable.h ../Mesh/meshPartition.h ../Common/Context.h \
+  ../Geo/CGNSOptions.h ../Mesh/meshPartitionOptions.h
 Draw${OBJEXT}: Draw.cpp GUI.h graphicWindow.h openglWindow.h \
   ../Graphics/drawContext.h ../Geo/SBoundingBox3d.h ../Geo/SPoint3.h \
   optionWindow.h spherePositionWidget.h colorbarWindow.h \
diff --git a/Geo/Makefile b/Geo/Makefile
index 8b0a84bce51029f8d0e967a3953aeaf7616bfecd..46122811f13a95220f70d4ed56abdc454907de55 100644
--- a/Geo/Makefile
+++ b/Geo/Makefile
@@ -71,59 +71,64 @@ depend:
 
 # DO NOT DELETE THIS LINE
 GEntity${OBJEXT}: GEntity.cpp GModel.h GVertex.h GEntity.h Range.h SPoint3.h \
-  SBoundingBox3d.h GPoint.h SPoint2.h GEdge.h SVector3.h GFace.h \
-  GEdgeLoop.h Pair.h GRegion.h MElement.h ../Common/GmshDefines.h \
-  MVertex.h MEdge.h MFace.h ../Common/GmshMessage.h \
-  ../Numeric/FunctionSpace.h ../Numeric/GmshMatrix.h \
-  ../Common/GmshConfig.h ../Common/GmshMessage.h ../Numeric/Gauss.h \
+  SBoundingBox3d.h SOrientedBoundingBox.h SVector3.h SPoint2.h Pair.h \
+  GPoint.h GEdge.h GFace.h GEdgeLoop.h GRegion.h MElement.h \
+  ../Common/GmshDefines.h MVertex.h MEdge.h MFace.h \
+  ../Common/GmshMessage.h ../Numeric/FunctionSpace.h \
+  ../Numeric/GmshMatrix.h ../Common/GmshConfig.h ../Numeric/Gauss.h \
   ../Common/VertexArray.h ../Geo/SVector3.h ../Common/Context.h \
   ../Geo/CGNSOptions.h ../Mesh/meshPartitionOptions.h
-GVertex${OBJEXT}: GVertex.cpp GVertex.h GEntity.h Range.h SPoint3.h \
-  SBoundingBox3d.h GPoint.h SPoint2.h GFace.h GEdgeLoop.h GEdge.h \
-  SVector3.h Pair.h MPoint.h MElement.h ../Common/GmshDefines.h MVertex.h \
-  MEdge.h MFace.h ../Common/GmshMessage.h ../Numeric/FunctionSpace.h \
+STensor3${OBJEXT}: STensor3.cpp STensor3.h SVector3.h SPoint3.h \
   ../Numeric/GmshMatrix.h ../Common/GmshConfig.h ../Common/GmshMessage.h \
-  ../Numeric/Gauss.h
+  ../Numeric/Numeric.h ../Numeric/GmshMatrix.h
+GVertex${OBJEXT}: GVertex.cpp GVertex.h GEntity.h Range.h SPoint3.h \
+  SBoundingBox3d.h SOrientedBoundingBox.h SVector3.h SPoint2.h Pair.h \
+  GPoint.h GFace.h GEdgeLoop.h GEdge.h MPoint.h MElement.h \
+  ../Common/GmshDefines.h MVertex.h MEdge.h MFace.h \
+  ../Common/GmshMessage.h ../Numeric/FunctionSpace.h \
+  ../Numeric/GmshMatrix.h ../Common/GmshConfig.h ../Numeric/Gauss.h
 GEdge${OBJEXT}: GEdge.cpp ../Common/GmshConfig.h ../Common/GmshDefines.h \
   ../Common/GmshMessage.h GModel.h GVertex.h GEntity.h Range.h SPoint3.h \
-  SBoundingBox3d.h GPoint.h SPoint2.h GEdge.h SVector3.h GFace.h \
-  GEdgeLoop.h Pair.h GRegion.h MLine.h MElement.h MVertex.h MEdge.h \
-  MFace.h ../Numeric/FunctionSpace.h ../Numeric/GmshMatrix.h \
-  ../Common/GmshConfig.h ../Common/GmshMessage.h ../Numeric/Gauss.h \
-  ../Numeric/GaussLegendre1D.h ../Common/Context.h ../Geo/CGNSOptions.h \
-  ../Mesh/meshPartitionOptions.h
+  SBoundingBox3d.h SOrientedBoundingBox.h SVector3.h SPoint2.h Pair.h \
+  GPoint.h GEdge.h GFace.h GEdgeLoop.h GRegion.h MLine.h MElement.h \
+  MVertex.h MEdge.h MFace.h ../Numeric/FunctionSpace.h \
+  ../Numeric/GmshMatrix.h ../Numeric/Gauss.h ../Numeric/GaussLegendre1D.h \
+  ../Common/Context.h ../Geo/CGNSOptions.h ../Mesh/meshPartitionOptions.h
 GFace${OBJEXT}: GFace.cpp ../Common/GmshConfig.h ../Common/GmshMessage.h \
   GModel.h GVertex.h GEntity.h Range.h SPoint3.h SBoundingBox3d.h \
-  GPoint.h SPoint2.h GEdge.h SVector3.h GFace.h GEdgeLoop.h Pair.h \
-  GRegion.h MTriangle.h MElement.h ../Common/GmshDefines.h MVertex.h \
-  MEdge.h MFace.h ../Numeric/FunctionSpace.h ../Numeric/GmshMatrix.h \
-  ../Numeric/Gauss.h MQuadrangle.h ../Common/VertexArray.h \
-  ../Geo/SVector3.h ../Numeric/Numeric.h ../Numeric/GmshMatrix.h \
-  ../Numeric/EigSolve.h ../Numeric/GaussLegendre1D.h ../Common/Context.h \
-  ../Geo/CGNSOptions.h ../Mesh/meshPartitionOptions.h
-
-GRegion${OBJEXT}: GRegion.cpp GModel.h GVertex.h GEntity.h Range.h SPoint3.h \
-  SBoundingBox3d.h GPoint.h SPoint2.h GEdge.h SVector3.h GFace.h \
-  GEdgeLoop.h Pair.h GRegion.h MTetrahedron.h MElement.h \
+  SOrientedBoundingBox.h SVector3.h SPoint2.h Pair.h GPoint.h GEdge.h \
+  GFace.h GEdgeLoop.h GRegion.h MTriangle.h MElement.h \
   ../Common/GmshDefines.h MVertex.h MEdge.h MFace.h \
+  ../Numeric/FunctionSpace.h ../Numeric/GmshMatrix.h ../Numeric/Gauss.h \
+  MQuadrangle.h MElementCut.h MTetrahedron.h MLine.h \
+  ../Common/VertexArray.h ../Geo/SVector3.h ../Numeric/Numeric.h \
+  ../Numeric/GmshMatrix.h ../Numeric/EigSolve.h \
+  ../Numeric/GaussLegendre1D.h ../Common/Context.h ../Geo/CGNSOptions.h \
+  ../Mesh/meshPartitionOptions.h
+GRegion${OBJEXT}: GRegion.cpp GModel.h GVertex.h GEntity.h Range.h SPoint3.h \
+  SBoundingBox3d.h SOrientedBoundingBox.h SVector3.h SPoint2.h Pair.h \
+  GPoint.h GEdge.h GFace.h GEdgeLoop.h GRegion.h MTetrahedron.h \
+  MElement.h ../Common/GmshDefines.h MVertex.h MEdge.h MFace.h \
   ../Common/GmshMessage.h ../Numeric/FunctionSpace.h \
-  ../Numeric/GmshMatrix.h ../Common/GmshConfig.h ../Common/GmshMessage.h \
-  ../Numeric/Gauss.h MHexahedron.h MPrism.h MPyramid.h
+  ../Numeric/GmshMatrix.h ../Common/GmshConfig.h ../Numeric/Gauss.h \
+  MHexahedron.h MPrism.h MPyramid.h MElementCut.h MTriangle.h MLine.h \
+  ../Common/VertexArray.h ../Geo/SVector3.h
 GEdgeLoop${OBJEXT}: GEdgeLoop.cpp GEdgeLoop.h GEdge.h GEntity.h Range.h \
-  SPoint3.h SBoundingBox3d.h GVertex.h GPoint.h SPoint2.h SVector3.h \
-  ../Common/GmshMessage.h
+  SPoint3.h SBoundingBox3d.h SOrientedBoundingBox.h SVector3.h SPoint2.h \
+  Pair.h GVertex.h GPoint.h ../Common/GmshMessage.h
 GEdgeCompound${OBJEXT}: GEdgeCompound.cpp ../Common/GmshConfig.h GEdgeCompound.h \
-  GFace.h GEntity.h Range.h SPoint3.h SBoundingBox3d.h GPoint.h \
-  GEdgeLoop.h GEdge.h GVertex.h SPoint2.h SVector3.h Pair.h \
-  ../Numeric/Numeric.h ../Numeric/GmshMatrix.h ../Common/GmshConfig.h \
+  GFace.h GEntity.h Range.h SPoint3.h SBoundingBox3d.h \
+  SOrientedBoundingBox.h SVector3.h SPoint2.h Pair.h GPoint.h GEdgeLoop.h \
+  GEdge.h GVertex.h ../Numeric/Numeric.h ../Numeric/GmshMatrix.h \
   ../Common/GmshMessage.h
 GFaceCompound${OBJEXT}: GFaceCompound.cpp ../Common/GmshConfig.h GFaceCompound.h \
-  GFace.h GEntity.h Range.h SPoint3.h SBoundingBox3d.h GPoint.h \
-  GEdgeLoop.h GEdge.h GVertex.h SPoint2.h SVector3.h Pair.h \
-  GEdgeCompound.h MLine.h MElement.h ../Common/GmshDefines.h MVertex.h \
-  MEdge.h MFace.h ../Common/GmshMessage.h ../Numeric/FunctionSpace.h \
-  ../Numeric/GmshMatrix.h ../Common/GmshConfig.h ../Common/GmshMessage.h \
-  ../Numeric/Gauss.h MTriangle.h ../Numeric/Numeric.h ../Common/Octree.h \
+  GFace.h GEntity.h Range.h SPoint3.h SBoundingBox3d.h \
+  SOrientedBoundingBox.h SVector3.h SPoint2.h Pair.h GPoint.h GEdgeLoop.h \
+  GEdge.h GVertex.h GEdgeCompound.h MLine.h MElement.h \
+  ../Common/GmshDefines.h MVertex.h MEdge.h MFace.h \
+  ../Common/GmshMessage.h ../Numeric/FunctionSpace.h \
+  ../Numeric/GmshMatrix.h ../Numeric/Gauss.h MTriangle.h \
+  ../Numeric/Numeric.h ../Numeric/GmshMatrix.h ../Common/Octree.h \
   ../Common/OctreeInternals.h ../Numeric/gmshAssembler.h \
   ../Numeric/gmshLinearSystem.h ../Numeric/gmshLaplace.h \
   ../Numeric/gmshTermOfFormulation.h ../Numeric/GmshMatrix.h \
@@ -137,294 +142,311 @@ GFaceCompound${OBJEXT}: GFaceCompound.cpp ../Common/GmshConfig.h GFaceCompound.h
   ../Numeric/GmshMatrix.h
 GRegionCompound${OBJEXT}: GRegionCompound.cpp ../Common/GmshConfig.h \
   GRegionCompound.h GRegion.h GEntity.h Range.h SPoint3.h \
-  SBoundingBox3d.h GFace.h GPoint.h GEdgeLoop.h GEdge.h GVertex.h \
-  SPoint2.h SVector3.h Pair.h GFaceCompound.h GEdgeCompound.h \
-  ../Numeric/Numeric.h ../Numeric/GmshMatrix.h ../Common/GmshMessage.h
+  SBoundingBox3d.h SOrientedBoundingBox.h SVector3.h SPoint2.h Pair.h \
+  GFace.h GPoint.h GEdgeLoop.h GEdge.h GVertex.h GFaceCompound.h \
+  GEdgeCompound.h ../Numeric/Numeric.h ../Numeric/GmshMatrix.h \
+  ../Common/GmshMessage.h
 gmshVertex${OBJEXT}: gmshVertex.cpp GFace.h GEntity.h Range.h SPoint3.h \
-  SBoundingBox3d.h GPoint.h GEdgeLoop.h GEdge.h GVertex.h SPoint2.h \
-  SVector3.h Pair.h gmshVertex.h Geo.h ../Common/GmshDefines.h \
-  gmshSurface.h ../Numeric/Numeric.h ../Numeric/GmshMatrix.h \
-  ../Common/GmshConfig.h ../Common/GmshMessage.h ../Common/ListUtils.h \
-  ../Common/TreeUtils.h ../Common/avl.h ../Common/ListUtils.h \
-  ExtrudeParams.h ../Common/SmoothData.h GeoInterpolation.h \
-  ../Common/GmshMessage.h MVertex.h MPoint.h MElement.h MEdge.h MFace.h \
-  ../Numeric/FunctionSpace.h ../Numeric/Gauss.h
-gmshEdge${OBJEXT}: gmshEdge.cpp GModel.h GVertex.h GEntity.h Range.h SPoint3.h \
-  SBoundingBox3d.h GPoint.h SPoint2.h GEdge.h SVector3.h GFace.h \
-  GEdgeLoop.h Pair.h GRegion.h GFaceCompound.h GEdgeCompound.h gmshEdge.h \
-  Geo.h ../Common/GmshDefines.h gmshSurface.h ../Numeric/Numeric.h \
+  SBoundingBox3d.h SOrientedBoundingBox.h SVector3.h SPoint2.h Pair.h \
+  GPoint.h GEdgeLoop.h GEdge.h GVertex.h gmshVertex.h Geo.h \
+  ../Common/GmshDefines.h gmshSurface.h ../Numeric/Numeric.h \
   ../Numeric/GmshMatrix.h ../Common/GmshConfig.h ../Common/GmshMessage.h \
   ../Common/ListUtils.h ../Common/TreeUtils.h ../Common/avl.h \
   ../Common/ListUtils.h ExtrudeParams.h ../Common/SmoothData.h \
-  GeoInterpolation.h ../Common/GmshMessage.h ../Common/Context.h \
+  GeoInterpolation.h MVertex.h MPoint.h MElement.h MEdge.h MFace.h \
+  ../Numeric/FunctionSpace.h ../Numeric/GmshMatrix.h ../Numeric/Gauss.h
+gmshEdge${OBJEXT}: gmshEdge.cpp GModel.h GVertex.h GEntity.h Range.h SPoint3.h \
+  SBoundingBox3d.h SOrientedBoundingBox.h SVector3.h SPoint2.h Pair.h \
+  GPoint.h GEdge.h GFace.h GEdgeLoop.h GRegion.h GFaceCompound.h \
+  GEdgeCompound.h gmshEdge.h Geo.h ../Common/GmshDefines.h gmshSurface.h \
+  ../Numeric/Numeric.h ../Numeric/GmshMatrix.h ../Common/GmshConfig.h \
+  ../Common/GmshMessage.h ../Common/ListUtils.h ../Common/TreeUtils.h \
+  ../Common/avl.h ../Common/ListUtils.h ExtrudeParams.h \
+  ../Common/SmoothData.h GeoInterpolation.h ../Common/Context.h \
   ../Geo/CGNSOptions.h ../Mesh/meshPartitionOptions.h
 gmshFace${OBJEXT}: gmshFace.cpp GModel.h GVertex.h GEntity.h Range.h SPoint3.h \
-  SBoundingBox3d.h GPoint.h SPoint2.h GEdge.h SVector3.h GFace.h \
-  GEdgeLoop.h Pair.h GRegion.h gmshFace.h Geo.h ../Common/GmshDefines.h \
-  gmshSurface.h ../Numeric/Numeric.h ../Numeric/GmshMatrix.h \
-  ../Common/GmshConfig.h ../Common/GmshMessage.h ../Common/ListUtils.h \
-  ../Common/TreeUtils.h ../Common/avl.h ../Common/ListUtils.h \
-  ExtrudeParams.h ../Common/SmoothData.h GeoInterpolation.h \
-  ../Common/GmshMessage.h ../Common/Context.h ../Geo/CGNSOptions.h \
-  ../Mesh/meshPartitionOptions.h
-gmshRegion${OBJEXT}: gmshRegion.cpp GModel.h GVertex.h GEntity.h Range.h \
-  SPoint3.h SBoundingBox3d.h GPoint.h SPoint2.h GEdge.h SVector3.h \
-  GFace.h GEdgeLoop.h Pair.h GRegion.h gmshRegion.h Geo.h \
+  SBoundingBox3d.h SOrientedBoundingBox.h SVector3.h SPoint2.h Pair.h \
+  GPoint.h GEdge.h GFace.h GEdgeLoop.h GRegion.h gmshFace.h Geo.h \
   ../Common/GmshDefines.h gmshSurface.h ../Numeric/Numeric.h \
   ../Numeric/GmshMatrix.h ../Common/GmshConfig.h ../Common/GmshMessage.h \
   ../Common/ListUtils.h ../Common/TreeUtils.h ../Common/avl.h \
   ../Common/ListUtils.h ExtrudeParams.h ../Common/SmoothData.h \
-  ../Common/GmshMessage.h
+  GeoInterpolation.h ../Common/Context.h ../Geo/CGNSOptions.h \
+  ../Mesh/meshPartitionOptions.h
+gmshRegion${OBJEXT}: gmshRegion.cpp GModel.h GVertex.h GEntity.h Range.h \
+  SPoint3.h SBoundingBox3d.h SOrientedBoundingBox.h SVector3.h SPoint2.h \
+  Pair.h GPoint.h GEdge.h GFace.h GEdgeLoop.h GRegion.h gmshRegion.h \
+  Geo.h ../Common/GmshDefines.h gmshSurface.h ../Numeric/Numeric.h \
+  ../Numeric/GmshMatrix.h ../Common/GmshConfig.h ../Common/GmshMessage.h \
+  ../Common/ListUtils.h ../Common/TreeUtils.h ../Common/avl.h \
+  ../Common/ListUtils.h ExtrudeParams.h ../Common/SmoothData.h
 gmshSurface${OBJEXT}: gmshSurface.cpp ../Common/GmshConfig.h \
   ../Common/GmshMessage.h gmshSurface.h Pair.h Range.h SPoint2.h \
   SPoint3.h SVector3.h SBoundingBox3d.h ../Numeric/Numeric.h \
-  ../Numeric/GmshMatrix.h ../Common/GmshConfig.h ../Common/GmshMessage.h
+  ../Numeric/GmshMatrix.h
 OCCVertex${OBJEXT}: OCCVertex.cpp ../Common/GmshConfig.h GModel.h GVertex.h \
-  GEntity.h Range.h SPoint3.h SBoundingBox3d.h GPoint.h SPoint2.h GEdge.h \
-  SVector3.h GFace.h GEdgeLoop.h Pair.h GRegion.h MVertex.h MPoint.h \
-  MElement.h ../Common/GmshDefines.h MEdge.h MFace.h \
-  ../Common/GmshMessage.h ../Numeric/FunctionSpace.h \
-  ../Numeric/GmshMatrix.h ../Common/GmshConfig.h ../Common/GmshMessage.h \
-  ../Numeric/Gauss.h OCCVertex.h OCCIncludes.h OCCEdge.h OCCFace.h
+  GEntity.h Range.h SPoint3.h SBoundingBox3d.h SOrientedBoundingBox.h \
+  SVector3.h SPoint2.h Pair.h GPoint.h GEdge.h GFace.h GEdgeLoop.h \
+  GRegion.h MVertex.h MPoint.h MElement.h ../Common/GmshDefines.h MEdge.h \
+  MFace.h ../Common/GmshMessage.h ../Numeric/FunctionSpace.h \
+  ../Numeric/GmshMatrix.h ../Numeric/Gauss.h OCCVertex.h OCCIncludes.h \
+  OCCEdge.h OCCFace.h
 OCCEdge${OBJEXT}: OCCEdge.cpp ../Common/GmshConfig.h ../Common/GmshMessage.h \
   GModel.h GVertex.h GEntity.h Range.h SPoint3.h SBoundingBox3d.h \
-  GPoint.h SPoint2.h GEdge.h SVector3.h GFace.h GEdgeLoop.h Pair.h \
-  GRegion.h OCCEdge.h OCCVertex.h OCCIncludes.h OCCFace.h \
-  ../Common/Context.h ../Geo/CGNSOptions.h ../Mesh/meshPartitionOptions.h
+  SOrientedBoundingBox.h SVector3.h SPoint2.h Pair.h GPoint.h GEdge.h \
+  GFace.h GEdgeLoop.h GRegion.h OCCEdge.h OCCVertex.h OCCIncludes.h \
+  OCCFace.h ../Common/Context.h ../Geo/CGNSOptions.h \
+  ../Mesh/meshPartitionOptions.h
 OCCFace${OBJEXT}: OCCFace.cpp ../Common/GmshConfig.h ../Common/GmshMessage.h \
   GModel.h GVertex.h GEntity.h Range.h SPoint3.h SBoundingBox3d.h \
-  GPoint.h SPoint2.h GEdge.h SVector3.h GFace.h GEdgeLoop.h Pair.h \
-  GRegion.h OCCVertex.h OCCIncludes.h OCCEdge.h OCCFace.h \
-  ../Numeric/Numeric.h ../Numeric/GmshMatrix.h ../Common/GmshConfig.h \
-  ../Common/GmshMessage.h ../Common/VertexArray.h ../Geo/SVector3.h \
-  ../Common/Context.h ../Geo/CGNSOptions.h ../Mesh/meshPartitionOptions.h
+  SOrientedBoundingBox.h SVector3.h SPoint2.h Pair.h GPoint.h GEdge.h \
+  GFace.h GEdgeLoop.h GRegion.h OCCVertex.h OCCIncludes.h OCCEdge.h \
+  OCCFace.h ../Numeric/Numeric.h ../Numeric/GmshMatrix.h \
+  ../Common/VertexArray.h ../Geo/SVector3.h ../Common/Context.h \
+  ../Geo/CGNSOptions.h ../Mesh/meshPartitionOptions.h
 OCCRegion${OBJEXT}: OCCRegion.cpp ../Common/GmshConfig.h ../Common/GmshMessage.h \
   GModel.h GVertex.h GEntity.h Range.h SPoint3.h SBoundingBox3d.h \
-  GPoint.h SPoint2.h GEdge.h SVector3.h GFace.h GEdgeLoop.h Pair.h \
-  GRegion.h OCCVertex.h OCCIncludes.h OCCEdge.h OCCFace.h OCCRegion.h
+  SOrientedBoundingBox.h SVector3.h SPoint2.h Pair.h GPoint.h GEdge.h \
+  GFace.h GEdgeLoop.h GRegion.h OCCVertex.h OCCIncludes.h OCCEdge.h \
+  OCCFace.h OCCRegion.h
 discreteEdge${OBJEXT}: discreteEdge.cpp ../Common/GmshConfig.h \
   ../Common/GmshMessage.h discreteEdge.h GModel.h GVertex.h GEntity.h \
-  Range.h SPoint3.h SBoundingBox3d.h GPoint.h SPoint2.h GEdge.h \
-  SVector3.h GFace.h GEdgeLoop.h Pair.h GRegion.h discreteVertex.h \
-  MVertex.h MLine.h MElement.h ../Common/GmshDefines.h MEdge.h MFace.h \
-  ../Numeric/FunctionSpace.h ../Numeric/GmshMatrix.h ../Numeric/Gauss.h \
-  ../Numeric/Numeric.h ../Numeric/GmshMatrix.h MPoint.h MTriangle.h \
-  MQuadrangle.h MPrism.h MTetrahedron.h MHexahedron.h MPyramid.h Geo.h \
-  gmshSurface.h ../Common/ListUtils.h ../Common/TreeUtils.h \
-  ../Common/avl.h ../Common/ListUtils.h ExtrudeParams.h \
-  ../Common/SmoothData.h
+  Range.h SPoint3.h SBoundingBox3d.h SOrientedBoundingBox.h SVector3.h \
+  SPoint2.h Pair.h GPoint.h GEdge.h GFace.h GEdgeLoop.h GRegion.h \
+  discreteVertex.h MVertex.h MLine.h MElement.h ../Common/GmshDefines.h \
+  MEdge.h MFace.h ../Numeric/FunctionSpace.h ../Numeric/GmshMatrix.h \
+  ../Numeric/Gauss.h ../Numeric/Numeric.h ../Numeric/GmshMatrix.h \
+  MPoint.h MTriangle.h MQuadrangle.h MPrism.h MTetrahedron.h \
+  MHexahedron.h MPyramid.h Geo.h gmshSurface.h ../Common/ListUtils.h \
+  ../Common/TreeUtils.h ../Common/avl.h ../Common/ListUtils.h \
+  ExtrudeParams.h ../Common/SmoothData.h
 discreteFace${OBJEXT}: discreteFace.cpp ../Common/GmshConfig.h \
   ../Common/GmshMessage.h discreteFace.h GModel.h GVertex.h GEntity.h \
-  Range.h SPoint3.h SBoundingBox3d.h GPoint.h SPoint2.h GEdge.h \
-  SVector3.h GFace.h GEdgeLoop.h Pair.h GRegion.h discreteEdge.h \
-  discreteVertex.h MVertex.h MEdge.h MTriangle.h MElement.h \
-  ../Common/GmshDefines.h MFace.h ../Numeric/FunctionSpace.h \
+  Range.h SPoint3.h SBoundingBox3d.h SOrientedBoundingBox.h SVector3.h \
+  SPoint2.h Pair.h GPoint.h GEdge.h GFace.h GEdgeLoop.h GRegion.h \
+  discreteEdge.h discreteVertex.h MVertex.h MEdge.h MTriangle.h \
+  MElement.h ../Common/GmshDefines.h MFace.h ../Numeric/FunctionSpace.h \
   ../Numeric/GmshMatrix.h ../Numeric/Gauss.h Geo.h gmshSurface.h \
   ../Numeric/Numeric.h ../Numeric/GmshMatrix.h ../Common/ListUtils.h \
   ../Common/TreeUtils.h ../Common/avl.h ../Common/ListUtils.h \
   ExtrudeParams.h ../Common/SmoothData.h
 discreteRegion${OBJEXT}: discreteRegion.cpp ../Common/GmshConfig.h \
   discreteRegion.h GModel.h GVertex.h GEntity.h Range.h SPoint3.h \
-  SBoundingBox3d.h GPoint.h SPoint2.h GEdge.h SVector3.h GFace.h \
-  GEdgeLoop.h Pair.h GRegion.h MVertex.h Geo.h ../Common/GmshDefines.h \
-  gmshSurface.h ../Numeric/Numeric.h ../Numeric/GmshMatrix.h \
-  ../Common/GmshConfig.h ../Common/GmshMessage.h ../Common/ListUtils.h \
+  SBoundingBox3d.h SOrientedBoundingBox.h SVector3.h SPoint2.h Pair.h \
+  GPoint.h GEdge.h GFace.h GEdgeLoop.h GRegion.h MVertex.h Geo.h \
+  ../Common/GmshDefines.h gmshSurface.h ../Numeric/Numeric.h \
+  ../Numeric/GmshMatrix.h ../Common/GmshMessage.h ../Common/ListUtils.h \
   ../Common/TreeUtils.h ../Common/avl.h ../Common/ListUtils.h \
   ExtrudeParams.h ../Common/SmoothData.h
 fourierEdge${OBJEXT}: fourierEdge.cpp ../Common/GmshConfig.h fourierEdge.h \
-  GEdge.h GEntity.h Range.h SPoint3.h SBoundingBox3d.h GVertex.h GPoint.h \
-  SPoint2.h SVector3.h GModel.h GFace.h GEdgeLoop.h Pair.h GRegion.h \
-  fourierVertex.h MVertex.h ../Common/Context.h ../Geo/CGNSOptions.h \
-  ../Mesh/meshPartitionOptions.h
+  GEdge.h GEntity.h Range.h SPoint3.h SBoundingBox3d.h \
+  SOrientedBoundingBox.h SVector3.h SPoint2.h Pair.h GVertex.h GPoint.h \
+  GModel.h GFace.h GEdgeLoop.h GRegion.h fourierVertex.h MVertex.h \
+  ../Common/Context.h ../Geo/CGNSOptions.h ../Mesh/meshPartitionOptions.h
 fourierFace${OBJEXT}: fourierFace.cpp ../Common/GmshConfig.h \
   ../Common/GmshMessage.h fourierVertex.h GModel.h GVertex.h GEntity.h \
-  Range.h SPoint3.h SBoundingBox3d.h GPoint.h SPoint2.h GEdge.h \
-  SVector3.h GFace.h GEdgeLoop.h Pair.h GRegion.h MVertex.h fourierFace.h \
-  fourierEdge.h
+  Range.h SPoint3.h SBoundingBox3d.h SOrientedBoundingBox.h SVector3.h \
+  SPoint2.h Pair.h GPoint.h GEdge.h GFace.h GEdgeLoop.h GRegion.h \
+  MVertex.h fourierFace.h fourierEdge.h
 fourierProjectionFace${OBJEXT}: fourierProjectionFace.cpp ../Common/GmshConfig.h \
   ../Common/GmshMessage.h fourierProjectionFace.h GModel.h GVertex.h \
-  GEntity.h Range.h SPoint3.h SBoundingBox3d.h GPoint.h SPoint2.h GEdge.h \
-  SVector3.h GFace.h GEdgeLoop.h Pair.h GRegion.h ../Common/VertexArray.h \
-  ../Geo/SVector3.h
+  GEntity.h Range.h SPoint3.h SBoundingBox3d.h SOrientedBoundingBox.h \
+  SVector3.h SPoint2.h Pair.h GPoint.h GEdge.h GFace.h GEdgeLoop.h \
+  GRegion.h ../Common/VertexArray.h ../Geo/SVector3.h
 GModel${OBJEXT}: GModel.cpp ../Common/GmshConfig.h ../Common/GmshMessage.h \
   GModel.h GVertex.h GEntity.h Range.h SPoint3.h SBoundingBox3d.h \
-  GPoint.h SPoint2.h GEdge.h SVector3.h GFace.h GEdgeLoop.h Pair.h \
-  GRegion.h MPoint.h MElement.h ../Common/GmshDefines.h MVertex.h MEdge.h \
-  MFace.h ../Numeric/FunctionSpace.h ../Numeric/GmshMatrix.h \
-  ../Common/GmshConfig.h ../Common/GmshMessage.h ../Numeric/Gauss.h \
+  SOrientedBoundingBox.h SVector3.h SPoint2.h Pair.h GPoint.h GEdge.h \
+  GFace.h GEdgeLoop.h GRegion.h MPoint.h MElement.h \
+  ../Common/GmshDefines.h MVertex.h MEdge.h MFace.h \
+  ../Numeric/FunctionSpace.h ../Numeric/GmshMatrix.h ../Numeric/Gauss.h \
   MLine.h MTriangle.h MQuadrangle.h MTetrahedron.h MHexahedron.h MPrism.h \
-  MPyramid.h discreteRegion.h discreteFace.h discreteEdge.h \
-  discreteVertex.h gmshSurface.h ../Numeric/Numeric.h ../Common/Octree.h \
-  ../Common/OctreeInternals.h ../Common/SmoothData.h ../Mesh/Field.h \
-  ../Common/GmshConfig.h ../Geo/STensor3.h ../Geo/SVector3.h \
-  ../Numeric/GmshMatrix.h ../Numeric/Numeric.h ../Post/PView.h \
-  ../Geo/SPoint3.h ../Mesh/Generator.h ../Common/Context.h \
-  ../Geo/CGNSOptions.h ../Mesh/meshPartitionOptions.h
+  MPyramid.h MElementCut.h discreteRegion.h discreteFace.h discreteEdge.h \
+  discreteVertex.h gmshSurface.h ../Numeric/Numeric.h \
+  ../Numeric/GmshMatrix.h ../Common/Octree.h ../Common/OctreeInternals.h \
+  ../Common/SmoothData.h ../Mesh/Field.h ../Geo/STensor3.h \
+  ../Geo/SVector3.h ../Post/PView.h ../Geo/SPoint3.h ../Mesh/Generator.h \
+  ../Common/Context.h ../Geo/CGNSOptions.h ../Mesh/meshPartitionOptions.h
 GModelIO_Geo${OBJEXT}: GModelIO_Geo.cpp ../Common/GmshConfig.h \
   ../Common/GmshMessage.h GModel.h GVertex.h GEntity.h Range.h SPoint3.h \
-  SBoundingBox3d.h GPoint.h SPoint2.h GEdge.h SVector3.h GFace.h \
-  GEdgeLoop.h Pair.h GRegion.h Geo.h ../Common/GmshDefines.h \
-  gmshSurface.h ../Numeric/Numeric.h ../Numeric/GmshMatrix.h \
-  ../Common/ListUtils.h ../Common/TreeUtils.h ../Common/avl.h \
-  ../Common/ListUtils.h ExtrudeParams.h ../Common/SmoothData.h \
-  ../Common/OpenFile.h gmshVertex.h gmshFace.h GFaceCompound.h \
-  GEdgeCompound.h GRegionCompound.h gmshEdge.h gmshRegion.h \
-  ../Mesh/Field.h ../Geo/STensor3.h ../Geo/SVector3.h ../Post/PView.h \
-  ../Geo/SPoint3.h ../Parser/Parser.h
+  SBoundingBox3d.h SOrientedBoundingBox.h SVector3.h SPoint2.h Pair.h \
+  GPoint.h GEdge.h GFace.h GEdgeLoop.h GRegion.h Geo.h \
+  ../Common/GmshDefines.h gmshSurface.h ../Numeric/Numeric.h \
+  ../Numeric/GmshMatrix.h ../Common/ListUtils.h ../Common/TreeUtils.h \
+  ../Common/avl.h ../Common/ListUtils.h ExtrudeParams.h \
+  ../Common/SmoothData.h ../Common/OpenFile.h gmshVertex.h gmshFace.h \
+  GFaceCompound.h GEdgeCompound.h GRegionCompound.h gmshEdge.h \
+  gmshRegion.h ../Mesh/Field.h ../Geo/STensor3.h ../Geo/SVector3.h \
+  ../Post/PView.h ../Geo/SPoint3.h ../Parser/Parser.h
 GModelIO_Mesh${OBJEXT}: GModelIO_Mesh.cpp GModel.h GVertex.h GEntity.h Range.h \
-  SPoint3.h SBoundingBox3d.h GPoint.h SPoint2.h GEdge.h SVector3.h \
-  GFace.h GEdgeLoop.h Pair.h GRegion.h ../Common/GmshDefines.h MPoint.h \
-  MElement.h MVertex.h MEdge.h MFace.h ../Common/GmshMessage.h \
-  ../Numeric/FunctionSpace.h ../Numeric/GmshMatrix.h \
-  ../Common/GmshConfig.h ../Numeric/Gauss.h MLine.h MTriangle.h \
-  MQuadrangle.h MTetrahedron.h MHexahedron.h MPrism.h MPyramid.h \
-  ../Common/StringUtils.h discreteVertex.h discreteEdge.h discreteFace.h \
-  discreteRegion.h GEdgeCompound.h GFaceCompound.h
+  SPoint3.h SBoundingBox3d.h SOrientedBoundingBox.h SVector3.h SPoint2.h \
+  Pair.h GPoint.h GEdge.h GFace.h GEdgeLoop.h GRegion.h \
+  ../Common/GmshDefines.h MPoint.h MElement.h MVertex.h MEdge.h MFace.h \
+  ../Common/GmshMessage.h ../Numeric/FunctionSpace.h \
+  ../Numeric/GmshMatrix.h ../Common/GmshConfig.h ../Numeric/Gauss.h \
+  MLine.h MTriangle.h MQuadrangle.h MTetrahedron.h MHexahedron.h MPrism.h \
+  MPyramid.h MElementCut.h ../Common/StringUtils.h discreteVertex.h \
+  discreteEdge.h discreteFace.h discreteRegion.h GEdgeCompound.h \
+  GFaceCompound.h
 GModelIO_OCC${OBJEXT}: GModelIO_OCC.cpp ../Common/GmshConfig.h \
   ../Common/GmshMessage.h GModelIO_OCC.h GModel.h GVertex.h GEntity.h \
-  Range.h SPoint3.h SBoundingBox3d.h GPoint.h SPoint2.h GEdge.h \
-  SVector3.h GFace.h GEdgeLoop.h Pair.h GRegion.h OCCIncludes.h \
-  ../Common/Context.h ../Geo/CGNSOptions.h ../Mesh/meshPartitionOptions.h \
-  OCCVertex.h OCCEdge.h OCCFace.h OCCRegion.h MElement.h \
-  ../Common/GmshDefines.h MVertex.h MEdge.h MFace.h \
-  ../Numeric/FunctionSpace.h ../Numeric/GmshMatrix.h ../Numeric/Gauss.h \
-  MLine.h ../Common/OpenFile.h OCC_Connect.h
+  Range.h SPoint3.h SBoundingBox3d.h SOrientedBoundingBox.h SVector3.h \
+  SPoint2.h Pair.h GPoint.h GEdge.h GFace.h GEdgeLoop.h GRegion.h \
+  OCCIncludes.h ../Common/Context.h ../Geo/CGNSOptions.h \
+  ../Mesh/meshPartitionOptions.h OCCVertex.h OCCEdge.h OCCFace.h \
+  OCCRegion.h MElement.h ../Common/GmshDefines.h MVertex.h MEdge.h \
+  MFace.h ../Numeric/FunctionSpace.h ../Numeric/GmshMatrix.h \
+  ../Numeric/Gauss.h MLine.h ../Common/OpenFile.h OCC_Connect.h
 OCC_Connect${OBJEXT}: OCC_Connect.cpp OCC_Connect.h ../Common/GmshConfig.h
 GModelIO_Fourier${OBJEXT}: GModelIO_Fourier.cpp ../Common/GmshConfig.h \
   ../Common/GmshMessage.h GModel.h GVertex.h GEntity.h Range.h SPoint3.h \
-  SBoundingBox3d.h GPoint.h SPoint2.h GEdge.h SVector3.h GFace.h \
-  GEdgeLoop.h Pair.h GRegion.h fourierVertex.h MVertex.h fourierEdge.h \
-  fourierFace.h GModelIO_Fourier.h
+  SBoundingBox3d.h SOrientedBoundingBox.h SVector3.h SPoint2.h Pair.h \
+  GPoint.h GEdge.h GFace.h GEdgeLoop.h GRegion.h fourierVertex.h \
+  MVertex.h fourierEdge.h fourierFace.h GModelIO_Fourier.h
 GModelIO_CGNS${OBJEXT}: GModelIO_CGNS.cpp ../Common/GmshConfig.h \
   ../Common/GmshMessage.h GModel.h GVertex.h GEntity.h Range.h SPoint3.h \
-  SBoundingBox3d.h GPoint.h SPoint2.h GEdge.h SVector3.h GFace.h \
-  GEdgeLoop.h Pair.h GRegion.h CGNSOptions.h
+  SBoundingBox3d.h SOrientedBoundingBox.h SVector3.h SPoint2.h Pair.h \
+  GPoint.h GEdge.h GFace.h GEdgeLoop.h GRegion.h CGNSOptions.h
 GModelIO_MED${OBJEXT}: GModelIO_MED.cpp ../Common/GmshConfig.h \
   ../Common/GmshMessage.h GModel.h GVertex.h GEntity.h Range.h SPoint3.h \
-  SBoundingBox3d.h GPoint.h SPoint2.h GEdge.h SVector3.h GFace.h \
-  GEdgeLoop.h Pair.h GRegion.h
+  SBoundingBox3d.h SOrientedBoundingBox.h SVector3.h SPoint2.h Pair.h \
+  GPoint.h GEdge.h GFace.h GEdgeLoop.h GRegion.h
 ExtrudeParams${OBJEXT}: ExtrudeParams.cpp ../Common/GmshMessage.h Geo.h \
   ../Common/GmshDefines.h gmshSurface.h Pair.h Range.h SPoint2.h \
   SPoint3.h SVector3.h SBoundingBox3d.h ../Numeric/Numeric.h \
-  ../Numeric/GmshMatrix.h ../Common/GmshConfig.h ../Common/GmshMessage.h \
-  ../Common/ListUtils.h ../Common/TreeUtils.h ../Common/avl.h \
-  ../Common/ListUtils.h ExtrudeParams.h ../Common/SmoothData.h
+  ../Numeric/GmshMatrix.h ../Common/GmshConfig.h ../Common/ListUtils.h \
+  ../Common/TreeUtils.h ../Common/avl.h ../Common/ListUtils.h \
+  ExtrudeParams.h ../Common/SmoothData.h
 Geo${OBJEXT}: Geo.cpp ../Common/GmshMessage.h ../Numeric/Numeric.h \
-  ../Numeric/GmshMatrix.h ../Common/GmshConfig.h ../Common/GmshMessage.h \
-  ../Common/MallocUtils.h Geo.h ../Common/GmshDefines.h gmshSurface.h \
-  Pair.h Range.h SPoint2.h SPoint3.h SVector3.h SBoundingBox3d.h \
-  ../Common/ListUtils.h ../Common/TreeUtils.h ../Common/avl.h \
-  ../Common/ListUtils.h ExtrudeParams.h ../Common/SmoothData.h GModel.h \
-  GVertex.h GEntity.h GPoint.h GEdge.h GFace.h GEdgeLoop.h GRegion.h \
-  GeoInterpolation.h ../Mesh/Field.h ../Common/GmshConfig.h \
-  ../Geo/STensor3.h ../Geo/SVector3.h ../Numeric/GmshMatrix.h \
-  ../Numeric/Numeric.h ../Post/PView.h ../Geo/SPoint3.h \
-  ../Common/Context.h ../Geo/CGNSOptions.h ../Mesh/meshPartitionOptions.h
-GeoStringInterface${OBJEXT}: GeoStringInterface.cpp ../Common/GmshConfig.h \
-  ../Common/GmshMessage.h ../Numeric/Numeric.h ../Numeric/GmshMatrix.h \
-  ../Common/GmshConfig.h ../Common/GmshMessage.h ../Common/StringUtils.h \
+  ../Numeric/GmshMatrix.h ../Common/GmshConfig.h ../Common/MallocUtils.h \
   Geo.h ../Common/GmshDefines.h gmshSurface.h Pair.h Range.h SPoint2.h \
   SPoint3.h SVector3.h SBoundingBox3d.h ../Common/ListUtils.h \
   ../Common/TreeUtils.h ../Common/avl.h ../Common/ListUtils.h \
-  ExtrudeParams.h ../Common/SmoothData.h GeoStringInterface.h \
-  ../Common/OpenFile.h ../Common/Context.h ../Geo/CGNSOptions.h \
-  ../Mesh/meshPartitionOptions.h GModel.h GVertex.h GEntity.h GPoint.h \
-  GEdge.h GFace.h GEdgeLoop.h GRegion.h ../Parser/Parser.h
+  ExtrudeParams.h ../Common/SmoothData.h GModel.h GVertex.h GEntity.h \
+  SOrientedBoundingBox.h GPoint.h GEdge.h GFace.h GEdgeLoop.h GRegion.h \
+  GeoInterpolation.h ../Mesh/Field.h ../Geo/STensor3.h ../Geo/SVector3.h \
+  ../Post/PView.h ../Geo/SPoint3.h ../Common/Context.h \
+  ../Geo/CGNSOptions.h ../Mesh/meshPartitionOptions.h
+GeoStringInterface${OBJEXT}: GeoStringInterface.cpp ../Common/GmshConfig.h \
+  ../Common/GmshMessage.h ../Numeric/Numeric.h ../Numeric/GmshMatrix.h \
+  ../Common/StringUtils.h Geo.h ../Common/GmshDefines.h gmshSurface.h \
+  Pair.h Range.h SPoint2.h SPoint3.h SVector3.h SBoundingBox3d.h \
+  ../Common/ListUtils.h ../Common/TreeUtils.h ../Common/avl.h \
+  ../Common/ListUtils.h ExtrudeParams.h ../Common/SmoothData.h \
+  GeoStringInterface.h ../Common/OpenFile.h ../Common/Context.h \
+  ../Geo/CGNSOptions.h ../Mesh/meshPartitionOptions.h GModel.h GVertex.h \
+  GEntity.h SOrientedBoundingBox.h GPoint.h GEdge.h GFace.h GEdgeLoop.h \
+  GRegion.h ../Parser/Parser.h
 GeoInterpolation${OBJEXT}: GeoInterpolation.cpp ../Common/GmshMessage.h Geo.h \
   ../Common/GmshDefines.h gmshSurface.h Pair.h Range.h SPoint2.h \
   SPoint3.h SVector3.h SBoundingBox3d.h ../Numeric/Numeric.h \
-  ../Numeric/GmshMatrix.h ../Common/GmshConfig.h ../Common/GmshMessage.h \
-  ../Common/ListUtils.h ../Common/TreeUtils.h ../Common/avl.h \
-  ../Common/ListUtils.h ExtrudeParams.h ../Common/SmoothData.h \
-  GeoInterpolation.h GeoStringInterface.h ../Common/Context.h \
-  ../Geo/CGNSOptions.h ../Mesh/meshPartitionOptions.h
+  ../Numeric/GmshMatrix.h ../Common/GmshConfig.h ../Common/ListUtils.h \
+  ../Common/TreeUtils.h ../Common/avl.h ../Common/ListUtils.h \
+  ExtrudeParams.h ../Common/SmoothData.h GeoInterpolation.h \
+  GeoStringInterface.h ../Common/Context.h ../Geo/CGNSOptions.h \
+  ../Mesh/meshPartitionOptions.h
 findLinks${OBJEXT}: findLinks.cpp ../Common/GmshMessage.h GModel.h GVertex.h \
-  GEntity.h Range.h SPoint3.h SBoundingBox3d.h GPoint.h SPoint2.h GEdge.h \
-  SVector3.h GFace.h GEdgeLoop.h Pair.h GRegion.h ../Common/TreeUtils.h \
-  ../Common/avl.h ../Common/ListUtils.h ../Common/ListUtils.h
+  GEntity.h Range.h SPoint3.h SBoundingBox3d.h SOrientedBoundingBox.h \
+  SVector3.h SPoint2.h Pair.h GPoint.h GEdge.h GFace.h GEdgeLoop.h \
+  GRegion.h ../Common/TreeUtils.h ../Common/avl.h ../Common/ListUtils.h
+SOrientedBoundingBox${OBJEXT}: SOrientedBoundingBox.cpp SOrientedBoundingBox.h \
+  SVector3.h SPoint3.h SPoint2.h Pair.h ../Numeric/GmshMatrix.h \
+  ../Common/GmshConfig.h ../Common/GmshMessage.h \
+  ../Mesh/DivideAndConquer.h SBoundingBox3d.h
+GeomMeshMatcher${OBJEXT}: GeomMeshMatcher.cpp GeomMeshMatcher.h GModel.h \
+  GVertex.h GEntity.h Range.h SPoint3.h SBoundingBox3d.h \
+  SOrientedBoundingBox.h SVector3.h SPoint2.h Pair.h GPoint.h GEdge.h \
+  GFace.h GEdgeLoop.h GRegion.h discreteVertex.h MVertex.h \
+  ../Common/GmshMessage.h
 MVertex${OBJEXT}: MVertex.cpp MVertex.h SPoint2.h SPoint3.h GVertex.h GEntity.h \
-  Range.h SBoundingBox3d.h GPoint.h GEdge.h SVector3.h GFace.h \
-  GEdgeLoop.h Pair.h GFaceCompound.h GEdgeCompound.h \
+  Range.h SBoundingBox3d.h SOrientedBoundingBox.h SVector3.h Pair.h \
+  GPoint.h GEdge.h GFace.h GEdgeLoop.h GFaceCompound.h GEdgeCompound.h \
   ../Common/GmshMessage.h ../Common/StringUtils.h
 MFace${OBJEXT}: MFace.cpp ../Common/GmshConfig.h MFace.h MVertex.h SPoint2.h \
-  SPoint3.h MEdge.h SVector3.h ../Numeric/Numeric.h \
-  ../Numeric/GmshMatrix.h ../Common/GmshConfig.h ../Common/GmshMessage.h \
-  ../Common/Context.h ../Geo/CGNSOptions.h ../Mesh/meshPartitionOptions.h
+  SPoint3.h MEdge.h SVector3.h ../Common/GmshMessage.h \
+  ../Numeric/Numeric.h ../Numeric/GmshMatrix.h ../Common/Context.h \
+  ../Geo/CGNSOptions.h ../Mesh/meshPartitionOptions.h
 MElement${OBJEXT}: MElement.cpp ../Common/GmshConfig.h ../Common/GmshMessage.h \
   MElement.h ../Common/GmshDefines.h MVertex.h SPoint2.h SPoint3.h \
   MEdge.h SVector3.h MFace.h ../Numeric/FunctionSpace.h \
-  ../Numeric/GmshMatrix.h ../Common/GmshConfig.h ../Common/GmshMessage.h \
-  ../Numeric/Gauss.h MPoint.h MLine.h MTriangle.h MQuadrangle.h \
-  MTetrahedron.h MHexahedron.h MPrism.h MPyramid.h GEntity.h Range.h \
-  SBoundingBox3d.h GFace.h GPoint.h GEdgeLoop.h GEdge.h GVertex.h Pair.h \
-  ../Common/StringUtils.h ../Numeric/Numeric.h ../Common/Context.h \
-  ../Geo/CGNSOptions.h ../Mesh/meshPartitionOptions.h
+  ../Numeric/GmshMatrix.h ../Numeric/Gauss.h MPoint.h MLine.h MTriangle.h \
+  MQuadrangle.h MTetrahedron.h MHexahedron.h MPrism.h MPyramid.h \
+  MElementCut.h GEntity.h Range.h SBoundingBox3d.h SOrientedBoundingBox.h \
+  Pair.h GFace.h GPoint.h GEdgeLoop.h GEdge.h GVertex.h \
+  ../Common/StringUtils.h ../Numeric/Numeric.h ../Numeric/GmshMatrix.h \
+  ../Common/Context.h ../Geo/CGNSOptions.h ../Mesh/meshPartitionOptions.h
 MLine${OBJEXT}: MLine.cpp MLine.h MElement.h ../Common/GmshDefines.h MVertex.h \
   SPoint2.h SPoint3.h MEdge.h SVector3.h MFace.h ../Common/GmshMessage.h \
   ../Numeric/FunctionSpace.h ../Numeric/GmshMatrix.h \
-  ../Common/GmshConfig.h ../Common/GmshMessage.h ../Numeric/Gauss.h \
-  ../Numeric/GaussLegendre1D.h ../Common/Context.h ../Geo/CGNSOptions.h \
-  ../Mesh/meshPartitionOptions.h ../Mesh/qualityMeasures.h
+  ../Common/GmshConfig.h ../Numeric/Gauss.h ../Numeric/GaussLegendre1D.h \
+  ../Common/Context.h ../Geo/CGNSOptions.h ../Mesh/meshPartitionOptions.h \
+  ../Mesh/qualityMeasures.h
 MTriangle${OBJEXT}: MTriangle.cpp MTriangle.h MElement.h ../Common/GmshDefines.h \
   MVertex.h SPoint2.h SPoint3.h MEdge.h SVector3.h MFace.h \
   ../Common/GmshMessage.h ../Numeric/FunctionSpace.h \
-  ../Numeric/GmshMatrix.h ../Common/GmshConfig.h ../Common/GmshMessage.h \
-  ../Numeric/Gauss.h ../Numeric/Numeric.h ../Common/Context.h \
+  ../Numeric/GmshMatrix.h ../Common/GmshConfig.h ../Numeric/Gauss.h \
+  ../Numeric/Numeric.h ../Numeric/GmshMatrix.h ../Common/Context.h \
   ../Geo/CGNSOptions.h ../Mesh/meshPartitionOptions.h \
   ../Mesh/qualityMeasures.h
 MQuadrangle${OBJEXT}: MQuadrangle.cpp MQuadrangle.h MElement.h \
   ../Common/GmshDefines.h MVertex.h SPoint2.h SPoint3.h MEdge.h \
   SVector3.h MFace.h ../Common/GmshMessage.h ../Numeric/FunctionSpace.h \
-  ../Numeric/GmshMatrix.h ../Common/GmshConfig.h ../Common/GmshMessage.h \
-  ../Numeric/Gauss.h ../Numeric/GaussLegendre1D.h ../Common/Context.h \
+  ../Numeric/GmshMatrix.h ../Common/GmshConfig.h ../Numeric/Gauss.h \
+  ../Numeric/GaussLegendre1D.h ../Common/Context.h ../Geo/CGNSOptions.h \
+  ../Mesh/meshPartitionOptions.h ../Mesh/qualityMeasures.h
+MTetrahedron${OBJEXT}: MTetrahedron.cpp MTetrahedron.h MElement.h \
+  ../Common/GmshDefines.h MVertex.h SPoint2.h SPoint3.h MEdge.h \
+  SVector3.h MFace.h ../Common/GmshMessage.h ../Numeric/FunctionSpace.h \
+  ../Numeric/GmshMatrix.h ../Common/GmshConfig.h ../Numeric/Gauss.h \
+  ../Numeric/Numeric.h ../Numeric/GmshMatrix.h ../Common/Context.h \
   ../Geo/CGNSOptions.h ../Mesh/meshPartitionOptions.h \
+  ../Mesh/qualityMeasures.h ../Mesh/meshGFaceDelaunayInsertion.h \
+  ../Geo/MTriangle.h ../Geo/MElement.h ../Geo/STensor3.h \
+  ../Geo/SVector3.h ../Mesh/meshGRegionDelaunayInsertion.h \
+  ../Geo/MTetrahedron.h ../Mesh/BackgroundMesh.h \
   ../Mesh/qualityMeasures.h
-MTetrahedron${OBJEXT}: MTetrahedron.cpp MTetrahedron.h MElement.h MTriangle.h \
-  ../Common/GmshDefines.h MVertex.h SPoint2.h SPoint3.h MEdge.h STensor3.h \
-  SVector3.h MFace.h ../Common/GmshMessage.h ../Numeric/FunctionSpace.h \
-  ../Numeric/GmshMatrix.h ../Common/GmshConfig.h ../Common/GmshMessage.h \
-  ../Numeric/Gauss.h ../Numeric/Numeric.h ../Common/Context.h \
-  CGNSOptions.h ../Mesh/meshPartitionOptions.h ../Mesh/qualityMeasures.h \
-  ../Mesh/meshGFaceDelaunayInsertion.h ../Mesh/meshGRegionDelaunayInsertion.h \
-  ../Mesh/BackgroundMesh.h ../Mesh/qualityMeasures.h
 MHexahedron${OBJEXT}: MHexahedron.cpp MHexahedron.h MElement.h \
   ../Common/GmshDefines.h MVertex.h SPoint2.h SPoint3.h MEdge.h \
   SVector3.h MFace.h ../Common/GmshMessage.h ../Numeric/FunctionSpace.h \
-  ../Numeric/GmshMatrix.h ../Common/GmshConfig.h ../Common/GmshMessage.h \
-  ../Numeric/Gauss.h ../Numeric/Numeric.h
+  ../Numeric/GmshMatrix.h ../Common/GmshConfig.h ../Numeric/Gauss.h \
+  ../Numeric/Numeric.h ../Numeric/GmshMatrix.h
 MPrism${OBJEXT}: MPrism.cpp MPrism.h MElement.h ../Common/GmshDefines.h \
   MVertex.h SPoint2.h SPoint3.h MEdge.h SVector3.h MFace.h \
   ../Common/GmshMessage.h ../Numeric/FunctionSpace.h \
-  ../Numeric/GmshMatrix.h ../Common/GmshConfig.h ../Common/GmshMessage.h \
-  ../Numeric/Gauss.h ../Numeric/Numeric.h
+  ../Numeric/GmshMatrix.h ../Common/GmshConfig.h ../Numeric/Gauss.h \
+  ../Numeric/Numeric.h ../Numeric/GmshMatrix.h
 MPyramid${OBJEXT}: MPyramid.cpp MPyramid.h MElement.h ../Common/GmshDefines.h \
   MVertex.h SPoint2.h SPoint3.h MEdge.h SVector3.h MFace.h \
   ../Common/GmshMessage.h ../Numeric/FunctionSpace.h \
   ../Numeric/GmshMatrix.h ../Common/GmshConfig.h ../Numeric/Gauss.h \
   ../Numeric/Numeric.h ../Numeric/GmshMatrix.h
-MElementCut${OBJECT}: MElementCut.cpp MElementCut.h MElement.h \
-  ../Common/GmshDefines.h MVertex.h SPoint2.h SPoint3.h MEdge.h \
-  SVector3.h MFace.h ../Common/GmshMessage.h ../Numeric/FunctionSpace.h \
+MElementCut${OBJEXT}: MElementCut.cpp GModel.h GVertex.h GEntity.h Range.h \
+  SPoint3.h SBoundingBox3d.h SOrientedBoundingBox.h SVector3.h SPoint2.h \
+  Pair.h GPoint.h GEdge.h GFace.h GEdgeLoop.h GRegion.h MElement.h \
+  ../Common/GmshDefines.h MVertex.h MEdge.h MFace.h \
+  ../Common/GmshMessage.h ../Numeric/FunctionSpace.h \
   ../Numeric/GmshMatrix.h ../Common/GmshConfig.h ../Numeric/Gauss.h \
-  ../Numeric/Numeric.h ../Numeric/GmshMatrix.h \
-  MTetrahedron.h MTriangle.h MLine.h
+  MElementCut.h MTetrahedron.h MTriangle.h MLine.h
 MZone${OBJEXT}: MZone.cpp ../Common/GmshConfig.h
 MZoneBoundary${OBJEXT}: MZoneBoundary.cpp ../Common/GmshConfig.h
 CellComplex${OBJEXT}: CellComplex.cpp CellComplex.h ../Common/GmshConfig.h \
   MElement.h ../Common/GmshDefines.h MVertex.h SPoint2.h SPoint3.h \
   MEdge.h SVector3.h MFace.h ../Common/GmshMessage.h \
-  ../Numeric/FunctionSpace.h ../Numeric/GmshMatrix.h \
-  ../Common/GmshConfig.h ../Common/GmshMessage.h ../Numeric/Gauss.h \
-  GModel.h GVertex.h GEntity.h Range.h SBoundingBox3d.h GPoint.h GEdge.h \
-  GFace.h GEdgeLoop.h Pair.h GRegion.h
+  ../Numeric/FunctionSpace.h ../Numeric/GmshMatrix.h ../Numeric/Gauss.h \
+  MPoint.h MLine.h MTriangle.h MTetrahedron.h GModel.h GVertex.h \
+  GEntity.h Range.h SBoundingBox3d.h SOrientedBoundingBox.h Pair.h \
+  GPoint.h GEdge.h GFace.h GEdgeLoop.h GRegion.h
 ChainComplex${OBJEXT}: ChainComplex.cpp ChainComplex.h ../Common/GmshConfig.h \
   MElement.h ../Common/GmshDefines.h MVertex.h SPoint2.h SPoint3.h \
   MEdge.h SVector3.h MFace.h ../Common/GmshMessage.h \
-  ../Numeric/FunctionSpace.h ../Numeric/GmshMatrix.h \
-  ../Common/GmshConfig.h ../Common/GmshMessage.h ../Numeric/Gauss.h \
-  GModel.h GVertex.h GEntity.h Range.h SBoundingBox3d.h GPoint.h GEdge.h \
-  GFace.h GEdgeLoop.h Pair.h GRegion.h CellComplex.h
-STensor3${OBJEXT}: STensor3.cpp STensor3.h SVector3.h SPoint3.h \
-  ../Numeric/GmshMatrix.h ../Common/GmshConfig.h ../Common/GmshMessage.h \
-  ../Numeric/Numeric.h ../Numeric/GmshMatrix.h
-Homology${OBJEXT}: Homology.cpp Homology.h CellComplex.h ChainComplex.h
+  ../Numeric/FunctionSpace.h ../Numeric/GmshMatrix.h ../Numeric/Gauss.h \
+  GModel.h GVertex.h GEntity.h Range.h SBoundingBox3d.h \
+  SOrientedBoundingBox.h Pair.h GPoint.h GEdge.h GFace.h GEdgeLoop.h \
+  GRegion.h CellComplex.h MPoint.h MLine.h MTriangle.h MTetrahedron.h
+Homology${OBJEXT}: Homology.cpp Homology.h CellComplex.h ../Common/GmshConfig.h \
+  MElement.h ../Common/GmshDefines.h MVertex.h SPoint2.h SPoint3.h \
+  MEdge.h SVector3.h MFace.h ../Common/GmshMessage.h \
+  ../Numeric/FunctionSpace.h ../Numeric/GmshMatrix.h ../Numeric/Gauss.h \
+  MPoint.h MLine.h MTriangle.h MTetrahedron.h GModel.h GVertex.h \
+  GEntity.h Range.h SBoundingBox3d.h SOrientedBoundingBox.h Pair.h \
+  GPoint.h GEdge.h GFace.h GEdgeLoop.h GRegion.h ChainComplex.h \
+  ../Common/OS.h
diff --git a/Graphics/Makefile b/Graphics/Makefile
index 832d6f5e2647a1a53d6ee26c1c9ddd4b5acb8ee5..c4853528e475075e91a84b63d296c041aba02df8 100644
--- a/Graphics/Makefile
+++ b/Graphics/Makefile
@@ -64,26 +64,28 @@ Iso${OBJEXT}: Iso.cpp ../Numeric/Numeric.h ../Numeric/GmshMatrix.h \
 ReadImg${OBJEXT}: ReadImg.cpp ReadImg.h ../Common/GmshMessage.h ../Post/PView.h \
   ../Geo/SPoint3.h ../Post/PViewDataList.h ../Post/PViewData.h \
   ../Geo/SBoundingBox3d.h ../Geo/SPoint3.h ../Numeric/GmshMatrix.h \
-  ../Common/GmshConfig.h ../Common/ListUtils.h
+  ../Common/GmshConfig.h
 drawContext${OBJEXT}: drawContext.cpp ../Common/GmshConfig.h \
   ../Common/GmshMessage.h drawContext.h ../Geo/SBoundingBox3d.h \
   ../Geo/SPoint3.h Trackball.h ../Common/Context.h ../Geo/CGNSOptions.h \
   ../Mesh/meshPartitionOptions.h ../Numeric/Numeric.h \
   ../Numeric/GmshMatrix.h ../Geo/GModel.h ../Geo/GVertex.h \
   ../Geo/GEntity.h ../Geo/Range.h ../Geo/SPoint3.h \
-  ../Geo/SBoundingBox3d.h ../Geo/GPoint.h ../Geo/SPoint2.h ../Geo/GEdge.h \
-  ../Geo/GEntity.h ../Geo/GVertex.h ../Geo/SVector3.h ../Geo/SPoint3.h \
-  ../Geo/SPoint3.h ../Geo/SPoint2.h ../Geo/GFace.h ../Geo/GEntity.h \
-  ../Geo/GPoint.h ../Geo/GEdgeLoop.h ../Geo/GEdge.h ../Geo/SPoint2.h \
-  ../Geo/SVector3.h ../Geo/Pair.h ../Geo/GRegion.h ../Geo/GEntity.h \
-  ../Geo/SPoint3.h ../Geo/SBoundingBox3d.h ../Post/PView.h \
-  ../Post/PViewOptions.h ../Post/ColorTable.h gl2ps.h
+  ../Geo/SBoundingBox3d.h ../Geo/SOrientedBoundingBox.h ../Geo/SVector3.h \
+  ../Geo/SPoint3.h ../Geo/SPoint2.h ../Geo/Pair.h ../Geo/GPoint.h \
+  ../Geo/SPoint2.h ../Geo/GEdge.h ../Geo/GEntity.h ../Geo/GVertex.h \
+  ../Geo/SVector3.h ../Geo/SPoint3.h ../Geo/SPoint2.h ../Geo/GFace.h \
+  ../Geo/GEntity.h ../Geo/GPoint.h ../Geo/GEdgeLoop.h ../Geo/GEdge.h \
+  ../Geo/SPoint2.h ../Geo/SVector3.h ../Geo/Pair.h ../Geo/GRegion.h \
+  ../Geo/GEntity.h ../Geo/SPoint3.h ../Geo/SBoundingBox3d.h \
+  ../Post/PView.h ../Post/PViewOptions.h ../Post/ColorTable.h gl2ps.h
 drawMesh${OBJEXT}: drawMesh.cpp drawContext.h ../Geo/SBoundingBox3d.h \
   ../Geo/SPoint3.h ../Common/GmshMessage.h ../Common/GmshDefines.h \
   ../Geo/GModel.h ../Geo/GVertex.h ../Geo/GEntity.h ../Geo/Range.h \
-  ../Geo/SPoint3.h ../Geo/SBoundingBox3d.h ../Geo/GPoint.h \
-  ../Geo/SPoint2.h ../Geo/GEdge.h ../Geo/GEntity.h ../Geo/GVertex.h \
-  ../Geo/SVector3.h ../Geo/SPoint3.h ../Geo/SPoint3.h ../Geo/SPoint2.h \
+  ../Geo/SPoint3.h ../Geo/SBoundingBox3d.h ../Geo/SOrientedBoundingBox.h \
+  ../Geo/SVector3.h ../Geo/SPoint3.h ../Geo/SPoint2.h ../Geo/Pair.h \
+  ../Geo/GPoint.h ../Geo/SPoint2.h ../Geo/GEdge.h ../Geo/GEntity.h \
+  ../Geo/GVertex.h ../Geo/SVector3.h ../Geo/SPoint3.h ../Geo/SPoint2.h \
   ../Geo/GFace.h ../Geo/GEntity.h ../Geo/GPoint.h ../Geo/GEdgeLoop.h \
   ../Geo/GEdge.h ../Geo/SPoint2.h ../Geo/SVector3.h ../Geo/Pair.h \
   ../Geo/GRegion.h ../Geo/GEntity.h ../Geo/SPoint3.h \
@@ -104,12 +106,14 @@ drawGeom${OBJEXT}: drawGeom.cpp drawContext.h ../Geo/SBoundingBox3d.h \
   ../Mesh/meshPartitionOptions.h gl2ps.h ../Common/GmshConfig.h \
   ../Common/VertexArray.h ../Geo/SVector3.h ../Geo/SPoint3.h \
   ../Geo/GModel.h ../Geo/GVertex.h ../Geo/GEntity.h ../Geo/Range.h \
-  ../Geo/SPoint3.h ../Geo/SBoundingBox3d.h ../Geo/GPoint.h \
+  ../Geo/SPoint3.h ../Geo/SBoundingBox3d.h ../Geo/SOrientedBoundingBox.h \
+  ../Geo/SVector3.h ../Geo/SPoint2.h ../Geo/Pair.h ../Geo/GPoint.h \
   ../Geo/SPoint2.h ../Geo/GEdge.h ../Geo/GEntity.h ../Geo/GVertex.h \
   ../Geo/SVector3.h ../Geo/SPoint3.h ../Geo/SPoint2.h ../Geo/GFace.h \
   ../Geo/GEntity.h ../Geo/GPoint.h ../Geo/GEdgeLoop.h ../Geo/GEdge.h \
   ../Geo/SPoint2.h ../Geo/SVector3.h ../Geo/Pair.h ../Geo/GRegion.h \
-  ../Geo/GEntity.h ../Geo/SPoint3.h ../Geo/SBoundingBox3d.h
+  ../Geo/GEntity.h ../Geo/SPoint3.h ../Geo/SBoundingBox3d.h \
+  ../Common/GmshMessage.h
 drawPost${OBJEXT}: drawPost.cpp ../Common/GmshConfig.h ../Common/GmshMessage.h \
   drawContext.h ../Geo/SBoundingBox3d.h ../Geo/SPoint3.h \
   ../Numeric/Numeric.h ../Numeric/GmshMatrix.h Iso.h ../Post/PView.h \
@@ -120,13 +124,14 @@ drawPost${OBJEXT}: drawPost.cpp ../Common/GmshConfig.h ../Common/GmshMessage.h \
 drawAxes${OBJEXT}: drawAxes.cpp drawContext.h ../Geo/SBoundingBox3d.h \
   ../Geo/SPoint3.h ../Fltk/Draw.h ../Geo/GModel.h ../Geo/GVertex.h \
   ../Geo/GEntity.h ../Geo/Range.h ../Geo/SPoint3.h \
-  ../Geo/SBoundingBox3d.h ../Geo/GPoint.h ../Geo/SPoint2.h ../Geo/GEdge.h \
-  ../Geo/GEntity.h ../Geo/GVertex.h ../Geo/SVector3.h ../Geo/SPoint3.h \
-  ../Geo/SPoint3.h ../Geo/SPoint2.h ../Geo/GFace.h ../Geo/GEntity.h \
-  ../Geo/GPoint.h ../Geo/GEdgeLoop.h ../Geo/GEdge.h ../Geo/SPoint2.h \
-  ../Geo/SVector3.h ../Geo/Pair.h ../Geo/GRegion.h ../Geo/GEntity.h \
-  ../Geo/SPoint3.h ../Geo/SBoundingBox3d.h ../Common/Context.h \
-  ../Geo/CGNSOptions.h ../Mesh/meshPartitionOptions.h \
+  ../Geo/SBoundingBox3d.h ../Geo/SOrientedBoundingBox.h ../Geo/SVector3.h \
+  ../Geo/SPoint3.h ../Geo/SPoint2.h ../Geo/Pair.h ../Geo/GPoint.h \
+  ../Geo/SPoint2.h ../Geo/GEdge.h ../Geo/GEntity.h ../Geo/GVertex.h \
+  ../Geo/SVector3.h ../Geo/SPoint3.h ../Geo/SPoint2.h ../Geo/GFace.h \
+  ../Geo/GEntity.h ../Geo/GPoint.h ../Geo/GEdgeLoop.h ../Geo/GEdge.h \
+  ../Geo/SPoint2.h ../Geo/SVector3.h ../Geo/Pair.h ../Geo/GRegion.h \
+  ../Geo/GEntity.h ../Geo/SPoint3.h ../Geo/SBoundingBox3d.h \
+  ../Common/Context.h ../Geo/CGNSOptions.h ../Mesh/meshPartitionOptions.h \
   ../Numeric/Numeric.h ../Numeric/GmshMatrix.h ../Common/GmshConfig.h \
   ../Common/GmshMessage.h gl2ps.h
 drawScales${OBJEXT}: drawScales.cpp drawContext.h ../Geo/SBoundingBox3d.h \
@@ -144,7 +149,8 @@ drawGlyph${OBJEXT}: drawGlyph.cpp drawContext.h ../Geo/SBoundingBox3d.h \
   ../Geo/SPoint3.h ../Fltk/Draw.h ../Common/GmshDefines.h \
   ../Numeric/Numeric.h ../Numeric/GmshMatrix.h ../Common/GmshConfig.h \
   ../Common/GmshMessage.h ../Common/StringUtils.h ../Common/Context.h \
-  ../Geo/CGNSOptions.h ../Mesh/meshPartitionOptions.h gl2ps.h
+  ../Geo/CGNSOptions.h ../Mesh/meshPartitionOptions.h gl2ps.h \
+  ../Geo/SVector3.h ../Geo/SPoint3.h
 gl2ps${OBJEXT}: gl2ps.cpp gl2ps.h ../Common/GmshConfig.h
 gl2gif${OBJEXT}: gl2gif.cpp ../Common/MallocUtils.h gl2gif.h PixelBuffer.h \
   ../Common/GmshConfig.h ../Common/GmshMessage.h ../Fltk/Draw.h
diff --git a/Graphics/ReadImg.cpp b/Graphics/ReadImg.cpp
index ef174f89f35cfed3f746e78a6a597c4f8d5419c1..74c166c9ec4f64cc9583721fa880c8afa56a1ceb 100644
--- a/Graphics/ReadImg.cpp
+++ b/Graphics/ReadImg.cpp
@@ -41,7 +41,7 @@ static PViewDataList *Img2Data(Fl_RGB_Image &img_init, int quads=1,
     return 0;
   }
 
-  PViewDataList *d = new PViewDataList(true);
+  PViewDataList *d = new PViewDataList();
 
   double z = 0.;
   for(int i = 0; i < height - 1; i++) {
@@ -57,26 +57,26 @@ static PViewDataList *Img2Data(Fl_RGB_Image &img_init, int quads=1,
       double val3 = (double)a1[j + 1]/255.;
       double val4 = (double)a[j + 1]/255.;
       if(quads){ // generate quads
-        List_Add(d->SQ, &x); List_Add(d->SQ, &x); 
-        List_Add(d->SQ, &x1); List_Add(d->SQ, &x1);
-        List_Add(d->SQ, &y); List_Add(d->SQ, &y1);
-        List_Add(d->SQ, &y1); List_Add(d->SQ, &y);
-        List_Add(d->SQ, &z); List_Add(d->SQ, &z);
-        List_Add(d->SQ, &z); List_Add(d->SQ, &z);
-        List_Add(d->SQ, &val1); List_Add(d->SQ, &val2);
-        List_Add(d->SQ, &val3); List_Add(d->SQ, &val4);
+        d->SQ.push_back(x); d->SQ.push_back(x); 
+        d->SQ.push_back(x1); d->SQ.push_back(x1);
+        d->SQ.push_back(y); d->SQ.push_back(y1);
+        d->SQ.push_back(y1); d->SQ.push_back(y);
+        d->SQ.push_back(z); d->SQ.push_back(z);
+        d->SQ.push_back(z); d->SQ.push_back(z);
+        d->SQ.push_back(val1); d->SQ.push_back(val2);
+        d->SQ.push_back(val3); d->SQ.push_back(val4);
         d->NbSQ++;
       }
       else{ // generate triangles
-        List_Add(d->ST, &x); List_Add(d->ST, &x); List_Add(d->ST, &x1);
-        List_Add(d->ST, &y); List_Add(d->ST, &y1); List_Add(d->ST, &y1);
-        List_Add(d->ST, &z); List_Add(d->ST, &z); List_Add(d->ST, &z);
-        List_Add(d->ST, &val1); List_Add(d->ST, &val2); List_Add(d->ST, &val3);
+        d->ST.push_back(x); d->ST.push_back(x); d->ST.push_back(x1);
+        d->ST.push_back(y); d->ST.push_back(y1); d->ST.push_back(y1);
+        d->ST.push_back(z); d->ST.push_back(z); d->ST.push_back(z);
+        d->ST.push_back(val1); d->ST.push_back(val2); d->ST.push_back(val3);
         d->NbST++;
-        List_Add(d->ST, &x); List_Add(d->ST, &x1); List_Add(d->ST, &x1);
-        List_Add(d->ST, &y); List_Add(d->ST, &y1); List_Add(d->ST, &y);
-        List_Add(d->ST, &z); List_Add(d->ST, &z); List_Add(d->ST, &z);
-        List_Add(d->ST, &val1); List_Add(d->ST, &val3); List_Add(d->ST, &val4);
+        d->ST.push_back(x); d->ST.push_back(x1); d->ST.push_back(x1);
+        d->ST.push_back(y); d->ST.push_back(y1); d->ST.push_back(y);
+        d->ST.push_back(z); d->ST.push_back(z); d->ST.push_back(z);
+        d->ST.push_back(val1); d->ST.push_back(val3); d->ST.push_back(val4);
         d->NbST++;
       }
     }
diff --git a/Graphics/drawMesh.cpp b/Graphics/drawMesh.cpp
index 417457655b966f55bc8b41ca000a44214612b378..2ab9e6a86ade3239e0735879bacd83bc7dc05c2a 100644
--- a/Graphics/drawMesh.cpp
+++ b/Graphics/drawMesh.cpp
@@ -930,6 +930,24 @@ class drawMeshGRegion {
   }
 };
 
+static void beginFakeTransparency()
+{
+  return;
+  CTX::instance()->color.mesh.triangle = CTX::instance()->packColor(255, 0, 0, 128);
+  // simple additive blending "a la xpost":
+  glBlendFunc(GL_SRC_ALPHA, GL_ONE); // glBlendEquation(GL_FUNC_ADD);
+  // maximum intensity projection "a la volsuite":
+  // glBlendFunc(GL_ONE, GL_ONE); // glBlendEquation(GL_MAX);
+  glEnable(GL_BLEND);
+  glDisable(GL_DEPTH_TEST);
+}
+
+static void endFakeTransparency()
+{
+  return;
+  glDisable(GL_BLEND);
+  glEnable(GL_DEPTH_TEST);
+}
 
 // Main drawing routine
 
@@ -968,6 +986,8 @@ void drawContext::drawMesh()
 	glDisable((GLenum)(GL_CLIP_PLANE0 + i));
   }
 
+  const int fakeTransparency = true;
+
   static bool busy = false;
   if(!busy){
     busy = true;
@@ -996,8 +1016,11 @@ void drawContext::drawMesh()
             std::for_each(m->firstVertex(), m->lastVertex(), drawMeshGVertex(this));
           if(status >= 1)
             std::for_each(m->firstEdge(), m->lastEdge(), drawMeshGEdge(this));
-          if(status >= 2)
+          if(status >= 2){
+            beginFakeTransparency();
             std::for_each(m->firstFace(), m->lastFace(), drawMeshGFace(this));
+            endFakeTransparency();
+          }
           if(status >= 3)
             std::for_each(m->firstRegion(), m->lastRegion(), drawMeshGRegion(this));
         }
diff --git a/Makefile b/Makefile
index 15e224d64cccdc0652e88ab0327dd1177266b8a6..fdb0a6fdbb1b3553ac716de58f05ffec6c2fa5af 100644
--- a/Makefile
+++ b/Makefile
@@ -6,8 +6,8 @@
 include variables
 
 GMSH_MAJOR_VERSION = 2
-GMSH_MINOR_VERSION = 3
-GMSH_PATCH_VERSION = 2
+GMSH_MINOR_VERSION = 4
+GMSH_PATCH_VERSION = 0
 GMSH_EXTRA_VERSION = ""
 
 GMSH_VERSION =\
diff --git a/Mesh/Makefile b/Mesh/Makefile
index 01b5b77dbc6764ca585b054ce2762425a1a44c5a..793453aa079ffab397ab82b7d48f6a6340570d4a 100644
--- a/Mesh/Makefile
+++ b/Mesh/Makefile
@@ -80,21 +80,22 @@ Generator${OBJEXT}: Generator.cpp ../Common/GmshConfig.h ../Common/GmshMessage.h
   ../Geo/CGNSOptions.h ../Mesh/meshPartitionOptions.h ../Common/OS.h \
   ../Geo/GModel.h ../Geo/GVertex.h ../Geo/GEntity.h ../Geo/Range.h \
   ../Geo/SPoint3.h ../Geo/SBoundingBox3d.h ../Geo/SPoint3.h \
-  ../Geo/GPoint.h ../Geo/SPoint2.h ../Geo/GEdge.h ../Geo/GEntity.h \
-  ../Geo/GVertex.h ../Geo/SVector3.h ../Geo/SPoint3.h ../Geo/SPoint3.h \
-  ../Geo/SPoint2.h ../Geo/GFace.h ../Geo/GEntity.h ../Geo/GPoint.h \
-  ../Geo/GEdgeLoop.h ../Geo/GEdge.h ../Geo/SPoint2.h ../Geo/SVector3.h \
-  ../Geo/Pair.h ../Geo/GRegion.h ../Geo/GEntity.h ../Geo/SPoint3.h \
-  ../Geo/SBoundingBox3d.h ../Geo/MLine.h ../Geo/MElement.h \
-  ../Common/GmshDefines.h ../Geo/MVertex.h ../Geo/SPoint2.h \
-  ../Geo/SPoint3.h ../Geo/MEdge.h ../Geo/MVertex.h ../Geo/SVector3.h \
-  ../Geo/MFace.h ../Geo/MVertex.h ../Geo/MEdge.h ../Geo/SVector3.h \
-  ../Numeric/FunctionSpace.h ../Numeric/GmshMatrix.h ../Numeric/Gauss.h \
-  ../Geo/MTriangle.h ../Geo/MElement.h ../Geo/MQuadrangle.h \
-  ../Geo/MElement.h ../Geo/MTetrahedron.h ../Geo/MElement.h \
-  ../Geo/MHexahedron.h ../Geo/MElement.h ../Geo/MPrism.h \
-  ../Geo/MElement.h ../Geo/MPyramid.h ../Geo/MElement.h meshGEdge.h \
-  meshGFace.h meshGFaceBDS.h meshGRegion.h BackgroundMesh.h \
+  ../Geo/SOrientedBoundingBox.h ../Geo/SVector3.h ../Geo/SPoint3.h \
+  ../Geo/SPoint2.h ../Geo/Pair.h ../Geo/GPoint.h ../Geo/SPoint2.h \
+  ../Geo/GEdge.h ../Geo/GEntity.h ../Geo/GVertex.h ../Geo/SVector3.h \
+  ../Geo/SPoint3.h ../Geo/SPoint2.h ../Geo/GFace.h ../Geo/GEntity.h \
+  ../Geo/GPoint.h ../Geo/GEdgeLoop.h ../Geo/GEdge.h ../Geo/SPoint2.h \
+  ../Geo/SVector3.h ../Geo/Pair.h ../Geo/GRegion.h ../Geo/GEntity.h \
+  ../Geo/SPoint3.h ../Geo/SBoundingBox3d.h ../Geo/MLine.h \
+  ../Geo/MElement.h ../Common/GmshDefines.h ../Geo/MVertex.h \
+  ../Geo/SPoint2.h ../Geo/SPoint3.h ../Geo/MEdge.h ../Geo/MVertex.h \
+  ../Geo/SVector3.h ../Geo/MFace.h ../Geo/MVertex.h ../Geo/MEdge.h \
+  ../Geo/SVector3.h ../Numeric/FunctionSpace.h ../Numeric/GmshMatrix.h \
+  ../Numeric/Gauss.h ../Geo/MTriangle.h ../Geo/MElement.h \
+  ../Geo/MQuadrangle.h ../Geo/MElement.h ../Geo/MTetrahedron.h \
+  ../Geo/MElement.h ../Geo/MHexahedron.h ../Geo/MElement.h \
+  ../Geo/MPrism.h ../Geo/MElement.h ../Geo/MPyramid.h ../Geo/MElement.h \
+  meshGEdge.h meshGFace.h meshGFaceBDS.h meshGRegion.h BackgroundMesh.h \
   ../Geo/STensor3.h ../Geo/SVector3.h BoundaryLayers.h HighOrder.h \
   Generator.h ../Post/PView.h ../Post/PViewData.h
 Field${OBJEXT}: Field.cpp ../Common/GmshConfig.h \
@@ -109,7 +110,8 @@ Field${OBJEXT}: Field.cpp ../Common/GmshConfig.h \
   ../Common/TreeUtils.h ../Common/avl.h ../Common/ListUtils.h \
   ../Geo/SPoint2.h ../Geo/ExtrudeParams.h ../Common/SmoothData.h \
   ../Geo/GModel.h ../Geo/GVertex.h ../Geo/GEntity.h ../Geo/Range.h \
-  ../Geo/SPoint3.h ../Geo/SBoundingBox3d.h ../Geo/GPoint.h \
+  ../Geo/SPoint3.h ../Geo/SBoundingBox3d.h ../Geo/SOrientedBoundingBox.h \
+  ../Geo/SVector3.h ../Geo/SPoint2.h ../Geo/Pair.h ../Geo/GPoint.h \
   ../Geo/SPoint2.h ../Geo/GEdge.h ../Geo/GEntity.h ../Geo/GVertex.h \
   ../Geo/SVector3.h ../Geo/SPoint3.h ../Geo/SPoint2.h ../Geo/GFace.h \
   ../Geo/GEntity.h ../Geo/GPoint.h ../Geo/GEdgeLoop.h ../Geo/GEdge.h \
@@ -130,28 +132,30 @@ gmshSmoothHighOrder${OBJEXT}: gmshSmoothHighOrder.cpp ../Geo/MLine.h \
   ../Geo/MElement.h ../Geo/MPrism.h ../Geo/MElement.h ../Geo/MPyramid.h \
   ../Geo/MElement.h HighOrder.h ../Geo/GModel.h ../Geo/GVertex.h \
   ../Geo/GEntity.h ../Geo/Range.h ../Geo/SPoint3.h \
-  ../Geo/SBoundingBox3d.h ../Geo/SPoint3.h ../Geo/GPoint.h \
+  ../Geo/SBoundingBox3d.h ../Geo/SPoint3.h ../Geo/SOrientedBoundingBox.h \
+  ../Geo/SVector3.h ../Geo/SPoint2.h ../Geo/Pair.h ../Geo/GPoint.h \
   ../Geo/SPoint2.h ../Geo/GEdge.h ../Geo/GEntity.h ../Geo/GVertex.h \
   ../Geo/SVector3.h ../Geo/SPoint3.h ../Geo/SPoint2.h ../Geo/GFace.h \
   ../Geo/GEntity.h ../Geo/GPoint.h ../Geo/GEdgeLoop.h ../Geo/GEdge.h \
   ../Geo/SPoint2.h ../Geo/SVector3.h ../Geo/Pair.h ../Geo/GRegion.h \
   ../Geo/GEntity.h ../Geo/SPoint3.h ../Geo/SBoundingBox3d.h \
-  meshGFaceOptimize.h meshGFaceDelaunayInsertion.h gmshSmoothHighOrder.h \
-  ../Numeric/gmshAssembler.h ../Numeric/gmshLinearSystem.h \
-  ../Numeric/gmshLaplace.h ../Numeric/gmshTermOfFormulation.h \
-  ../Numeric/GmshMatrix.h ../Numeric/gmshFunction.h \
-  ../Numeric/gmshAssembler.h ../Numeric/gmshFunction.h ../Common/Gmsh.h \
-  ../Common/GmshMessage.h ../Numeric/GmshMatrix.h \
-  ../Numeric/gmshElasticity.h ../Numeric/gmshTermOfFormulation.h \
-  ../Numeric/GmshMatrix.h ../Numeric/gmshLinearSystemGmm.h \
-  ../Numeric/gmshLinearSystem.h ../Common/Context.h ../Geo/CGNSOptions.h \
-  ../Mesh/meshPartitionOptions.h ../Numeric/Numeric.h \
-  ../Numeric/GmshMatrix.h
+  meshGFaceOptimize.h meshGFaceDelaunayInsertion.h ../Geo/STensor3.h \
+  ../Geo/SVector3.h ../Numeric/Numeric.h ../Numeric/GmshMatrix.h \
+  gmshSmoothHighOrder.h ../Numeric/gmshAssembler.h \
+  ../Numeric/gmshLinearSystem.h ../Numeric/gmshLaplace.h \
+  ../Numeric/gmshTermOfFormulation.h ../Numeric/GmshMatrix.h \
+  ../Numeric/gmshFunction.h ../Numeric/gmshAssembler.h \
+  ../Numeric/gmshFunction.h ../Common/Gmsh.h ../Common/GmshMessage.h \
+  ../Numeric/GmshMatrix.h ../Numeric/gmshElasticity.h \
+  ../Numeric/gmshTermOfFormulation.h ../Numeric/GmshMatrix.h \
+  ../Numeric/gmshLinearSystemGmm.h ../Numeric/gmshLinearSystem.h \
+  ../Common/Context.h ../Geo/CGNSOptions.h ../Mesh/meshPartitionOptions.h
 meshGEdge${OBJEXT}: meshGEdge.cpp ../Geo/GModel.h ../Geo/GVertex.h \
   ../Geo/GEntity.h ../Geo/Range.h ../Geo/SPoint3.h \
-  ../Geo/SBoundingBox3d.h ../Geo/SPoint3.h ../Geo/GPoint.h \
-  ../Geo/SPoint2.h ../Geo/GEdge.h ../Geo/GEntity.h ../Geo/GVertex.h \
-  ../Geo/SVector3.h ../Geo/SPoint3.h ../Geo/SPoint3.h ../Geo/SPoint2.h \
+  ../Geo/SBoundingBox3d.h ../Geo/SPoint3.h ../Geo/SOrientedBoundingBox.h \
+  ../Geo/SVector3.h ../Geo/SPoint3.h ../Geo/SPoint2.h ../Geo/Pair.h \
+  ../Geo/GPoint.h ../Geo/SPoint2.h ../Geo/GEdge.h ../Geo/GEntity.h \
+  ../Geo/GVertex.h ../Geo/SVector3.h ../Geo/SPoint3.h ../Geo/SPoint2.h \
   ../Geo/GFace.h ../Geo/GEntity.h ../Geo/GPoint.h ../Geo/GEdgeLoop.h \
   ../Geo/GEdge.h ../Geo/SPoint2.h ../Geo/SVector3.h ../Geo/Pair.h \
   ../Geo/GRegion.h ../Geo/GEntity.h ../Geo/SPoint3.h \
@@ -166,9 +170,10 @@ meshGEdge${OBJEXT}: meshGEdge.cpp ../Geo/GModel.h ../Geo/GVertex.h \
   ../Geo/CGNSOptions.h ../Mesh/meshPartitionOptions.h
 meshGEdgeExtruded${OBJEXT}: meshGEdgeExtruded.cpp ../Geo/GModel.h \
   ../Geo/GVertex.h ../Geo/GEntity.h ../Geo/Range.h ../Geo/SPoint3.h \
-  ../Geo/SBoundingBox3d.h ../Geo/SPoint3.h ../Geo/GPoint.h \
-  ../Geo/SPoint2.h ../Geo/GEdge.h ../Geo/GEntity.h ../Geo/GVertex.h \
-  ../Geo/SVector3.h ../Geo/SPoint3.h ../Geo/SPoint3.h ../Geo/SPoint2.h \
+  ../Geo/SBoundingBox3d.h ../Geo/SPoint3.h ../Geo/SOrientedBoundingBox.h \
+  ../Geo/SVector3.h ../Geo/SPoint3.h ../Geo/SPoint2.h ../Geo/Pair.h \
+  ../Geo/GPoint.h ../Geo/SPoint2.h ../Geo/GEdge.h ../Geo/GEntity.h \
+  ../Geo/GVertex.h ../Geo/SVector3.h ../Geo/SPoint3.h ../Geo/SPoint2.h \
   ../Geo/GFace.h ../Geo/GEntity.h ../Geo/GPoint.h ../Geo/GEdgeLoop.h \
   ../Geo/GEdge.h ../Geo/SPoint2.h ../Geo/SVector3.h ../Geo/Pair.h \
   ../Geo/GRegion.h ../Geo/GEntity.h ../Geo/SPoint3.h \
@@ -186,27 +191,28 @@ meshGFace${OBJEXT}: meshGFace.cpp meshGFace.h meshGFaceBDS.h \
   ../Geo/SPoint3.h ../Geo/MFace.h ../Geo/MVertex.h ../Geo/MEdge.h \
   ../Geo/SVector3.h ../Common/GmshMessage.h ../Numeric/FunctionSpace.h \
   ../Numeric/GmshMatrix.h ../Common/GmshConfig.h ../Numeric/Gauss.h \
-  meshGFaceQuadrilateralize.h meshGFaceOptimize.h DivideAndConquer.h \
-  BackgroundMesh.h ../Geo/STensor3.h ../Geo/SVector3.h \
-  ../Numeric/Numeric.h ../Numeric/GmshMatrix.h ../Geo/GVertex.h \
-  ../Geo/GEntity.h ../Geo/Range.h ../Geo/SPoint3.h \
-  ../Geo/SBoundingBox3d.h ../Geo/SPoint3.h ../Geo/GPoint.h \
-  ../Geo/SPoint2.h ../Geo/GEdge.h ../Geo/GEntity.h ../Geo/GVertex.h \
-  ../Geo/SVector3.h ../Geo/SPoint3.h ../Geo/SPoint2.h \
-  ../Geo/GEdgeCompound.h ../Geo/GFace.h ../Geo/GEntity.h ../Geo/GPoint.h \
-  ../Geo/GEdgeLoop.h ../Geo/GEdge.h ../Geo/SPoint2.h ../Geo/SVector3.h \
-  ../Geo/Pair.h ../Geo/GEdge.h ../Geo/GModel.h ../Geo/GVertex.h \
-  ../Geo/GEdge.h ../Geo/GFace.h ../Geo/GRegion.h ../Geo/GEntity.h \
-  ../Geo/SPoint3.h ../Geo/SBoundingBox3d.h ../Geo/MLine.h \
-  ../Geo/MElement.h ../Geo/MQuadrangle.h ../Geo/MElement.h \
-  ../Common/Context.h ../Geo/CGNSOptions.h ../Mesh/meshPartitionOptions.h \
-  BDS.h qualityMeasures.h Field.h ../Post/PView.h ../Common/OS.h \
-  HighOrder.h
+  ../Geo/STensor3.h ../Geo/SVector3.h ../Numeric/Numeric.h \
+  ../Numeric/GmshMatrix.h meshGFaceQuadrilateralize.h meshGFaceOptimize.h \
+  DivideAndConquer.h BackgroundMesh.h ../Geo/GVertex.h ../Geo/GEntity.h \
+  ../Geo/Range.h ../Geo/SPoint3.h ../Geo/SBoundingBox3d.h \
+  ../Geo/SPoint3.h ../Geo/SOrientedBoundingBox.h ../Geo/SVector3.h \
+  ../Geo/SPoint2.h ../Geo/Pair.h ../Geo/GPoint.h ../Geo/SPoint2.h \
+  ../Geo/GEdge.h ../Geo/GEntity.h ../Geo/GVertex.h ../Geo/SVector3.h \
+  ../Geo/SPoint3.h ../Geo/SPoint2.h ../Geo/GEdgeCompound.h ../Geo/GFace.h \
+  ../Geo/GEntity.h ../Geo/GPoint.h ../Geo/GEdgeLoop.h ../Geo/GEdge.h \
+  ../Geo/SPoint2.h ../Geo/SVector3.h ../Geo/Pair.h ../Geo/GEdge.h \
+  ../Geo/GModel.h ../Geo/GVertex.h ../Geo/GEdge.h ../Geo/GFace.h \
+  ../Geo/GRegion.h ../Geo/GEntity.h ../Geo/SPoint3.h \
+  ../Geo/SBoundingBox3d.h ../Geo/MLine.h ../Geo/MElement.h \
+  ../Geo/MQuadrangle.h ../Geo/MElement.h ../Common/Context.h \
+  ../Geo/CGNSOptions.h ../Mesh/meshPartitionOptions.h BDS.h \
+  qualityMeasures.h Field.h ../Post/PView.h ../Common/OS.h HighOrder.h
 meshGFaceTransfinite${OBJEXT}: meshGFaceTransfinite.cpp meshGFace.h \
   ../Geo/GVertex.h ../Geo/GEntity.h ../Geo/Range.h ../Geo/SPoint3.h \
-  ../Geo/SBoundingBox3d.h ../Geo/SPoint3.h ../Geo/GPoint.h \
-  ../Geo/SPoint2.h ../Geo/GEdge.h ../Geo/GEntity.h ../Geo/GVertex.h \
-  ../Geo/SVector3.h ../Geo/SPoint3.h ../Geo/SPoint3.h ../Geo/SPoint2.h \
+  ../Geo/SBoundingBox3d.h ../Geo/SPoint3.h ../Geo/SOrientedBoundingBox.h \
+  ../Geo/SVector3.h ../Geo/SPoint3.h ../Geo/SPoint2.h ../Geo/Pair.h \
+  ../Geo/GPoint.h ../Geo/SPoint2.h ../Geo/GEdge.h ../Geo/GEntity.h \
+  ../Geo/GVertex.h ../Geo/SVector3.h ../Geo/SPoint3.h ../Geo/SPoint2.h \
   ../Geo/GFace.h ../Geo/GEntity.h ../Geo/GPoint.h ../Geo/GEdgeLoop.h \
   ../Geo/GEdge.h ../Geo/SPoint2.h ../Geo/SVector3.h ../Geo/Pair.h \
   ../Geo/MVertex.h ../Geo/SPoint2.h ../Geo/SPoint3.h ../Geo/MTriangle.h \
@@ -220,9 +226,10 @@ meshGFaceTransfinite${OBJEXT}: meshGFaceTransfinite.cpp meshGFace.h \
   ../Numeric/Numeric.h ../Numeric/GmshMatrix.h
 meshGFaceExtruded${OBJEXT}: meshGFaceExtruded.cpp ../Geo/GModel.h \
   ../Geo/GVertex.h ../Geo/GEntity.h ../Geo/Range.h ../Geo/SPoint3.h \
-  ../Geo/SBoundingBox3d.h ../Geo/SPoint3.h ../Geo/GPoint.h \
-  ../Geo/SPoint2.h ../Geo/GEdge.h ../Geo/GEntity.h ../Geo/GVertex.h \
-  ../Geo/SVector3.h ../Geo/SPoint3.h ../Geo/SPoint3.h ../Geo/SPoint2.h \
+  ../Geo/SBoundingBox3d.h ../Geo/SPoint3.h ../Geo/SOrientedBoundingBox.h \
+  ../Geo/SVector3.h ../Geo/SPoint3.h ../Geo/SPoint2.h ../Geo/Pair.h \
+  ../Geo/GPoint.h ../Geo/SPoint2.h ../Geo/GEdge.h ../Geo/GEntity.h \
+  ../Geo/GVertex.h ../Geo/SVector3.h ../Geo/SPoint3.h ../Geo/SPoint2.h \
   ../Geo/GFace.h ../Geo/GEntity.h ../Geo/GPoint.h ../Geo/GEdgeLoop.h \
   ../Geo/GEdge.h ../Geo/SPoint2.h ../Geo/SVector3.h ../Geo/Pair.h \
   ../Geo/GRegion.h ../Geo/GEntity.h ../Geo/SPoint3.h \
@@ -243,10 +250,11 @@ meshGFaceBDS${OBJEXT}: meshGFaceBDS.cpp ../Common/GmshMessage.h \
   ../Geo/MEdge.h ../Geo/SVector3.h ../Numeric/FunctionSpace.h \
   ../Numeric/GmshMatrix.h ../Common/GmshConfig.h ../Numeric/Gauss.h \
   meshGFaceDelaunayInsertion.h ../Geo/MTriangle.h ../Geo/MElement.h \
-  BackgroundMesh.h ../Geo/STensor3.h ../Geo/SVector3.h \
-  ../Numeric/Numeric.h ../Numeric/GmshMatrix.h ../Geo/GVertex.h \
+  ../Geo/STensor3.h ../Geo/SVector3.h ../Numeric/Numeric.h \
+  ../Numeric/GmshMatrix.h BackgroundMesh.h ../Geo/GVertex.h \
   ../Geo/GEntity.h ../Geo/Range.h ../Geo/SPoint3.h \
-  ../Geo/SBoundingBox3d.h ../Geo/SPoint3.h ../Geo/GPoint.h \
+  ../Geo/SBoundingBox3d.h ../Geo/SPoint3.h ../Geo/SOrientedBoundingBox.h \
+  ../Geo/SVector3.h ../Geo/SPoint2.h ../Geo/Pair.h ../Geo/GPoint.h \
   ../Geo/SPoint2.h ../Geo/GEdge.h ../Geo/GEntity.h ../Geo/GVertex.h \
   ../Geo/SVector3.h ../Geo/SPoint3.h ../Geo/SPoint2.h ../Geo/GFace.h \
   ../Geo/GEntity.h ../Geo/GPoint.h ../Geo/GEdgeLoop.h ../Geo/GEdge.h \
@@ -266,7 +274,8 @@ meshGFaceDelaunayInsertion${OBJEXT}: meshGFaceDelaunayInsertion.cpp \
   ../Geo/SVector3.h ../Numeric/FunctionSpace.h ../Numeric/GmshMatrix.h \
   ../Numeric/Gauss.h meshGFaceOptimize.h meshGFace.h ../Geo/GFace.h \
   ../Geo/GEntity.h ../Geo/Range.h ../Geo/SPoint3.h \
-  ../Geo/SBoundingBox3d.h ../Geo/SPoint3.h ../Geo/GPoint.h \
+  ../Geo/SBoundingBox3d.h ../Geo/SPoint3.h ../Geo/SOrientedBoundingBox.h \
+  ../Geo/SVector3.h ../Geo/SPoint2.h ../Geo/Pair.h ../Geo/GPoint.h \
   ../Geo/GEdgeLoop.h ../Geo/GEdge.h ../Geo/GEntity.h ../Geo/GVertex.h \
   ../Geo/GEntity.h ../Geo/GPoint.h ../Geo/SPoint2.h ../Geo/SVector3.h \
   ../Geo/SPoint3.h ../Geo/SPoint2.h ../Geo/SPoint2.h ../Geo/SVector3.h \
@@ -278,30 +287,32 @@ meshGFaceOptimize${OBJEXT}: meshGFaceOptimize.cpp meshGFaceOptimize.h \
   ../Geo/MEdge.h ../Geo/SVector3.h ../Common/GmshMessage.h \
   ../Numeric/FunctionSpace.h ../Numeric/GmshMatrix.h \
   ../Common/GmshConfig.h ../Numeric/Gauss.h meshGFaceDelaunayInsertion.h \
-  ../Geo/MTriangle.h ../Geo/MElement.h qualityMeasures.h ../Geo/GFace.h \
-  ../Geo/GEntity.h ../Geo/Range.h ../Geo/SPoint3.h \
-  ../Geo/SBoundingBox3d.h ../Geo/SPoint3.h ../Geo/GPoint.h \
-  ../Geo/GEdgeLoop.h ../Geo/GEdge.h ../Geo/GEntity.h ../Geo/GVertex.h \
-  ../Geo/GEntity.h ../Geo/GPoint.h ../Geo/SPoint2.h ../Geo/SVector3.h \
-  ../Geo/SPoint3.h ../Geo/SPoint2.h ../Geo/SPoint2.h ../Geo/SVector3.h \
-  ../Geo/Pair.h ../Geo/MQuadrangle.h ../Geo/MElement.h BackgroundMesh.h \
-  ../Geo/STensor3.h ../Geo/SVector3.h ../Numeric/Numeric.h \
-  ../Numeric/GmshMatrix.h Generator.h
+  ../Geo/MTriangle.h ../Geo/MElement.h ../Geo/STensor3.h \
+  ../Geo/SVector3.h ../Numeric/Numeric.h ../Numeric/GmshMatrix.h \
+  qualityMeasures.h ../Geo/GFace.h ../Geo/GEntity.h ../Geo/Range.h \
+  ../Geo/SPoint3.h ../Geo/SBoundingBox3d.h ../Geo/SPoint3.h \
+  ../Geo/SOrientedBoundingBox.h ../Geo/SVector3.h ../Geo/SPoint2.h \
+  ../Geo/Pair.h ../Geo/GPoint.h ../Geo/GEdgeLoop.h ../Geo/GEdge.h \
+  ../Geo/GEntity.h ../Geo/GVertex.h ../Geo/GEntity.h ../Geo/GPoint.h \
+  ../Geo/SPoint2.h ../Geo/SVector3.h ../Geo/SPoint3.h ../Geo/SPoint2.h \
+  ../Geo/SPoint2.h ../Geo/SVector3.h ../Geo/Pair.h ../Geo/MQuadrangle.h \
+  ../Geo/MElement.h BackgroundMesh.h Generator.h
 meshGFaceQuadrilateralize${OBJEXT}: meshGFaceQuadrilateralize.cpp \
   meshGFaceQuadrilateralize.h ../Common/GmshMessage.h \
   ../Numeric/Numeric.h ../Numeric/GmshMatrix.h ../Common/GmshConfig.h \
   ../Geo/GFace.h ../Geo/GEntity.h ../Geo/Range.h ../Geo/SPoint3.h \
-  ../Geo/SBoundingBox3d.h ../Geo/SPoint3.h ../Geo/GPoint.h \
-  ../Geo/GEdgeLoop.h ../Geo/GEdge.h ../Geo/GEntity.h ../Geo/GVertex.h \
-  ../Geo/GEntity.h ../Geo/GPoint.h ../Geo/SPoint2.h ../Geo/SVector3.h \
-  ../Geo/SPoint3.h ../Geo/SPoint3.h ../Geo/SPoint2.h ../Geo/SPoint2.h \
+  ../Geo/SBoundingBox3d.h ../Geo/SPoint3.h ../Geo/SOrientedBoundingBox.h \
+  ../Geo/SVector3.h ../Geo/SPoint3.h ../Geo/SPoint2.h ../Geo/Pair.h \
+  ../Geo/GPoint.h ../Geo/GEdgeLoop.h ../Geo/GEdge.h ../Geo/GEntity.h \
+  ../Geo/GVertex.h ../Geo/GEntity.h ../Geo/GPoint.h ../Geo/SPoint2.h \
+  ../Geo/SVector3.h ../Geo/SPoint3.h ../Geo/SPoint2.h ../Geo/SPoint2.h \
   ../Geo/SVector3.h ../Geo/Pair.h meshGFaceDelaunayInsertion.h \
   ../Geo/MTriangle.h ../Geo/MElement.h ../Common/GmshDefines.h \
   ../Geo/MVertex.h ../Geo/SPoint2.h ../Geo/SPoint3.h ../Geo/MEdge.h \
   ../Geo/MVertex.h ../Geo/SVector3.h ../Geo/MFace.h ../Geo/MVertex.h \
   ../Geo/MEdge.h ../Geo/SVector3.h ../Numeric/FunctionSpace.h \
-  ../Numeric/GmshMatrix.h ../Numeric/Gauss.h meshGFaceOptimize.h \
-  meshGFaceBDS.h BDS.h
+  ../Numeric/GmshMatrix.h ../Numeric/Gauss.h ../Geo/STensor3.h \
+  ../Geo/SVector3.h meshGFaceOptimize.h meshGFaceBDS.h BDS.h
 meshGRegion${OBJEXT}: meshGRegion.cpp ../Common/GmshConfig.h \
   ../Common/GmshMessage.h meshGRegion.h meshGRegionDelaunayInsertion.h \
   ../Geo/MTetrahedron.h ../Geo/MElement.h ../Common/GmshDefines.h \
@@ -312,7 +323,8 @@ meshGRegion${OBJEXT}: meshGRegion.cpp ../Common/GmshConfig.h \
   ../Numeric/Numeric.h ../Numeric/GmshMatrix.h BackgroundMesh.h \
   ../Geo/STensor3.h ../Geo/SVector3.h qualityMeasures.h ../Geo/GModel.h \
   ../Geo/GVertex.h ../Geo/GEntity.h ../Geo/Range.h ../Geo/SPoint3.h \
-  ../Geo/SBoundingBox3d.h ../Geo/SPoint3.h ../Geo/GPoint.h \
+  ../Geo/SBoundingBox3d.h ../Geo/SPoint3.h ../Geo/SOrientedBoundingBox.h \
+  ../Geo/SVector3.h ../Geo/SPoint2.h ../Geo/Pair.h ../Geo/GPoint.h \
   ../Geo/SPoint2.h ../Geo/GEdge.h ../Geo/GEntity.h ../Geo/GVertex.h \
   ../Geo/SVector3.h ../Geo/SPoint3.h ../Geo/SPoint2.h ../Geo/GFace.h \
   ../Geo/GEntity.h ../Geo/GPoint.h ../Geo/GEdgeLoop.h ../Geo/GEdge.h \
@@ -340,18 +352,21 @@ meshGRegionDelaunayInsertion${OBJEXT}: meshGRegionDelaunayInsertion.cpp \
   ../Numeric/FunctionSpace.h ../Numeric/GmshMatrix.h ../Numeric/Gauss.h \
   qualityMeasures.h ../Geo/GModel.h ../Geo/GVertex.h ../Geo/GEntity.h \
   ../Geo/Range.h ../Geo/SPoint3.h ../Geo/SBoundingBox3d.h \
-  ../Geo/SPoint3.h ../Geo/GPoint.h ../Geo/SPoint2.h ../Geo/GEdge.h \
-  ../Geo/GEntity.h ../Geo/GVertex.h ../Geo/SVector3.h ../Geo/SPoint3.h \
-  ../Geo/SPoint2.h ../Geo/GFace.h ../Geo/GEntity.h ../Geo/GPoint.h \
-  ../Geo/GEdgeLoop.h ../Geo/GEdge.h ../Geo/SPoint2.h ../Geo/SVector3.h \
-  ../Geo/Pair.h ../Geo/GRegion.h ../Geo/GEntity.h ../Geo/SPoint3.h \
-  ../Geo/SBoundingBox3d.h ../Geo/MTriangle.h ../Geo/MElement.h
+  ../Geo/SPoint3.h ../Geo/SOrientedBoundingBox.h ../Geo/SVector3.h \
+  ../Geo/SPoint2.h ../Geo/Pair.h ../Geo/GPoint.h ../Geo/SPoint2.h \
+  ../Geo/GEdge.h ../Geo/GEntity.h ../Geo/GVertex.h ../Geo/SVector3.h \
+  ../Geo/SPoint3.h ../Geo/SPoint2.h ../Geo/GFace.h ../Geo/GEntity.h \
+  ../Geo/GPoint.h ../Geo/GEdgeLoop.h ../Geo/GEdge.h ../Geo/SPoint2.h \
+  ../Geo/SVector3.h ../Geo/Pair.h ../Geo/GRegion.h ../Geo/GEntity.h \
+  ../Geo/SPoint3.h ../Geo/SBoundingBox3d.h ../Geo/MTriangle.h \
+  ../Geo/MElement.h
 meshGRegionTransfinite${OBJEXT}: meshGRegionTransfinite.cpp meshGFace.h \
   ../Geo/GFace.h ../Geo/GEntity.h ../Geo/Range.h ../Geo/SPoint3.h \
-  ../Geo/SBoundingBox3d.h ../Geo/SPoint3.h ../Geo/GPoint.h \
-  ../Geo/GEdgeLoop.h ../Geo/GEdge.h ../Geo/GEntity.h ../Geo/GVertex.h \
-  ../Geo/GEntity.h ../Geo/GPoint.h ../Geo/SPoint2.h ../Geo/SVector3.h \
-  ../Geo/SPoint3.h ../Geo/SPoint3.h ../Geo/SPoint2.h ../Geo/SPoint2.h \
+  ../Geo/SBoundingBox3d.h ../Geo/SPoint3.h ../Geo/SOrientedBoundingBox.h \
+  ../Geo/SVector3.h ../Geo/SPoint3.h ../Geo/SPoint2.h ../Geo/Pair.h \
+  ../Geo/GPoint.h ../Geo/GEdgeLoop.h ../Geo/GEdge.h ../Geo/GEntity.h \
+  ../Geo/GVertex.h ../Geo/GEntity.h ../Geo/GPoint.h ../Geo/SPoint2.h \
+  ../Geo/SVector3.h ../Geo/SPoint3.h ../Geo/SPoint2.h ../Geo/SPoint2.h \
   ../Geo/SVector3.h ../Geo/Pair.h ../Geo/GRegion.h ../Geo/GEntity.h \
   ../Geo/MVertex.h ../Geo/SPoint2.h ../Geo/SPoint3.h \
   ../Geo/MTetrahedron.h ../Geo/MElement.h ../Common/GmshDefines.h \
@@ -364,9 +379,10 @@ meshGRegionTransfinite${OBJEXT}: meshGRegionTransfinite.cpp meshGFace.h \
   ../Mesh/meshPartitionOptions.h
 meshGRegionExtruded${OBJEXT}: meshGRegionExtruded.cpp ../Geo/GModel.h \
   ../Geo/GVertex.h ../Geo/GEntity.h ../Geo/Range.h ../Geo/SPoint3.h \
-  ../Geo/SBoundingBox3d.h ../Geo/SPoint3.h ../Geo/GPoint.h \
-  ../Geo/SPoint2.h ../Geo/GEdge.h ../Geo/GEntity.h ../Geo/GVertex.h \
-  ../Geo/SVector3.h ../Geo/SPoint3.h ../Geo/SPoint3.h ../Geo/SPoint2.h \
+  ../Geo/SBoundingBox3d.h ../Geo/SPoint3.h ../Geo/SOrientedBoundingBox.h \
+  ../Geo/SVector3.h ../Geo/SPoint3.h ../Geo/SPoint2.h ../Geo/Pair.h \
+  ../Geo/GPoint.h ../Geo/SPoint2.h ../Geo/GEdge.h ../Geo/GEntity.h \
+  ../Geo/GVertex.h ../Geo/SVector3.h ../Geo/SPoint3.h ../Geo/SPoint2.h \
   ../Geo/GFace.h ../Geo/GEntity.h ../Geo/GPoint.h ../Geo/GEdgeLoop.h \
   ../Geo/GEdge.h ../Geo/SPoint2.h ../Geo/SVector3.h ../Geo/Pair.h \
   ../Geo/GRegion.h ../Geo/GEntity.h ../Geo/SPoint3.h \
@@ -384,9 +400,10 @@ meshGRegionExtruded${OBJEXT}: meshGRegionExtruded.cpp ../Geo/GModel.h \
 meshGRegionCarveHole${OBJEXT}: meshGRegionCarveHole.cpp ../Common/GmshConfig.h \
   ../Common/GmshMessage.h ../Geo/GModel.h ../Geo/GVertex.h \
   ../Geo/GEntity.h ../Geo/Range.h ../Geo/SPoint3.h \
-  ../Geo/SBoundingBox3d.h ../Geo/SPoint3.h ../Geo/GPoint.h \
-  ../Geo/SPoint2.h ../Geo/GEdge.h ../Geo/GEntity.h ../Geo/GVertex.h \
-  ../Geo/SVector3.h ../Geo/SPoint3.h ../Geo/SPoint3.h ../Geo/SPoint2.h \
+  ../Geo/SBoundingBox3d.h ../Geo/SPoint3.h ../Geo/SOrientedBoundingBox.h \
+  ../Geo/SVector3.h ../Geo/SPoint3.h ../Geo/SPoint2.h ../Geo/Pair.h \
+  ../Geo/GPoint.h ../Geo/SPoint2.h ../Geo/GEdge.h ../Geo/GEntity.h \
+  ../Geo/GVertex.h ../Geo/SVector3.h ../Geo/SPoint3.h ../Geo/SPoint2.h \
   ../Geo/GFace.h ../Geo/GEntity.h ../Geo/GPoint.h ../Geo/GEdgeLoop.h \
   ../Geo/GEdge.h ../Geo/SPoint2.h ../Geo/SVector3.h ../Geo/Pair.h \
   ../Geo/GRegion.h ../Geo/GEntity.h ../Geo/SPoint3.h \
@@ -410,7 +427,8 @@ meshGRegionLocalMeshMod${OBJEXT}: meshGRegionLocalMeshMod.cpp \
   ../Numeric/Numeric.h ../Numeric/GmshMatrix.h BackgroundMesh.h \
   ../Geo/STensor3.h ../Geo/SVector3.h qualityMeasures.h ../Geo/GEntity.h \
   ../Geo/Range.h ../Geo/SPoint3.h ../Geo/SBoundingBox3d.h \
-  ../Geo/SPoint3.h ../Geo/GRegion.h ../Geo/GEntity.h
+  ../Geo/SPoint3.h ../Geo/SOrientedBoundingBox.h ../Geo/SVector3.h \
+  ../Geo/SPoint2.h ../Geo/Pair.h ../Geo/GRegion.h ../Geo/GEntity.h
 DivideAndConquer${OBJEXT}: DivideAndConquer.cpp ../Common/GmshMessage.h \
   ../Numeric/GmshPredicates.h ../Numeric/Numeric.h \
   ../Numeric/GmshMatrix.h ../Common/GmshConfig.h DivideAndConquer.h \
@@ -421,13 +439,14 @@ BackgroundMesh${OBJEXT}: BackgroundMesh.cpp ../Common/GmshMessage.h \
   ../Numeric/GmshMatrix.h ../Common/Context.h ../Geo/CGNSOptions.h \
   ../Mesh/meshPartitionOptions.h ../Geo/GVertex.h ../Geo/GEntity.h \
   ../Geo/Range.h ../Geo/SPoint3.h ../Geo/SBoundingBox3d.h \
-  ../Geo/SPoint3.h ../Geo/GPoint.h ../Geo/SPoint2.h ../Geo/GEdge.h \
-  ../Geo/GEntity.h ../Geo/GVertex.h ../Geo/SVector3.h ../Geo/SPoint3.h \
-  ../Geo/SPoint2.h ../Geo/GFace.h ../Geo/GEntity.h ../Geo/GPoint.h \
-  ../Geo/GEdgeLoop.h ../Geo/GEdge.h ../Geo/SPoint2.h ../Geo/SVector3.h \
-  ../Geo/Pair.h ../Geo/GModel.h ../Geo/GVertex.h ../Geo/GEdge.h \
-  ../Geo/GFace.h ../Geo/GRegion.h ../Geo/GEntity.h ../Geo/SPoint3.h \
-  ../Geo/SBoundingBox3d.h Field.h ../Post/PView.h
+  ../Geo/SPoint3.h ../Geo/SOrientedBoundingBox.h ../Geo/SVector3.h \
+  ../Geo/SPoint2.h ../Geo/Pair.h ../Geo/GPoint.h ../Geo/SPoint2.h \
+  ../Geo/GEdge.h ../Geo/GEntity.h ../Geo/GVertex.h ../Geo/SVector3.h \
+  ../Geo/SPoint3.h ../Geo/SPoint2.h ../Geo/GFace.h ../Geo/GEntity.h \
+  ../Geo/GPoint.h ../Geo/GEdgeLoop.h ../Geo/GEdge.h ../Geo/SPoint2.h \
+  ../Geo/SVector3.h ../Geo/Pair.h ../Geo/GModel.h ../Geo/GVertex.h \
+  ../Geo/GEdge.h ../Geo/GFace.h ../Geo/GRegion.h ../Geo/GEntity.h \
+  ../Geo/SPoint3.h ../Geo/SBoundingBox3d.h Field.h ../Post/PView.h
 qualityMeasures${OBJEXT}: qualityMeasures.cpp qualityMeasures.h BDS.h \
   ../Common/GmshMessage.h ../Geo/MVertex.h ../Geo/SPoint2.h \
   ../Geo/SPoint3.h ../Geo/MTriangle.h ../Geo/MElement.h \
@@ -439,9 +458,10 @@ qualityMeasures${OBJEXT}: qualityMeasures.cpp qualityMeasures.h BDS.h \
   ../Geo/MElement.h ../Numeric/Numeric.h ../Numeric/GmshMatrix.h
 BoundaryLayers${OBJEXT}: BoundaryLayers.cpp ../Geo/GModel.h ../Geo/GVertex.h \
   ../Geo/GEntity.h ../Geo/Range.h ../Geo/SPoint3.h \
-  ../Geo/SBoundingBox3d.h ../Geo/SPoint3.h ../Geo/GPoint.h \
-  ../Geo/SPoint2.h ../Geo/GEdge.h ../Geo/GEntity.h ../Geo/GVertex.h \
-  ../Geo/SVector3.h ../Geo/SPoint3.h ../Geo/SPoint3.h ../Geo/SPoint2.h \
+  ../Geo/SBoundingBox3d.h ../Geo/SPoint3.h ../Geo/SOrientedBoundingBox.h \
+  ../Geo/SVector3.h ../Geo/SPoint3.h ../Geo/SPoint2.h ../Geo/Pair.h \
+  ../Geo/GPoint.h ../Geo/SPoint2.h ../Geo/GEdge.h ../Geo/GEntity.h \
+  ../Geo/GVertex.h ../Geo/SVector3.h ../Geo/SPoint3.h ../Geo/SPoint2.h \
   ../Geo/GFace.h ../Geo/GEntity.h ../Geo/GPoint.h ../Geo/GEdgeLoop.h \
   ../Geo/GEdge.h ../Geo/SPoint2.h ../Geo/SVector3.h ../Geo/Pair.h \
   ../Geo/GRegion.h ../Geo/GEntity.h ../Geo/SPoint3.h \
@@ -456,28 +476,31 @@ BoundaryLayers${OBJEXT}: BoundaryLayers.cpp ../Geo/GModel.h ../Geo/GVertex.h \
 BDS${OBJEXT}: BDS.cpp ../Common/GmshMessage.h ../Numeric/GmshPredicates.h \
   ../Numeric/Numeric.h ../Numeric/GmshMatrix.h ../Common/GmshConfig.h \
   BDS.h ../Geo/GFace.h ../Geo/GEntity.h ../Geo/Range.h ../Geo/SPoint3.h \
-  ../Geo/SBoundingBox3d.h ../Geo/SPoint3.h ../Geo/GPoint.h \
-  ../Geo/GEdgeLoop.h ../Geo/GEdge.h ../Geo/GEntity.h ../Geo/GVertex.h \
-  ../Geo/GEntity.h ../Geo/GPoint.h ../Geo/SPoint2.h ../Geo/SVector3.h \
-  ../Geo/SPoint3.h ../Geo/SPoint3.h ../Geo/SPoint2.h ../Geo/SPoint2.h \
+  ../Geo/SBoundingBox3d.h ../Geo/SPoint3.h ../Geo/SOrientedBoundingBox.h \
+  ../Geo/SVector3.h ../Geo/SPoint3.h ../Geo/SPoint2.h ../Geo/Pair.h \
+  ../Geo/GPoint.h ../Geo/GEdgeLoop.h ../Geo/GEdge.h ../Geo/GEntity.h \
+  ../Geo/GVertex.h ../Geo/GEntity.h ../Geo/GPoint.h ../Geo/SPoint2.h \
+  ../Geo/SVector3.h ../Geo/SPoint3.h ../Geo/SPoint2.h ../Geo/SPoint2.h \
   ../Geo/SVector3.h ../Geo/Pair.h meshGFaceDelaunayInsertion.h \
   ../Geo/MTriangle.h ../Geo/MElement.h ../Common/GmshDefines.h \
   ../Geo/MVertex.h ../Geo/SPoint2.h ../Geo/SPoint3.h ../Geo/MEdge.h \
   ../Geo/MVertex.h ../Geo/SVector3.h ../Geo/MFace.h ../Geo/MVertex.h \
   ../Geo/MEdge.h ../Geo/SVector3.h ../Numeric/FunctionSpace.h \
-  ../Numeric/GmshMatrix.h ../Numeric/Gauss.h qualityMeasures.h
+  ../Numeric/GmshMatrix.h ../Numeric/Gauss.h ../Geo/STensor3.h \
+  ../Geo/SVector3.h qualityMeasures.h
 HighOrder${OBJEXT}: HighOrder.cpp HighOrder.h ../Geo/GModel.h ../Geo/GVertex.h \
   ../Geo/GEntity.h ../Geo/Range.h ../Geo/SPoint3.h \
-  ../Geo/SBoundingBox3d.h ../Geo/SPoint3.h ../Geo/GPoint.h \
-  ../Geo/SPoint2.h ../Geo/GEdge.h ../Geo/GEntity.h ../Geo/GVertex.h \
-  ../Geo/SVector3.h ../Geo/SPoint3.h ../Geo/SPoint3.h ../Geo/SPoint2.h \
+  ../Geo/SBoundingBox3d.h ../Geo/SPoint3.h ../Geo/SOrientedBoundingBox.h \
+  ../Geo/SVector3.h ../Geo/SPoint3.h ../Geo/SPoint2.h ../Geo/Pair.h \
+  ../Geo/GPoint.h ../Geo/SPoint2.h ../Geo/GEdge.h ../Geo/GEntity.h \
+  ../Geo/GVertex.h ../Geo/SVector3.h ../Geo/SPoint3.h ../Geo/SPoint2.h \
   ../Geo/GFace.h ../Geo/GEntity.h ../Geo/GPoint.h ../Geo/GEdgeLoop.h \
   ../Geo/GEdge.h ../Geo/SPoint2.h ../Geo/SVector3.h ../Geo/Pair.h \
   ../Geo/GRegion.h ../Geo/GEntity.h ../Geo/SPoint3.h \
   ../Geo/SBoundingBox3d.h ../Geo/MFace.h ../Geo/MVertex.h \
   ../Geo/SPoint2.h ../Geo/SPoint3.h ../Geo/MEdge.h ../Geo/MVertex.h \
-  ../Geo/SVector3.h ../Geo/SVector3.h gmshSmoothHighOrder.h \
-  ../Numeric/GmshMatrix.h ../Common/GmshConfig.h ../Common/GmshMessage.h \
+  ../Geo/SVector3.h ../Geo/SVector3.h ../Common/GmshMessage.h \
+  gmshSmoothHighOrder.h ../Numeric/GmshMatrix.h ../Common/GmshConfig.h \
   ../Geo/MLine.h ../Geo/MElement.h ../Common/GmshDefines.h \
   ../Geo/MVertex.h ../Geo/MEdge.h ../Geo/MFace.h \
   ../Numeric/FunctionSpace.h ../Numeric/GmshMatrix.h ../Numeric/Gauss.h \
@@ -489,9 +512,10 @@ HighOrder${OBJEXT}: HighOrder.cpp HighOrder.h ../Geo/GModel.h ../Geo/GVertex.h \
   ../Geo/CGNSOptions.h ../Mesh/meshPartitionOptions.h
 meshPartition${OBJEXT}: meshPartition.cpp ../Common/GmshConfig.h ../Geo/GModel.h \
   ../Geo/GVertex.h ../Geo/GEntity.h ../Geo/Range.h ../Geo/SPoint3.h \
-  ../Geo/SBoundingBox3d.h ../Geo/SPoint3.h ../Geo/GPoint.h \
-  ../Geo/SPoint2.h ../Geo/GEdge.h ../Geo/GEntity.h ../Geo/GVertex.h \
-  ../Geo/SVector3.h ../Geo/SPoint3.h ../Geo/SPoint3.h ../Geo/SPoint2.h \
+  ../Geo/SBoundingBox3d.h ../Geo/SPoint3.h ../Geo/SOrientedBoundingBox.h \
+  ../Geo/SVector3.h ../Geo/SPoint3.h ../Geo/SPoint2.h ../Geo/Pair.h \
+  ../Geo/GPoint.h ../Geo/SPoint2.h ../Geo/GEdge.h ../Geo/GEntity.h \
+  ../Geo/GVertex.h ../Geo/SVector3.h ../Geo/SPoint3.h ../Geo/SPoint2.h \
   ../Geo/GFace.h ../Geo/GEntity.h ../Geo/GPoint.h ../Geo/GEdgeLoop.h \
   ../Geo/GEdge.h ../Geo/SPoint2.h ../Geo/SVector3.h ../Geo/Pair.h \
   ../Geo/GRegion.h ../Geo/GEntity.h ../Geo/SPoint3.h \
@@ -503,19 +527,21 @@ meshPartition${OBJEXT}: meshPartition.cpp ../Common/GmshConfig.h ../Geo/GModel.h
   ../Numeric/GmshMatrix.h ../Numeric/Gauss.h meshPartitionOptions.h
 meshRefine${OBJEXT}: meshRefine.cpp HighOrder.h ../Geo/GModel.h ../Geo/GVertex.h \
   ../Geo/GEntity.h ../Geo/Range.h ../Geo/SPoint3.h \
-  ../Geo/SBoundingBox3d.h ../Geo/SPoint3.h ../Geo/GPoint.h \
-  ../Geo/SPoint2.h ../Geo/GEdge.h ../Geo/GEntity.h ../Geo/GVertex.h \
-  ../Geo/SVector3.h ../Geo/SPoint3.h ../Geo/SPoint3.h ../Geo/SPoint2.h \
+  ../Geo/SBoundingBox3d.h ../Geo/SPoint3.h ../Geo/SOrientedBoundingBox.h \
+  ../Geo/SVector3.h ../Geo/SPoint3.h ../Geo/SPoint2.h ../Geo/Pair.h \
+  ../Geo/GPoint.h ../Geo/SPoint2.h ../Geo/GEdge.h ../Geo/GEntity.h \
+  ../Geo/GVertex.h ../Geo/SVector3.h ../Geo/SPoint3.h ../Geo/SPoint2.h \
   ../Geo/GFace.h ../Geo/GEntity.h ../Geo/GPoint.h ../Geo/GEdgeLoop.h \
   ../Geo/GEdge.h ../Geo/SPoint2.h ../Geo/SVector3.h ../Geo/Pair.h \
   ../Geo/GRegion.h ../Geo/GEntity.h ../Geo/SPoint3.h \
   ../Geo/SBoundingBox3d.h ../Geo/MFace.h ../Geo/MVertex.h \
   ../Geo/SPoint2.h ../Geo/SPoint3.h ../Geo/MEdge.h ../Geo/MVertex.h \
-  ../Geo/SVector3.h ../Geo/SVector3.h ../Geo/MLine.h ../Geo/MElement.h \
-  ../Common/GmshDefines.h ../Geo/MVertex.h ../Geo/MEdge.h ../Geo/MFace.h \
-  ../Common/GmshMessage.h ../Numeric/FunctionSpace.h \
-  ../Numeric/GmshMatrix.h ../Common/GmshConfig.h ../Numeric/Gauss.h \
-  ../Geo/MTriangle.h ../Geo/MElement.h ../Geo/MQuadrangle.h \
-  ../Geo/MElement.h ../Geo/MTetrahedron.h ../Geo/MElement.h \
-  ../Geo/MHexahedron.h ../Geo/MElement.h ../Geo/MPrism.h \
-  ../Geo/MElement.h ../Geo/MPyramid.h ../Geo/MElement.h ../Common/OS.h
+  ../Geo/SVector3.h ../Geo/SVector3.h ../Common/GmshMessage.h \
+  ../Geo/MLine.h ../Geo/MElement.h ../Common/GmshDefines.h \
+  ../Geo/MVertex.h ../Geo/MEdge.h ../Geo/MFace.h \
+  ../Numeric/FunctionSpace.h ../Numeric/GmshMatrix.h \
+  ../Common/GmshConfig.h ../Numeric/Gauss.h ../Geo/MTriangle.h \
+  ../Geo/MElement.h ../Geo/MQuadrangle.h ../Geo/MElement.h \
+  ../Geo/MTetrahedron.h ../Geo/MElement.h ../Geo/MHexahedron.h \
+  ../Geo/MElement.h ../Geo/MPrism.h ../Geo/MElement.h ../Geo/MPyramid.h \
+  ../Geo/MElement.h ../Common/OS.h
diff --git a/Numeric/Makefile b/Numeric/Makefile
index 9728023741ee073549d666899dd06552f191a0a3..22a088a2dd38aa5ebee1f432d5da4dbb314ccfe9 100644
--- a/Numeric/Makefile
+++ b/Numeric/Makefile
@@ -66,9 +66,10 @@ gmshLaplace${OBJEXT}: gmshLaplace.cpp gmshLaplace.h gmshTermOfFormulation.h \
   GmshMatrix.h ../Common/GmshConfig.h ../Common/GmshMessage.h \
   gmshFunction.h gmshAssembler.h gmshLinearSystem.h ../Geo/GModel.h \
   ../Geo/GVertex.h ../Geo/GEntity.h ../Geo/Range.h ../Geo/SPoint3.h \
-  ../Geo/SBoundingBox3d.h ../Geo/SPoint3.h ../Geo/GPoint.h \
-  ../Geo/SPoint2.h ../Geo/GEdge.h ../Geo/GEntity.h ../Geo/GVertex.h \
-  ../Geo/SVector3.h ../Geo/SPoint3.h ../Geo/SPoint3.h ../Geo/SPoint2.h \
+  ../Geo/SBoundingBox3d.h ../Geo/SPoint3.h ../Geo/SOrientedBoundingBox.h \
+  ../Geo/SVector3.h ../Geo/SPoint3.h ../Geo/SPoint2.h ../Geo/Pair.h \
+  ../Geo/GPoint.h ../Geo/SPoint2.h ../Geo/GEdge.h ../Geo/GEntity.h \
+  ../Geo/GVertex.h ../Geo/SVector3.h ../Geo/SPoint3.h ../Geo/SPoint2.h \
   ../Geo/GFace.h ../Geo/GEntity.h ../Geo/GPoint.h ../Geo/GEdgeLoop.h \
   ../Geo/GEdge.h ../Geo/SPoint2.h ../Geo/SVector3.h ../Geo/Pair.h \
   ../Geo/GRegion.h ../Geo/GEntity.h ../Geo/SPoint3.h \
@@ -83,49 +84,52 @@ gmshHelmholtz${OBJEXT}: gmshHelmholtz.cpp gmshHelmholtz.h \
   ../Common/GmshMessage.h gmshFunction.h gmshAssembler.h \
   gmshLinearSystem.h ../Geo/GModel.h ../Geo/GVertex.h ../Geo/GEntity.h \
   ../Geo/Range.h ../Geo/SPoint3.h ../Geo/SBoundingBox3d.h \
-  ../Geo/SPoint3.h ../Geo/GPoint.h ../Geo/SPoint2.h ../Geo/GEdge.h \
-  ../Geo/GEntity.h ../Geo/GVertex.h ../Geo/SVector3.h ../Geo/SPoint3.h \
-  ../Geo/SPoint3.h ../Geo/SPoint2.h ../Geo/GFace.h ../Geo/GEntity.h \
-  ../Geo/GPoint.h ../Geo/GEdgeLoop.h ../Geo/GEdge.h ../Geo/SPoint2.h \
-  ../Geo/SVector3.h ../Geo/Pair.h ../Geo/GRegion.h ../Geo/GEntity.h \
-  ../Geo/SPoint3.h ../Geo/SBoundingBox3d.h ../Geo/MElement.h \
-  ../Common/GmshDefines.h ../Geo/MVertex.h ../Geo/SPoint2.h \
-  ../Geo/SPoint3.h ../Geo/MEdge.h ../Geo/MVertex.h ../Geo/SVector3.h \
-  ../Geo/MFace.h ../Geo/MVertex.h ../Geo/MEdge.h ../Geo/SVector3.h \
-  ../Numeric/FunctionSpace.h ../Numeric/GmshMatrix.h ../Numeric/Gauss.h \
-  ../Common/Gmsh.h ../Common/GmshMessage.h Numeric.h
+  ../Geo/SPoint3.h ../Geo/SOrientedBoundingBox.h ../Geo/SVector3.h \
+  ../Geo/SPoint3.h ../Geo/SPoint2.h ../Geo/Pair.h ../Geo/GPoint.h \
+  ../Geo/SPoint2.h ../Geo/GEdge.h ../Geo/GEntity.h ../Geo/GVertex.h \
+  ../Geo/SVector3.h ../Geo/SPoint3.h ../Geo/SPoint2.h ../Geo/GFace.h \
+  ../Geo/GEntity.h ../Geo/GPoint.h ../Geo/GEdgeLoop.h ../Geo/GEdge.h \
+  ../Geo/SPoint2.h ../Geo/SVector3.h ../Geo/Pair.h ../Geo/GRegion.h \
+  ../Geo/GEntity.h ../Geo/SPoint3.h ../Geo/SBoundingBox3d.h \
+  ../Geo/MElement.h ../Common/GmshDefines.h ../Geo/MVertex.h \
+  ../Geo/SPoint2.h ../Geo/SPoint3.h ../Geo/MEdge.h ../Geo/MVertex.h \
+  ../Geo/SVector3.h ../Geo/MFace.h ../Geo/MVertex.h ../Geo/MEdge.h \
+  ../Geo/SVector3.h ../Numeric/FunctionSpace.h ../Numeric/GmshMatrix.h \
+  ../Numeric/Gauss.h ../Common/Gmsh.h ../Common/GmshMessage.h Numeric.h
 gmshElasticity${OBJEXT}: gmshElasticity.cpp gmshElasticity.h \
   gmshTermOfFormulation.h GmshMatrix.h ../Common/GmshConfig.h \
   ../Common/GmshMessage.h gmshFunction.h gmshAssembler.h \
   gmshLinearSystem.h ../Geo/GModel.h ../Geo/GVertex.h ../Geo/GEntity.h \
   ../Geo/Range.h ../Geo/SPoint3.h ../Geo/SBoundingBox3d.h \
-  ../Geo/SPoint3.h ../Geo/GPoint.h ../Geo/SPoint2.h ../Geo/GEdge.h \
-  ../Geo/GEntity.h ../Geo/GVertex.h ../Geo/SVector3.h ../Geo/SPoint3.h \
-  ../Geo/SPoint3.h ../Geo/SPoint2.h ../Geo/GFace.h ../Geo/GEntity.h \
-  ../Geo/GPoint.h ../Geo/GEdgeLoop.h ../Geo/GEdge.h ../Geo/SPoint2.h \
-  ../Geo/SVector3.h ../Geo/Pair.h ../Geo/GRegion.h ../Geo/GEntity.h \
-  ../Geo/SPoint3.h ../Geo/SBoundingBox3d.h ../Geo/MElement.h \
-  ../Common/GmshDefines.h ../Geo/MVertex.h ../Geo/SPoint2.h \
-  ../Geo/SPoint3.h ../Geo/MEdge.h ../Geo/MVertex.h ../Geo/SVector3.h \
-  ../Geo/MFace.h ../Geo/MVertex.h ../Geo/MEdge.h ../Geo/SVector3.h \
-  ../Numeric/FunctionSpace.h ../Numeric/GmshMatrix.h ../Numeric/Gauss.h \
-  ../Common/Gmsh.h ../Common/GmshMessage.h Numeric.h
+  ../Geo/SPoint3.h ../Geo/SOrientedBoundingBox.h ../Geo/SVector3.h \
+  ../Geo/SPoint3.h ../Geo/SPoint2.h ../Geo/Pair.h ../Geo/GPoint.h \
+  ../Geo/SPoint2.h ../Geo/GEdge.h ../Geo/GEntity.h ../Geo/GVertex.h \
+  ../Geo/SVector3.h ../Geo/SPoint3.h ../Geo/SPoint2.h ../Geo/GFace.h \
+  ../Geo/GEntity.h ../Geo/GPoint.h ../Geo/GEdgeLoop.h ../Geo/GEdge.h \
+  ../Geo/SPoint2.h ../Geo/SVector3.h ../Geo/Pair.h ../Geo/GRegion.h \
+  ../Geo/GEntity.h ../Geo/SPoint3.h ../Geo/SBoundingBox3d.h \
+  ../Geo/MElement.h ../Common/GmshDefines.h ../Geo/MVertex.h \
+  ../Geo/SPoint2.h ../Geo/SPoint3.h ../Geo/MEdge.h ../Geo/MVertex.h \
+  ../Geo/SVector3.h ../Geo/MFace.h ../Geo/MVertex.h ../Geo/MEdge.h \
+  ../Geo/SVector3.h ../Numeric/FunctionSpace.h ../Numeric/GmshMatrix.h \
+  ../Numeric/Gauss.h ../Common/Gmsh.h ../Common/GmshMessage.h Numeric.h
 gmshProjection${OBJEXT}: gmshProjection.cpp gmshProjection.h \
   gmshTermOfFormulation.h GmshMatrix.h ../Common/GmshConfig.h \
   ../Common/GmshMessage.h gmshFunction.h gmshAssembler.h \
   gmshLinearSystem.h ../Geo/GModel.h ../Geo/GVertex.h ../Geo/GEntity.h \
   ../Geo/Range.h ../Geo/SPoint3.h ../Geo/SBoundingBox3d.h \
-  ../Geo/SPoint3.h ../Geo/GPoint.h ../Geo/SPoint2.h ../Geo/GEdge.h \
-  ../Geo/GEntity.h ../Geo/GVertex.h ../Geo/SVector3.h ../Geo/SPoint3.h \
-  ../Geo/SPoint3.h ../Geo/SPoint2.h ../Geo/GFace.h ../Geo/GEntity.h \
-  ../Geo/GPoint.h ../Geo/GEdgeLoop.h ../Geo/GEdge.h ../Geo/SPoint2.h \
-  ../Geo/SVector3.h ../Geo/Pair.h ../Geo/GRegion.h ../Geo/GEntity.h \
-  ../Geo/SPoint3.h ../Geo/SBoundingBox3d.h ../Geo/MElement.h \
-  ../Common/GmshDefines.h ../Geo/MVertex.h ../Geo/SPoint2.h \
-  ../Geo/SPoint3.h ../Geo/MEdge.h ../Geo/MVertex.h ../Geo/SVector3.h \
-  ../Geo/MFace.h ../Geo/MVertex.h ../Geo/MEdge.h ../Geo/SVector3.h \
-  ../Numeric/FunctionSpace.h ../Numeric/GmshMatrix.h ../Numeric/Gauss.h \
-  ../Common/Gmsh.h ../Common/GmshMessage.h Numeric.h
+  ../Geo/SPoint3.h ../Geo/SOrientedBoundingBox.h ../Geo/SVector3.h \
+  ../Geo/SPoint3.h ../Geo/SPoint2.h ../Geo/Pair.h ../Geo/GPoint.h \
+  ../Geo/SPoint2.h ../Geo/GEdge.h ../Geo/GEntity.h ../Geo/GVertex.h \
+  ../Geo/SVector3.h ../Geo/SPoint3.h ../Geo/SPoint2.h ../Geo/GFace.h \
+  ../Geo/GEntity.h ../Geo/GPoint.h ../Geo/GEdgeLoop.h ../Geo/GEdge.h \
+  ../Geo/SPoint2.h ../Geo/SVector3.h ../Geo/Pair.h ../Geo/GRegion.h \
+  ../Geo/GEntity.h ../Geo/SPoint3.h ../Geo/SBoundingBox3d.h \
+  ../Geo/MElement.h ../Common/GmshDefines.h ../Geo/MVertex.h \
+  ../Geo/SPoint2.h ../Geo/SPoint3.h ../Geo/MEdge.h ../Geo/MVertex.h \
+  ../Geo/SVector3.h ../Geo/MFace.h ../Geo/MVertex.h ../Geo/MEdge.h \
+  ../Geo/SVector3.h ../Numeric/FunctionSpace.h ../Numeric/GmshMatrix.h \
+  ../Numeric/Gauss.h ../Common/Gmsh.h ../Common/GmshMessage.h Numeric.h
 EigSolve${OBJEXT}: EigSolve.cpp
 FunctionSpace${OBJEXT}: FunctionSpace.cpp FunctionSpace.h GmshMatrix.h \
   ../Common/GmshConfig.h ../Common/GmshMessage.h ../Common/GmshDefines.h
diff --git a/Parser/Gmsh.tab.cpp b/Parser/Gmsh.tab.cpp
index a5b585d2a1d885e4170abd5894ba81cb05415a0a..d4ff3cfb07134e1e68c688092fce377cbb621de2 100644
--- a/Parser/Gmsh.tab.cpp
+++ b/Parser/Gmsh.tab.cpp
@@ -373,7 +373,7 @@ static std::map<std::string, std::string > gmsh_yystringsymbols;
 static PViewDataList *ViewData;
 #endif
 static std::vector<double> ViewCoord;
-static List_T *ViewValueList = 0;
+static std::vector<double> *ViewValueList = 0;
 static int *ViewNumList = 0;
 static ExtrudeParams extr;
 static int curPhysDim = 0;
@@ -977,39 +977,39 @@ static const yytype_uint16 yyrline[] =
      157,   158,   159,   160,   161,   162,   163,   164,   165,   166,
      170,   174,   181,   186,   201,   214,   243,   257,   268,   283,
      288,   289,   290,   291,   292,   296,   298,   303,   305,   311,
-     457,   310,   475,   482,   493,   492,   511,   518,   529,   528,
-     546,   562,   585,   584,   598,   599,   600,   601,   602,   606,
-     607,   614,   636,   663,   703,   713,   721,   729,   741,   750,
-     756,   765,   783,   801,   810,   822,   827,   835,   855,   878,
-     885,   891,   911,   932,   958,   970,   987,   991,  1002,  1005,
-    1018,  1021,  1031,  1055,  1054,  1074,  1096,  1114,  1132,  1162,
-    1192,  1212,  1230,  1248,  1274,  1292,  1291,  1314,  1332,  1371,
-    1377,  1383,  1390,  1415,  1440,  1457,  1456,  1477,  1495,  1523,
-    1543,  1561,  1579,  1578,  1603,  1608,  1613,  1618,  1623,  1643,
-    1649,  1660,  1661,  1666,  1669,  1673,  1696,  1719,  1742,  1770,
-    1779,  1783,  1798,  1825,  1842,  1856,  1862,  1868,  1877,  1891,
-    1939,  1957,  1972,  1991,  2003,  2027,  2031,  2036,  2041,  2047,
-    2056,  2073,  2090,  2109,  2128,  2156,  2164,  2170,  2177,  2181,
-    2190,  2198,  2206,  2215,  2214,  2227,  2226,  2239,  2238,  2251,
-    2250,  2263,  2270,  2277,  2284,  2291,  2298,  2305,  2312,  2319,
-    2327,  2326,  2338,  2337,  2349,  2348,  2360,  2359,  2371,  2370,
-    2382,  2381,  2393,  2392,  2404,  2403,  2415,  2414,  2429,  2432,
-    2438,  2447,  2467,  2490,  2494,  2518,  2521,  2537,  2540,  2553,
-    2556,  2562,  2565,  2572,  2628,  2698,  2703,  2770,  2813,  2839,
-    2862,  2885,  2888,  2897,  2901,  2917,  2918,  2919,  2920,  2921,
-    2922,  2923,  2924,  2925,  2932,  2933,  2934,  2935,  2936,  2937,
-    2938,  2939,  2940,  2941,  2942,  2943,  2944,  2945,  2946,  2947,
-    2948,  2949,  2950,  2951,  2952,  2953,  2954,  2955,  2956,  2957,
-    2958,  2959,  2960,  2961,  2962,  2963,  2965,  2966,  2967,  2968,
-    2969,  2970,  2971,  2972,  2973,  2974,  2975,  2976,  2977,  2978,
-    2979,  2980,  2981,  2982,  2983,  2984,  2985,  2994,  2995,  2996,
-    2997,  2998,  2999,  3000,  3004,  3017,  3029,  3044,  3054,  3064,
-    3082,  3087,  3092,  3102,  3112,  3120,  3124,  3128,  3132,  3136,
-    3143,  3147,  3151,  3155,  3162,  3167,  3174,  3179,  3183,  3188,
-    3192,  3200,  3211,  3215,  3227,  3235,  3243,  3250,  3261,  3281,
-    3291,  3301,  3311,  3331,  3336,  3340,  3344,  3356,  3360,  3372,
-    3379,  3389,  3393,  3408,  3413,  3420,  3424,  3437,  3445,  3456,
-    3460,  3468,  3476,  3490,  3504,  3508
+     415,   310,   433,   440,   451,   450,   468,   475,   486,   485,
+     502,   518,   541,   540,   554,   555,   556,   557,   558,   562,
+     563,   570,   592,   619,   659,   669,   677,   685,   697,   706,
+     712,   721,   739,   757,   766,   778,   783,   791,   811,   834,
+     841,   847,   867,   888,   914,   926,   943,   947,   958,   961,
+     974,   977,   987,  1011,  1010,  1030,  1052,  1070,  1088,  1118,
+    1148,  1168,  1186,  1204,  1230,  1248,  1247,  1270,  1288,  1327,
+    1333,  1339,  1346,  1371,  1396,  1413,  1412,  1433,  1451,  1479,
+    1499,  1517,  1535,  1534,  1559,  1564,  1569,  1574,  1579,  1599,
+    1605,  1616,  1617,  1622,  1625,  1629,  1652,  1675,  1698,  1726,
+    1735,  1739,  1754,  1781,  1798,  1812,  1818,  1824,  1833,  1847,
+    1895,  1913,  1928,  1947,  1959,  1983,  1987,  1992,  1997,  2003,
+    2012,  2029,  2046,  2065,  2084,  2112,  2120,  2126,  2133,  2137,
+    2146,  2154,  2162,  2171,  2170,  2183,  2182,  2195,  2194,  2207,
+    2206,  2219,  2226,  2233,  2240,  2247,  2254,  2261,  2268,  2275,
+    2283,  2282,  2294,  2293,  2305,  2304,  2316,  2315,  2327,  2326,
+    2338,  2337,  2349,  2348,  2360,  2359,  2371,  2370,  2385,  2388,
+    2394,  2403,  2423,  2446,  2450,  2474,  2477,  2493,  2496,  2509,
+    2512,  2518,  2521,  2528,  2584,  2654,  2659,  2726,  2769,  2795,
+    2818,  2841,  2844,  2853,  2857,  2873,  2874,  2875,  2876,  2877,
+    2878,  2879,  2880,  2881,  2888,  2889,  2890,  2891,  2892,  2893,
+    2894,  2895,  2896,  2897,  2898,  2899,  2900,  2901,  2902,  2903,
+    2904,  2905,  2906,  2907,  2908,  2909,  2910,  2911,  2912,  2913,
+    2914,  2915,  2916,  2917,  2918,  2919,  2921,  2922,  2923,  2924,
+    2925,  2926,  2927,  2928,  2929,  2930,  2931,  2932,  2933,  2934,
+    2935,  2936,  2937,  2938,  2939,  2940,  2941,  2950,  2951,  2952,
+    2953,  2954,  2955,  2956,  2960,  2973,  2985,  3000,  3010,  3020,
+    3038,  3043,  3048,  3058,  3068,  3076,  3080,  3084,  3088,  3092,
+    3099,  3103,  3107,  3111,  3118,  3123,  3130,  3135,  3139,  3144,
+    3148,  3156,  3167,  3171,  3183,  3191,  3199,  3206,  3217,  3237,
+    3247,  3257,  3267,  3287,  3292,  3296,  3300,  3312,  3316,  3328,
+    3335,  3345,  3349,  3364,  3369,  3376,  3380,  3393,  3401,  3412,
+    3416,  3424,  3432,  3446,  3460,  3464
 };
 #endif
 
@@ -3904,7 +3904,7 @@ yyreduce:
 #line 283 "Gmsh.y"
     {
 #if !defined(HAVE_NO_POST)
-      ViewData = new PViewDataList(true); 
+      ViewData = new PViewDataList(); 
 #endif
     ;}
     break;
@@ -3921,152 +3921,110 @@ yyreduce:
 
   case 37:
 #line 304 "Gmsh.y"
-    { if(ViewValueList) List_Add(ViewValueList, &(yyvsp[(1) - (1)].d)); ;}
+    { if(ViewValueList) ViewValueList->push_back((yyvsp[(1) - (1)].d)); ;}
     break;
 
   case 38:
 #line 306 "Gmsh.y"
-    { if(ViewValueList) List_Add(ViewValueList, &(yyvsp[(3) - (3)].d)); ;}
+    { if(ViewValueList) ViewValueList->push_back((yyvsp[(3) - (3)].d)); ;}
     break;
 
   case 39:
 #line 311 "Gmsh.y"
     {
 #if !defined(HAVE_NO_POST)
-      if(!strcmp((yyvsp[(1) - (1)].c), "SP")){
-	ViewValueList = ViewData->SP; ViewNumList = &ViewData->NbSP;
+      if(!strncmp((yyvsp[(1) - (1)].c), "SP", 2)){
+	ViewValueList = &ViewData->SP; ViewNumList = &ViewData->NbSP;
       }
-      else if(!strcmp((yyvsp[(1) - (1)].c), "VP")){
-	ViewValueList = ViewData->VP; ViewNumList = &ViewData->NbVP;
+      else if(!strncmp((yyvsp[(1) - (1)].c), "VP", 2)){
+	ViewValueList = &ViewData->VP; ViewNumList = &ViewData->NbVP;
       }
-      else if(!strcmp((yyvsp[(1) - (1)].c), "TP")){
-	ViewValueList = ViewData->TP; ViewNumList = &ViewData->NbTP;
+      else if(!strncmp((yyvsp[(1) - (1)].c), "TP", 2)){
+	ViewValueList = &ViewData->TP; ViewNumList = &ViewData->NbTP;
       }
-      else if(!strcmp((yyvsp[(1) - (1)].c), "SL")){
-	ViewValueList = ViewData->SL; ViewNumList = &ViewData->NbSL;
+      else if(!strncmp((yyvsp[(1) - (1)].c), "SL", 2)){
+	ViewValueList = &ViewData->SL; ViewNumList = &ViewData->NbSL;
+        if(strlen((yyvsp[(1) - (1)].c)) > 2) ViewData->setOrder2(1);
       }
-      else if(!strcmp((yyvsp[(1) - (1)].c), "VL")){
-	ViewValueList = ViewData->VL; ViewNumList = &ViewData->NbVL;
+      else if(!strncmp((yyvsp[(1) - (1)].c), "VL", 2)){
+	ViewValueList = &ViewData->VL; ViewNumList = &ViewData->NbVL;
+        if(strlen((yyvsp[(1) - (1)].c)) > 2) ViewData->setOrder2(1);
       }
-      else if(!strcmp((yyvsp[(1) - (1)].c), "TL")){
-	ViewValueList = ViewData->TL; ViewNumList = &ViewData->NbTL;
+      else if(!strncmp((yyvsp[(1) - (1)].c), "TL", 2)){
+	ViewValueList = &ViewData->TL; ViewNumList = &ViewData->NbTL;
+        if(strlen((yyvsp[(1) - (1)].c)) > 2) ViewData->setOrder2(1);
       }
-      else if(!strcmp((yyvsp[(1) - (1)].c), "ST")){
-	ViewValueList = ViewData->ST; ViewNumList = &ViewData->NbST;
+      else if(!strncmp((yyvsp[(1) - (1)].c), "ST", 2)){
+	ViewValueList = &ViewData->ST; ViewNumList = &ViewData->NbST;
+        if(strlen((yyvsp[(1) - (1)].c)) > 2) ViewData->setOrder2(3);
       }
-      else if(!strcmp((yyvsp[(1) - (1)].c), "VT")){
-	ViewValueList = ViewData->VT; ViewNumList = &ViewData->NbVT;
+      else if(!strncmp((yyvsp[(1) - (1)].c), "VT", 2)){
+	ViewValueList = &ViewData->VT; ViewNumList = &ViewData->NbVT;
+        if(strlen((yyvsp[(1) - (1)].c)) > 2) ViewData->setOrder2(3);
       }
-      else if(!strcmp((yyvsp[(1) - (1)].c), "TT")){
-	ViewValueList = ViewData->TT; ViewNumList = &ViewData->NbTT;
+      else if(!strncmp((yyvsp[(1) - (1)].c), "TT", 2)){
+	ViewValueList = &ViewData->TT; ViewNumList = &ViewData->NbTT;
+        if(strlen((yyvsp[(1) - (1)].c)) > 2) ViewData->setOrder2(3);
       }
-      else if(!strcmp((yyvsp[(1) - (1)].c), "SQ")){
-	ViewValueList = ViewData->SQ; ViewNumList = &ViewData->NbSQ;
+      else if(!strncmp((yyvsp[(1) - (1)].c), "SQ", 2)){
+	ViewValueList = &ViewData->SQ; ViewNumList = &ViewData->NbSQ;
+        if(strlen((yyvsp[(1) - (1)].c)) > 2) ViewData->setOrder2(4);
       }
-      else if(!strcmp((yyvsp[(1) - (1)].c), "VQ")){
-	ViewValueList = ViewData->VQ; ViewNumList = &ViewData->NbVQ;
+      else if(!strncmp((yyvsp[(1) - (1)].c), "VQ", 2)){
+	ViewValueList = &ViewData->VQ; ViewNumList = &ViewData->NbVQ;
+        if(strlen((yyvsp[(1) - (1)].c)) > 2) ViewData->setOrder2(4);
       }
-      else if(!strcmp((yyvsp[(1) - (1)].c), "TQ")){
-	ViewValueList = ViewData->TQ; ViewNumList = &ViewData->NbTQ;
+      else if(!strncmp((yyvsp[(1) - (1)].c), "TQ", 2)){
+	ViewValueList = &ViewData->TQ; ViewNumList = &ViewData->NbTQ;
+        if(strlen((yyvsp[(1) - (1)].c)) > 2) ViewData->setOrder2(4);
       }
-      else if(!strcmp((yyvsp[(1) - (1)].c), "SS")){
-	ViewValueList = ViewData->SS; ViewNumList = &ViewData->NbSS;
+      else if(!strncmp((yyvsp[(1) - (1)].c), "SS", 2)){
+	ViewValueList = &ViewData->SS; ViewNumList = &ViewData->NbSS;
+        if(strlen((yyvsp[(1) - (1)].c)) > 2) ViewData->setOrder2(6);
       }
-      else if(!strcmp((yyvsp[(1) - (1)].c), "VS")){
-	ViewValueList = ViewData->VS; ViewNumList = &ViewData->NbVS;
+      else if(!strncmp((yyvsp[(1) - (1)].c), "VS", 2)){
+	ViewValueList = &ViewData->VS; ViewNumList = &ViewData->NbVS;
+        if(strlen((yyvsp[(1) - (1)].c)) > 2) ViewData->setOrder2(6);
       }
-      else if(!strcmp((yyvsp[(1) - (1)].c), "TS")){
-	ViewValueList = ViewData->TS; ViewNumList = &ViewData->NbTS;
+      else if(!strncmp((yyvsp[(1) - (1)].c), "TS", 2)){
+	ViewValueList = &ViewData->TS; ViewNumList = &ViewData->NbTS;
+        if(strlen((yyvsp[(1) - (1)].c)) > 2) ViewData->setOrder2(6);
       }
-      else if(!strcmp((yyvsp[(1) - (1)].c), "SH")){
-	ViewValueList = ViewData->SH; ViewNumList = &ViewData->NbSH;
+      else if(!strncmp((yyvsp[(1) - (1)].c), "SH", 2)){
+	ViewValueList = &ViewData->SH; ViewNumList = &ViewData->NbSH;
+        if(strlen((yyvsp[(1) - (1)].c)) > 2) ViewData->setOrder2(12);
       }
-      else if(!strcmp((yyvsp[(1) - (1)].c), "VH")){
-	ViewValueList = ViewData->VH; ViewNumList = &ViewData->NbVH;
+      else if(!strncmp((yyvsp[(1) - (1)].c), "VH", 2)){
+	ViewValueList = &ViewData->VH; ViewNumList = &ViewData->NbVH;
+        if(strlen((yyvsp[(1) - (1)].c)) > 2) ViewData->setOrder2(12);
       }
-      else if(!strcmp((yyvsp[(1) - (1)].c), "TH")){
-	ViewValueList = ViewData->TH; ViewNumList = &ViewData->NbTH;
+      else if(!strncmp((yyvsp[(1) - (1)].c), "TH", 2)){
+	ViewValueList = &ViewData->TH; ViewNumList = &ViewData->NbTH;
+        if(strlen((yyvsp[(1) - (1)].c)) > 2) ViewData->setOrder2(12);
       }
-      else if(!strcmp((yyvsp[(1) - (1)].c), "SI")){
-	ViewValueList = ViewData->SI; ViewNumList = &ViewData->NbSI;
+      else if(!strncmp((yyvsp[(1) - (1)].c), "SI", 2)){
+	ViewValueList = &ViewData->SI; ViewNumList = &ViewData->NbSI;
+        if(strlen((yyvsp[(1) - (1)].c)) > 2) ViewData->setOrder2(9);
       }
-      else if(!strcmp((yyvsp[(1) - (1)].c), "VI")){
-	ViewValueList = ViewData->VI; ViewNumList = &ViewData->NbVI;
+      else if(!strncmp((yyvsp[(1) - (1)].c), "VI", 2)){
+	ViewValueList = &ViewData->VI; ViewNumList = &ViewData->NbVI;
+        if(strlen((yyvsp[(1) - (1)].c)) > 2) ViewData->setOrder2(9);
       }
-      else if(!strcmp((yyvsp[(1) - (1)].c), "TI")){
-	ViewValueList = ViewData->TI; ViewNumList = &ViewData->NbTI;
+      else if(!strncmp((yyvsp[(1) - (1)].c), "TI", 2)){
+	ViewValueList = &ViewData->TI; ViewNumList = &ViewData->NbTI;
+        if(strlen((yyvsp[(1) - (1)].c)) > 2) ViewData->setOrder2(9);
       }
-      else if(!strcmp((yyvsp[(1) - (1)].c), "SY")){
-	ViewValueList = ViewData->SY; ViewNumList = &ViewData->NbSY;
+      else if(!strncmp((yyvsp[(1) - (1)].c), "SY", 2)){
+	ViewValueList = &ViewData->SY; ViewNumList = &ViewData->NbSY;
+        if(strlen((yyvsp[(1) - (1)].c)) > 2) ViewData->setOrder2(8);
       }
-      else if(!strcmp((yyvsp[(1) - (1)].c), "VY")){
-	ViewValueList = ViewData->VY; ViewNumList = &ViewData->NbVY;
+      else if(!strncmp((yyvsp[(1) - (1)].c), "VY", 2)){
+	ViewValueList = &ViewData->VY; ViewNumList = &ViewData->NbVY;
+        if(strlen((yyvsp[(1) - (1)].c)) > 2) ViewData->setOrder2(8);
       }
-      else if(!strcmp((yyvsp[(1) - (1)].c), "TY")){
-	ViewValueList = ViewData->TY; ViewNumList = &ViewData->NbTY;
-      }
-      else if(!strcmp((yyvsp[(1) - (1)].c), "SL2")){
-	ViewValueList = ViewData->SL2; ViewNumList = &ViewData->NbSL2;
-      }
-      else if(!strcmp((yyvsp[(1) - (1)].c), "VL2")){
-	ViewValueList = ViewData->VL2; ViewNumList = &ViewData->NbVL2;
-      }
-      else if(!strcmp((yyvsp[(1) - (1)].c), "TL2")){
-	ViewValueList = ViewData->TL2; ViewNumList = &ViewData->NbTL2;
-      }
-      else if(!strcmp((yyvsp[(1) - (1)].c), "ST2")){
-	ViewValueList = ViewData->ST2; ViewNumList = &ViewData->NbST2;
-      }
-      else if(!strcmp((yyvsp[(1) - (1)].c), "VT2")){
-	ViewValueList = ViewData->VT2; ViewNumList = &ViewData->NbVT2;
-      }
-      else if(!strcmp((yyvsp[(1) - (1)].c), "TT2")){
-	ViewValueList = ViewData->TT2; ViewNumList = &ViewData->NbTT2;
-      }
-      else if(!strcmp((yyvsp[(1) - (1)].c), "SQ2")){
-	ViewValueList = ViewData->SQ2; ViewNumList = &ViewData->NbSQ2;
-      }
-      else if(!strcmp((yyvsp[(1) - (1)].c), "VQ2")){
-	ViewValueList = ViewData->VQ2; ViewNumList = &ViewData->NbVQ2;
-      }
-      else if(!strcmp((yyvsp[(1) - (1)].c), "TQ2")){
-	ViewValueList = ViewData->TQ2; ViewNumList = &ViewData->NbTQ2;
-      }
-      else if(!strcmp((yyvsp[(1) - (1)].c), "SS2")){
-	ViewValueList = ViewData->SS2; ViewNumList = &ViewData->NbSS2;
-      }
-      else if(!strcmp((yyvsp[(1) - (1)].c), "VS2")){
-	ViewValueList = ViewData->VS2; ViewNumList = &ViewData->NbVS2;
-      }
-      else if(!strcmp((yyvsp[(1) - (1)].c), "TS2")){
-	ViewValueList = ViewData->TS2; ViewNumList = &ViewData->NbTS2;
-      }
-      else if(!strcmp((yyvsp[(1) - (1)].c), "SH2")){
-	ViewValueList = ViewData->SH2; ViewNumList = &ViewData->NbSH2;
-      }
-      else if(!strcmp((yyvsp[(1) - (1)].c), "VH2")){
-	ViewValueList = ViewData->VH2; ViewNumList = &ViewData->NbVH2;
-      }
-      else if(!strcmp((yyvsp[(1) - (1)].c), "TH2")){
-	ViewValueList = ViewData->TH2; ViewNumList = &ViewData->NbTH2;
-      }
-      else if(!strcmp((yyvsp[(1) - (1)].c), "SI2")){
-	ViewValueList = ViewData->SI2; ViewNumList = &ViewData->NbSI2;
-      }
-      else if(!strcmp((yyvsp[(1) - (1)].c), "VI2")){
-	ViewValueList = ViewData->VI2; ViewNumList = &ViewData->NbVI2;
-      }
-      else if(!strcmp((yyvsp[(1) - (1)].c), "TI2")){
-	ViewValueList = ViewData->TI2; ViewNumList = &ViewData->NbTI2;
-      }
-      else if(!strcmp((yyvsp[(1) - (1)].c), "SY2")){
-	ViewValueList = ViewData->SY2; ViewNumList = &ViewData->NbSY2;
-      }
-      else if(!strcmp((yyvsp[(1) - (1)].c), "VY2")){
-	ViewValueList = ViewData->VY2; ViewNumList = &ViewData->NbVY2;
-      }
-      else if(!strcmp((yyvsp[(1) - (1)].c), "TY2")){
-	ViewValueList = ViewData->TY2; ViewNumList = &ViewData->NbTY2;
+      else if(!strncmp((yyvsp[(1) - (1)].c), "TY", 2)){
+	ViewValueList = &ViewData->TY; ViewNumList = &ViewData->NbTY;
+        if(strlen((yyvsp[(1) - (1)].c)) > 2) ViewData->setOrder2(8);
       }
       else{
 	yymsg(0, "Unknown element type '%s'", (yyvsp[(1) - (1)].c));	
@@ -4079,20 +4037,20 @@ yyreduce:
     break;
 
   case 40:
-#line 457 "Gmsh.y"
+#line 415 "Gmsh.y"
     {
 #if !defined(HAVE_NO_POST)
       if(ViewValueList){
 	for(int i = 0; i < 3; i++)
 	  for(int j = 0; j < ViewCoord.size() / 3; j++) 
-	    List_Add(ViewValueList, &ViewCoord[3 * j + i]);
+	    ViewValueList->push_back(ViewCoord[3 * j + i]);
       }
 #endif
     ;}
     break;
 
   case 41:
-#line 467 "Gmsh.y"
+#line 425 "Gmsh.y"
     {
 #if !defined(HAVE_NO_POST)
       if(ViewValueList) (*ViewNumList)++;
@@ -4101,40 +4059,39 @@ yyreduce:
     break;
 
   case 42:
-#line 476 "Gmsh.y"
+#line 434 "Gmsh.y"
     { 
 #if !defined(HAVE_NO_POST)
-      for(int i = 0; i < (int)strlen((yyvsp[(1) - (1)].c))+1; i++) List_Add(ViewData->T2C, &(yyvsp[(1) - (1)].c)[i]); 
+      for(int i = 0; i < (int)strlen((yyvsp[(1) - (1)].c)) + 1; i++) ViewData->T2C.push_back((yyvsp[(1) - (1)].c)[i]);
 #endif
       Free((yyvsp[(1) - (1)].c));
     ;}
     break;
 
   case 43:
-#line 483 "Gmsh.y"
+#line 441 "Gmsh.y"
     { 
 #if !defined(HAVE_NO_POST)
-      for(int i = 0; i < (int)strlen((yyvsp[(3) - (3)].c))+1; i++) List_Add(ViewData->T2C, &(yyvsp[(3) - (3)].c)[i]); 
+      for(int i = 0; i < (int)strlen((yyvsp[(3) - (3)].c)) + 1; i++) ViewData->T2C.push_back((yyvsp[(3) - (3)].c)[i]);
 #endif
       Free((yyvsp[(3) - (3)].c));
     ;}
     break;
 
   case 44:
-#line 493 "Gmsh.y"
+#line 451 "Gmsh.y"
     { 
 #if !defined(HAVE_NO_POST)
-      List_Add(ViewData->T2D, &(yyvsp[(3) - (8)].d)); 
-      List_Add(ViewData->T2D, &(yyvsp[(5) - (8)].d));
-      List_Add(ViewData->T2D, &(yyvsp[(7) - (8)].d)); 
-      double d = List_Nbr(ViewData->T2C);
-      List_Add(ViewData->T2D, &d); 
+      ViewData->T2D.push_back((yyvsp[(3) - (8)].d)); 
+      ViewData->T2D.push_back((yyvsp[(5) - (8)].d));
+      ViewData->T2D.push_back((yyvsp[(7) - (8)].d)); 
+      ViewData->T2D.push_back(ViewData->T2C.size()); 
 #endif
     ;}
     break;
 
   case 45:
-#line 503 "Gmsh.y"
+#line 460 "Gmsh.y"
     {
 #if !defined(HAVE_NO_POST)
       ViewData->NbT2++;
@@ -4143,39 +4100,38 @@ yyreduce:
     break;
 
   case 46:
-#line 512 "Gmsh.y"
+#line 469 "Gmsh.y"
     { 
 #if !defined(HAVE_NO_POST)
-      for(int i = 0; i < (int)strlen((yyvsp[(1) - (1)].c))+1; i++) List_Add(ViewData->T3C, &(yyvsp[(1) - (1)].c)[i]); 
+      for(int i = 0; i < (int)strlen((yyvsp[(1) - (1)].c)) + 1; i++) ViewData->T3C.push_back((yyvsp[(1) - (1)].c)[i]);
 #endif
       Free((yyvsp[(1) - (1)].c));
     ;}
     break;
 
   case 47:
-#line 519 "Gmsh.y"
+#line 476 "Gmsh.y"
     { 
 #if !defined(HAVE_NO_POST)
-      for(int i = 0; i < (int)strlen((yyvsp[(3) - (3)].c))+1; i++) List_Add(ViewData->T3C, &(yyvsp[(3) - (3)].c)[i]); 
+      for(int i = 0; i < (int)strlen((yyvsp[(3) - (3)].c)) + 1; i++) ViewData->T3C.push_back((yyvsp[(3) - (3)].c)[i]);
 #endif
       Free((yyvsp[(3) - (3)].c));
     ;}
     break;
 
   case 48:
-#line 529 "Gmsh.y"
+#line 486 "Gmsh.y"
     { 
 #if !defined(HAVE_NO_POST)
-      List_Add(ViewData->T3D, &(yyvsp[(3) - (10)].d)); List_Add(ViewData->T3D, &(yyvsp[(5) - (10)].d));
-      List_Add(ViewData->T3D, &(yyvsp[(7) - (10)].d)); List_Add(ViewData->T3D, &(yyvsp[(9) - (10)].d)); 
-      double d = List_Nbr(ViewData->T3C);
-      List_Add(ViewData->T3D, &d); 
+      ViewData->T3D.push_back((yyvsp[(3) - (10)].d)); ViewData->T3D.push_back((yyvsp[(5) - (10)].d));
+      ViewData->T3D.push_back((yyvsp[(7) - (10)].d)); ViewData->T3D.push_back((yyvsp[(9) - (10)].d));
+      ViewData->T3D.push_back(ViewData->T3C.size()); 
 #endif
     ;}
     break;
 
   case 49:
-#line 538 "Gmsh.y"
+#line 494 "Gmsh.y"
     {
 #if !defined(HAVE_NO_POST)
       ViewData->NbT3++;
@@ -4184,7 +4140,7 @@ yyreduce:
     break;
 
   case 50:
-#line 548 "Gmsh.y"
+#line 504 "Gmsh.y"
     {
 #if !defined(HAVE_NO_POST)
       int type = 
@@ -4202,7 +4158,7 @@ yyreduce:
     break;
 
   case 51:
-#line 566 "Gmsh.y"
+#line 522 "Gmsh.y"
     {
 #if !defined(HAVE_NO_POST)
       int type = 
@@ -4221,57 +4177,57 @@ yyreduce:
     break;
 
   case 52:
-#line 585 "Gmsh.y"
+#line 541 "Gmsh.y"
     {
 #if !defined(HAVE_NO_POST)
-      ViewValueList = ViewData->Time;
+      ViewValueList = &ViewData->Time;
 #endif
     ;}
     break;
 
   case 53:
-#line 591 "Gmsh.y"
+#line 547 "Gmsh.y"
     {
     ;}
     break;
 
   case 54:
-#line 598 "Gmsh.y"
+#line 554 "Gmsh.y"
     { (yyval.i) = 0; ;}
     break;
 
   case 55:
-#line 599 "Gmsh.y"
+#line 555 "Gmsh.y"
     { (yyval.i) = 1; ;}
     break;
 
   case 56:
-#line 600 "Gmsh.y"
+#line 556 "Gmsh.y"
     { (yyval.i) = 2; ;}
     break;
 
   case 57:
-#line 601 "Gmsh.y"
+#line 557 "Gmsh.y"
     { (yyval.i) = 3; ;}
     break;
 
   case 58:
-#line 602 "Gmsh.y"
+#line 558 "Gmsh.y"
     { (yyval.i) = 4; ;}
     break;
 
   case 59:
-#line 606 "Gmsh.y"
+#line 562 "Gmsh.y"
     { (yyval.i) = 1; ;}
     break;
 
   case 60:
-#line 607 "Gmsh.y"
+#line 563 "Gmsh.y"
     { (yyval.i) = -1; ;}
     break;
 
   case 61:
-#line 615 "Gmsh.y"
+#line 571 "Gmsh.y"
     {
       if(!gmsh_yysymbols.count((yyvsp[(1) - (4)].c))){
 	if(!(yyvsp[(2) - (4)].i))
@@ -4296,7 +4252,7 @@ yyreduce:
     break;
 
   case 62:
-#line 637 "Gmsh.y"
+#line 593 "Gmsh.y"
     {
       int index = (int)(yyvsp[(3) - (7)].d);
       if(!gmsh_yysymbols.count((yyvsp[(1) - (7)].c))){
@@ -4326,7 +4282,7 @@ yyreduce:
     break;
 
   case 63:
-#line 664 "Gmsh.y"
+#line 620 "Gmsh.y"
     {
       if(List_Nbr((yyvsp[(4) - (9)].l)) != List_Nbr((yyvsp[(8) - (9)].l))){
 	yymsg(0, "Incompatible array dimensions in affectation");
@@ -4369,7 +4325,7 @@ yyreduce:
     break;
 
   case 64:
-#line 704 "Gmsh.y"
+#line 660 "Gmsh.y"
     {
       if(gmsh_yysymbols.count((yyvsp[(1) - (6)].c)))
 	gmsh_yysymbols[(yyvsp[(1) - (6)].c)].clear();
@@ -4382,7 +4338,7 @@ yyreduce:
     break;
 
   case 65:
-#line 714 "Gmsh.y"
+#line 670 "Gmsh.y"
     {
       // appends to the list
       for(int i = 0; i < List_Nbr((yyvsp[(5) - (6)].l)); i++)
@@ -4393,7 +4349,7 @@ yyreduce:
     break;
 
   case 66:
-#line 722 "Gmsh.y"
+#line 678 "Gmsh.y"
     {
       if(!gmsh_yysymbols.count((yyvsp[(1) - (3)].c)))
 	yymsg(0, "Unknown variable '%s'", (yyvsp[(1) - (3)].c)); 
@@ -4404,7 +4360,7 @@ yyreduce:
     break;
 
   case 67:
-#line 730 "Gmsh.y"
+#line 686 "Gmsh.y"
     {
       if(!gmsh_yysymbols.count((yyvsp[(1) - (6)].c)))
 	yymsg(0, "Unknown variable '%s'", (yyvsp[(1) - (6)].c)); 
@@ -4419,7 +4375,7 @@ yyreduce:
     break;
 
   case 68:
-#line 742 "Gmsh.y"
+#line 698 "Gmsh.y"
     { 
       gmsh_yystringsymbols[(yyvsp[(1) - (4)].c)] = std::string((yyvsp[(3) - (4)].c));
       Free((yyvsp[(1) - (4)].c));
@@ -4428,7 +4384,7 @@ yyreduce:
     break;
 
   case 69:
-#line 751 "Gmsh.y"
+#line 707 "Gmsh.y"
     { 
       std::string tmp((yyvsp[(5) - (6)].c));
       StringOption(GMSH_SET|GMSH_GUI, (yyvsp[(1) - (6)].c), 0, (yyvsp[(3) - (6)].c), tmp);
@@ -4437,7 +4393,7 @@ yyreduce:
     break;
 
   case 70:
-#line 757 "Gmsh.y"
+#line 713 "Gmsh.y"
     { 
       std::string tmp((yyvsp[(8) - (9)].c));
       StringOption(GMSH_SET|GMSH_GUI, (yyvsp[(1) - (9)].c), (int)(yyvsp[(3) - (9)].d), (yyvsp[(6) - (9)].c), tmp);
@@ -4446,7 +4402,7 @@ yyreduce:
     break;
 
   case 71:
-#line 766 "Gmsh.y"
+#line 722 "Gmsh.y"
     {
       double d = 0.;
       if(NumberOption(GMSH_GET, (yyvsp[(1) - (6)].c), 0, (yyvsp[(3) - (6)].c), d)){
@@ -4467,7 +4423,7 @@ yyreduce:
     break;
 
   case 72:
-#line 784 "Gmsh.y"
+#line 740 "Gmsh.y"
     {
       double d = 0.;
       if(NumberOption(GMSH_GET, (yyvsp[(1) - (9)].c), (int)(yyvsp[(3) - (9)].d), (yyvsp[(6) - (9)].c), d)){
@@ -4488,7 +4444,7 @@ yyreduce:
     break;
 
   case 73:
-#line 802 "Gmsh.y"
+#line 758 "Gmsh.y"
     {
       double d = 0.;
       if(NumberOption(GMSH_GET, (yyvsp[(1) - (5)].c), 0, (yyvsp[(3) - (5)].c), d)){
@@ -4500,7 +4456,7 @@ yyreduce:
     break;
 
   case 74:
-#line 811 "Gmsh.y"
+#line 767 "Gmsh.y"
     {
       double d = 0.;
       if(NumberOption(GMSH_GET, (yyvsp[(1) - (8)].c), (int)(yyvsp[(3) - (8)].d), (yyvsp[(6) - (8)].c), d)){
@@ -4512,7 +4468,7 @@ yyreduce:
     break;
 
   case 75:
-#line 823 "Gmsh.y"
+#line 779 "Gmsh.y"
     {
       ColorOption(GMSH_SET|GMSH_GUI, (yyvsp[(1) - (8)].c), 0, (yyvsp[(5) - (8)].c), (yyvsp[(7) - (8)].u));
       Free((yyvsp[(1) - (8)].c)); Free((yyvsp[(5) - (8)].c));
@@ -4520,7 +4476,7 @@ yyreduce:
     break;
 
   case 76:
-#line 828 "Gmsh.y"
+#line 784 "Gmsh.y"
     {
       ColorOption(GMSH_SET|GMSH_GUI, (yyvsp[(1) - (11)].c), (int)(yyvsp[(3) - (11)].d), (yyvsp[(8) - (11)].c), (yyvsp[(10) - (11)].u));
       Free((yyvsp[(1) - (11)].c)); Free((yyvsp[(8) - (11)].c));
@@ -4528,7 +4484,7 @@ yyreduce:
     break;
 
   case 77:
-#line 836 "Gmsh.y"
+#line 792 "Gmsh.y"
     {
       GmshColorTable *ct = GetColorTable(0);
       if(!ct)
@@ -4551,7 +4507,7 @@ yyreduce:
     break;
 
   case 78:
-#line 856 "Gmsh.y"
+#line 812 "Gmsh.y"
     {
       GmshColorTable *ct = GetColorTable((int)(yyvsp[(3) - (9)].d));
       if(!ct)
@@ -4574,7 +4530,7 @@ yyreduce:
     break;
 
   case 79:
-#line 879 "Gmsh.y"
+#line 835 "Gmsh.y"
     {
       if(!strcmp((yyvsp[(1) - (5)].c),"Background"))
 	GModel::current()->getFields()->background_field = (int)(yyvsp[(4) - (5)].d);
@@ -4584,7 +4540,7 @@ yyreduce:
     break;
 
   case 80:
-#line 886 "Gmsh.y"
+#line 842 "Gmsh.y"
     {
       if(!GModel::current()->getFields()->newField((int)(yyvsp[(3) - (7)].d), (yyvsp[(6) - (7)].c)))
 	yymsg(0, "Cannot create field %i of type '%s'", (int)(yyvsp[(3) - (7)].d), (yyvsp[(6) - (7)].c));
@@ -4593,7 +4549,7 @@ yyreduce:
     break;
 
   case 81:
-#line 892 "Gmsh.y"
+#line 848 "Gmsh.y"
     {
       Field *field = GModel::current()->getFields()->get((int)(yyvsp[(3) - (9)].d));
       if(field){
@@ -4616,7 +4572,7 @@ yyreduce:
     break;
 
   case 82:
-#line 912 "Gmsh.y"
+#line 868 "Gmsh.y"
     {
       Field *field = GModel::current()->getFields()->get((int)(yyvsp[(3) - (9)].d));
       if(field){
@@ -4640,7 +4596,7 @@ yyreduce:
     break;
 
   case 83:
-#line 933 "Gmsh.y"
+#line 889 "Gmsh.y"
     {
       Field *field = GModel::current()->getFields()->get((int)(yyvsp[(3) - (11)].d));
       if(field){
@@ -4666,7 +4622,7 @@ yyreduce:
     break;
 
   case 84:
-#line 959 "Gmsh.y"
+#line 915 "Gmsh.y"
     {
 #if !defined(HAVE_NO_POST)
       try {
@@ -4681,7 +4637,7 @@ yyreduce:
     break;
 
   case 85:
-#line 971 "Gmsh.y"
+#line 927 "Gmsh.y"
     {
 #if !defined(HAVE_NO_POST)
       try {
@@ -4696,14 +4652,14 @@ yyreduce:
     break;
 
   case 86:
-#line 988 "Gmsh.y"
+#line 944 "Gmsh.y"
     { 
       (yyval.i) = (int)(yyvsp[(1) - (1)].d); 
     ;}
     break;
 
   case 87:
-#line 992 "Gmsh.y"
+#line 948 "Gmsh.y"
     { 
       (yyval.i) = GModel::current()->setPhysicalName
         (std::string((yyvsp[(1) - (1)].c)), curPhysDim, 
@@ -4713,14 +4669,14 @@ yyreduce:
     break;
 
   case 88:
-#line 1002 "Gmsh.y"
+#line 958 "Gmsh.y"
     {
       (yyval.l) = 0;
     ;}
     break;
 
   case 89:
-#line 1006 "Gmsh.y"
+#line 962 "Gmsh.y"
     {
       (yyval.l) = List_Create(1, 1, sizeof(Vertex*));
       Vertex *v = FindPoint((int)(yyvsp[(4) - (5)].d));
@@ -4733,21 +4689,21 @@ yyreduce:
     break;
 
   case 90:
-#line 1018 "Gmsh.y"
+#line 974 "Gmsh.y"
     {
       for(int i = 0; i < 4; i++) (yyval.v)[i] = 0.;
     ;}
     break;
 
   case 91:
-#line 1022 "Gmsh.y"
+#line 978 "Gmsh.y"
     {
       for(int i = 0; i < 4; i++) (yyval.v)[i] = (yyvsp[(2) - (2)].v)[i];
     ;}
     break;
 
   case 92:
-#line 1032 "Gmsh.y"
+#line 988 "Gmsh.y"
     {
       int num = (int)(yyvsp[(3) - (7)].d);
       if(FindPoint(num)){
@@ -4773,14 +4729,14 @@ yyreduce:
     break;
 
   case 93:
-#line 1055 "Gmsh.y"
+#line 1011 "Gmsh.y"
     {
       curPhysDim = 0;
     ;}
     break;
 
   case 94:
-#line 1059 "Gmsh.y"
+#line 1015 "Gmsh.y"
     {
       int num = (int)(yyvsp[(5) - (9)].i);
       if(FindPhysicalGroup(num, MSH_PHYSICAL_POINT)){
@@ -4799,7 +4755,7 @@ yyreduce:
     break;
 
   case 95:
-#line 1075 "Gmsh.y"
+#line 1031 "Gmsh.y"
     {      
       for(int i = 0; i < List_Nbr((yyvsp[(3) - (6)].l)); i++){
 	double d;
@@ -4821,7 +4777,7 @@ yyreduce:
     break;
 
   case 96:
-#line 1097 "Gmsh.y"
+#line 1053 "Gmsh.y"
     {
       int num = (int)(yyvsp[(3) - (7)].d);
       if(FindCurve(num)){
@@ -4842,7 +4798,7 @@ yyreduce:
     break;
 
   case 97:
-#line 1115 "Gmsh.y"
+#line 1071 "Gmsh.y"
     {
       int num = (int)(yyvsp[(3) - (7)].d);
       if(FindCurve(num)){
@@ -4863,7 +4819,7 @@ yyreduce:
     break;
 
   case 98:
-#line 1133 "Gmsh.y"
+#line 1089 "Gmsh.y"
     {
       int num = (int)(yyvsp[(3) - (8)].d);
       if(FindCurve(num)){
@@ -4896,7 +4852,7 @@ yyreduce:
     break;
 
   case 99:
-#line 1163 "Gmsh.y"
+#line 1119 "Gmsh.y"
     {
       int num = (int)(yyvsp[(3) - (8)].d);
       if(FindCurve(num)){
@@ -4929,7 +4885,7 @@ yyreduce:
     break;
 
   case 100:
-#line 1194 "Gmsh.y"
+#line 1150 "Gmsh.y"
     {
       int num = (int)(yyvsp[(3) - (17)].d);
       if(FindCurve(num)){
@@ -4951,7 +4907,7 @@ yyreduce:
     break;
 
   case 101:
-#line 1213 "Gmsh.y"
+#line 1169 "Gmsh.y"
     {
       int num = (int)(yyvsp[(3) - (7)].d);
       if(FindCurve(num)){
@@ -4972,7 +4928,7 @@ yyreduce:
     break;
 
   case 102:
-#line 1231 "Gmsh.y"
+#line 1187 "Gmsh.y"
     {
       int num = (int)(yyvsp[(3) - (7)].d);
       if(FindCurve(num)){
@@ -4993,7 +4949,7 @@ yyreduce:
     break;
 
   case 103:
-#line 1249 "Gmsh.y"
+#line 1205 "Gmsh.y"
     {
       int num = (int)(yyvsp[(3) - (11)].d);
       if(List_Nbr((yyvsp[(6) - (11)].l)) + (int)(yyvsp[(10) - (11)].d) + 1 != List_Nbr((yyvsp[(8) - (11)].l))){
@@ -5022,7 +4978,7 @@ yyreduce:
     break;
 
   case 104:
-#line 1275 "Gmsh.y"
+#line 1231 "Gmsh.y"
     {
       int num = (int)(yyvsp[(4) - (8)].d);
       if(FindEdgeLoop(num)){
@@ -5042,14 +4998,14 @@ yyreduce:
     break;
 
   case 105:
-#line 1292 "Gmsh.y"
+#line 1248 "Gmsh.y"
     {
       curPhysDim = 1;
     ;}
     break;
 
   case 106:
-#line 1296 "Gmsh.y"
+#line 1252 "Gmsh.y"
     {
       int num = (int)(yyvsp[(5) - (9)].i);
       if(FindPhysicalGroup(num, MSH_PHYSICAL_LINE)){
@@ -5068,7 +5024,7 @@ yyreduce:
     break;
 
   case 107:
-#line 1315 "Gmsh.y"
+#line 1271 "Gmsh.y"
     {
       int num = (int)(yyvsp[(4) - (8)].d);
       if(FindSurface(num)){
@@ -5089,7 +5045,7 @@ yyreduce:
     break;
 
   case 108:
-#line 1333 "Gmsh.y"
+#line 1289 "Gmsh.y"
     {
       int num = (int)(yyvsp[(4) - (9)].d), type = 0;
       if(FindSurface(num)){
@@ -5131,7 +5087,7 @@ yyreduce:
     break;
 
   case 109:
-#line 1372 "Gmsh.y"
+#line 1328 "Gmsh.y"
     {
       myGmshSurface = 0;
       (yyval.s).Type = 0;
@@ -5140,7 +5096,7 @@ yyreduce:
     break;
 
   case 110:
-#line 1378 "Gmsh.y"
+#line 1334 "Gmsh.y"
     {
       myGmshSurface = gmshSurface::getSurface((int)(yyvsp[(3) - (4)].d));
       (yyval.s).Type = 0;
@@ -5149,7 +5105,7 @@ yyreduce:
     break;
 
   case 111:
-#line 1384 "Gmsh.y"
+#line 1340 "Gmsh.y"
     {
       int num = (int)(yyvsp[(4) - (10)].d);
       myGmshSurface = gmshParametricSurface::NewParametricSurface(num, (yyvsp[(7) - (10)].c), (yyvsp[(8) - (10)].c), (yyvsp[(9) - (10)].c));
@@ -5159,7 +5115,7 @@ yyreduce:
     break;
 
   case 112:
-#line 1391 "Gmsh.y"
+#line 1347 "Gmsh.y"
     {
       int num = (int)(yyvsp[(3) - (7)].d);
       if (List_Nbr((yyvsp[(6) - (7)].l)) != 2){
@@ -5187,7 +5143,7 @@ yyreduce:
     break;
 
   case 113:
-#line 1416 "Gmsh.y"
+#line 1372 "Gmsh.y"
     {
       int num = (int)(yyvsp[(3) - (7)].d);
       if (List_Nbr((yyvsp[(6) - (7)].l)) != 2){
@@ -5215,7 +5171,7 @@ yyreduce:
     break;
 
   case 114:
-#line 1441 "Gmsh.y"
+#line 1397 "Gmsh.y"
     {
       int num = (int)(yyvsp[(4) - (8)].d);
       if(FindSurfaceLoop(num)){
@@ -5234,14 +5190,14 @@ yyreduce:
     break;
 
   case 115:
-#line 1457 "Gmsh.y"
+#line 1413 "Gmsh.y"
     {
       curPhysDim = 2;
     ;}
     break;
 
   case 116:
-#line 1461 "Gmsh.y"
+#line 1417 "Gmsh.y"
     {
       int num = (int)(yyvsp[(5) - (9)].i);
       if(FindPhysicalGroup(num, MSH_PHYSICAL_SURFACE)){
@@ -5260,7 +5216,7 @@ yyreduce:
     break;
 
   case 117:
-#line 1478 "Gmsh.y"
+#line 1434 "Gmsh.y"
     {
       int num = (int)(yyvsp[(4) - (8)].d);
       if(FindPhysicalGroup(num, MSH_PHYSICAL_VOLUME)){
@@ -5280,7 +5236,7 @@ yyreduce:
     break;
 
   case 118:
-#line 1496 "Gmsh.y"
+#line 1452 "Gmsh.y"
     {
       int num = (int)(yyvsp[(4) - (12)].d);
       if(FindPhysicalGroup(num, MSH_PHYSICAL_SURFACE)){
@@ -5310,7 +5266,7 @@ yyreduce:
     break;
 
   case 119:
-#line 1524 "Gmsh.y"
+#line 1480 "Gmsh.y"
     {
       int num = (int)(yyvsp[(4) - (8)].d);
       if(FindPhysicalGroup(num, MSH_PHYSICAL_LINE)){
@@ -5330,7 +5286,7 @@ yyreduce:
     break;
 
   case 120:
-#line 1544 "Gmsh.y"
+#line 1500 "Gmsh.y"
     {
       yymsg(0, "'Complex Volume' command is deprecated: use 'Volume' instead");
       int num = (int)(yyvsp[(4) - (8)].d);
@@ -5351,7 +5307,7 @@ yyreduce:
     break;
 
   case 121:
-#line 1562 "Gmsh.y"
+#line 1518 "Gmsh.y"
     {
       int num = (int)(yyvsp[(3) - (7)].d);
       if(FindVolume(num)){
@@ -5371,14 +5327,14 @@ yyreduce:
     break;
 
   case 122:
-#line 1579 "Gmsh.y"
+#line 1535 "Gmsh.y"
     {
       curPhysDim = 3;
     ;}
     break;
 
   case 123:
-#line 1583 "Gmsh.y"
+#line 1539 "Gmsh.y"
     {
       int num = (int)(yyvsp[(5) - (9)].i);
       if(FindPhysicalGroup(num, MSH_PHYSICAL_VOLUME)){
@@ -5397,7 +5353,7 @@ yyreduce:
     break;
 
   case 124:
-#line 1604 "Gmsh.y"
+#line 1560 "Gmsh.y"
     {
       TranslateShapes((yyvsp[(2) - (5)].v)[0], (yyvsp[(2) - (5)].v)[1], (yyvsp[(2) - (5)].v)[2], (yyvsp[(4) - (5)].l));
       (yyval.l) = (yyvsp[(4) - (5)].l);
@@ -5405,7 +5361,7 @@ yyreduce:
     break;
 
   case 125:
-#line 1609 "Gmsh.y"
+#line 1565 "Gmsh.y"
     {
       RotateShapes((yyvsp[(3) - (11)].v)[0], (yyvsp[(3) - (11)].v)[1], (yyvsp[(3) - (11)].v)[2], (yyvsp[(5) - (11)].v)[0], (yyvsp[(5) - (11)].v)[1], (yyvsp[(5) - (11)].v)[2], (yyvsp[(7) - (11)].d), (yyvsp[(10) - (11)].l));
       (yyval.l) = (yyvsp[(10) - (11)].l);
@@ -5413,7 +5369,7 @@ yyreduce:
     break;
 
   case 126:
-#line 1614 "Gmsh.y"
+#line 1570 "Gmsh.y"
     {
       SymmetryShapes((yyvsp[(2) - (5)].v)[0], (yyvsp[(2) - (5)].v)[1], (yyvsp[(2) - (5)].v)[2], (yyvsp[(2) - (5)].v)[3], (yyvsp[(4) - (5)].l));
       (yyval.l) = (yyvsp[(4) - (5)].l);
@@ -5421,7 +5377,7 @@ yyreduce:
     break;
 
   case 127:
-#line 1619 "Gmsh.y"
+#line 1575 "Gmsh.y"
     {
       DilatShapes((yyvsp[(3) - (9)].v)[0], (yyvsp[(3) - (9)].v)[1], (yyvsp[(3) - (9)].v)[2], (yyvsp[(5) - (9)].d), (yyvsp[(8) - (9)].l));
       (yyval.l) = (yyvsp[(8) - (9)].l);
@@ -5429,7 +5385,7 @@ yyreduce:
     break;
 
   case 128:
-#line 1624 "Gmsh.y"
+#line 1580 "Gmsh.y"
     {
       (yyval.l) = List_Create(3, 3, sizeof(Shape));
       if(!strcmp((yyvsp[(1) - (4)].c), "Duplicata")){
@@ -5452,7 +5408,7 @@ yyreduce:
     break;
 
   case 129:
-#line 1644 "Gmsh.y"
+#line 1600 "Gmsh.y"
     { 
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       IntersectCurvesWithSurface((yyvsp[(4) - (9)].l), (int)(yyvsp[(8) - (9)].d), (yyval.l));
@@ -5461,7 +5417,7 @@ yyreduce:
     break;
 
   case 130:
-#line 1650 "Gmsh.y"
+#line 1606 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape*));
       List_T *tmp = ListOfDouble2ListOfInt((yyvsp[(7) - (9)].l));
@@ -5472,31 +5428,31 @@ yyreduce:
     break;
 
   case 131:
-#line 1660 "Gmsh.y"
+#line 1616 "Gmsh.y"
     { (yyval.l) = (yyvsp[(1) - (1)].l); ;}
     break;
 
   case 132:
-#line 1661 "Gmsh.y"
+#line 1617 "Gmsh.y"
     { (yyval.l) = (yyvsp[(1) - (1)].l); ;}
     break;
 
   case 133:
-#line 1666 "Gmsh.y"
+#line 1622 "Gmsh.y"
     {
       (yyval.l) = List_Create(3, 3, sizeof(Shape));
     ;}
     break;
 
   case 134:
-#line 1670 "Gmsh.y"
+#line 1626 "Gmsh.y"
     {
       List_Add((yyval.l), &(yyvsp[(2) - (2)].s));
     ;}
     break;
 
   case 135:
-#line 1674 "Gmsh.y"
+#line 1630 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(4) - (6)].l)); i++){
 	double d;
@@ -5522,7 +5478,7 @@ yyreduce:
     break;
 
   case 136:
-#line 1697 "Gmsh.y"
+#line 1653 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(4) - (6)].l)); i++){
 	double d;
@@ -5548,7 +5504,7 @@ yyreduce:
     break;
 
   case 137:
-#line 1720 "Gmsh.y"
+#line 1676 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(4) - (6)].l)); i++){
 	double d;
@@ -5574,7 +5530,7 @@ yyreduce:
     break;
 
   case 138:
-#line 1743 "Gmsh.y"
+#line 1699 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(4) - (6)].l)); i++){
 	double d;
@@ -5600,7 +5556,7 @@ yyreduce:
     break;
 
   case 139:
-#line 1771 "Gmsh.y"
+#line 1727 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(3) - (4)].l)); i++){
 	Shape TheShape;
@@ -5612,14 +5568,14 @@ yyreduce:
     break;
 
   case 140:
-#line 1780 "Gmsh.y"
+#line 1736 "Gmsh.y"
     {
       GModel::current()->getFields()->deleteField((int)(yyvsp[(4) - (6)].d));
     ;}
     break;
 
   case 141:
-#line 1784 "Gmsh.y"
+#line 1740 "Gmsh.y"
     {
 #if !defined(HAVE_NO_POST)
       if(!strcmp((yyvsp[(2) - (6)].c), "View")){
@@ -5637,7 +5593,7 @@ yyreduce:
     break;
 
   case 142:
-#line 1799 "Gmsh.y"
+#line 1755 "Gmsh.y"
     {
       if(!strcmp((yyvsp[(2) - (3)].c), "Meshes") || !strcmp((yyvsp[(2) - (3)].c), "All")){
         for(unsigned int i = 0; i < GModel::list.size(); i++){
@@ -5667,7 +5623,7 @@ yyreduce:
     break;
 
   case 143:
-#line 1826 "Gmsh.y"
+#line 1782 "Gmsh.y"
     {
 #if !defined(HAVE_NO_POST)
       if(!strcmp((yyvsp[(2) - (4)].c), "Empty") && !strcmp((yyvsp[(3) - (4)].c), "Views")){
@@ -5682,7 +5638,7 @@ yyreduce:
     break;
 
   case 144:
-#line 1843 "Gmsh.y"
+#line 1799 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(4) - (5)].l)); i++){
 	Shape TheShape;
@@ -5694,7 +5650,7 @@ yyreduce:
     break;
 
   case 145:
-#line 1857 "Gmsh.y"
+#line 1813 "Gmsh.y"
     {
       for(int i = 0; i < 4; i++)
 	VisibilityShape((yyvsp[(2) - (3)].c), i, 1);
@@ -5703,7 +5659,7 @@ yyreduce:
     break;
 
   case 146:
-#line 1863 "Gmsh.y"
+#line 1819 "Gmsh.y"
     {
       for(int i = 0; i < 4; i++)
 	VisibilityShape((yyvsp[(2) - (3)].c), i, 0);
@@ -5712,7 +5668,7 @@ yyreduce:
     break;
 
   case 147:
-#line 1869 "Gmsh.y"
+#line 1825 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(3) - (4)].l)); i++){
 	Shape TheShape;
@@ -5724,7 +5680,7 @@ yyreduce:
     break;
 
   case 148:
-#line 1878 "Gmsh.y"
+#line 1834 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(3) - (4)].l)); i++){
 	Shape TheShape;
@@ -5736,7 +5692,7 @@ yyreduce:
     break;
 
   case 149:
-#line 1892 "Gmsh.y"
+#line 1848 "Gmsh.y"
     {
       if(!strcmp((yyvsp[(1) - (3)].c), "Include")){
 	char tmpstring[1024];
@@ -5787,7 +5743,7 @@ yyreduce:
     break;
 
   case 150:
-#line 1940 "Gmsh.y"
+#line 1896 "Gmsh.y"
     {
 #if !defined(HAVE_NO_POST)
       if(!strcmp((yyvsp[(1) - (7)].c), "Save") && !strcmp((yyvsp[(2) - (7)].c), "View")){
@@ -5808,7 +5764,7 @@ yyreduce:
     break;
 
   case 151:
-#line 1958 "Gmsh.y"
+#line 1914 "Gmsh.y"
     {
 #if !defined(HAVE_NO_POST)
       if(!strcmp((yyvsp[(1) - (7)].c), "Background") && !strcmp((yyvsp[(2) - (7)].c), "Mesh")  && !strcmp((yyvsp[(3) - (7)].c), "View")){
@@ -5826,7 +5782,7 @@ yyreduce:
     break;
 
   case 152:
-#line 1973 "Gmsh.y"
+#line 1929 "Gmsh.y"
     {
       if(!strcmp((yyvsp[(1) - (3)].c), "Sleep")){
 	SleepInSeconds((yyvsp[(2) - (3)].d));
@@ -5848,7 +5804,7 @@ yyreduce:
     break;
 
   case 153:
-#line 1992 "Gmsh.y"
+#line 1948 "Gmsh.y"
     {
 #if !defined(HAVE_NO_POST)
        try {
@@ -5863,7 +5819,7 @@ yyreduce:
     break;
 
   case 154:
-#line 2004 "Gmsh.y"
+#line 1960 "Gmsh.y"
     {
 #if !defined(HAVE_NO_POST)
       if(!strcmp((yyvsp[(2) - (3)].c), "ElementsFromAllViews"))
@@ -5890,14 +5846,14 @@ yyreduce:
     break;
 
   case 155:
-#line 2028 "Gmsh.y"
+#line 1984 "Gmsh.y"
     {
       exit(0);
     ;}
     break;
 
   case 156:
-#line 2032 "Gmsh.y"
+#line 1988 "Gmsh.y"
     {
       CTX::instance()->forcedBBox = 0;
       SetBoundingBox();
@@ -5905,7 +5861,7 @@ yyreduce:
     break;
 
   case 157:
-#line 2037 "Gmsh.y"
+#line 1993 "Gmsh.y"
     {
       CTX::instance()->forcedBBox = 1;
       SetBoundingBox((yyvsp[(3) - (15)].d), (yyvsp[(5) - (15)].d), (yyvsp[(7) - (15)].d), (yyvsp[(9) - (15)].d), (yyvsp[(11) - (15)].d), (yyvsp[(13) - (15)].d));
@@ -5913,7 +5869,7 @@ yyreduce:
     break;
 
   case 158:
-#line 2042 "Gmsh.y"
+#line 1998 "Gmsh.y"
     {
 #if defined(HAVE_FLTK)
       Draw();
@@ -5922,14 +5878,14 @@ yyreduce:
     break;
 
   case 159:
-#line 2048 "Gmsh.y"
+#line 2004 "Gmsh.y"
     {
        GModel::current()->createTopologyFromMesh();
     ;}
     break;
 
   case 160:
-#line 2057 "Gmsh.y"
+#line 2013 "Gmsh.y"
     {
       LoopControlVariablesTab[ImbricatedLoop][0] = (yyvsp[(3) - (6)].d);
       LoopControlVariablesTab[ImbricatedLoop][1] = (yyvsp[(5) - (6)].d);
@@ -5949,7 +5905,7 @@ yyreduce:
     break;
 
   case 161:
-#line 2074 "Gmsh.y"
+#line 2030 "Gmsh.y"
     {
       LoopControlVariablesTab[ImbricatedLoop][0] = (yyvsp[(3) - (8)].d);
       LoopControlVariablesTab[ImbricatedLoop][1] = (yyvsp[(5) - (8)].d);
@@ -5969,7 +5925,7 @@ yyreduce:
     break;
 
   case 162:
-#line 2091 "Gmsh.y"
+#line 2047 "Gmsh.y"
     {
       LoopControlVariablesTab[ImbricatedLoop][0] = (yyvsp[(5) - (8)].d);
       LoopControlVariablesTab[ImbricatedLoop][1] = (yyvsp[(7) - (8)].d);
@@ -5991,7 +5947,7 @@ yyreduce:
     break;
 
   case 163:
-#line 2110 "Gmsh.y"
+#line 2066 "Gmsh.y"
     {
       LoopControlVariablesTab[ImbricatedLoop][0] = (yyvsp[(5) - (10)].d);
       LoopControlVariablesTab[ImbricatedLoop][1] = (yyvsp[(7) - (10)].d);
@@ -6013,7 +5969,7 @@ yyreduce:
     break;
 
   case 164:
-#line 2129 "Gmsh.y"
+#line 2085 "Gmsh.y"
     {
       if(ImbricatedLoop <= 0){
 	yymsg(0, "Invalid For/EndFor loop");
@@ -6044,7 +6000,7 @@ yyreduce:
     break;
 
   case 165:
-#line 2157 "Gmsh.y"
+#line 2113 "Gmsh.y"
     {
       if(!FunctionManager::Instance()->createFunction
          ((yyvsp[(2) - (2)].c), gmsh_yyin, gmsh_yyname, gmsh_yylineno))
@@ -6055,7 +6011,7 @@ yyreduce:
     break;
 
   case 166:
-#line 2165 "Gmsh.y"
+#line 2121 "Gmsh.y"
     {
       if(!FunctionManager::Instance()->leaveFunction
          (&gmsh_yyin, gmsh_yyname, gmsh_yylineno))
@@ -6064,7 +6020,7 @@ yyreduce:
     break;
 
   case 167:
-#line 2171 "Gmsh.y"
+#line 2127 "Gmsh.y"
     {
       if(!FunctionManager::Instance()->enterFunction
          ((yyvsp[(2) - (3)].c), &gmsh_yyin, gmsh_yyname, gmsh_yylineno))
@@ -6074,20 +6030,20 @@ yyreduce:
     break;
 
   case 168:
-#line 2178 "Gmsh.y"
+#line 2134 "Gmsh.y"
     {
       if(!(yyvsp[(3) - (4)].d)) skip_until("If", "EndIf");
     ;}
     break;
 
   case 169:
-#line 2182 "Gmsh.y"
+#line 2138 "Gmsh.y"
     {
     ;}
     break;
 
   case 170:
-#line 2191 "Gmsh.y"
+#line 2147 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShapes(TRANSLATE, (yyvsp[(4) - (5)].l), 
@@ -6098,7 +6054,7 @@ yyreduce:
     break;
 
   case 171:
-#line 2199 "Gmsh.y"
+#line 2155 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShapes(ROTATE, (yyvsp[(10) - (11)].l), 
@@ -6109,7 +6065,7 @@ yyreduce:
     break;
 
   case 172:
-#line 2207 "Gmsh.y"
+#line 2163 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShapes(TRANSLATE_ROTATE, (yyvsp[(12) - (13)].l), 
@@ -6120,14 +6076,14 @@ yyreduce:
     break;
 
   case 173:
-#line 2215 "Gmsh.y"
+#line 2171 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
     ;}
     break;
 
   case 174:
-#line 2219 "Gmsh.y"
+#line 2175 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShapes(TRANSLATE, (yyvsp[(4) - (7)].l), 
@@ -6138,14 +6094,14 @@ yyreduce:
     break;
 
   case 175:
-#line 2227 "Gmsh.y"
+#line 2183 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
     ;}
     break;
 
   case 176:
-#line 2231 "Gmsh.y"
+#line 2187 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShapes(ROTATE, (yyvsp[(10) - (13)].l), 
@@ -6156,14 +6112,14 @@ yyreduce:
     break;
 
   case 177:
-#line 2239 "Gmsh.y"
+#line 2195 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
     ;}
     break;
 
   case 178:
-#line 2243 "Gmsh.y"
+#line 2199 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShapes(TRANSLATE_ROTATE, (yyvsp[(12) - (15)].l), 
@@ -6174,14 +6130,14 @@ yyreduce:
     break;
 
   case 179:
-#line 2251 "Gmsh.y"
+#line 2207 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
     ;}
     break;
 
   case 180:
-#line 2255 "Gmsh.y"
+#line 2211 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShapes(BOUNDARY_LAYER, (yyvsp[(3) - (6)].l), 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
@@ -6191,7 +6147,7 @@ yyreduce:
     break;
 
   case 181:
-#line 2264 "Gmsh.y"
+#line 2220 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE, MSH_POINT, (int)(yyvsp[(4) - (8)].d), 
@@ -6201,7 +6157,7 @@ yyreduce:
     break;
 
   case 182:
-#line 2271 "Gmsh.y"
+#line 2227 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE, MSH_SEGM_LINE, (int)(yyvsp[(4) - (8)].d), 
@@ -6211,7 +6167,7 @@ yyreduce:
     break;
 
   case 183:
-#line 2278 "Gmsh.y"
+#line 2234 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE, MSH_SURF_PLAN, (int)(yyvsp[(4) - (8)].d), 
@@ -6221,7 +6177,7 @@ yyreduce:
     break;
 
   case 184:
-#line 2285 "Gmsh.y"
+#line 2241 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(ROTATE, MSH_POINT, (int)(yyvsp[(4) - (12)].d), 
@@ -6231,7 +6187,7 @@ yyreduce:
     break;
 
   case 185:
-#line 2292 "Gmsh.y"
+#line 2248 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(ROTATE, MSH_SEGM_LINE, (int)(yyvsp[(4) - (12)].d), 
@@ -6241,7 +6197,7 @@ yyreduce:
     break;
 
   case 186:
-#line 2299 "Gmsh.y"
+#line 2255 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(ROTATE, MSH_SURF_PLAN, (int)(yyvsp[(4) - (12)].d), 
@@ -6251,7 +6207,7 @@ yyreduce:
     break;
 
   case 187:
-#line 2306 "Gmsh.y"
+#line 2262 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE_ROTATE, MSH_POINT, (int)(yyvsp[(4) - (14)].d), 
@@ -6261,7 +6217,7 @@ yyreduce:
     break;
 
   case 188:
-#line 2313 "Gmsh.y"
+#line 2269 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE_ROTATE, MSH_SEGM_LINE, (int)(yyvsp[(4) - (14)].d), 
@@ -6271,7 +6227,7 @@ yyreduce:
     break;
 
   case 189:
-#line 2320 "Gmsh.y"
+#line 2276 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE_ROTATE, MSH_SURF_PLAN, (int)(yyvsp[(4) - (14)].d), 
@@ -6281,14 +6237,14 @@ yyreduce:
     break;
 
   case 190:
-#line 2327 "Gmsh.y"
+#line 2283 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
     ;}
     break;
 
   case 191:
-#line 2331 "Gmsh.y"
+#line 2287 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE, MSH_POINT, (int)(yyvsp[(4) - (12)].d), 
@@ -6298,14 +6254,14 @@ yyreduce:
     break;
 
   case 192:
-#line 2338 "Gmsh.y"
+#line 2294 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
     ;}
     break;
 
   case 193:
-#line 2342 "Gmsh.y"
+#line 2298 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE, MSH_SEGM_LINE, (int)(yyvsp[(4) - (12)].d), 
@@ -6315,14 +6271,14 @@ yyreduce:
     break;
 
   case 194:
-#line 2349 "Gmsh.y"
+#line 2305 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
     ;}
     break;
 
   case 195:
-#line 2353 "Gmsh.y"
+#line 2309 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE, MSH_SURF_PLAN, (int)(yyvsp[(4) - (12)].d), 
@@ -6332,14 +6288,14 @@ yyreduce:
     break;
 
   case 196:
-#line 2360 "Gmsh.y"
+#line 2316 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
     ;}
     break;
 
   case 197:
-#line 2364 "Gmsh.y"
+#line 2320 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(ROTATE, MSH_POINT, (int)(yyvsp[(4) - (16)].d), 
@@ -6349,14 +6305,14 @@ yyreduce:
     break;
 
   case 198:
-#line 2371 "Gmsh.y"
+#line 2327 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
     ;}
     break;
 
   case 199:
-#line 2375 "Gmsh.y"
+#line 2331 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(ROTATE, MSH_SEGM_LINE, (int)(yyvsp[(4) - (16)].d), 
@@ -6366,14 +6322,14 @@ yyreduce:
     break;
 
   case 200:
-#line 2382 "Gmsh.y"
+#line 2338 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
     ;}
     break;
 
   case 201:
-#line 2386 "Gmsh.y"
+#line 2342 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(ROTATE, MSH_SURF_PLAN, (int)(yyvsp[(4) - (16)].d), 
@@ -6383,14 +6339,14 @@ yyreduce:
     break;
 
   case 202:
-#line 2393 "Gmsh.y"
+#line 2349 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
     ;}
     break;
 
   case 203:
-#line 2397 "Gmsh.y"
+#line 2353 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE_ROTATE, MSH_POINT, (int)(yyvsp[(4) - (18)].d), 
@@ -6400,14 +6356,14 @@ yyreduce:
     break;
 
   case 204:
-#line 2404 "Gmsh.y"
+#line 2360 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
     ;}
     break;
 
   case 205:
-#line 2408 "Gmsh.y"
+#line 2364 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE_ROTATE, MSH_SEGM_LINE, (int)(yyvsp[(4) - (18)].d), 
@@ -6417,14 +6373,14 @@ yyreduce:
     break;
 
   case 206:
-#line 2415 "Gmsh.y"
+#line 2371 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
     ;}
     break;
 
   case 207:
-#line 2419 "Gmsh.y"
+#line 2375 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE_ROTATE, MSH_SURF_PLAN, (int)(yyvsp[(4) - (18)].d), 
@@ -6434,19 +6390,19 @@ yyreduce:
     break;
 
   case 208:
-#line 2430 "Gmsh.y"
+#line 2386 "Gmsh.y"
     {
     ;}
     break;
 
   case 209:
-#line 2433 "Gmsh.y"
+#line 2389 "Gmsh.y"
     {
     ;}
     break;
 
   case 210:
-#line 2439 "Gmsh.y"
+#line 2395 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = true;
       extr.mesh.NbLayer = 1;
@@ -6458,7 +6414,7 @@ yyreduce:
     break;
 
   case 211:
-#line 2448 "Gmsh.y"
+#line 2404 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = true;
       extr.mesh.NbLayer = List_Nbr((yyvsp[(3) - (7)].l));
@@ -6481,7 +6437,7 @@ yyreduce:
     break;
 
   case 212:
-#line 2468 "Gmsh.y"
+#line 2424 "Gmsh.y"
     {
       yymsg(0, "Explicit region numbers in layers are deprecated");
       extr.mesh.ExtrudeMesh = true;
@@ -6507,14 +6463,14 @@ yyreduce:
     break;
 
   case 213:
-#line 2491 "Gmsh.y"
+#line 2447 "Gmsh.y"
     {
       extr.mesh.Recombine = true;
     ;}
     break;
 
   case 214:
-#line 2495 "Gmsh.y"
+#line 2451 "Gmsh.y"
     {
       int num = (int)(yyvsp[(3) - (9)].d);
       if(FindSurface(num)){
@@ -6536,14 +6492,14 @@ yyreduce:
     break;
 
   case 215:
-#line 2518 "Gmsh.y"
+#line 2474 "Gmsh.y"
     {
       (yyval.v)[0] = (yyval.v)[1] = 1.;
     ;}
     break;
 
   case 216:
-#line 2522 "Gmsh.y"
+#line 2478 "Gmsh.y"
     {
       if(!strcmp((yyvsp[(2) - (3)].c), "Progression") || !strcmp((yyvsp[(2) - (3)].c), "Power"))
         (yyval.v)[0] = 1.;
@@ -6559,14 +6515,14 @@ yyreduce:
     break;
 
   case 217:
-#line 2537 "Gmsh.y"
+#line 2493 "Gmsh.y"
     {
       (yyval.i) = -1; // left
     ;}
     break;
 
   case 218:
-#line 2541 "Gmsh.y"
+#line 2497 "Gmsh.y"
     {
       if(!strcmp((yyvsp[(1) - (1)].c), "Right"))
         (yyval.i) = 1;
@@ -6579,35 +6535,35 @@ yyreduce:
     break;
 
   case 219:
-#line 2553 "Gmsh.y"
+#line 2509 "Gmsh.y"
     {
      (yyval.l) = List_Create(1, 1, sizeof(double));
    ;}
     break;
 
   case 220:
-#line 2557 "Gmsh.y"
+#line 2513 "Gmsh.y"
     {
      (yyval.l) = (yyvsp[(2) - (2)].l);
    ;}
     break;
 
   case 221:
-#line 2562 "Gmsh.y"
+#line 2518 "Gmsh.y"
     {
       (yyval.i) = 45;
     ;}
     break;
 
   case 222:
-#line 2566 "Gmsh.y"
+#line 2522 "Gmsh.y"
     {
       (yyval.i) = (int)(yyvsp[(2) - (2)].d);
     ;}
     break;
 
   case 223:
-#line 2573 "Gmsh.y"
+#line 2529 "Gmsh.y"
     {
       int type = (int)(yyvsp[(6) - (7)].v)[0];
       double coef = fabs((yyvsp[(6) - (7)].v)[1]);
@@ -6666,7 +6622,7 @@ yyreduce:
     break;
 
   case 224:
-#line 2629 "Gmsh.y"
+#line 2585 "Gmsh.y"
     {
       int k = List_Nbr((yyvsp[(4) - (6)].l));
       if(k != 0 && k != 3 && k != 4){
@@ -6739,7 +6695,7 @@ yyreduce:
     break;
 
   case 225:
-#line 2699 "Gmsh.y"
+#line 2655 "Gmsh.y"
     {
       yymsg(1, "Elliptic Surface is deprecated: use Transfinite instead (with smoothing)");
       List_Delete((yyvsp[(7) - (8)].l));
@@ -6747,7 +6703,7 @@ yyreduce:
     break;
 
   case 226:
-#line 2704 "Gmsh.y"
+#line 2660 "Gmsh.y"
     {
       int k = List_Nbr((yyvsp[(4) - (5)].l));
       if(k != 0 && k != 6 && k != 8){
@@ -6817,7 +6773,7 @@ yyreduce:
     break;
 
   case 227:
-#line 2771 "Gmsh.y"
+#line 2727 "Gmsh.y"
     {
       if(!(yyvsp[(3) - (5)].l)){
 	List_T *tmp = Tree2List(GModel::current()->getGEOInternals()->Surfaces);
@@ -6863,7 +6819,7 @@ yyreduce:
     break;
 
   case 228:
-#line 2814 "Gmsh.y"
+#line 2770 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(3) - (6)].l)); i++){
 	double d;
@@ -6886,7 +6842,7 @@ yyreduce:
     break;
 
   case 229:
-#line 2840 "Gmsh.y"
+#line 2796 "Gmsh.y"
     { 
       Surface *s = FindSurface((int)(yyvsp[(8) - (10)].d));
       if(s){
@@ -6912,7 +6868,7 @@ yyreduce:
     break;
 
   case 230:
-#line 2863 "Gmsh.y"
+#line 2819 "Gmsh.y"
     {
       Surface *s = FindSurface((int)(yyvsp[(8) - (10)].d));
       if(s){
@@ -6938,26 +6894,26 @@ yyreduce:
     break;
 
   case 231:
-#line 2886 "Gmsh.y"
+#line 2842 "Gmsh.y"
     {
     ;}
     break;
 
   case 232:
-#line 2889 "Gmsh.y"
+#line 2845 "Gmsh.y"
     {
     ;}
     break;
 
   case 233:
-#line 2898 "Gmsh.y"
+#line 2854 "Gmsh.y"
     { 
       ReplaceAllDuplicates();
     ;}
     break;
 
   case 234:
-#line 2902 "Gmsh.y"
+#line 2858 "Gmsh.y"
     { 
       if(!strcmp((yyvsp[(2) - (3)].c), "Geometry"))
         ReplaceAllDuplicates();
@@ -6970,47 +6926,47 @@ yyreduce:
     break;
 
   case 235:
-#line 2917 "Gmsh.y"
+#line 2873 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (1)].d);           ;}
     break;
 
   case 236:
-#line 2918 "Gmsh.y"
+#line 2874 "Gmsh.y"
     { (yyval.d) = (yyvsp[(2) - (3)].d);           ;}
     break;
 
   case 237:
-#line 2919 "Gmsh.y"
+#line 2875 "Gmsh.y"
     { (yyval.d) = -(yyvsp[(2) - (2)].d);          ;}
     break;
 
   case 238:
-#line 2920 "Gmsh.y"
+#line 2876 "Gmsh.y"
     { (yyval.d) = (yyvsp[(2) - (2)].d);           ;}
     break;
 
   case 239:
-#line 2921 "Gmsh.y"
+#line 2877 "Gmsh.y"
     { (yyval.d) = !(yyvsp[(2) - (2)].d);          ;}
     break;
 
   case 240:
-#line 2922 "Gmsh.y"
+#line 2878 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) - (yyvsp[(3) - (3)].d);      ;}
     break;
 
   case 241:
-#line 2923 "Gmsh.y"
+#line 2879 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) + (yyvsp[(3) - (3)].d);      ;}
     break;
 
   case 242:
-#line 2924 "Gmsh.y"
+#line 2880 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) * (yyvsp[(3) - (3)].d);      ;}
     break;
 
   case 243:
-#line 2926 "Gmsh.y"
+#line 2882 "Gmsh.y"
     { 
       if(!(yyvsp[(3) - (3)].d))
 	yymsg(0, "Division by zero in '%g / %g'", (yyvsp[(1) - (3)].d), (yyvsp[(3) - (3)].d));
@@ -7020,307 +6976,307 @@ yyreduce:
     break;
 
   case 244:
-#line 2932 "Gmsh.y"
+#line 2888 "Gmsh.y"
     { (yyval.d) = (int)(yyvsp[(1) - (3)].d) % (int)(yyvsp[(3) - (3)].d);  ;}
     break;
 
   case 245:
-#line 2933 "Gmsh.y"
+#line 2889 "Gmsh.y"
     { (yyval.d) = pow((yyvsp[(1) - (3)].d), (yyvsp[(3) - (3)].d));  ;}
     break;
 
   case 246:
-#line 2934 "Gmsh.y"
+#line 2890 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) < (yyvsp[(3) - (3)].d);      ;}
     break;
 
   case 247:
-#line 2935 "Gmsh.y"
+#line 2891 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) > (yyvsp[(3) - (3)].d);      ;}
     break;
 
   case 248:
-#line 2936 "Gmsh.y"
+#line 2892 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) <= (yyvsp[(3) - (3)].d);     ;}
     break;
 
   case 249:
-#line 2937 "Gmsh.y"
+#line 2893 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) >= (yyvsp[(3) - (3)].d);     ;}
     break;
 
   case 250:
-#line 2938 "Gmsh.y"
+#line 2894 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) == (yyvsp[(3) - (3)].d);     ;}
     break;
 
   case 251:
-#line 2939 "Gmsh.y"
+#line 2895 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) != (yyvsp[(3) - (3)].d);     ;}
     break;
 
   case 252:
-#line 2940 "Gmsh.y"
+#line 2896 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) && (yyvsp[(3) - (3)].d);     ;}
     break;
 
   case 253:
-#line 2941 "Gmsh.y"
+#line 2897 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) || (yyvsp[(3) - (3)].d);     ;}
     break;
 
   case 254:
-#line 2942 "Gmsh.y"
+#line 2898 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (5)].d) ? (yyvsp[(3) - (5)].d) : (yyvsp[(5) - (5)].d); ;}
     break;
 
   case 255:
-#line 2943 "Gmsh.y"
+#line 2899 "Gmsh.y"
     { (yyval.d) = exp((yyvsp[(3) - (4)].d));      ;}
     break;
 
   case 256:
-#line 2944 "Gmsh.y"
+#line 2900 "Gmsh.y"
     { (yyval.d) = log((yyvsp[(3) - (4)].d));      ;}
     break;
 
   case 257:
-#line 2945 "Gmsh.y"
+#line 2901 "Gmsh.y"
     { (yyval.d) = log10((yyvsp[(3) - (4)].d));    ;}
     break;
 
   case 258:
-#line 2946 "Gmsh.y"
+#line 2902 "Gmsh.y"
     { (yyval.d) = sqrt((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 259:
-#line 2947 "Gmsh.y"
+#line 2903 "Gmsh.y"
     { (yyval.d) = sin((yyvsp[(3) - (4)].d));      ;}
     break;
 
   case 260:
-#line 2948 "Gmsh.y"
+#line 2904 "Gmsh.y"
     { (yyval.d) = asin((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 261:
-#line 2949 "Gmsh.y"
+#line 2905 "Gmsh.y"
     { (yyval.d) = cos((yyvsp[(3) - (4)].d));      ;}
     break;
 
   case 262:
-#line 2950 "Gmsh.y"
+#line 2906 "Gmsh.y"
     { (yyval.d) = acos((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 263:
-#line 2951 "Gmsh.y"
+#line 2907 "Gmsh.y"
     { (yyval.d) = tan((yyvsp[(3) - (4)].d));      ;}
     break;
 
   case 264:
-#line 2952 "Gmsh.y"
+#line 2908 "Gmsh.y"
     { (yyval.d) = atan((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 265:
-#line 2953 "Gmsh.y"
+#line 2909 "Gmsh.y"
     { (yyval.d) = atan2((yyvsp[(3) - (6)].d), (yyvsp[(5) - (6)].d));;}
     break;
 
   case 266:
-#line 2954 "Gmsh.y"
+#line 2910 "Gmsh.y"
     { (yyval.d) = sinh((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 267:
-#line 2955 "Gmsh.y"
+#line 2911 "Gmsh.y"
     { (yyval.d) = cosh((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 268:
-#line 2956 "Gmsh.y"
+#line 2912 "Gmsh.y"
     { (yyval.d) = tanh((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 269:
-#line 2957 "Gmsh.y"
+#line 2913 "Gmsh.y"
     { (yyval.d) = fabs((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 270:
-#line 2958 "Gmsh.y"
+#line 2914 "Gmsh.y"
     { (yyval.d) = floor((yyvsp[(3) - (4)].d));    ;}
     break;
 
   case 271:
-#line 2959 "Gmsh.y"
+#line 2915 "Gmsh.y"
     { (yyval.d) = ceil((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 272:
-#line 2960 "Gmsh.y"
+#line 2916 "Gmsh.y"
     { (yyval.d) = fmod((yyvsp[(3) - (6)].d), (yyvsp[(5) - (6)].d)); ;}
     break;
 
   case 273:
-#line 2961 "Gmsh.y"
+#line 2917 "Gmsh.y"
     { (yyval.d) = fmod((yyvsp[(3) - (6)].d), (yyvsp[(5) - (6)].d)); ;}
     break;
 
   case 274:
-#line 2962 "Gmsh.y"
+#line 2918 "Gmsh.y"
     { (yyval.d) = sqrt((yyvsp[(3) - (6)].d) * (yyvsp[(3) - (6)].d) + (yyvsp[(5) - (6)].d) * (yyvsp[(5) - (6)].d)); ;}
     break;
 
   case 275:
-#line 2963 "Gmsh.y"
+#line 2919 "Gmsh.y"
     { (yyval.d) = (yyvsp[(3) - (4)].d) * (double)rand() / (double)RAND_MAX; ;}
     break;
 
   case 276:
-#line 2965 "Gmsh.y"
+#line 2921 "Gmsh.y"
     { (yyval.d) = exp((yyvsp[(3) - (4)].d));      ;}
     break;
 
   case 277:
-#line 2966 "Gmsh.y"
+#line 2922 "Gmsh.y"
     { (yyval.d) = log((yyvsp[(3) - (4)].d));      ;}
     break;
 
   case 278:
-#line 2967 "Gmsh.y"
+#line 2923 "Gmsh.y"
     { (yyval.d) = log10((yyvsp[(3) - (4)].d));    ;}
     break;
 
   case 279:
-#line 2968 "Gmsh.y"
+#line 2924 "Gmsh.y"
     { (yyval.d) = sqrt((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 280:
-#line 2969 "Gmsh.y"
+#line 2925 "Gmsh.y"
     { (yyval.d) = sin((yyvsp[(3) - (4)].d));      ;}
     break;
 
   case 281:
-#line 2970 "Gmsh.y"
+#line 2926 "Gmsh.y"
     { (yyval.d) = asin((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 282:
-#line 2971 "Gmsh.y"
+#line 2927 "Gmsh.y"
     { (yyval.d) = cos((yyvsp[(3) - (4)].d));      ;}
     break;
 
   case 283:
-#line 2972 "Gmsh.y"
+#line 2928 "Gmsh.y"
     { (yyval.d) = acos((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 284:
-#line 2973 "Gmsh.y"
+#line 2929 "Gmsh.y"
     { (yyval.d) = tan((yyvsp[(3) - (4)].d));      ;}
     break;
 
   case 285:
-#line 2974 "Gmsh.y"
+#line 2930 "Gmsh.y"
     { (yyval.d) = atan((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 286:
-#line 2975 "Gmsh.y"
+#line 2931 "Gmsh.y"
     { (yyval.d) = atan2((yyvsp[(3) - (6)].d), (yyvsp[(5) - (6)].d));;}
     break;
 
   case 287:
-#line 2976 "Gmsh.y"
+#line 2932 "Gmsh.y"
     { (yyval.d) = sinh((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 288:
-#line 2977 "Gmsh.y"
+#line 2933 "Gmsh.y"
     { (yyval.d) = cosh((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 289:
-#line 2978 "Gmsh.y"
+#line 2934 "Gmsh.y"
     { (yyval.d) = tanh((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 290:
-#line 2979 "Gmsh.y"
+#line 2935 "Gmsh.y"
     { (yyval.d) = fabs((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 291:
-#line 2980 "Gmsh.y"
+#line 2936 "Gmsh.y"
     { (yyval.d) = floor((yyvsp[(3) - (4)].d));    ;}
     break;
 
   case 292:
-#line 2981 "Gmsh.y"
+#line 2937 "Gmsh.y"
     { (yyval.d) = ceil((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 293:
-#line 2982 "Gmsh.y"
+#line 2938 "Gmsh.y"
     { (yyval.d) = fmod((yyvsp[(3) - (6)].d), (yyvsp[(5) - (6)].d)); ;}
     break;
 
   case 294:
-#line 2983 "Gmsh.y"
+#line 2939 "Gmsh.y"
     { (yyval.d) = fmod((yyvsp[(3) - (6)].d), (yyvsp[(5) - (6)].d)); ;}
     break;
 
   case 295:
-#line 2984 "Gmsh.y"
+#line 2940 "Gmsh.y"
     { (yyval.d) = sqrt((yyvsp[(3) - (6)].d) * (yyvsp[(3) - (6)].d) + (yyvsp[(5) - (6)].d) * (yyvsp[(5) - (6)].d)); ;}
     break;
 
   case 296:
-#line 2985 "Gmsh.y"
+#line 2941 "Gmsh.y"
     { (yyval.d) = (yyvsp[(3) - (4)].d) * (double)rand() / (double)RAND_MAX; ;}
     break;
 
   case 297:
-#line 2994 "Gmsh.y"
+#line 2950 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (1)].d); ;}
     break;
 
   case 298:
-#line 2995 "Gmsh.y"
+#line 2951 "Gmsh.y"
     { (yyval.d) = 3.141592653589793; ;}
     break;
 
   case 299:
-#line 2996 "Gmsh.y"
+#line 2952 "Gmsh.y"
     { (yyval.d) = Msg::GetCommRank(); ;}
     break;
 
   case 300:
-#line 2997 "Gmsh.y"
+#line 2953 "Gmsh.y"
     { (yyval.d) = Msg::GetCommSize(); ;}
     break;
 
   case 301:
-#line 2998 "Gmsh.y"
+#line 2954 "Gmsh.y"
     { (yyval.d) = GetGmshMajorVersion(); ;}
     break;
 
   case 302:
-#line 2999 "Gmsh.y"
+#line 2955 "Gmsh.y"
     { (yyval.d) = GetGmshMinorVersion(); ;}
     break;
 
   case 303:
-#line 3000 "Gmsh.y"
+#line 2956 "Gmsh.y"
     { (yyval.d) = GetGmshPatchVersion(); ;}
     break;
 
   case 304:
-#line 3005 "Gmsh.y"
+#line 2961 "Gmsh.y"
     {
       if(!gmsh_yysymbols.count((yyvsp[(1) - (1)].c))){
 	yymsg(0, "Unknown variable '%s'", (yyvsp[(1) - (1)].c));
@@ -7333,7 +7289,7 @@ yyreduce:
     break;
 
   case 305:
-#line 3018 "Gmsh.y"
+#line 2974 "Gmsh.y"
     {
       char tmpstring[1024];
       sprintf(tmpstring, "%s_%d", (yyvsp[(1) - (5)].c), (int)(yyvsp[(4) - (5)].d)) ;
@@ -7348,7 +7304,7 @@ yyreduce:
     break;
 
   case 306:
-#line 3030 "Gmsh.y"
+#line 2986 "Gmsh.y"
     {
       int index = (int)(yyvsp[(3) - (4)].d);
       if(!gmsh_yysymbols.count((yyvsp[(1) - (4)].c))){
@@ -7366,7 +7322,7 @@ yyreduce:
     break;
 
   case 307:
-#line 3045 "Gmsh.y"
+#line 3001 "Gmsh.y"
     {
       if(!gmsh_yysymbols.count((yyvsp[(2) - (4)].c))){
 	yymsg(0, "Unknown variable '%s'", (yyvsp[(2) - (4)].c));
@@ -7379,7 +7335,7 @@ yyreduce:
     break;
 
   case 308:
-#line 3055 "Gmsh.y"
+#line 3011 "Gmsh.y"
     {
       if(!gmsh_yysymbols.count((yyvsp[(1) - (2)].c))){
 	yymsg(0, "Unknown variable '%s'", (yyvsp[(1) - (2)].c));
@@ -7392,7 +7348,7 @@ yyreduce:
     break;
 
   case 309:
-#line 3065 "Gmsh.y"
+#line 3021 "Gmsh.y"
     {
       int index = (int)(yyvsp[(3) - (5)].d);
       if(!gmsh_yysymbols.count((yyvsp[(1) - (5)].c))){
@@ -7410,7 +7366,7 @@ yyreduce:
     break;
 
   case 310:
-#line 3083 "Gmsh.y"
+#line 3039 "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));
@@ -7418,7 +7374,7 @@ yyreduce:
     break;
 
   case 311:
-#line 3088 "Gmsh.y"
+#line 3044 "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));
@@ -7426,7 +7382,7 @@ yyreduce:
     break;
 
   case 312:
-#line 3093 "Gmsh.y"
+#line 3049 "Gmsh.y"
     {
       double d = 0.;
       if(NumberOption(GMSH_GET, (yyvsp[(1) - (4)].c), 0, (yyvsp[(3) - (4)].c), d)){
@@ -7439,7 +7395,7 @@ yyreduce:
     break;
 
   case 313:
-#line 3103 "Gmsh.y"
+#line 3059 "Gmsh.y"
     {
       double d = 0.;
       if(NumberOption(GMSH_GET, (yyvsp[(1) - (7)].c), (int)(yyvsp[(3) - (7)].d), (yyvsp[(6) - (7)].c), d)){
@@ -7452,7 +7408,7 @@ yyreduce:
     break;
 
   case 314:
-#line 3113 "Gmsh.y"
+#line 3069 "Gmsh.y"
     { 
       (yyval.d) = Msg::GetValue((yyvsp[(3) - (6)].c), (yyvsp[(5) - (6)].d));
       Free((yyvsp[(3) - (6)].c));
@@ -7460,70 +7416,70 @@ yyreduce:
     break;
 
   case 315:
-#line 3121 "Gmsh.y"
+#line 3077 "Gmsh.y"
     {
       memcpy((yyval.v), (yyvsp[(1) - (1)].v), 5*sizeof(double));
     ;}
     break;
 
   case 316:
-#line 3125 "Gmsh.y"
+#line 3081 "Gmsh.y"
     {
       for(int i = 0; i < 5; i++) (yyval.v)[i] = -(yyvsp[(2) - (2)].v)[i];
     ;}
     break;
 
   case 317:
-#line 3129 "Gmsh.y"
+#line 3085 "Gmsh.y"
     { 
       for(int i = 0; i < 5; i++) (yyval.v)[i] = (yyvsp[(2) - (2)].v)[i];
     ;}
     break;
 
   case 318:
-#line 3133 "Gmsh.y"
+#line 3089 "Gmsh.y"
     { 
       for(int i = 0; i < 5; i++) (yyval.v)[i] = (yyvsp[(1) - (3)].v)[i] - (yyvsp[(3) - (3)].v)[i];
     ;}
     break;
 
   case 319:
-#line 3137 "Gmsh.y"
+#line 3093 "Gmsh.y"
     {
       for(int i = 0; i < 5; i++) (yyval.v)[i] = (yyvsp[(1) - (3)].v)[i] + (yyvsp[(3) - (3)].v)[i];
     ;}
     break;
 
   case 320:
-#line 3144 "Gmsh.y"
+#line 3100 "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);
     ;}
     break;
 
   case 321:
-#line 3148 "Gmsh.y"
+#line 3104 "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;
     ;}
     break;
 
   case 322:
-#line 3152 "Gmsh.y"
+#line 3108 "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;
     ;}
     break;
 
   case 323:
-#line 3156 "Gmsh.y"
+#line 3112 "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;
     ;}
     break;
 
   case 324:
-#line 3163 "Gmsh.y"
+#line 3119 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(List_T*));
       List_Add((yyval.l), &((yyvsp[(1) - (1)].l)));
@@ -7531,14 +7487,14 @@ yyreduce:
     break;
 
   case 325:
-#line 3168 "Gmsh.y"
+#line 3124 "Gmsh.y"
     {
       List_Add((yyval.l), &((yyvsp[(3) - (3)].l)));
     ;}
     break;
 
   case 326:
-#line 3175 "Gmsh.y"
+#line 3131 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(double));
       List_Add((yyval.l), &((yyvsp[(1) - (1)].d)));
@@ -7546,14 +7502,14 @@ yyreduce:
     break;
 
   case 327:
-#line 3180 "Gmsh.y"
+#line 3136 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(1) - (1)].l);
     ;}
     break;
 
   case 328:
-#line 3184 "Gmsh.y"
+#line 3140 "Gmsh.y"
     {
       // creates an empty list
       (yyval.l) = List_Create(2, 1, sizeof(double));
@@ -7561,14 +7517,14 @@ yyreduce:
     break;
 
   case 329:
-#line 3189 "Gmsh.y"
+#line 3145 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(2) - (3)].l);
     ;}
     break;
 
   case 330:
-#line 3193 "Gmsh.y"
+#line 3149 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(3) - (4)].l);
       for(int i = 0; i < List_Nbr((yyval.l)); i++){
@@ -7579,7 +7535,7 @@ yyreduce:
     break;
 
   case 331:
-#line 3201 "Gmsh.y"
+#line 3157 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(4) - (5)].l);
       for(int i = 0; i < List_Nbr((yyval.l)); i++){
@@ -7590,14 +7546,14 @@ yyreduce:
     break;
 
   case 332:
-#line 3212 "Gmsh.y"
+#line 3168 "Gmsh.y"
     { 
       (yyval.l) = (yyvsp[(1) - (1)].l); 
     ;}
     break;
 
   case 333:
-#line 3216 "Gmsh.y"
+#line 3172 "Gmsh.y"
     {
       if(!strcmp((yyvsp[(1) - (1)].c), "*") || !strcmp((yyvsp[(1) - (1)].c), "all"))
         (yyval.l) = 0;
@@ -7609,7 +7565,7 @@ yyreduce:
     break;
 
   case 334:
-#line 3228 "Gmsh.y"
+#line 3184 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(2) - (2)].l);
       for(int i = 0; i < List_Nbr((yyval.l)); i++){
@@ -7620,7 +7576,7 @@ yyreduce:
     break;
 
   case 335:
-#line 3236 "Gmsh.y"
+#line 3192 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(3) - (3)].l);
       for(int i = 0; i < List_Nbr((yyval.l)); i++){
@@ -7631,7 +7587,7 @@ yyreduce:
     break;
 
   case 336:
-#line 3244 "Gmsh.y"
+#line 3200 "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)); 
@@ -7641,7 +7597,7 @@ yyreduce:
     break;
 
   case 337:
-#line 3251 "Gmsh.y"
+#line 3207 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(double)); 
       if(!(yyvsp[(5) - (5)].d) || ((yyvsp[(1) - (5)].d) < (yyvsp[(3) - (5)].d) && (yyvsp[(5) - (5)].d) < 0) || ((yyvsp[(1) - (5)].d) > (yyvsp[(3) - (5)].d) && (yyvsp[(5) - (5)].d) > 0)){
@@ -7655,7 +7611,7 @@ yyreduce:
     break;
 
   case 338:
-#line 3262 "Gmsh.y"
+#line 3218 "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
@@ -7678,7 +7634,7 @@ yyreduce:
     break;
 
   case 339:
-#line 3282 "Gmsh.y"
+#line 3238 "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++){
@@ -7691,7 +7647,7 @@ yyreduce:
     break;
 
   case 340:
-#line 3292 "Gmsh.y"
+#line 3248 "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++){
@@ -7704,7 +7660,7 @@ yyreduce:
     break;
 
   case 341:
-#line 3302 "Gmsh.y"
+#line 3258 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(double));
       if(!gmsh_yysymbols.count((yyvsp[(1) - (3)].c)))
@@ -7717,7 +7673,7 @@ yyreduce:
     break;
 
   case 342:
-#line 3312 "Gmsh.y"
+#line 3268 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(double));
       if(!gmsh_yysymbols.count((yyvsp[(1) - (6)].c)))
@@ -7737,7 +7693,7 @@ yyreduce:
     break;
 
   case 343:
-#line 3332 "Gmsh.y"
+#line 3288 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(double));
       List_Add((yyval.l), &((yyvsp[(1) - (1)].d)));
@@ -7745,21 +7701,21 @@ yyreduce:
     break;
 
   case 344:
-#line 3337 "Gmsh.y"
+#line 3293 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(1) - (1)].l);
     ;}
     break;
 
   case 345:
-#line 3341 "Gmsh.y"
+#line 3297 "Gmsh.y"
     {
       List_Add((yyval.l), &((yyvsp[(3) - (3)].d)));
     ;}
     break;
 
   case 346:
-#line 3345 "Gmsh.y"
+#line 3301 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(3) - (3)].l)); i++){
 	double d;
@@ -7771,21 +7727,21 @@ yyreduce:
     break;
 
   case 347:
-#line 3357 "Gmsh.y"
+#line 3313 "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));
     ;}
     break;
 
   case 348:
-#line 3361 "Gmsh.y"
+#line 3317 "Gmsh.y"
     {
       (yyval.u) = CTX::instance()->packColor((int)(yyvsp[(2) - (7)].d), (int)(yyvsp[(4) - (7)].d), (int)(yyvsp[(6) - (7)].d), 255);
     ;}
     break;
 
   case 349:
-#line 3373 "Gmsh.y"
+#line 3329 "Gmsh.y"
     {
       int flag;
       (yyval.u) = GetColorForString(ColorString, -1, (yyvsp[(1) - (1)].c), &flag);
@@ -7795,7 +7751,7 @@ yyreduce:
     break;
 
   case 350:
-#line 3380 "Gmsh.y"
+#line 3336 "Gmsh.y"
     {
       unsigned int val = 0;
       ColorOption(GMSH_GET, (yyvsp[(1) - (5)].c), 0, (yyvsp[(5) - (5)].c), val);
@@ -7805,14 +7761,14 @@ yyreduce:
     break;
 
   case 351:
-#line 3390 "Gmsh.y"
+#line 3346 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(2) - (3)].l);
     ;}
     break;
 
   case 352:
-#line 3394 "Gmsh.y"
+#line 3350 "Gmsh.y"
     {
       (yyval.l) = List_Create(256, 10, sizeof(unsigned int));
       GmshColorTable *ct = GetColorTable((int)(yyvsp[(3) - (6)].d));
@@ -7827,7 +7783,7 @@ yyreduce:
     break;
 
   case 353:
-#line 3409 "Gmsh.y"
+#line 3365 "Gmsh.y"
     {
       (yyval.l) = List_Create(256, 10, sizeof(unsigned int));
       List_Add((yyval.l), &((yyvsp[(1) - (1)].u)));
@@ -7835,21 +7791,21 @@ yyreduce:
     break;
 
   case 354:
-#line 3414 "Gmsh.y"
+#line 3370 "Gmsh.y"
     {
       List_Add((yyval.l), &((yyvsp[(3) - (3)].u)));
     ;}
     break;
 
   case 355:
-#line 3421 "Gmsh.y"
+#line 3377 "Gmsh.y"
     {
       (yyval.c) = (yyvsp[(1) - (1)].c);
     ;}
     break;
 
   case 356:
-#line 3425 "Gmsh.y"
+#line 3381 "Gmsh.y"
     {
       if(!gmsh_yystringsymbols.count((yyvsp[(1) - (1)].c))){
 	yymsg(0, "Unknown string variable '%s'", (yyvsp[(1) - (1)].c));
@@ -7865,7 +7821,7 @@ yyreduce:
     break;
 
   case 357:
-#line 3438 "Gmsh.y"
+#line 3394 "Gmsh.y"
     { 
       std::string out;
       StringOption(GMSH_GET, (yyvsp[(1) - (3)].c), 0, (yyvsp[(3) - (3)].c), out);
@@ -7876,7 +7832,7 @@ yyreduce:
     break;
 
   case 358:
-#line 3446 "Gmsh.y"
+#line 3402 "Gmsh.y"
     { 
       std::string out;
       StringOption(GMSH_GET, (yyvsp[(1) - (6)].c), (int)(yyvsp[(3) - (6)].d), (yyvsp[(6) - (6)].c), out);
@@ -7887,14 +7843,14 @@ yyreduce:
     break;
 
   case 359:
-#line 3457 "Gmsh.y"
+#line 3413 "Gmsh.y"
     {
       (yyval.c) = (yyvsp[(1) - (1)].c);
     ;}
     break;
 
   case 360:
-#line 3461 "Gmsh.y"
+#line 3417 "Gmsh.y"
     {
       (yyval.c) = (char *)Malloc(32 * sizeof(char));
       time_t now;
@@ -7905,7 +7861,7 @@ yyreduce:
     break;
 
   case 361:
-#line 3469 "Gmsh.y"
+#line 3425 "Gmsh.y"
     {
       (yyval.c) = (char *)Malloc((strlen((yyvsp[(3) - (6)].c)) + strlen((yyvsp[(5) - (6)].c)) + 1) * sizeof(char));
       strcpy((yyval.c), (yyvsp[(3) - (6)].c));
@@ -7916,7 +7872,7 @@ yyreduce:
     break;
 
   case 362:
-#line 3477 "Gmsh.y"
+#line 3433 "Gmsh.y"
     {
       (yyval.c) = (char *)Malloc((strlen((yyvsp[(3) - (4)].c)) + 1) * sizeof(char));
       int i;
@@ -7933,7 +7889,7 @@ yyreduce:
     break;
 
   case 363:
-#line 3491 "Gmsh.y"
+#line 3447 "Gmsh.y"
     {
       (yyval.c) = (char *)Malloc((strlen((yyvsp[(3) - (4)].c)) + 1) * sizeof(char));
       int i;
@@ -7950,14 +7906,14 @@ yyreduce:
     break;
 
   case 364:
-#line 3505 "Gmsh.y"
+#line 3461 "Gmsh.y"
     {
       (yyval.c) = (yyvsp[(3) - (4)].c);
     ;}
     break;
 
   case 365:
-#line 3509 "Gmsh.y"
+#line 3465 "Gmsh.y"
     {
       char tmpstring[1024];
       int i = PrintListOfDouble((yyvsp[(3) - (6)].c), (yyvsp[(5) - (6)].l), tmpstring);
@@ -7980,7 +7936,7 @@ yyreduce:
 
 
 /* Line 1267 of yacc.c.  */
-#line 7984 "Gmsh.tab.cpp"
+#line 7940 "Gmsh.tab.cpp"
       default: break;
     }
   YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
@@ -8194,7 +8150,7 @@ yyreturn:
 }
 
 
-#line 3529 "Gmsh.y"
+#line 3485 "Gmsh.y"
 
 
 int PrintListOfDouble(char *format, List_T *list, char *buffer)
diff --git a/Parser/Gmsh.y b/Parser/Gmsh.y
index 59326aa16648566497178d88ad556aff5c03435a..537660846f304962478167212092bfa9bc1fb404 100644
--- a/Parser/Gmsh.y
+++ b/Parser/Gmsh.y
@@ -50,7 +50,7 @@ static std::map<std::string, std::string > gmsh_yystringsymbols;
 static PViewDataList *ViewData;
 #endif
 static std::vector<double> ViewCoord;
-static List_T *ViewValueList = 0;
+static std::vector<double> *ViewValueList = 0;
 static int *ViewNumList = 0;
 static ExtrudeParams extr;
 static int curPhysDim = 0;
@@ -282,7 +282,7 @@ Views :
     // nothing
     {
 #if !defined(HAVE_NO_POST)
-      ViewData = new PViewDataList(true); 
+      ViewData = new PViewDataList(); 
 #endif
     }
   | Views Element
@@ -301,149 +301,107 @@ ElementCoords :
 
 ElementValues :
     FExpr
-    { if(ViewValueList) List_Add(ViewValueList, &$1); }
+    { if(ViewValueList) ViewValueList->push_back($1); }
   | ElementValues ',' FExpr
-    { if(ViewValueList) List_Add(ViewValueList, &$3); }
+    { if(ViewValueList) ViewValueList->push_back($3); }
 ;
 
 Element : 
     tSTRING 
     {
 #if !defined(HAVE_NO_POST)
-      if(!strcmp($1, "SP")){
-	ViewValueList = ViewData->SP; ViewNumList = &ViewData->NbSP;
+      if(!strncmp($1, "SP", 2)){
+	ViewValueList = &ViewData->SP; ViewNumList = &ViewData->NbSP;
       }
-      else if(!strcmp($1, "VP")){
-	ViewValueList = ViewData->VP; ViewNumList = &ViewData->NbVP;
+      else if(!strncmp($1, "VP", 2)){
+	ViewValueList = &ViewData->VP; ViewNumList = &ViewData->NbVP;
       }
-      else if(!strcmp($1, "TP")){
-	ViewValueList = ViewData->TP; ViewNumList = &ViewData->NbTP;
+      else if(!strncmp($1, "TP", 2)){
+	ViewValueList = &ViewData->TP; ViewNumList = &ViewData->NbTP;
       }
-      else if(!strcmp($1, "SL")){
-	ViewValueList = ViewData->SL; ViewNumList = &ViewData->NbSL;
+      else if(!strncmp($1, "SL", 2)){
+	ViewValueList = &ViewData->SL; ViewNumList = &ViewData->NbSL;
+        if(strlen($1) > 2) ViewData->setOrder2(1);
       }
-      else if(!strcmp($1, "VL")){
-	ViewValueList = ViewData->VL; ViewNumList = &ViewData->NbVL;
+      else if(!strncmp($1, "VL", 2)){
+	ViewValueList = &ViewData->VL; ViewNumList = &ViewData->NbVL;
+        if(strlen($1) > 2) ViewData->setOrder2(1);
       }
-      else if(!strcmp($1, "TL")){
-	ViewValueList = ViewData->TL; ViewNumList = &ViewData->NbTL;
+      else if(!strncmp($1, "TL", 2)){
+	ViewValueList = &ViewData->TL; ViewNumList = &ViewData->NbTL;
+        if(strlen($1) > 2) ViewData->setOrder2(1);
       }
-      else if(!strcmp($1, "ST")){
-	ViewValueList = ViewData->ST; ViewNumList = &ViewData->NbST;
+      else if(!strncmp($1, "ST", 2)){
+	ViewValueList = &ViewData->ST; ViewNumList = &ViewData->NbST;
+        if(strlen($1) > 2) ViewData->setOrder2(3);
       }
-      else if(!strcmp($1, "VT")){
-	ViewValueList = ViewData->VT; ViewNumList = &ViewData->NbVT;
+      else if(!strncmp($1, "VT", 2)){
+	ViewValueList = &ViewData->VT; ViewNumList = &ViewData->NbVT;
+        if(strlen($1) > 2) ViewData->setOrder2(3);
       }
-      else if(!strcmp($1, "TT")){
-	ViewValueList = ViewData->TT; ViewNumList = &ViewData->NbTT;
+      else if(!strncmp($1, "TT", 2)){
+	ViewValueList = &ViewData->TT; ViewNumList = &ViewData->NbTT;
+        if(strlen($1) > 2) ViewData->setOrder2(3);
       }
-      else if(!strcmp($1, "SQ")){
-	ViewValueList = ViewData->SQ; ViewNumList = &ViewData->NbSQ;
+      else if(!strncmp($1, "SQ", 2)){
+	ViewValueList = &ViewData->SQ; ViewNumList = &ViewData->NbSQ;
+        if(strlen($1) > 2) ViewData->setOrder2(4);
       }
-      else if(!strcmp($1, "VQ")){
-	ViewValueList = ViewData->VQ; ViewNumList = &ViewData->NbVQ;
+      else if(!strncmp($1, "VQ", 2)){
+	ViewValueList = &ViewData->VQ; ViewNumList = &ViewData->NbVQ;
+        if(strlen($1) > 2) ViewData->setOrder2(4);
       }
-      else if(!strcmp($1, "TQ")){
-	ViewValueList = ViewData->TQ; ViewNumList = &ViewData->NbTQ;
+      else if(!strncmp($1, "TQ", 2)){
+	ViewValueList = &ViewData->TQ; ViewNumList = &ViewData->NbTQ;
+        if(strlen($1) > 2) ViewData->setOrder2(4);
       }
-      else if(!strcmp($1, "SS")){
-	ViewValueList = ViewData->SS; ViewNumList = &ViewData->NbSS;
+      else if(!strncmp($1, "SS", 2)){
+	ViewValueList = &ViewData->SS; ViewNumList = &ViewData->NbSS;
+        if(strlen($1) > 2) ViewData->setOrder2(6);
       }
-      else if(!strcmp($1, "VS")){
-	ViewValueList = ViewData->VS; ViewNumList = &ViewData->NbVS;
+      else if(!strncmp($1, "VS", 2)){
+	ViewValueList = &ViewData->VS; ViewNumList = &ViewData->NbVS;
+        if(strlen($1) > 2) ViewData->setOrder2(6);
       }
-      else if(!strcmp($1, "TS")){
-	ViewValueList = ViewData->TS; ViewNumList = &ViewData->NbTS;
+      else if(!strncmp($1, "TS", 2)){
+	ViewValueList = &ViewData->TS; ViewNumList = &ViewData->NbTS;
+        if(strlen($1) > 2) ViewData->setOrder2(6);
       }
-      else if(!strcmp($1, "SH")){
-	ViewValueList = ViewData->SH; ViewNumList = &ViewData->NbSH;
+      else if(!strncmp($1, "SH", 2)){
+	ViewValueList = &ViewData->SH; ViewNumList = &ViewData->NbSH;
+        if(strlen($1) > 2) ViewData->setOrder2(12);
       }
-      else if(!strcmp($1, "VH")){
-	ViewValueList = ViewData->VH; ViewNumList = &ViewData->NbVH;
+      else if(!strncmp($1, "VH", 2)){
+	ViewValueList = &ViewData->VH; ViewNumList = &ViewData->NbVH;
+        if(strlen($1) > 2) ViewData->setOrder2(12);
       }
-      else if(!strcmp($1, "TH")){
-	ViewValueList = ViewData->TH; ViewNumList = &ViewData->NbTH;
+      else if(!strncmp($1, "TH", 2)){
+	ViewValueList = &ViewData->TH; ViewNumList = &ViewData->NbTH;
+        if(strlen($1) > 2) ViewData->setOrder2(12);
       }
-      else if(!strcmp($1, "SI")){
-	ViewValueList = ViewData->SI; ViewNumList = &ViewData->NbSI;
+      else if(!strncmp($1, "SI", 2)){
+	ViewValueList = &ViewData->SI; ViewNumList = &ViewData->NbSI;
+        if(strlen($1) > 2) ViewData->setOrder2(9);
       }
-      else if(!strcmp($1, "VI")){
-	ViewValueList = ViewData->VI; ViewNumList = &ViewData->NbVI;
+      else if(!strncmp($1, "VI", 2)){
+	ViewValueList = &ViewData->VI; ViewNumList = &ViewData->NbVI;
+        if(strlen($1) > 2) ViewData->setOrder2(9);
       }
-      else if(!strcmp($1, "TI")){
-	ViewValueList = ViewData->TI; ViewNumList = &ViewData->NbTI;
+      else if(!strncmp($1, "TI", 2)){
+	ViewValueList = &ViewData->TI; ViewNumList = &ViewData->NbTI;
+        if(strlen($1) > 2) ViewData->setOrder2(9);
       }
-      else if(!strcmp($1, "SY")){
-	ViewValueList = ViewData->SY; ViewNumList = &ViewData->NbSY;
+      else if(!strncmp($1, "SY", 2)){
+	ViewValueList = &ViewData->SY; ViewNumList = &ViewData->NbSY;
+        if(strlen($1) > 2) ViewData->setOrder2(8);
       }
-      else if(!strcmp($1, "VY")){
-	ViewValueList = ViewData->VY; ViewNumList = &ViewData->NbVY;
+      else if(!strncmp($1, "VY", 2)){
+	ViewValueList = &ViewData->VY; ViewNumList = &ViewData->NbVY;
+        if(strlen($1) > 2) ViewData->setOrder2(8);
       }
-      else if(!strcmp($1, "TY")){
-	ViewValueList = ViewData->TY; ViewNumList = &ViewData->NbTY;
-      }
-      else if(!strcmp($1, "SL2")){
-	ViewValueList = ViewData->SL2; ViewNumList = &ViewData->NbSL2;
-      }
-      else if(!strcmp($1, "VL2")){
-	ViewValueList = ViewData->VL2; ViewNumList = &ViewData->NbVL2;
-      }
-      else if(!strcmp($1, "TL2")){
-	ViewValueList = ViewData->TL2; ViewNumList = &ViewData->NbTL2;
-      }
-      else if(!strcmp($1, "ST2")){
-	ViewValueList = ViewData->ST2; ViewNumList = &ViewData->NbST2;
-      }
-      else if(!strcmp($1, "VT2")){
-	ViewValueList = ViewData->VT2; ViewNumList = &ViewData->NbVT2;
-      }
-      else if(!strcmp($1, "TT2")){
-	ViewValueList = ViewData->TT2; ViewNumList = &ViewData->NbTT2;
-      }
-      else if(!strcmp($1, "SQ2")){
-	ViewValueList = ViewData->SQ2; ViewNumList = &ViewData->NbSQ2;
-      }
-      else if(!strcmp($1, "VQ2")){
-	ViewValueList = ViewData->VQ2; ViewNumList = &ViewData->NbVQ2;
-      }
-      else if(!strcmp($1, "TQ2")){
-	ViewValueList = ViewData->TQ2; ViewNumList = &ViewData->NbTQ2;
-      }
-      else if(!strcmp($1, "SS2")){
-	ViewValueList = ViewData->SS2; ViewNumList = &ViewData->NbSS2;
-      }
-      else if(!strcmp($1, "VS2")){
-	ViewValueList = ViewData->VS2; ViewNumList = &ViewData->NbVS2;
-      }
-      else if(!strcmp($1, "TS2")){
-	ViewValueList = ViewData->TS2; ViewNumList = &ViewData->NbTS2;
-      }
-      else if(!strcmp($1, "SH2")){
-	ViewValueList = ViewData->SH2; ViewNumList = &ViewData->NbSH2;
-      }
-      else if(!strcmp($1, "VH2")){
-	ViewValueList = ViewData->VH2; ViewNumList = &ViewData->NbVH2;
-      }
-      else if(!strcmp($1, "TH2")){
-	ViewValueList = ViewData->TH2; ViewNumList = &ViewData->NbTH2;
-      }
-      else if(!strcmp($1, "SI2")){
-	ViewValueList = ViewData->SI2; ViewNumList = &ViewData->NbSI2;
-      }
-      else if(!strcmp($1, "VI2")){
-	ViewValueList = ViewData->VI2; ViewNumList = &ViewData->NbVI2;
-      }
-      else if(!strcmp($1, "TI2")){
-	ViewValueList = ViewData->TI2; ViewNumList = &ViewData->NbTI2;
-      }
-      else if(!strcmp($1, "SY2")){
-	ViewValueList = ViewData->SY2; ViewNumList = &ViewData->NbSY2;
-      }
-      else if(!strcmp($1, "VY2")){
-	ViewValueList = ViewData->VY2; ViewNumList = &ViewData->NbVY2;
-      }
-      else if(!strcmp($1, "TY2")){
-	ViewValueList = ViewData->TY2; ViewNumList = &ViewData->NbTY2;
+      else if(!strncmp($1, "TY", 2)){
+	ViewValueList = &ViewData->TY; ViewNumList = &ViewData->NbTY;
+        if(strlen($1) > 2) ViewData->setOrder2(8);
       }
       else{
 	yymsg(0, "Unknown element type '%s'", $1);	
@@ -459,7 +417,7 @@ Element :
       if(ViewValueList){
 	for(int i = 0; i < 3; i++)
 	  for(int j = 0; j < ViewCoord.size() / 3; j++) 
-	    List_Add(ViewValueList, &ViewCoord[3 * j + i]);
+	    ViewValueList->push_back(ViewCoord[3 * j + i]);
       }
 #endif
     }
@@ -475,14 +433,14 @@ Text2DValues :
     StringExprVar
     { 
 #if !defined(HAVE_NO_POST)
-      for(int i = 0; i < (int)strlen($1)+1; i++) List_Add(ViewData->T2C, &$1[i]); 
+      for(int i = 0; i < (int)strlen($1) + 1; i++) ViewData->T2C.push_back($1[i]);
 #endif
       Free($1);
     }
   | Text2DValues ',' StringExprVar
     { 
 #if !defined(HAVE_NO_POST)
-      for(int i = 0; i < (int)strlen($3)+1; i++) List_Add(ViewData->T2C, &$3[i]); 
+      for(int i = 0; i < (int)strlen($3) + 1; i++) ViewData->T2C.push_back($3[i]);
 #endif
       Free($3);
     }
@@ -492,11 +450,10 @@ Text2D :
     tText2D '(' FExpr ',' FExpr ',' FExpr ')'
     { 
 #if !defined(HAVE_NO_POST)
-      List_Add(ViewData->T2D, &$3); 
-      List_Add(ViewData->T2D, &$5);
-      List_Add(ViewData->T2D, &$7); 
-      double d = List_Nbr(ViewData->T2C);
-      List_Add(ViewData->T2D, &d); 
+      ViewData->T2D.push_back($3); 
+      ViewData->T2D.push_back($5);
+      ViewData->T2D.push_back($7); 
+      ViewData->T2D.push_back(ViewData->T2C.size()); 
 #endif
     }
     '{' Text2DValues '}' tEND
@@ -511,14 +468,14 @@ Text3DValues :
     StringExprVar
     { 
 #if !defined(HAVE_NO_POST)
-      for(int i = 0; i < (int)strlen($1)+1; i++) List_Add(ViewData->T3C, &$1[i]); 
+      for(int i = 0; i < (int)strlen($1) + 1; i++) ViewData->T3C.push_back($1[i]);
 #endif
       Free($1);
     }
   | Text3DValues ',' StringExprVar
     { 
 #if !defined(HAVE_NO_POST)
-      for(int i = 0; i < (int)strlen($3)+1; i++) List_Add(ViewData->T3C, &$3[i]); 
+      for(int i = 0; i < (int)strlen($3) + 1; i++) ViewData->T3C.push_back($3[i]);
 #endif
       Free($3);
     }
@@ -528,10 +485,9 @@ Text3D :
     tText3D '(' FExpr ',' FExpr ',' FExpr ',' FExpr ')'
     { 
 #if !defined(HAVE_NO_POST)
-      List_Add(ViewData->T3D, &$3); List_Add(ViewData->T3D, &$5);
-      List_Add(ViewData->T3D, &$7); List_Add(ViewData->T3D, &$9); 
-      double d = List_Nbr(ViewData->T3C);
-      List_Add(ViewData->T3D, &d); 
+      ViewData->T3D.push_back($3); ViewData->T3D.push_back($5);
+      ViewData->T3D.push_back($7); ViewData->T3D.push_back($9);
+      ViewData->T3D.push_back(ViewData->T3C.size()); 
 #endif
     }
     '{' Text3DValues '}' tEND
@@ -584,7 +540,7 @@ Time :
     tTime 
     {
 #if !defined(HAVE_NO_POST)
-      ViewValueList = ViewData->Time;
+      ViewValueList = &ViewData->Time;
 #endif
     }
    '{' ElementValues '}' tEND
diff --git a/Parser/Makefile b/Parser/Makefile
index d29a736f87fbd21081ce80f6ac3611a99351f1dc..5a6ed86bc71525b4b31f4345752d0ed4cf16ef45 100644
--- a/Parser/Makefile
+++ b/Parser/Makefile
@@ -59,9 +59,10 @@ Gmsh.tab${OBJEXT}: Gmsh.tab.cpp ../Common/GmshConfig.h ../Common/GmshMessage.h \
   ../Numeric/Numeric.h ../Numeric/GmshMatrix.h ../Common/Context.h \
   ../Geo/CGNSOptions.h ../Mesh/meshPartitionOptions.h ../Geo/GModel.h \
   ../Geo/GVertex.h ../Geo/GEntity.h ../Geo/Range.h ../Geo/SPoint3.h \
-  ../Geo/SBoundingBox3d.h ../Geo/SPoint3.h ../Geo/GPoint.h \
-  ../Geo/SPoint2.h ../Geo/GEdge.h ../Geo/GEntity.h ../Geo/GVertex.h \
-  ../Geo/SVector3.h ../Geo/SPoint3.h ../Geo/SPoint3.h ../Geo/SPoint2.h \
+  ../Geo/SBoundingBox3d.h ../Geo/SPoint3.h ../Geo/SOrientedBoundingBox.h \
+  ../Geo/SVector3.h ../Geo/SPoint3.h ../Geo/SPoint2.h ../Geo/Pair.h \
+  ../Geo/GPoint.h ../Geo/SPoint2.h ../Geo/GEdge.h ../Geo/GEntity.h \
+  ../Geo/GVertex.h ../Geo/SVector3.h ../Geo/SPoint3.h ../Geo/SPoint2.h \
   ../Geo/GFace.h ../Geo/GEntity.h ../Geo/GPoint.h ../Geo/GEdgeLoop.h \
   ../Geo/GEdge.h ../Geo/SPoint2.h ../Geo/SVector3.h ../Geo/Pair.h \
   ../Geo/GRegion.h ../Geo/GEntity.h ../Geo/SPoint3.h \
diff --git a/Plugin/Annotate.cpp b/Plugin/Annotate.cpp
index cb5881308f17aa8fbe5772079c8ddef6cf7d0e36..a9b7deec4ad116cd357af37265cbfac35dc7ae84 100644
--- a/Plugin/Annotate.cpp
+++ b/Plugin/Annotate.cpp
@@ -246,24 +246,22 @@ PView *GMSH_AnnotatePlugin::execute(PView *v)
   if(!data1) return v;
 
   if(dim3){
-    List_Add(data1->T3D, &X);
-    List_Add(data1->T3D, &Y);
-    List_Add(data1->T3D, &Z);
-    List_Add(data1->T3D, &style); 
-    double d = List_Nbr(data1->T3C);
-    List_Add(data1->T3D, &d); 
+    data1->T3D.push_back(X);
+    data1->T3D.push_back(Y);
+    data1->T3D.push_back(Z);
+    data1->T3D.push_back(style); 
+    data1->T3D.push_back(data1->T3C.size()); 
     for(int i = 0; i < (int)strlen(text) + 1; i++) 
-      List_Add(data1->T3C, (void*)&text[i]); 
+      data1->T3C.push_back(text[i]);
     data1->NbT3++;
   }
   else{
-    List_Add(data1->T2D, &X);
-    List_Add(data1->T2D, &Y);
-    List_Add(data1->T2D, &style); 
-    double d = List_Nbr(data1->T2C);
-    List_Add(data1->T2D, &d); 
+    data1->T2D.push_back(X);
+    data1->T2D.push_back(Y);
+    data1->T2D.push_back(style); 
+    data1->T2D.push_back(data1->T2C.size()); 
     for(int i = 0; i < (int)strlen(text) + 1; i++) 
-      List_Add(data1->T2C, (void*)&text[i]); 
+      data1->T2C.push_back(text[i]);
     data1->NbT2++;
   }
 
diff --git a/Plugin/Curl.cpp b/Plugin/Curl.cpp
index c1680c24a2756040954937266a61d62b46c11538..61c999723aa776add7966b09ef654767231eb9ee 100644
--- a/Plugin/Curl.cpp
+++ b/Plugin/Curl.cpp
@@ -51,17 +51,17 @@ void GMSH_CurlPlugin::catchErrorMessage(char *errorMessage) const
   strcpy(errorMessage, "Curl failed...");
 }
 
-static List_T *incrementList(PViewDataList *data2, int numEdges)
+static std::vector<double> *incrementList(PViewDataList *data2, int numEdges)
 {
   switch(numEdges){
-  case 0: data2->NbVP++; return data2->VP;
-  case 1: data2->NbVL++; return data2->VL;
-  case 3: data2->NbVT++; return data2->VT;
-  case 4: data2->NbVQ++; return data2->VQ;
-  case 6: data2->NbVS++; return data2->VS;
-  case 12: data2->NbVH++; return data2->VH;
-  case 9: data2->NbVI++; return data2->VI;
-  case 8: data2->NbVY++; return data2->VY;
+  case 0: data2->NbVP++; return &data2->VP;
+  case 1: data2->NbVL++; return &data2->VL;
+  case 3: data2->NbVT++; return &data2->VT;
+  case 4: data2->NbVQ++; return &data2->VQ;
+  case 6: data2->NbVS++; return &data2->VS;
+  case 12: data2->NbVH++; return &data2->VH;
+  case 9: data2->NbVI++; return &data2->VI;
+  case 8: data2->NbVY++; return &data2->VY;
   default: return 0;
   }
 }
@@ -79,7 +79,7 @@ PView *GMSH_CurlPlugin::execute(PView *v)
     return v;
   }
 
-  PView *v2 = new PView(true, data1->getNumElements());
+  PView *v2 = new PView();
   PViewDataList *data2 = getDataList(v2);
 
   for(int ent = 0; ent < data1->getNumEntities(0); ent++){
@@ -88,7 +88,7 @@ PView *GMSH_CurlPlugin::execute(PView *v)
       int numComp = data1->getNumComponents(0, ent, ele);
       if(numComp != 3) continue;
       int numEdges = data1->getNumEdges(0, ent, ele);
-      List_T *out = incrementList(data2, numEdges);
+      std::vector<double> *out = incrementList(data2, numEdges);
       if(!out) continue;
       int numNodes = data1->getNumNodes(0, ent, ele);
       double x[8], y[8], z[8], val[8 * 3];
@@ -98,9 +98,9 @@ PView *GMSH_CurlPlugin::execute(PView *v)
       elementFactory factory;
       element *element = factory.create(numNodes, dim, x, y, z);
       if(!element) continue;
-      for(int nod = 0; nod < numNodes; nod++) List_Add(out, &x[nod]);
-      for(int nod = 0; nod < numNodes; nod++) List_Add(out, &y[nod]);
-      for(int nod = 0; nod < numNodes; nod++) List_Add(out, &z[nod]);
+      for(int nod = 0; nod < numNodes; nod++) out->push_back(x[nod]);
+      for(int nod = 0; nod < numNodes; nod++) out->push_back(y[nod]);
+      for(int nod = 0; nod < numNodes; nod++) out->push_back(z[nod]);
       for(int step = 0; step < data1->getNumTimeSteps(); step++){
 	for(int nod = 0; nod < numNodes; nod++)
 	  for(int comp = 0; comp < numComp; comp++)
@@ -109,9 +109,9 @@ PView *GMSH_CurlPlugin::execute(PView *v)
 	  double u, v, w, f[3];
 	  element->getNode(nod, u, v, w);
 	  element->interpolateCurl(val, u, v, w, f, 3);
-	  List_Add(out, &f[0]);
-	  List_Add(out, &f[1]);
-	  List_Add(out, &f[2]);
+	  out->push_back(f[0]);
+	  out->push_back(f[1]);
+	  out->push_back(f[2]);
 	}
       }
       delete element;
@@ -120,7 +120,7 @@ PView *GMSH_CurlPlugin::execute(PView *v)
 
   for(int i = 0; i < data1->getNumTimeSteps(); i++){
     double time = data1->getTime(i);
-    List_Add(data2->Time, &time);
+    data2->Time.push_back(time);
   }
   data2->setName(data1->getName() + "_Curl");
   data2->setFileName(data1->getName() + "_Curl.pos");
diff --git a/Plugin/CutGrid.cpp b/Plugin/CutGrid.cpp
index 5001eab3cdb34d573f1050a040af6b0fdd030996..54c6c02796bd588b8e490d74a4a9d5be8c39d30f 100644
--- a/Plugin/CutGrid.cpp
+++ b/Plugin/CutGrid.cpp
@@ -228,21 +228,21 @@ void GMSH_CutGridPlugin::getPoint(int iU, int iV, double *X)
 
 void GMSH_CutGridPlugin::addInView(int numsteps, int connect, int nbcomp, 
                                    double ***pnts, double ***vals, 
-                                   List_T *P, int *nP, 
-                                   List_T *L, int *nL, 
-                                   List_T *Q, int *nQ)
+                                   std::vector<double> &P, int *nP, 
+                                   std::vector<double> &L, int *nL, 
+                                   std::vector<double> &Q, int *nQ)
 {
   if(!connect || (getNbU() == 1 && getNbV() == 1)){ // generate points
     
     for(int i = 0; i < getNbU(); ++i){
       for(int j = 0; j < getNbV(); ++j){
-        List_Add(P, &pnts[i][j][0]);
-        List_Add(P, &pnts[i][j][1]);
-        List_Add(P, &pnts[i][j][2]);
+        P.push_back(pnts[i][j][0]);
+        P.push_back(pnts[i][j][1]);
+        P.push_back(pnts[i][j][2]);
         (*nP)++;
         for(int k = 0; k < numsteps; ++k){
           for(int l = 0; l < nbcomp; ++l)
-            List_Add(P, &vals[i][j][nbcomp*k+l]);
+            P.push_back(vals[i][j][nbcomp*k+l]);
         }
       }
     }
@@ -252,51 +252,51 @@ void GMSH_CutGridPlugin::addInView(int numsteps, int connect, int nbcomp,
     
     if(getNbU() == 1){
       for(int i = 0; i < getNbV()-1; ++i){
-        List_Add(L, &pnts[0][i][0]); List_Add(L, &pnts[0][i+1][0]);
-        List_Add(L, &pnts[0][i][1]); List_Add(L, &pnts[0][i+1][1]);
-        List_Add(L, &pnts[0][i][2]); List_Add(L, &pnts[0][i+1][2]);
+        L.push_back(pnts[0][i][0]); L.push_back(pnts[0][i+1][0]);
+        L.push_back(pnts[0][i][1]); L.push_back(pnts[0][i+1][1]);
+        L.push_back(pnts[0][i][2]); L.push_back(pnts[0][i+1][2]);
         (*nL)++;
         for(int k = 0; k < numsteps; ++k){
           for(int l = 0; l < nbcomp; ++l)
-            List_Add(L, &vals[0][i  ][nbcomp*k+l]);
+            L.push_back(vals[0][i  ][nbcomp*k+l]);
           for(int l = 0; l < nbcomp; ++l)
-            List_Add(L, &vals[0][i+1][nbcomp*k+l]);
+            L.push_back(vals[0][i+1][nbcomp*k+l]);
         }
       }
     }
     else if(getNbV() == 1){
       for(int i = 0; i < getNbU()-1; ++i){
-        List_Add(L, &pnts[i][0][0]); List_Add(L, &pnts[i+1][0][0]);
-        List_Add(L, &pnts[i][0][1]); List_Add(L, &pnts[i+1][0][1]);
-        List_Add(L, &pnts[i][0][2]); List_Add(L, &pnts[i+1][0][2]);
+        L.push_back(pnts[i][0][0]); L.push_back(pnts[i+1][0][0]);
+        L.push_back(pnts[i][0][1]); L.push_back(pnts[i+1][0][1]);
+        L.push_back(pnts[i][0][2]); L.push_back(pnts[i+1][0][2]);
         (*nL)++;
         for(int k = 0; k < numsteps; ++k){
           for(int l = 0; l < nbcomp; ++l)
-            List_Add(L, &vals[i  ][0][nbcomp*k+l]);
+            L.push_back(vals[i  ][0][nbcomp*k+l]);
           for(int l = 0; l < nbcomp; ++l)
-            List_Add(L, &vals[i+1][0][nbcomp*k+l]);
+            L.push_back(vals[i+1][0][nbcomp*k+l]);
         }
       }
     }
     else{
       for(int i = 0; i < getNbU()-1; ++i){
         for(int j = 0; j < getNbV()-1; ++j){
-          List_Add(Q, &pnts[i  ][j  ][0]); List_Add(Q, &pnts[i+1][j  ][0]);
-          List_Add(Q, &pnts[i+1][j+1][0]); List_Add(Q, &pnts[i  ][j+1][0]);
-          List_Add(Q, &pnts[i  ][j  ][1]); List_Add(Q, &pnts[i+1][j  ][1]);
-          List_Add(Q, &pnts[i+1][j+1][1]); List_Add(Q, &pnts[i  ][j+1][1]);
-          List_Add(Q, &pnts[i  ][j  ][2]); List_Add(Q, &pnts[i+1][j  ][2]);
-          List_Add(Q, &pnts[i+1][j+1][2]); List_Add(Q, &pnts[i  ][j+1][2]);
+          Q.push_back(pnts[i  ][j  ][0]); Q.push_back(pnts[i+1][j  ][0]);
+          Q.push_back(pnts[i+1][j+1][0]); Q.push_back(pnts[i  ][j+1][0]);
+          Q.push_back(pnts[i  ][j  ][1]); Q.push_back(pnts[i+1][j  ][1]);
+          Q.push_back(pnts[i+1][j+1][1]); Q.push_back(pnts[i  ][j+1][1]);
+          Q.push_back(pnts[i  ][j  ][2]); Q.push_back(pnts[i+1][j  ][2]);
+          Q.push_back(pnts[i+1][j+1][2]); Q.push_back(pnts[i  ][j+1][2]);
           (*nQ)++;
           for(int k = 0; k < numsteps; ++k){
             for(int l = 0; l < nbcomp; ++l)
-              List_Add(Q, &vals[i  ][j  ][nbcomp*k+l]);
+              Q.push_back(vals[i  ][j  ][nbcomp*k+l]);
             for(int l = 0; l < nbcomp; ++l)
-              List_Add(Q, &vals[i+1][j  ][nbcomp*k+l]);
+              Q.push_back(vals[i+1][j  ][nbcomp*k+l]);
             for(int l = 0; l < nbcomp; ++l)
-              List_Add(Q, &vals[i+1][j+1][nbcomp*k+l]);
+              Q.push_back(vals[i+1][j+1][nbcomp*k+l]);
             for(int l = 0; l < nbcomp; ++l)
-              List_Add(Q, &vals[i  ][j+1][nbcomp*k+l]);
+              Q.push_back(vals[i  ][j+1][nbcomp*k+l]);
           }
         }
       }
@@ -311,7 +311,7 @@ PView *GMSH_CutGridPlugin::GenerateView(PView *v1, int connect)
 
   PViewData *data1 = v1->getData();
 
-  PView *v2 = new PView(true);
+  PView *v2 = new PView();
   PViewDataList *data2 = getDataList(v2);
  
   OctreePost o(v1);
diff --git a/Plugin/CutGrid.h b/Plugin/CutGrid.h
index fd87b08f703a0396bf6b624009fe1093a4c93d8b..93ef11694ee00fc0846f35e4e2ba10c0328f6348 100644
--- a/Plugin/CutGrid.h
+++ b/Plugin/CutGrid.h
@@ -19,9 +19,9 @@ class GMSH_CutGridPlugin : public GMSH_PostPlugin
                          double step, double min, double max);
   void addInView(int numsteps, int connect, int nbcomp, 
                  double ***pnts, double ***vals, 
-                 List_T *P, int *nP, 
-                 List_T *L, int *nL, 
-                 List_T *Q, int *nQ);
+                 std::vector<double> &P, int *nP, 
+                 std::vector<double> &L, int *nL, 
+                 std::vector<double> &Q, int *nQ);
   PView *GenerateView (PView *v, int connectPoints);
 public:
   GMSH_CutGridPlugin(){}
diff --git a/Plugin/CutParametric.cpp b/Plugin/CutParametric.cpp
index acd41058f239f9cf7f03beee3d9fa4674c07825b..7d49fee1faa9af95a183827a4fb31a3000be128e 100644
--- a/Plugin/CutParametric.cpp
+++ b/Plugin/CutParametric.cpp
@@ -242,29 +242,30 @@ void GMSH_CutParametricPlugin::catchErrorMessage(char *errorMessage) const
 static void addInView(int connect, int i, int nbcomp, int nbtime,
                       double x0, double y0, double z0, double *res0,
                       double x, double y, double z, double *res,
-                      List_T *P, int *nP, List_T *L, int *nL)
+                      std::vector<double> &P, int *nP, 
+                      std::vector<double> &L, int *nL)
 {
   if(connect){
     if(i){
-      List_Add(L, &x0); List_Add(L, &x);
-      List_Add(L, &y0); List_Add(L, &y);
-      List_Add(L, &z0); List_Add(L, &z);
+      L.push_back(x0); L.push_back(x);
+      L.push_back(y0); L.push_back(y);
+      L.push_back(z0); L.push_back(z);
       for(int k = 0; k < nbtime; ++k){
         for(int l = 0; l < nbcomp; ++l)
-          List_Add(L, &res0[nbcomp*k+l]); 
+          L.push_back(res0[nbcomp * k + l]); 
         for(int l = 0; l < nbcomp; ++l)
-          List_Add(L, &res[nbcomp*k+l]);
+          L.push_back(res[nbcomp * k + l]);
       }
       (*nL)++;
     }
   }
   else{
-    List_Add(P, &x);
-    List_Add(P, &y);
-    List_Add(P, &z);
+    P.push_back(x);
+    P.push_back(y);
+    P.push_back(z);
     for(int k = 0; k < nbtime; ++k)
       for(int l = 0; l < nbcomp; ++l)
-        List_Add(P, &res[nbcomp*k+l]);
+        P.push_back(res[nbcomp * k + l]);
     (*nP)++;
   }
 }
@@ -287,7 +288,7 @@ PView *GMSH_CutParametricPlugin::execute(PView *v)
 
   OctreePost o(v1);
 
-  PView *v2 = new PView(true);
+  PView *v2 = new PView();
   PViewDataList *data2 = getDataList(v2);
 
   double *res0 = new double[9 * numSteps];
diff --git a/Plugin/Divergence.cpp b/Plugin/Divergence.cpp
index fd7e25f1aab9838e1bedf1f85acabd85e5a9787b..ad2befd7f19eb1282fa7def123881a67517428f1 100644
--- a/Plugin/Divergence.cpp
+++ b/Plugin/Divergence.cpp
@@ -51,17 +51,17 @@ void GMSH_DivergencePlugin::catchErrorMessage(char *errorMessage) const
   strcpy(errorMessage, "Divergence failed...");
 }
 
-static List_T *incrementList(PViewDataList *data2, int numEdges)
+static std::vector<double> *incrementList(PViewDataList *data2, int numEdges)
 {
   switch(numEdges){
-  case 0: data2->NbSP++; return data2->SP;
-  case 1: data2->NbSL++; return data2->SL;
-  case 3: data2->NbST++; return data2->ST;
-  case 4: data2->NbSQ++; return data2->SQ;
-  case 6: data2->NbSS++; return data2->SS;
-  case 12: data2->NbSH++; return data2->SH;
-  case 9: data2->NbSI++; return data2->SI;
-  case 8: data2->NbSY++; return data2->SY;
+  case 0: data2->NbSP++; return &data2->SP;
+  case 1: data2->NbSL++; return &data2->SL;
+  case 3: data2->NbST++; return &data2->ST;
+  case 4: data2->NbSQ++; return &data2->SQ;
+  case 6: data2->NbSS++; return &data2->SS;
+  case 12: data2->NbSH++; return &data2->SH;
+  case 9: data2->NbSI++; return &data2->SI;
+  case 8: data2->NbSY++; return &data2->SY;
   default: return 0;
   }
 }
@@ -79,7 +79,7 @@ PView *GMSH_DivergencePlugin::execute(PView *v)
     return v;
   }
 
-  PView *v2 = new PView(true, data1->getNumElements());
+  PView *v2 = new PView();
   PViewDataList *data2 = getDataList(v2);
 
   for(int ent = 0; ent < data1->getNumEntities(0); ent++){
@@ -88,7 +88,7 @@ PView *GMSH_DivergencePlugin::execute(PView *v)
       int numComp = data1->getNumComponents(0, ent, ele);
       if(numComp != 3) continue;
       int numEdges = data1->getNumEdges(0, ent, ele);
-      List_T *out = incrementList(data2, numEdges);
+      std::vector<double> *out = incrementList(data2, numEdges);
       if(!out) continue;
       int numNodes = data1->getNumNodes(0, ent, ele);
       double x[8], y[8], z[8], val[8 * 3];
@@ -98,9 +98,9 @@ PView *GMSH_DivergencePlugin::execute(PView *v)
       elementFactory factory;
       element *element = factory.create(numNodes, dim, x, y, z);
       if(!element) continue;
-      for(int nod = 0; nod < numNodes; nod++) List_Add(out, &x[nod]);
-      for(int nod = 0; nod < numNodes; nod++) List_Add(out, &y[nod]);
-      for(int nod = 0; nod < numNodes; nod++) List_Add(out, &z[nod]);
+      for(int nod = 0; nod < numNodes; nod++) out->push_back(x[nod]);
+      for(int nod = 0; nod < numNodes; nod++) out->push_back(y[nod]);
+      for(int nod = 0; nod < numNodes; nod++) out->push_back(z[nod]);
       for(int step = 0; step < data1->getNumTimeSteps(); step++){
 	for(int nod = 0; nod < numNodes; nod++)
 	  for(int comp = 0; comp < numComp; comp++)
@@ -109,7 +109,7 @@ PView *GMSH_DivergencePlugin::execute(PView *v)
 	  double u, v, w;
 	  element->getNode(nod, u, v, w);
 	  double f = element->interpolateDiv(val, u, v, w, 3);
-	  List_Add(out, &f);
+	  out->push_back(f);
 	}
       }
       delete element;
@@ -118,7 +118,7 @@ PView *GMSH_DivergencePlugin::execute(PView *v)
 
   for(int i = 0; i < data1->getNumTimeSteps(); i++){
     double time = data1->getTime(i);
-    List_Add(data2->Time, &time);
+    data2->Time.push_back(time);
   }
   data2->setName(data1->getName() + "_Divergence");
   data2->setFileName(data1->getName() + "_Divergence.pos");
diff --git a/Plugin/Eigenvalues.cpp b/Plugin/Eigenvalues.cpp
index a69d99ede3fd71fcc9aa9fe5eb5e5dc86ba77d74..94c25bd7acfca681173f4de1d4bd340b20a93905 100644
--- a/Plugin/Eigenvalues.cpp
+++ b/Plugin/Eigenvalues.cpp
@@ -50,17 +50,17 @@ void GMSH_EigenvaluesPlugin::catchErrorMessage(char *errorMessage) const
   strcpy(errorMessage, "Eigenvalues failed...");
 }
 
-static List_T *incrementList(PViewDataList *data2, int numEdges)
+static std::vector<double> *incrementList(PViewDataList *data2, int numEdges)
 {
   switch(numEdges){
-  case 0: data2->NbSP++; return data2->SP;
-  case 1: data2->NbSL++; return data2->SL;
-  case 3: data2->NbST++; return data2->ST;
-  case 4: data2->NbSQ++; return data2->SQ;
-  case 6: data2->NbSS++; return data2->SS;
-  case 12: data2->NbSH++; return data2->SH;
-  case 9: data2->NbSI++; return data2->SI;
-  case 8: data2->NbSY++; return data2->SY;
+  case 0: data2->NbSP++; return &data2->SP;
+  case 1: data2->NbSL++; return &data2->SL;
+  case 3: data2->NbST++; return &data2->ST;
+  case 4: data2->NbSQ++; return &data2->SQ;
+  case 6: data2->NbSS++; return &data2->SS;
+  case 12: data2->NbSH++; return &data2->SH;
+  case 9: data2->NbSI++; return &data2->SI;
+  case 8: data2->NbSY++; return &data2->SY;
   default: return 0;
   }
 }
@@ -78,9 +78,9 @@ PView *GMSH_EigenvaluesPlugin::execute(PView *v)
     return v;
   }
 
-  PView *min = new PView(true);
-  PView *mid = new PView(true);
-  PView *max = new PView(true);
+  PView *min = new PView();
+  PView *mid = new PView();
+  PView *max = new PView();
 
   PViewDataList *dmin = getDataList(min);
   PViewDataList *dmid = getDataList(mid);
@@ -92,9 +92,9 @@ PView *GMSH_EigenvaluesPlugin::execute(PView *v)
       int numComp = data1->getNumComponents(0, ent, ele);
       if(numComp != 9) continue;
       int numEdges = data1->getNumEdges(0, ent, ele);
-      List_T *outmin = incrementList(dmin, numEdges);
-      List_T *outmid = incrementList(dmid, numEdges);
-      List_T *outmax = incrementList(dmax, numEdges);
+      std::vector<double> *outmin = incrementList(dmin, numEdges);
+      std::vector<double> *outmid = incrementList(dmid, numEdges);
+      std::vector<double> *outmax = incrementList(dmax, numEdges);
       if(!outmin || !outmid || !outmax) continue;
       int numNodes = data1->getNumNodes(0, ent, ele);
       double xyz[3][8];
@@ -102,9 +102,9 @@ PView *GMSH_EigenvaluesPlugin::execute(PView *v)
 	data1->getNode(0, ent, ele, nod, xyz[0][nod], xyz[1][nod], xyz[2][nod]);
       for(int i = 0; i < 3; i++){
 	for(int nod = 0; nod < numNodes; nod++){
-	  List_Add(outmin, &xyz[i][nod]);
-	  List_Add(outmid, &xyz[i][nod]);
-	  List_Add(outmax, &xyz[i][nod]);
+	  outmin->push_back(xyz[i][nod]);
+	  outmid->push_back(xyz[i][nod]);
+	  outmax->push_back(xyz[i][nod]);
 	}
       }
       for(int step = 0; step < data1->getNumTimeSteps(); step++){
@@ -116,9 +116,9 @@ PView *GMSH_EigenvaluesPlugin::execute(PView *v)
 			    {val[3], val[4], val[5]},
 			    {val[6], val[7], val[8]}};
 	  eigenvalue(A, w);
-	  List_Add(outmin, &w[2]);
-	  List_Add(outmid, &w[1]);
-	  List_Add(outmax, &w[0]);
+	  outmin->push_back(w[2]);
+	  outmid->push_back(w[1]);
+	  outmax->push_back(w[0]);
 	}
       }
     }
@@ -126,9 +126,9 @@ PView *GMSH_EigenvaluesPlugin::execute(PView *v)
   
   for(int i = 0; i < data1->getNumTimeSteps(); i++){
     double time = data1->getTime(i);
-    List_Add(dmin->Time, &time);
-    List_Add(dmid->Time, &time);
-    List_Add(dmax->Time, &time);
+    dmin->Time.push_back(time);
+    dmid->Time.push_back(time);
+    dmax->Time.push_back(time);
   }
   dmin->setName(data1->getName() + "_MinEigenvalues");
   dmin->setFileName(data1->getName() + "_MinEigenvalues.pos");
diff --git a/Plugin/Eigenvectors.cpp b/Plugin/Eigenvectors.cpp
index d7245375f17741fccb14fe64eddfed97be0252c1..11e5a9082f31697bf5ee0b06e5c04aafd4248f41 100644
--- a/Plugin/Eigenvectors.cpp
+++ b/Plugin/Eigenvectors.cpp
@@ -58,17 +58,17 @@ void GMSH_EigenvectorsPlugin::catchErrorMessage(char *errorMessage) const
   strcpy(errorMessage, "Eigenvectors failed...");
 }
 
-static List_T *incrementList(PViewDataList *data2, int numEdges)
+static std::vector<double> *incrementList(PViewDataList *data2, int numEdges)
 {
   switch(numEdges){
-  case 0: data2->NbVP++; return data2->VP;
-  case 1: data2->NbVL++; return data2->VL;
-  case 3: data2->NbVT++; return data2->VT;
-  case 4: data2->NbVQ++; return data2->VQ;
-  case 6: data2->NbVS++; return data2->VS;
-  case 12: data2->NbVH++; return data2->VH;
-  case 9: data2->NbVI++; return data2->VI;
-  case 8: data2->NbVY++; return data2->VY;
+  case 0: data2->NbVP++; return &data2->VP;
+  case 1: data2->NbVL++; return &data2->VL;
+  case 3: data2->NbVT++; return &data2->VT;
+  case 4: data2->NbVQ++; return &data2->VQ;
+  case 6: data2->NbVS++; return &data2->VS;
+  case 12: data2->NbVH++; return &data2->VH;
+  case 9: data2->NbVI++; return &data2->VI;
+  case 8: data2->NbVY++; return &data2->VY;
   default: return 0;
   }
 }
@@ -94,9 +94,9 @@ PView *GMSH_EigenvectorsPlugin::execute(PView *v)
     return v;
   }
 
-  PView *min = new PView(true);
-  PView *mid = new PView(true);
-  PView *max = new PView(true);
+  PView *min = new PView();
+  PView *mid = new PView();
+  PView *max = new PView();
 
   PViewDataList *dmin = getDataList(min);
   PViewDataList *dmid = getDataList(mid);
@@ -110,9 +110,9 @@ PView *GMSH_EigenvectorsPlugin::execute(PView *v)
       int numComp = data1->getNumComponents(0, ent, ele);
       if(numComp != 9) continue;
       int numEdges = data1->getNumEdges(0, ent, ele);
-      List_T *outmin = incrementList(dmin, numEdges);
-      List_T *outmid = incrementList(dmid, numEdges);
-      List_T *outmax = incrementList(dmax, numEdges);
+      std::vector<double> *outmin = incrementList(dmin, numEdges);
+      std::vector<double> *outmid = incrementList(dmid, numEdges);
+      std::vector<double> *outmax = incrementList(dmax, numEdges);
       if(!outmin || !outmid || !outmax) continue;
       int numNodes = data1->getNumNodes(0, ent, ele);
       double xyz[3][8];
@@ -120,9 +120,9 @@ PView *GMSH_EigenvectorsPlugin::execute(PView *v)
 	data1->getNode(0, ent, ele, nod, xyz[0][nod], xyz[1][nod], xyz[2][nod]);
       for(int i = 0; i < 3; i++){
 	for(int nod = 0; nod < numNodes; nod++){
-	  List_Add(outmin, &xyz[i][nod]);
-	  List_Add(outmid, &xyz[i][nod]);
-	  List_Add(outmax, &xyz[i][nod]);
+	  outmin->push_back(xyz[i][nod]);
+	  outmid->push_back(xyz[i][nod]);
+	  outmax->push_back(xyz[i][nod]);
 	}
       }
       for(int step = 0; step < data1->getNumTimeSteps(); step++){
@@ -139,9 +139,9 @@ PView *GMSH_EigenvectorsPlugin::execute(PView *v)
 	    double res;
 	    // wrong if there are complex eigenvals (B contains both
 	    // real and imag parts: cf. explanation in EigSolve.cpp)
-	    res = wr[0] * B[i]; List_Add(outmin, &res);
-	    res = wr[1] * B[3 + i]; List_Add(outmid, &res);
-	    res = wr[2] * B[6 + i]; List_Add(outmax, &res);
+	    res = wr[0] * B[i]; outmin->push_back(res);
+	    res = wr[1] * B[3 + i]; outmid->push_back(res);
+	    res = wr[2] * B[6 + i]; outmax->push_back(res);
 	  }
 	}
       }
@@ -150,13 +150,13 @@ PView *GMSH_EigenvectorsPlugin::execute(PView *v)
 
   if(nbcomplex)
     Msg::Error("%d tensors have complex eigenvalues/eigenvectors", 
-	nbcomplex);
+               nbcomplex);
   
   for(int i = 0; i < data1->getNumTimeSteps(); i++){
     double time = data1->getTime(i);
-    List_Add(dmin->Time, &time);
-    List_Add(dmid->Time, &time);
-    List_Add(dmax->Time, &time);
+    dmin->Time.push_back(time);
+    dmid->Time.push_back(time);
+    dmax->Time.push_back(time);
   }
   dmin->setName(data1->getName() + "_MinEigenvectors");
   dmin->setFileName(data1->getName() + "_MinEigenvectors.pos");
diff --git a/Plugin/Extract.cpp b/Plugin/Extract.cpp
index 79846332391814da189b27a8c0cdba4b280533e2..4aeaec6ce93f710835f3e9419add949b437f7f22 100644
--- a/Plugin/Extract.cpp
+++ b/Plugin/Extract.cpp
@@ -97,17 +97,17 @@ void GMSH_ExtractPlugin::catchErrorMessage(char *errorMessage) const
   strcpy(errorMessage, "Extract failed...");
 }
 
-static void extract(const char *expr[9], List_T *inList, int inNb, 
-                    List_T *outListScalar, int *outNbScalar, 
-                    List_T *outListVector, int *outNbVector, 
-                    List_T *outListTensor, int *outNbTensor, 
+static void extract(const char *expr[9], std::vector<double> &inList, int inNb, 
+                    std::vector<double> *outListScalar, int *outNbScalar, 
+                    std::vector<double> *outListVector, int *outNbVector, 
+                    std::vector<double> *outListTensor, int *outNbTensor, 
                     int timeStep, int nbNod, int nbComp)
 {
   if(!inNb)
     return;
 
   int outNbComp, *outNb;
-  List_T *outList;
+  std::vector<double> *outList;
 
   if(strlen(expr[3]) || strlen(expr[4]) || strlen(expr[5]) || 
      strlen(expr[6]) || strlen(expr[7]) || strlen(expr[8])){
@@ -166,13 +166,13 @@ static void extract(const char *expr[9], List_T *inList, int inNb,
   int timeBeg = (timeStep < 0) ? 0 : timeStep;
   int timeEnd = (timeStep < 0) ? -timeStep : timeStep + 1;
 
-  int nb = List_Nbr(inList) / inNb;
-  for(int i = 0; i < List_Nbr(inList); i += nb) {
-    double *x = (double *)List_Pointer_Fast(inList, i);
-    double *y = (double *)List_Pointer_Fast(inList, i + nbNod);
-    double *z = (double *)List_Pointer_Fast(inList, i + 2 * nbNod);
+  int nb = inList.size() / inNb;
+  for(unsigned int i = 0; i < inList.size(); i += nb) {
+    double *x = &inList[i];
+    double *y = &inList[i + nbNod];
+    double *z = &inList[i + 2 * nbNod];
     for(int j = 0; j < 3 * nbNod; j++)
-      List_Add(outList, List_Pointer_Fast(inList, i + j));
+      outList->push_back(inList[i + j]);
     for(int j = timeBeg; j < timeEnd; j++){
       for(int k = 0; k < nbNod; k++){
         double xx = x[k];
@@ -180,7 +180,7 @@ static void extract(const char *expr[9], List_T *inList, int inNb,
         double zz = z[k];
         double d[9] = {0., 0., 0., 0., 0., 0., 0., 0., 0.};
         for(int l = 0; l < nbComp; l++)
-          List_Read(inList, i + 3 * nbNod + nbNod * nbComp * j + nbComp * k + l, &d[l]);
+          d[l] = inList[i + 3 * nbNod + nbNod * nbComp * j + nbComp * k + l];
         for(int l = 0; l < outNbComp; l++){
 #if defined(HAVE_MATH_EVAL)
           char *names[] = { "x", "y", "z", "v0", "v1", "v2", "v3", "v4", "v5", "v6", "v7", "v8" };
@@ -189,7 +189,7 @@ static void extract(const char *expr[9], List_T *inList, int inNb,
 #else
           double res = d[comp[l]];
 #endif
-          List_Add(outList, &res);
+          outList->push_back(res);
         }
       }
     }
@@ -222,7 +222,7 @@ PView *GMSH_ExtractPlugin::execute(PView *v)
   PViewDataList *data1 = getDataList(v1);
   if(!data1) return v;
 
-  PView *v2 = new PView(true, data1->getNumElements());
+  PView *v2 = new PView();
 
   PViewDataList *data2 = getDataList(v2);
   if(!data2) return v;
@@ -237,67 +237,66 @@ PView *GMSH_ExtractPlugin::execute(PView *v)
   }
 
   // points
-  extract(expr, data1->SP, data1->NbSP, data2->SP, &data2->NbSP, 
-          data2->VP, &data2->NbVP, data2->TP, &data2->NbTP, step, 1, 1);
-  extract(expr, data1->VP, data1->NbVP, data2->SP, &data2->NbSP,
-          data2->VP, &data2->NbVP, data2->TP, &data2->NbTP, step, 1, 3);
-  extract(expr, data1->TP, data1->NbTP, data2->SP, &data2->NbSP,
-          data2->VP, &data2->NbVP, data2->TP, &data2->NbTP, step, 1, 9);
+  extract(expr, data1->SP, data1->NbSP, &data2->SP, &data2->NbSP, 
+          &data2->VP, &data2->NbVP, &data2->TP, &data2->NbTP, step, 1, 1);
+  extract(expr, data1->VP, data1->NbVP, &data2->SP, &data2->NbSP,
+          &data2->VP, &data2->NbVP, &data2->TP, &data2->NbTP, step, 1, 3);
+  extract(expr, data1->TP, data1->NbTP, &data2->SP, &data2->NbSP,
+          &data2->VP, &data2->NbVP, &data2->TP, &data2->NbTP, step, 1, 9);
   // lines                                                                              
-  extract(expr, data1->SL, data1->NbSL, data2->SL, &data2->NbSL,
-          data2->VL, &data2->NbVL, data2->TL, &data2->NbTL, step, 2, 1);
-  extract(expr, data1->VL, data1->NbVL, data2->SL, &data2->NbSL,
-          data2->VL, &data2->NbVL, data2->TL, &data2->NbTL, step, 2, 3);
-  extract(expr, data1->TL, data1->NbTL, data2->SL, &data2->NbSL,
-          data2->VL, &data2->NbVL, data2->TL, &data2->NbTL, step, 2, 9);
+  extract(expr, data1->SL, data1->NbSL, &data2->SL, &data2->NbSL,
+          &data2->VL, &data2->NbVL, &data2->TL, &data2->NbTL, step, 2, 1);
+  extract(expr, data1->VL, data1->NbVL, &data2->SL, &data2->NbSL,
+          &data2->VL, &data2->NbVL, &data2->TL, &data2->NbTL, step, 2, 3);
+  extract(expr, data1->TL, data1->NbTL, &data2->SL, &data2->NbSL,
+          &data2->VL, &data2->NbVL, &data2->TL, &data2->NbTL, step, 2, 9);
   // triangles                                                                          
-  extract(expr, data1->ST, data1->NbST, data2->ST, &data2->NbST,
-          data2->VT, &data2->NbVT, data2->TT, &data2->NbTT, step, 3, 1);
-  extract(expr, data1->VT, data1->NbVT, data2->ST, &data2->NbST,
-          data2->VT, &data2->NbVT, data2->TT, &data2->NbTT, step, 3, 3);
-  extract(expr, data1->TT, data1->NbTT, data2->ST, &data2->NbST,
-          data2->VT, &data2->NbVT, data2->TT, &data2->NbTT, step, 3, 9);
+  extract(expr, data1->ST, data1->NbST, &data2->ST, &data2->NbST,
+          &data2->VT, &data2->NbVT, &data2->TT, &data2->NbTT, step, 3, 1);
+  extract(expr, data1->VT, data1->NbVT, &data2->ST, &data2->NbST,
+          &data2->VT, &data2->NbVT, &data2->TT, &data2->NbTT, step, 3, 3);
+  extract(expr, data1->TT, data1->NbTT, &data2->ST, &data2->NbST,
+          &data2->VT, &data2->NbVT, &data2->TT, &data2->NbTT, step, 3, 9);
   // quadrangles                                                                        
-  extract(expr, data1->SQ, data1->NbSQ, data2->SQ, &data2->NbSQ,
-          data2->VQ, &data2->NbVQ, data2->TQ, &data2->NbTQ, step, 4, 1);
-  extract(expr, data1->VQ, data1->NbVQ, data2->SQ, &data2->NbSQ,
-          data2->VQ, &data2->NbVQ, data2->TQ, &data2->NbTQ, step, 4, 3);
-  extract(expr, data1->TQ, data1->NbTQ, data2->SQ, &data2->NbSQ,
-          data2->VQ, &data2->NbVQ, data2->TQ, &data2->NbTQ, step, 4, 9);
+  extract(expr, data1->SQ, data1->NbSQ, &data2->SQ, &data2->NbSQ,
+          &data2->VQ, &data2->NbVQ, &data2->TQ, &data2->NbTQ, step, 4, 1);
+  extract(expr, data1->VQ, data1->NbVQ, &data2->SQ, &data2->NbSQ,
+          &data2->VQ, &data2->NbVQ, &data2->TQ, &data2->NbTQ, step, 4, 3);
+  extract(expr, data1->TQ, data1->NbTQ, &data2->SQ, &data2->NbSQ,
+          &data2->VQ, &data2->NbVQ, &data2->TQ, &data2->NbTQ, step, 4, 9);
   // tets                                                                               
-  extract(expr, data1->SS, data1->NbSS, data2->SS, &data2->NbSS,
-          data2->VS, &data2->NbVS, data2->TS, &data2->NbTS, step, 4, 1);
-  extract(expr, data1->VS, data1->NbVS, data2->SS, &data2->NbSS,
-          data2->VS, &data2->NbVS, data2->TS, &data2->NbTS, step, 4, 3);
-  extract(expr, data1->TS, data1->NbTS, data2->SS, &data2->NbSS,
-          data2->VS, &data2->NbVS, data2->TS, &data2->NbTS, step, 4, 9);
+  extract(expr, data1->SS, data1->NbSS, &data2->SS, &data2->NbSS,
+          &data2->VS, &data2->NbVS, &data2->TS, &data2->NbTS, step, 4, 1);
+  extract(expr, data1->VS, data1->NbVS, &data2->SS, &data2->NbSS,
+          &data2->VS, &data2->NbVS, &data2->TS, &data2->NbTS, step, 4, 3);
+  extract(expr, data1->TS, data1->NbTS, &data2->SS, &data2->NbSS,
+          &data2->VS, &data2->NbVS, &data2->TS, &data2->NbTS, step, 4, 9);
   // hexas                                                                              
-  extract(expr, data1->SH, data1->NbSH, data2->SH, &data2->NbSH,
-          data2->VH, &data2->NbVH, data2->TH, &data2->NbTH, step, 8, 1);
-  extract(expr, data1->VH, data1->NbVH, data2->SH, &data2->NbSH,
-          data2->VH, &data2->NbVH, data2->TH, &data2->NbTH, step, 8, 3);
-  extract(expr, data1->TH, data1->NbTH, data2->SH, &data2->NbSH,
-          data2->VH, &data2->NbVH, data2->TH, &data2->NbTH, step, 8, 9);
+  extract(expr, data1->SH, data1->NbSH, &data2->SH, &data2->NbSH,
+          &data2->VH, &data2->NbVH, &data2->TH, &data2->NbTH, step, 8, 1);
+  extract(expr, data1->VH, data1->NbVH, &data2->SH, &data2->NbSH,
+          &data2->VH, &data2->NbVH, &data2->TH, &data2->NbTH, step, 8, 3);
+  extract(expr, data1->TH, data1->NbTH, &data2->SH, &data2->NbSH,
+          &data2->VH, &data2->NbVH, &data2->TH, &data2->NbTH, step, 8, 9);
   // prisms                                                                             
-  extract(expr, data1->SI, data1->NbSI, data2->SI, &data2->NbSI,
-          data2->VI, &data2->NbVI, data2->TI, &data2->NbTI, step, 6, 1);
-  extract(expr, data1->VI, data1->NbVI, data2->SI, &data2->NbSI,
-          data2->VI, &data2->NbVI, data2->TI, &data2->NbTI, step, 6, 3);
-  extract(expr, data1->TI, data1->NbTI, data2->SI, &data2->NbSI,
-          data2->VI, &data2->NbVI, data2->TI, &data2->NbTI, step, 6, 9);
+  extract(expr, data1->SI, data1->NbSI, &data2->SI, &data2->NbSI,
+          &data2->VI, &data2->NbVI, &data2->TI, &data2->NbTI, step, 6, 1);
+  extract(expr, data1->VI, data1->NbVI, &data2->SI, &data2->NbSI,
+          &data2->VI, &data2->NbVI, &data2->TI, &data2->NbTI, step, 6, 3);
+  extract(expr, data1->TI, data1->NbTI, &data2->SI, &data2->NbSI,
+          &data2->VI, &data2->NbVI, &data2->TI, &data2->NbTI, step, 6, 9);
   // pyramids                                                                           
-  extract(expr, data1->SY, data1->NbSY, data2->SY, &data2->NbSY,
-          data2->VY, &data2->NbVY, data2->TY, &data2->NbTY, step, 5, 1);
-  extract(expr, data1->VY, data1->NbVY, data2->SY, &data2->NbSY,
-          data2->VY, &data2->NbVY, data2->TY, &data2->NbTY, step, 5, 3);
-  extract(expr, data1->TY, data1->NbTY, data2->SY, &data2->NbSY,
-          data2->VY, &data2->NbVY, data2->TY, &data2->NbTY, step, 5, 9);
+  extract(expr, data1->SY, data1->NbSY, &data2->SY, &data2->NbSY,
+          &data2->VY, &data2->NbVY, &data2->TY, &data2->NbTY, step, 5, 1);
+  extract(expr, data1->VY, data1->NbVY, &data2->SY, &data2->NbSY,
+          &data2->VY, &data2->NbVY, &data2->TY, &data2->NbTY, step, 5, 3);
+  extract(expr, data1->TY, data1->NbTY, &data2->SY, &data2->NbSY,
+          &data2->VY, &data2->NbVY, &data2->TY, &data2->NbTY, step, 5, 9);
 
   if(step < 0)
-    for(int i = 0; i < List_Nbr(data1->Time); i++)
-      List_Add(data2->Time, List_Pointer(data1->Time, i));
+    data2->Time = data1->Time;
   else
-    List_Add(data2->Time, List_Pointer(data1->Time, step));
+    data2->Time.push_back(data1->Time[step]);
 
   data2->setName(data1->getName() + "_Extract");
   data2->setFileName(data1->getName() + "_Extract.pos");
diff --git a/Plugin/ExtractEdges.cpp b/Plugin/ExtractEdges.cpp
index bce79886499ddc4670d9fc462602f62ed2fa1bf4..fd0896b5adccc94d02dda898991db9d04e1a2325 100644
--- a/Plugin/ExtractEdges.cpp
+++ b/Plugin/ExtractEdges.cpp
@@ -4,7 +4,6 @@
 // bugs and problems to <gmsh@geuz.org>.
 
 #include "ExtractEdges.h"
-#include "BDS.h"
 
 StringXNumber ExtractEdgesOptions_Number[] = {
   {GMSH_FULLRC, "Angle", NULL, 22.},
@@ -68,32 +67,16 @@ PView *GMSH_ExtractEdgesPlugin::execute(PView *v)
   PViewDataList *data1 = getDataList(v1);
   if(!data1) return v;
 
-  PView *v2 = new PView(true);
+  PView *v2 = new PView();
 
   PViewDataList *data2 = getDataList(v2);
   if(!data2) return v;
 
-  BDS_Mesh bds;
+  //BDS_Mesh bds;
   //bds.import_view(v1, CTX::instance()->lc * 1.e-12);
   //bds.classify(angle * M_PI / 180.);
 
-  Msg::Error("BDS->classify(angle, edge_prolongation) must be reinterfaced");
-
-  std::list<BDS_Edge*>::iterator it  = bds.edges.begin();
-  std::list<BDS_Edge*>::iterator ite = bds.edges.end();
-  while (it != ite){
-    BDS_GeomEntity *g = (*it)->g;
-    if(g && g->classif_degree == 1) {
-      List_Add(data2->SL, &(*it)->p1->X); List_Add(data2->SL, &(*it)->p2->X);
-      List_Add(data2->SL, &(*it)->p1->Y); List_Add(data2->SL, &(*it)->p2->Y);
-      List_Add(data2->SL, &(*it)->p1->Z); List_Add(data2->SL, &(*it)->p2->Z);
-      double val = g->classif_tag;
-      List_Add(data2->SL, &val);
-      List_Add(data2->SL, &val);
-      data2->NbSL++;
-    }
-    ++it;
-  }
+  Msg::Error("classify(angle, edge_prolongation) must be reinterfaced");
 
   data2->setName(data1->getName() + "_ExtractEdges");
   data2->setFileName(data1->getName() + "_ExtractEdges.pos");
diff --git a/Plugin/ExtractElements.cpp b/Plugin/ExtractElements.cpp
index baa3040740cb5b72106c547784b372a3486a02ec..aa0b6a8290c66a31e9139c491010cf43be0b3840 100644
--- a/Plugin/ExtractElements.cpp
+++ b/Plugin/ExtractElements.cpp
@@ -57,8 +57,8 @@ void GMSH_ExtractElementsPlugin::catchErrorMessage(char *errorMessage) const
   strcpy(errorMessage, "ExtractElements failed...");
 }
 
-static void extract(List_T *inList, int inNb, 
-                    List_T *outList, int *outNb, 
+static void extract(std::vector<double> &inList, int inNb, 
+                    std::vector<double> &outList, int *outNb, 
                     int timeStep, int nbNod, int nbComp)
 {
   if(!inNb)
@@ -67,10 +67,9 @@ static void extract(List_T *inList, int inNb,
   double MinVal = ExtractElementsOptions_Number[0].def;
   double MaxVal = ExtractElementsOptions_Number[1].def;
 
-  int nb = List_Nbr(inList) / inNb;
-  for(int i = 0; i < List_Nbr(inList); i += nb) {
-    double *vals = (double *)List_Pointer_Fast(inList, i + 3 * nbNod + 
-                                               timeStep * nbNod * nbComp);
+  int nb = inList.size() / inNb;
+  for(unsigned int i = 0; i < inList.size(); i += nb) {
+    double *vals = &inList[i + 3 * nbNod + timeStep * nbNod * nbComp];
     double d = 0.;
     for(int k = 0; k < nbNod; k++) {
       double *v = &vals[nbComp * k];
@@ -91,7 +90,7 @@ static void extract(List_T *inList, int inNb,
     // worrying about roundoff errors
     if(d >= MinVal && d < MaxVal){
       for(int j = 0; j < nb; j++)
-        List_Add(outList, List_Pointer_Fast(inList, i + j));
+        outList.push_back(inList[i + j]);
       (*outNb)++;
     }
   }
@@ -108,7 +107,7 @@ PView *GMSH_ExtractElementsPlugin::execute(PView *v)
   PViewDataList *data1 = getDataList(v1);
   if(!data1) return v;
 
-  PView *v2 = new PView(true);
+  PView *v2 = new PView();
 
   PViewDataList *data2 = getDataList(v2);
   if(!data2) return v;
@@ -152,8 +151,7 @@ PView *GMSH_ExtractElementsPlugin::execute(PView *v)
   extract(data1->VY, data1->NbVY, data2->VY, &data2->NbVY, step, 5, 3);
   extract(data1->TY, data1->NbTY, data2->TY, &data2->NbTY, step, 5, 9);
 
-  for(int i = 0; i < List_Nbr(data1->Time); i++)
-    List_Add(data2->Time, List_Pointer(data1->Time, i));
+  data2->Time = data1->Time;
   data2->setName(data1->getName() + "_ExtractElements");
   data2->setFileName(data1->getName() + "_ExtractElements.pos");
   data2->finalize();
diff --git a/Plugin/Gradient.cpp b/Plugin/Gradient.cpp
index 20acd61eb181ba7cd8afc99554eb7cab7ee037d8..0792a1a7f1f6eadcc81cfcb0423791ffd3f00bc9 100644
--- a/Plugin/Gradient.cpp
+++ b/Plugin/Gradient.cpp
@@ -51,31 +51,31 @@ void GMSH_GradientPlugin::catchErrorMessage(char *errorMessage) const
   strcpy(errorMessage, "Gradient failed...");
 }
 
-static List_T *incrementList(PViewDataList *data2, int numComp, int numEdges)
+static std::vector<double> *incrementList(PViewDataList *data2, int numComp, int numEdges)
 {
   if(numComp == 1){
     switch(numEdges){
-    case 0: data2->NbVP++; return data2->VP;
-    case 1: data2->NbVL++; return data2->VL;
-    case 3: data2->NbVT++; return data2->VT;
-    case 4: data2->NbVQ++; return data2->VQ;
-    case 6: data2->NbVS++; return data2->VS;
-    case 12: data2->NbVH++; return data2->VH;
-    case 9: data2->NbVI++; return data2->VI;
-    case 8: data2->NbVY++; return data2->VY;
+    case 0: data2->NbVP++; return &data2->VP;
+    case 1: data2->NbVL++; return &data2->VL;
+    case 3: data2->NbVT++; return &data2->VT;
+    case 4: data2->NbVQ++; return &data2->VQ;
+    case 6: data2->NbVS++; return &data2->VS;
+    case 12: data2->NbVH++; return &data2->VH;
+    case 9: data2->NbVI++; return &data2->VI;
+    case 8: data2->NbVY++; return &data2->VY;
     default: return 0;
     }
   }
   else if(numComp == 3){
     switch(numEdges){
-    case 0: data2->NbTP++; return data2->TP;
-    case 1: data2->NbTL++; return data2->TL;
-    case 3: data2->NbTT++; return data2->TT;
-    case 4: data2->NbTQ++; return data2->TQ;
-    case 6: data2->NbTS++; return data2->TS;
-    case 12: data2->NbTH++; return data2->TH;
-    case 9: data2->NbTI++; return data2->TI;
-    case 8: data2->NbTY++; return data2->TY;
+    case 0: data2->NbTP++; return &data2->TP;
+    case 1: data2->NbTL++; return &data2->TL;
+    case 3: data2->NbTT++; return &data2->TT;
+    case 4: data2->NbTQ++; return &data2->TQ;
+    case 6: data2->NbTS++; return &data2->TS;
+    case 12: data2->NbTH++; return &data2->TH;
+    case 9: data2->NbTI++; return &data2->TI;
+    case 8: data2->NbTY++; return &data2->TY;
     default: return 0;
     }
   }
@@ -95,7 +95,7 @@ PView *GMSH_GradientPlugin::execute(PView *v)
     return v;
   }
 
-  PView *v2 = new PView(true, data1->getNumElements());
+  PView *v2 = new PView();
   PViewDataList *data2 = getDataList(v2);
 
   for(int ent = 0; ent < data1->getNumEntities(0); ent++){
@@ -104,7 +104,7 @@ PView *GMSH_GradientPlugin::execute(PView *v)
       int numComp = data1->getNumComponents(0, ent, ele);
       if(numComp != 1 && numComp != 3) continue;
       int numEdges = data1->getNumEdges(0, ent, ele);
-      List_T *out = incrementList(data2, numComp, numEdges);
+      std::vector<double> *out = incrementList(data2, numComp, numEdges);
       if(!out) continue;
       int numNodes = data1->getNumNodes(0, ent, ele);
       double x[8], y[8], z[8], val[8 * 3];
@@ -114,9 +114,9 @@ PView *GMSH_GradientPlugin::execute(PView *v)
       elementFactory factory;
       element *element = factory.create(numNodes, dim, x, y, z);
       if(!element) continue;
-      for(int nod = 0; nod < numNodes; nod++) List_Add(out, &x[nod]);
-      for(int nod = 0; nod < numNodes; nod++) List_Add(out, &y[nod]);
-      for(int nod = 0; nod < numNodes; nod++) List_Add(out, &z[nod]);
+      for(int nod = 0; nod < numNodes; nod++) out->push_back(x[nod]);
+      for(int nod = 0; nod < numNodes; nod++) out->push_back(y[nod]);
+      for(int nod = 0; nod < numNodes; nod++) out->push_back(z[nod]);
       for(int step = 0; step < data1->getNumTimeSteps(); step++){
 	for(int nod = 0; nod < numNodes; nod++)
 	  for(int comp = 0; comp < numComp; comp++)
@@ -126,9 +126,9 @@ PView *GMSH_GradientPlugin::execute(PView *v)
 	  element->getNode(nod, u, v, w);
 	  for(int comp = 0; comp < numComp; comp++){
 	    element->interpolateGrad(val + comp, u, v, w, f, numComp);
-	    List_Add(out, &f[0]);
-	    List_Add(out, &f[1]);
-	    List_Add(out, &f[2]);
+	    out->push_back(f[0]);
+	    out->push_back(f[1]);
+	    out->push_back(f[2]);
 	  }
 	}
       }
@@ -138,7 +138,7 @@ PView *GMSH_GradientPlugin::execute(PView *v)
 
   for(int i = 0; i < data1->getNumTimeSteps(); i++){
     double time = data1->getTime(i);
-    List_Add(data2->Time, &time);
+    data2->Time.push_back(time);
   }
   data2->setName(data1->getName() + "_Gradient");
   data2->setFileName(data1->getName() + "_Gradient.pos");
diff --git a/Plugin/HarmonicToTime.cpp b/Plugin/HarmonicToTime.cpp
index e206cf0ad7d420ec28bd7fe5cd0b1460354574a7..5d89e366fe124eef02d312d568c5fb7608f868ab 100644
--- a/Plugin/HarmonicToTime.cpp
+++ b/Plugin/HarmonicToTime.cpp
@@ -65,25 +65,24 @@ void GMSH_HarmonicToTimePlugin::catchErrorMessage(char *errorMessage) const
 }
 
 
-static void h2t(int nb1, List_T *list1, int *nb2, List_T *list2,
+static void h2t(int nb1, std::vector<double> &list1, 
+                int *nb2, std::vector<double> &list2,
                 int nbNod, int nbComp, int rIndex, int iIndex, int nSteps)
 {
   if(!nb1) return;
 
-  int nb = List_Nbr(list1) / nb1;
-  for(int i = 0; i < List_Nbr(list1); i += nb) {
+  int nb = list1.size() / nb1;
+  for(unsigned int i = 0; i < list1.size(); i += nb) {
     for(int j = 0; j < 3 * nbNod; j++)
-      List_Add(list2, List_Pointer_Fast(list1, i + j));
-    double *valr = (double *)List_Pointer_Fast(list1, i + 3 * nbNod +
-                                               nbNod * nbComp * rIndex);
-    double *vali = (double *)List_Pointer_Fast(list1, i + 3 * nbNod +
-                                               nbNod * nbComp * iIndex);
+      list2.push_back(list1[i + j]);
+    double *valr = &list1[i + 3 * nbNod + nbNod * nbComp * rIndex];
+    double *vali = &list1[i + 3 * nbNod + nbNod * nbComp * iIndex];
     for(int t = 0; t < nSteps; t++) {
       double p = 2. * M_PI * t / nSteps;
       for(int j = 0; j < nbNod; j++) {
         for(int k = 0; k < nbComp; k++) {
           double val = valr[nbComp * j + k] * cos(p) - vali[nbComp * j + k] * sin(p);
-          List_Add(list2, &val);          
+          list2.push_back(val);          
         }
       }
     }
@@ -115,7 +114,7 @@ PView *GMSH_HarmonicToTimePlugin::execute(PView * v)
     return v1;
   }
 
-  PView *v2 = new PView(true, data1->getNumElements() * nSteps);
+  PView *v2 = new PView();
 
   PViewDataList *data2 = getDataList(v2);
   if(!data2) return v;
@@ -147,7 +146,7 @@ PView *GMSH_HarmonicToTimePlugin::execute(PView * v)
 
   for(int i = 0; i < nSteps; i++){
     double p = 2. * M_PI * i / (double)nSteps;
-    List_Add(data2->Time, &p);
+    data2->Time.push_back(p);
   }
   data2->setName(data1->getName() + "_HarmonicToTime");
   data2->setFileName(data1->getName() + "_HarmonicToTime.pos");
diff --git a/Plugin/Integrate.cpp b/Plugin/Integrate.cpp
index 95520bcf64d1d79e3aeea911f4d0ad7fea1c687c..5f7abd58a847fa4d131eac8889bfb0be4006f92c 100644
--- a/Plugin/Integrate.cpp
+++ b/Plugin/Integrate.cpp
@@ -67,15 +67,15 @@ PView *GMSH_IntegratePlugin::execute(PView * v)
   if(!v1) return v;
 
   PViewData *data1 = v1->getData();
-  PView *v2 = new PView(true);
+  PView *v2 = new PView();
   PViewDataList *data2 = getDataList(v2);
   
   double x = data1->getBoundingBox().center().x();
   double y = data1->getBoundingBox().center().y();
   double z = data1->getBoundingBox().center().z();
-  List_Add(data2->SP, &x);
-  List_Add(data2->SP, &y);
-  List_Add(data2->SP, &z);
+  data2->SP.push_back(x);
+  data2->SP.push_back(y);
+  data2->SP.push_back(z);
   for(int step = 0; step < data1->getNumTimeSteps(); step++){
     double res = 0, resv[9] = {0, 0, 0, 0, 0, 0, 0, 0, 0};
     bool simpleSum = false;
@@ -121,14 +121,14 @@ PView *GMSH_IntegratePlugin::execute(PView * v)
                 resv[8]);
     else
       Msg::Info("Step %d: integral = %.16g", step, res);
-    List_Add(data2->SP, &res);
+    data2->SP.push_back(res);
   }
   data2->NbSP = 1;
   v2->getOptions()->intervalsType = PViewOptions::Numeric;
   
   for(int i = 0; i < data1->getNumTimeSteps(); i++){
     double time = data1->getTime(i);
-    List_Add(data2->Time, &time);
+    data2->Time.push_back(time);
   }
   data2->setName(data1->getName() + "_Integrate");
   data2->setFileName(data1->getName() + "_Integrate.pos");
diff --git a/Plugin/Lambda2.cpp b/Plugin/Lambda2.cpp
index 0ebc895fbf75835198ca0e4849dadcf086f2b77c..a1301e478782b2ad93044d480e8c6ccaa55feb55 100644
--- a/Plugin/Lambda2.cpp
+++ b/Plugin/Lambda2.cpp
@@ -91,39 +91,34 @@ static int inv3x3tran(double mat[3][3], double inv[3][3], double *det)
   return 1;
 }
 
-static void eigen(List_T *inList, int inNb, 
-                  List_T *outList, int *outNb,
+static void eigen(std::vector<double> &inList, int inNb, 
+                  std::vector<double> &outList, int *outNb,
                   int nbTime, int nbNod, int nbComp, int lam)
 {
   if(!inNb || (nbComp != 3 && nbComp != 9) || lam < 1 || lam > 3)
     return;
 
   // loop on elements  
-  int nb = List_Nbr(inList) / inNb;
-  for(int i = 0; i < List_Nbr(inList); i += nb) {
-
-    // FIXME: there was this test in the old Plugin(Gradient)
-    // double *yy = (double *)List_Pointer_Fast(inList, i + nbNod);
-    // if(yy[0] > 0){
+  int nb = inList.size() / inNb;
+  for(unsigned int i = 0; i < inList.size(); i += nb) {
 
     // copy node coordinates
     for(int j = 0; j < 3 * nbNod; j++)
-      List_Add(outList, List_Pointer_Fast(inList, i + j));
+      outList.push_back(inList[i + j]);
     
     // loop on time steps
     for(int j = 0; j < nbTime; j++){
 
-      double *x = (double *)List_Pointer_Fast(inList, i);
-      double *y = (double *)List_Pointer_Fast(inList, i + nbNod);
-      double *z = (double *)List_Pointer_Fast(inList, i + 2 * nbNod);
+      double *x = &inList[i];
+      double *y = &inList[i + nbNod];
+      double *z = &inList[i + 2 * nbNod];
 
       double GradVel[3][3];
 
       if(nbComp == 9){ 
         // val is the velocity gradient tensor: we assume that it is
         // constant per element
-        double *v = (double *)List_Pointer_Fast(inList, i + 3 * nbNod + 
-                                                nbNod * nbComp * j + nbComp * 0);
+        double *v = &inList[i + 3 * nbNod + nbNod * nbComp * j + nbComp * 0];
         GradVel[0][0] = v[0]; GradVel[0][1] = v[1]; GradVel[0][2] = v[2];
         GradVel[1][0] = v[3]; GradVel[1][1] = v[4]; GradVel[1][2] = v[5];
         GradVel[2][0] = v[6]; GradVel[2][1] = v[7]; GradVel[2][2] = v[8];
@@ -137,8 +132,7 @@ static void eigen(List_T *inList, int inNb,
         const int MAX_NOD = 4; 
         double val[3][MAX_NOD];
         for(int k = 0; k < nbNod; k++){
-          double *v = (double *)List_Pointer_Fast(inList, i + 3 * nbNod + 
-                                                  nbNod * nbComp * j + nbComp * k);
+          double *v = &inList[i + 3 * nbNod + nbNod * nbComp * j + nbComp * k];
           for(int l = 0; l < 3; l++){
             val[l][k] = v[l];
           }
@@ -217,14 +211,11 @@ static void eigen(List_T *inList, int inNb,
       double lambda[3];
       eigenvalue(a, lambda);
       for(int k = 0; k < nbNod; k++)
-        List_Add(outList, &lambda[lam-1]);
+        outList.push_back(lambda[lam-1]);
     }
 
     (*outNb)++;
 
-    // FIXME: end of the yy[0]>0 test in the old Plugin(Gradient)
-    // }
-    
   }
 }
 
@@ -239,7 +230,7 @@ PView *GMSH_Lambda2Plugin::execute(PView *v)
   PViewDataList *data1 = getDataList(v1);
   if(!data1) return v;
 
-  PView *v2 = new PView(true);
+  PView *v2 = new PView();
 
   PViewDataList *data2 = getDataList(v2);
   if(!data2) return v;
@@ -266,8 +257,7 @@ PView *GMSH_Lambda2Plugin::execute(PView *v)
   //eigen(data1->VI, data1->NbVI, data2->SI, &data2->NbSI, nts, 6, 3, ev);
   //eigen(data1->VY, data1->NbVY, data2->SY, &data2->NbSY, nts, 5, 3, ev);
 
-  for(int i = 0; i < List_Nbr(data1->Time); i++)
-    List_Add(data2->Time, List_Pointer(data1->Time, i));
+  data2->Time = data1->Time;
   data2->setName(data1->getName() + "_Lambda2");
   data2->setFileName(data1->getName() + "_Lambda2.pos");
   data2->finalize();
diff --git a/Plugin/Levelset.cpp b/Plugin/Levelset.cpp
index 50579da9b9e02845b7210be99f2065f01cb9ecbe..799cfab65802e521d5fd37b6100079ee407e71d4 100644
--- a/Plugin/Levelset.cpp
+++ b/Plugin/Levelset.cpp
@@ -5,7 +5,6 @@
 
 #include "Levelset.h"
 #include "MakeSimplex.h"
-#include "ListUtils.h"
 #include "Numeric.h"
 #include "adaptiveData.h"
 
@@ -193,50 +192,50 @@ void GMSH_LevelsetPlugin::_addElement(int step, int np, int numEdges, int numCom
                                       double xp[12], double yp[12], double zp[12],
                                       double valp[12][9], PViewDataList *out)
 {
-  List_T *list;
+  std::vector<double> *list;
   int *nbPtr;
   switch(np){
   case 1:
-    if(numComp == 1)      { list = out->SP; nbPtr = &out->NbSP; }
-    else if(numComp == 3) { list = out->VP; nbPtr = &out->NbVP; }
-    else                  { list = out->TP; nbPtr = &out->NbTP; }
+    if(numComp == 1)      { list = &out->SP; nbPtr = &out->NbSP; }
+    else if(numComp == 3) { list = &out->VP; nbPtr = &out->NbVP; }
+    else                  { list = &out->TP; nbPtr = &out->NbTP; }
     break;
   case 2:
-    if(numComp == 1)      { list = out->SL; nbPtr = &out->NbSL; }
-    else if(numComp == 3) { list = out->VL; nbPtr = &out->NbVL; }
-    else                  { list = out->TL; nbPtr = &out->NbTL; }
+    if(numComp == 1)      { list = &out->SL; nbPtr = &out->NbSL; }
+    else if(numComp == 3) { list = &out->VL; nbPtr = &out->NbVL; }
+    else                  { list = &out->TL; nbPtr = &out->NbTL; }
     break;
   case 3:
-    if(numComp == 1)      { list = out->ST; nbPtr = &out->NbST; }
-    else if(numComp == 3) { list = out->VT; nbPtr = &out->NbVT; }
-    else                  { list = out->TT; nbPtr = &out->NbTT; }
+    if(numComp == 1)      { list = &out->ST; nbPtr = &out->NbST; }
+    else if(numComp == 3) { list = &out->VT; nbPtr = &out->NbVT; }
+    else                  { list = &out->TT; nbPtr = &out->NbTT; }
     break;
   case 4:
     if(!_extractVolume || numEdges <= 4){
-      if(numComp == 1)      { list = out->SQ; nbPtr = &out->NbSQ; }
-      else if(numComp == 3) { list = out->VQ; nbPtr = &out->NbVQ; }
-      else                  { list = out->TQ; nbPtr = &out->NbTQ; }
+      if(numComp == 1)      { list = &out->SQ; nbPtr = &out->NbSQ; }
+      else if(numComp == 3) { list = &out->VQ; nbPtr = &out->NbVQ; }
+      else                  { list = &out->TQ; nbPtr = &out->NbTQ; }
     }
     else{
-      if(numComp == 1)      { list = out->SS; nbPtr = &out->NbSS; }
-      else if(numComp == 3) { list = out->VS; nbPtr = &out->NbVS; }
-      else                  { list = out->TS; nbPtr = &out->NbTS; }
+      if(numComp == 1)      { list = &out->SS; nbPtr = &out->NbSS; }
+      else if(numComp == 3) { list = &out->VS; nbPtr = &out->NbVS; }
+      else                  { list = &out->TS; nbPtr = &out->NbTS; }
     }
     break;
   case 5:
-    if(numComp == 1)      { list = out->SY; nbPtr = &out->NbSY; }
-    else if(numComp == 3) { list = out->VY; nbPtr = &out->NbVY; }
-    else                  { list = out->TY; nbPtr = &out->NbTY; }
+    if(numComp == 1)      { list = &out->SY; nbPtr = &out->NbSY; }
+    else if(numComp == 3) { list = &out->VY; nbPtr = &out->NbVY; }
+    else                  { list = &out->TY; nbPtr = &out->NbTY; }
     break;
   case 6:
-    if(numComp == 1)      { list = out->SI; nbPtr = &out->NbSI; }
-    else if(numComp == 3) { list = out->VI; nbPtr = &out->NbVI; }
-    else                  { list = out->TI; nbPtr = &out->NbTI; }
+    if(numComp == 1)      { list = &out->SI; nbPtr = &out->NbSI; }
+    else if(numComp == 3) { list = &out->VI; nbPtr = &out->NbVI; }
+    else                  { list = &out->TI; nbPtr = &out->NbTI; }
     break;
   case 8:
-    if(numComp == 1)      { list = out->SH; nbPtr = &out->NbSH; }
-    else if(numComp == 3) { list = out->VH; nbPtr = &out->NbVH; }
-    else                  { list = out->TH; nbPtr = &out->NbTH; }
+    if(numComp == 1)      { list = &out->SH; nbPtr = &out->NbSH; }
+    else if(numComp == 3) { list = &out->VH; nbPtr = &out->NbVH; }
+    else                  { list = &out->TH; nbPtr = &out->NbTH; }
     break;
   default:
     return;
@@ -245,16 +244,16 @@ void GMSH_LevelsetPlugin::_addElement(int step, int np, int numEdges, int numCom
   // copy the elements in the output data
   if(!step || !_valueIndependent) {
     for(int k = 0; k < np; k++) 
-      List_Add(list, &xp[k]);
+      list->push_back(xp[k]);
     for(int k = 0; k < np; k++)
-      List_Add(list, &yp[k]);
+      list->push_back(yp[k]);
     for(int k = 0; k < np; k++)
-      List_Add(list, &zp[k]);
+      list->push_back(zp[k]);
     (*nbPtr)++;
   }
   for(int k = 0; k < np; k++)
     for(int l = 0; l < numComp; l++)
-      List_Add(list, &valp[k][l]);
+      list->push_back(valp[k][l]);
 }
 
 void GMSH_LevelsetPlugin::_cutAndAddElements(PViewData *vdata, PViewData *wdata,
@@ -431,7 +430,7 @@ PView *GMSH_LevelsetPlugin::execute(PView *v)
   if(_valueIndependent) {
     // create a single output view containing the (possibly
     // multi-step) levelset
-    PViewDataList *out = getDataList(new PView(true));
+    PViewDataList *out = getDataList(new PView());
     for(int ent = 0; ent < vdata->getNumEntities(0); ent++){
       for(int ele = 0; ele < vdata->getNumElements(0, ent); ele++){
 	if(vdata->skipElement(0, ent, ele)) continue;
@@ -453,7 +452,7 @@ PView *GMSH_LevelsetPlugin::execute(PView *v)
   else{
     // create one view per timestep
     for(int step = 0; step < vdata->getNumTimeSteps(); step++){
-      PViewDataList *out = getDataList(new PView(true));
+      PViewDataList *out = getDataList(new PView());
       for(int ent = 0; ent < vdata->getNumEntities(step); ent++){
         for(int ele = 0; ele < vdata->getNumElements(step, ent); ele++){
 	  if(vdata->skipElement(step, ent, ele)) continue;
diff --git a/Plugin/MakeSimplex.cpp b/Plugin/MakeSimplex.cpp
index cb8797edf078ebf2c328c06f3d1fc73042842d45..62f6a85364684da29e9a72aec67e2485ea972d0a 100644
--- a/Plugin/MakeSimplex.cpp
+++ b/Plugin/MakeSimplex.cpp
@@ -59,7 +59,8 @@ void GMSH_MakeSimplexPlugin::catchErrorMessage(char *errorMessage) const
 }
 
 static void decomposeList(PViewDataList *data, int nbNod, int nbComp,
-                          List_T **listIn, int *nbIn, List_T *listOut, int *nbOut)
+                          std::vector<double> &listIn, int *nbIn, 
+                          std::vector<double> &listOut, int *nbOut)
 {
   double xNew[4], yNew[4], zNew[4];
   double *valNew = new double[data->getNumTimeSteps() * nbComp * nbNod];
@@ -68,29 +69,29 @@ static void decomposeList(PViewDataList *data, int nbNod, int nbComp,
   if(!(*nbIn))
     return;
 
-  int nb = List_Nbr(*listIn) / (*nbIn);
-  for(int i = 0; i < List_Nbr(*listIn); i += nb){
-    double *x = (double *)List_Pointer(*listIn, i);
-    double *y = (double *)List_Pointer(*listIn, i + nbNod);
-    double *z = (double *)List_Pointer(*listIn, i + 2 * nbNod);
-    double *val = (double *)List_Pointer(*listIn, i + 3 * nbNod); 
+  int nb = listIn.size() / (*nbIn);
+  for(unsigned int i = 0; i < listIn.size(); i += nb){
+    double *x = &listIn[i];
+    double *y = &listIn[i + nbNod];
+    double *z = &listIn[i + 2 * nbNod];
+    double *val = &listIn[i + 3 * nbNod]; 
     for(int j = 0; j < dec.numSimplices(); j++){
       dec.decompose(j, x, y, z, val, xNew, yNew, zNew, valNew);
       for(int k = 0; k < dec.numSimplexNodes(); k++)
-        List_Add(listOut, &xNew[k]);
+        listOut.push_back(xNew[k]);
       for(int k = 0; k < dec.numSimplexNodes(); k++)
-        List_Add(listOut, &yNew[k]);
+        listOut.push_back(yNew[k]);
       for(int k = 0; k < dec.numSimplexNodes(); k++)
-        List_Add(listOut, &zNew[k]);
+        listOut.push_back(zNew[k]);
       for(int k = 0; k < dec.numSimplexNodes() * data->getNumTimeSteps() * nbComp; k++)
-        List_Add(listOut, &valNew[k]);
+        listOut.push_back(valNew[k]);
       (*nbOut)++;
     }
   }
 
   delete [] valNew;
 
-  List_Reset(*listIn);
+  listIn.clear();
   *nbIn = 0;
 }
 
@@ -105,24 +106,24 @@ PView *GMSH_MakeSimplexPlugin::execute(PView *v)
   if(!data1) return v;
 
   // quads
-  decomposeList(data1, 4, 1, &data1->SQ, &data1->NbSQ, data1->ST, &data1->NbST);
-  decomposeList(data1, 4, 3, &data1->VQ, &data1->NbVQ, data1->VT, &data1->NbVT);
-  decomposeList(data1, 4, 9, &data1->TQ, &data1->NbTQ, data1->TT, &data1->NbTT);
+  decomposeList(data1, 4, 1, data1->SQ, &data1->NbSQ, data1->ST, &data1->NbST);
+  decomposeList(data1, 4, 3, data1->VQ, &data1->NbVQ, data1->VT, &data1->NbVT);
+  decomposeList(data1, 4, 9, data1->TQ, &data1->NbTQ, data1->TT, &data1->NbTT);
                           
   // hexas                
-  decomposeList(data1, 8, 1, &data1->SH, &data1->NbSH, data1->SS, &data1->NbSS);
-  decomposeList(data1, 8, 3, &data1->VH, &data1->NbVH, data1->VS, &data1->NbVS);
-  decomposeList(data1, 8, 9, &data1->TH, &data1->NbTH, data1->TS, &data1->NbTS);
+  decomposeList(data1, 8, 1, data1->SH, &data1->NbSH, data1->SS, &data1->NbSS);
+  decomposeList(data1, 8, 3, data1->VH, &data1->NbVH, data1->VS, &data1->NbVS);
+  decomposeList(data1, 8, 9, data1->TH, &data1->NbTH, data1->TS, &data1->NbTS);
                           
   // prisms               
-  decomposeList(data1, 6, 1, &data1->SI, &data1->NbSI, data1->SS, &data1->NbSS);
-  decomposeList(data1, 6, 3, &data1->VI, &data1->NbVI, data1->VS, &data1->NbVS);
-  decomposeList(data1, 6, 9, &data1->TI, &data1->NbTI, data1->TS, &data1->NbTS);
+  decomposeList(data1, 6, 1, data1->SI, &data1->NbSI, data1->SS, &data1->NbSS);
+  decomposeList(data1, 6, 3, data1->VI, &data1->NbVI, data1->VS, &data1->NbVS);
+  decomposeList(data1, 6, 9, data1->TI, &data1->NbTI, data1->TS, &data1->NbTS);
                           
   // pyramids             
-  decomposeList(data1, 5, 1, &data1->SY, &data1->NbSY, data1->SS, &data1->NbSS);
-  decomposeList(data1, 5, 3, &data1->VY, &data1->NbVY, data1->VS, &data1->NbVS);
-  decomposeList(data1, 5, 9, &data1->TY, &data1->NbTY, data1->TS, &data1->NbTS);
+  decomposeList(data1, 5, 1, data1->SY, &data1->NbSY, data1->SS, &data1->NbSS);
+  decomposeList(data1, 5, 3, data1->VY, &data1->NbVY, data1->VS, &data1->NbVS);
+  decomposeList(data1, 5, 9, data1->TY, &data1->NbTY, data1->TS, &data1->NbTS);
 
   data1->finalize();
   v1->setChanged(true);
diff --git a/Plugin/Makefile b/Plugin/Makefile
index 9d013f8352e687529700f28581872c73dad9087f..ae4d7572847257ce5fbf6ceb95a6236ea18b0f44 100644
--- a/Plugin/Makefile
+++ b/Plugin/Makefile
@@ -65,13 +65,13 @@ depend:
 Plugin${OBJEXT}: Plugin.cpp Plugin.h ../Common/Options.h ../Post/ColorTable.h \
   ../Common/GmshMessage.h ../Post/PView.h ../Geo/SPoint3.h \
   ../Post/PViewDataList.h ../Post/PViewData.h ../Geo/SBoundingBox3d.h \
-  ../Geo/SPoint3.h ../Numeric/GmshMatrix.h ../Common/GmshConfig.h \
-  ../Common/ListUtils.h
-PluginManager${OBJEXT}: PluginManager.cpp ../Common/GmshConfig.h Plugin.h \
-  ../Common/Options.h ../Post/ColorTable.h ../Common/GmshMessage.h \
-  ../Post/PView.h ../Geo/SPoint3.h ../Post/PViewDataList.h \
-  ../Post/PViewData.h ../Geo/SBoundingBox3d.h ../Geo/SPoint3.h \
-  ../Numeric/GmshMatrix.h ../Common/ListUtils.h PluginManager.h CutMap.h \
+  ../Geo/SPoint3.h ../Numeric/GmshMatrix.h ../Common/GmshConfig.h
+PluginManager${OBJEXT}: PluginManager.cpp ../Common/GmshConfig.h \
+  ../Common/Context.h ../Geo/CGNSOptions.h ../Mesh/meshPartitionOptions.h \
+  Plugin.h ../Common/Options.h ../Post/ColorTable.h \
+  ../Common/GmshMessage.h ../Post/PView.h ../Geo/SPoint3.h \
+  ../Post/PViewDataList.h ../Post/PViewData.h ../Geo/SBoundingBox3d.h \
+  ../Geo/SPoint3.h ../Numeric/GmshMatrix.h PluginManager.h CutMap.h \
   Levelset.h CutGrid.h StreamLines.h CutPlane.h CutParametric.h \
   CutSphere.h Skin.h ../Common/TreeUtils.h ../Common/avl.h \
   ../Common/ListUtils.h Extract.h ExtractElements.h ExtractEdges.h \
@@ -79,72 +79,69 @@ PluginManager${OBJEXT}: PluginManager.cpp ../Common/GmshConfig.h Plugin.h \
   Divergence.h Annotate.h Remove.h MakeSimplex.h Smooth.h Transform.h \
   LongitudeLatitude.h Triangulate.h Warp.h SphericalRaise.h \
   Eigenvectors.h Eigenvalues.h Lambda2.h Evaluate.h Probe.h FieldView.h \
-  GSHHS.h FiniteElement.h ../Common/Context.h ../Geo/CGNSOptions.h \
-  ../Mesh/meshPartitionOptions.h
+  GSHHS.h FiniteElement.h HomologyComputation.h
 Levelset${OBJEXT}: Levelset.cpp Levelset.h Plugin.h ../Common/Options.h \
   ../Post/ColorTable.h ../Common/GmshMessage.h ../Post/PView.h \
   ../Geo/SPoint3.h ../Post/PViewDataList.h ../Post/PViewData.h \
   ../Geo/SBoundingBox3d.h ../Geo/SPoint3.h ../Numeric/GmshMatrix.h \
-  ../Common/GmshConfig.h ../Common/ListUtils.h MakeSimplex.h \
-  ../Numeric/Numeric.h ../Numeric/GmshMatrix.h ../Post/adaptiveData.h
+  ../Common/GmshConfig.h MakeSimplex.h ../Numeric/Numeric.h \
+  ../Numeric/GmshMatrix.h ../Post/adaptiveData.h
 CutPlane${OBJEXT}: CutPlane.cpp ../Common/GmshConfig.h CutPlane.h Levelset.h \
   Plugin.h ../Common/Options.h ../Post/ColorTable.h \
   ../Common/GmshMessage.h ../Post/PView.h ../Geo/SPoint3.h \
   ../Post/PViewDataList.h ../Post/PViewData.h ../Geo/SBoundingBox3d.h \
-  ../Geo/SPoint3.h ../Numeric/GmshMatrix.h ../Common/ListUtils.h \
-  ../Common/Context.h ../Geo/CGNSOptions.h ../Mesh/meshPartitionOptions.h \
+  ../Geo/SPoint3.h ../Numeric/GmshMatrix.h ../Common/Context.h \
+  ../Geo/CGNSOptions.h ../Mesh/meshPartitionOptions.h \
   ../Graphics/drawContext.h ../Fltk/Draw.h
 CutSphere${OBJEXT}: CutSphere.cpp ../Common/GmshConfig.h CutSphere.h Levelset.h \
   Plugin.h ../Common/Options.h ../Post/ColorTable.h \
   ../Common/GmshMessage.h ../Post/PView.h ../Geo/SPoint3.h \
   ../Post/PViewDataList.h ../Post/PViewData.h ../Geo/SBoundingBox3d.h \
-  ../Geo/SPoint3.h ../Numeric/GmshMatrix.h ../Common/ListUtils.h \
-  ../Common/Context.h ../Geo/CGNSOptions.h ../Mesh/meshPartitionOptions.h \
+  ../Geo/SPoint3.h ../Numeric/GmshMatrix.h ../Common/Context.h \
+  ../Geo/CGNSOptions.h ../Mesh/meshPartitionOptions.h \
   ../Graphics/drawContext.h ../Fltk/Draw.h
 CutMap${OBJEXT}: CutMap.cpp CutMap.h Levelset.h Plugin.h ../Common/Options.h \
   ../Post/ColorTable.h ../Common/GmshMessage.h ../Post/PView.h \
   ../Geo/SPoint3.h ../Post/PViewDataList.h ../Post/PViewData.h \
   ../Geo/SBoundingBox3d.h ../Geo/SPoint3.h ../Numeric/GmshMatrix.h \
-  ../Common/GmshConfig.h ../Common/ListUtils.h ../Common/Context.h \
-  ../Geo/CGNSOptions.h ../Mesh/meshPartitionOptions.h
+  ../Common/GmshConfig.h ../Common/Context.h ../Geo/CGNSOptions.h \
+  ../Mesh/meshPartitionOptions.h
 Smooth${OBJEXT}: Smooth.cpp Smooth.h Plugin.h ../Common/Options.h \
   ../Post/ColorTable.h ../Common/GmshMessage.h ../Post/PView.h \
   ../Geo/SPoint3.h ../Post/PViewDataList.h ../Post/PViewData.h \
   ../Geo/SBoundingBox3d.h ../Geo/SPoint3.h ../Numeric/GmshMatrix.h \
-  ../Common/GmshConfig.h ../Common/ListUtils.h
+  ../Common/GmshConfig.h
 CutParametric${OBJEXT}: CutParametric.cpp ../Common/GmshConfig.h \
   ../Post/OctreePost.h ../Common/Octree.h ../Common/OctreeInternals.h \
   CutParametric.h Plugin.h ../Common/Options.h ../Post/ColorTable.h \
   ../Common/GmshMessage.h ../Post/PView.h ../Geo/SPoint3.h \
   ../Post/PViewDataList.h ../Post/PViewData.h ../Geo/SBoundingBox3d.h \
-  ../Geo/SPoint3.h ../Numeric/GmshMatrix.h ../Common/ListUtils.h \
-  ../Common/Context.h ../Geo/CGNSOptions.h ../Mesh/meshPartitionOptions.h \
+  ../Geo/SPoint3.h ../Numeric/GmshMatrix.h ../Common/Context.h \
+  ../Geo/CGNSOptions.h ../Mesh/meshPartitionOptions.h \
   ../Graphics/drawContext.h ../Fltk/Draw.h
 Lambda2${OBJEXT}: Lambda2.cpp Lambda2.h Plugin.h ../Common/Options.h \
   ../Post/ColorTable.h ../Common/GmshMessage.h ../Post/PView.h \
   ../Geo/SPoint3.h ../Post/PViewDataList.h ../Post/PViewData.h \
   ../Geo/SBoundingBox3d.h ../Geo/SPoint3.h ../Numeric/GmshMatrix.h \
-  ../Common/GmshConfig.h ../Common/ListUtils.h ../Numeric/Numeric.h \
-  ../Numeric/GmshMatrix.h
+  ../Common/GmshConfig.h ../Numeric/Numeric.h ../Numeric/GmshMatrix.h
 Eigenvectors${OBJEXT}: Eigenvectors.cpp Eigenvectors.h Plugin.h \
   ../Common/Options.h ../Post/ColorTable.h ../Common/GmshMessage.h \
   ../Post/PView.h ../Geo/SPoint3.h ../Post/PViewDataList.h \
   ../Post/PViewData.h ../Geo/SBoundingBox3d.h ../Geo/SPoint3.h \
-  ../Numeric/GmshMatrix.h ../Common/GmshConfig.h ../Common/ListUtils.h \
-  ../Numeric/Numeric.h ../Numeric/GmshMatrix.h ../Numeric/EigSolve.h
+  ../Numeric/GmshMatrix.h ../Common/GmshConfig.h ../Numeric/Numeric.h \
+  ../Numeric/GmshMatrix.h ../Numeric/EigSolve.h
 Eigenvalues${OBJEXT}: Eigenvalues.cpp Eigenvalues.h Plugin.h ../Common/Options.h \
   ../Post/ColorTable.h ../Common/GmshMessage.h ../Post/PView.h \
   ../Geo/SPoint3.h ../Post/PViewDataList.h ../Post/PViewData.h \
   ../Geo/SBoundingBox3d.h ../Geo/SPoint3.h ../Numeric/GmshMatrix.h \
-  ../Common/GmshConfig.h ../Common/ListUtils.h ../Numeric/Numeric.h \
-  ../Numeric/GmshMatrix.h
+  ../Common/GmshConfig.h ../Numeric/Numeric.h ../Numeric/GmshMatrix.h
 StreamLines${OBJEXT}: StreamLines.cpp ../Common/GmshConfig.h StreamLines.h \
   Plugin.h ../Common/Options.h ../Post/ColorTable.h \
   ../Common/GmshMessage.h ../Post/PView.h ../Geo/SPoint3.h \
   ../Post/PViewDataList.h ../Post/PViewData.h ../Geo/SBoundingBox3d.h \
-  ../Geo/SPoint3.h ../Numeric/GmshMatrix.h ../Common/ListUtils.h \
-  ../Post/OctreePost.h ../Common/Octree.h ../Common/OctreeInternals.h \
-  ../Common/Context.h ../Geo/CGNSOptions.h ../Mesh/meshPartitionOptions.h \
+  ../Geo/SPoint3.h ../Numeric/GmshMatrix.h ../Post/OctreePost.h \
+  ../Common/Octree.h ../Common/OctreeInternals.h ../Common/Context.h \
+  ../Geo/CGNSOptions.h ../Mesh/meshPartitionOptions.h \
   ../Post/PViewOptions.h ../Post/ColorTable.h ../Graphics/drawContext.h \
   ../Fltk/Draw.h
 CutGrid${OBJEXT}: CutGrid.cpp ../Common/GmshConfig.h ../Post/OctreePost.h \
@@ -152,25 +149,24 @@ CutGrid${OBJEXT}: CutGrid.cpp ../Common/GmshConfig.h ../Post/OctreePost.h \
   ../Common/Options.h ../Post/ColorTable.h ../Common/GmshMessage.h \
   ../Post/PView.h ../Geo/SPoint3.h ../Post/PViewDataList.h \
   ../Post/PViewData.h ../Geo/SBoundingBox3d.h ../Geo/SPoint3.h \
-  ../Numeric/GmshMatrix.h ../Common/ListUtils.h ../Common/Context.h \
-  ../Geo/CGNSOptions.h ../Mesh/meshPartitionOptions.h \
-  ../Graphics/drawContext.h ../Fltk/Draw.h
+  ../Numeric/GmshMatrix.h ../Common/Context.h ../Geo/CGNSOptions.h \
+  ../Mesh/meshPartitionOptions.h ../Graphics/drawContext.h ../Fltk/Draw.h
 Transform${OBJEXT}: Transform.cpp Transform.h Plugin.h ../Common/Options.h \
   ../Post/ColorTable.h ../Common/GmshMessage.h ../Post/PView.h \
   ../Geo/SPoint3.h ../Post/PViewDataList.h ../Post/PViewData.h \
   ../Geo/SBoundingBox3d.h ../Geo/SPoint3.h ../Numeric/GmshMatrix.h \
-  ../Common/GmshConfig.h ../Common/ListUtils.h
+  ../Common/GmshConfig.h
 LongitudeLatitude${OBJEXT}: LongitudeLatitude.cpp LongitudeLatitude.h Plugin.h \
   ../Common/Options.h ../Post/ColorTable.h ../Common/GmshMessage.h \
   ../Post/PView.h ../Geo/SPoint3.h ../Post/PViewDataList.h \
   ../Post/PViewData.h ../Geo/SBoundingBox3d.h ../Geo/SPoint3.h \
-  ../Numeric/GmshMatrix.h ../Common/GmshConfig.h ../Common/ListUtils.h \
-  ../Common/OpenFile.h
+  ../Numeric/GmshMatrix.h ../Common/GmshConfig.h ../Common/OpenFile.h
 Triangulate${OBJEXT}: Triangulate.cpp ../Geo/GModel.h ../Geo/GVertex.h \
   ../Geo/GEntity.h ../Geo/Range.h ../Geo/SPoint3.h \
-  ../Geo/SBoundingBox3d.h ../Geo/SPoint3.h ../Geo/GPoint.h \
-  ../Geo/SPoint2.h ../Geo/GEdge.h ../Geo/GEntity.h ../Geo/GVertex.h \
-  ../Geo/SVector3.h ../Geo/SPoint3.h ../Geo/SPoint3.h ../Geo/SPoint2.h \
+  ../Geo/SBoundingBox3d.h ../Geo/SPoint3.h ../Geo/SOrientedBoundingBox.h \
+  ../Geo/SVector3.h ../Geo/SPoint3.h ../Geo/SPoint2.h ../Geo/Pair.h \
+  ../Geo/GPoint.h ../Geo/SPoint2.h ../Geo/GEdge.h ../Geo/GEntity.h \
+  ../Geo/GVertex.h ../Geo/SVector3.h ../Geo/SPoint3.h ../Geo/SPoint2.h \
   ../Geo/GFace.h ../Geo/GEntity.h ../Geo/GPoint.h ../Geo/GEdgeLoop.h \
   ../Geo/GEdge.h ../Geo/SPoint2.h ../Geo/SVector3.h ../Geo/Pair.h \
   ../Geo/GRegion.h ../Geo/GEntity.h ../Geo/SPoint3.h \
@@ -182,36 +178,35 @@ Triangulate${OBJEXT}: Triangulate.cpp ../Geo/GModel.h ../Geo/GVertex.h \
   ../Common/GmshMessage.h Triangulate.h Plugin.h ../Common/Options.h \
   ../Post/ColorTable.h ../Post/PView.h ../Post/PViewDataList.h \
   ../Post/PViewData.h ../Numeric/GmshMatrix.h ../Common/GmshConfig.h \
-  ../Common/ListUtils.h ../Common/Context.h ../Geo/CGNSOptions.h \
-  ../Mesh/meshPartitionOptions.h
+  ../Common/Context.h ../Geo/CGNSOptions.h ../Mesh/meshPartitionOptions.h
 Warp${OBJEXT}: Warp.cpp Warp.h Plugin.h ../Common/Options.h ../Post/ColorTable.h \
   ../Common/GmshMessage.h ../Post/PView.h ../Geo/SPoint3.h \
   ../Post/PViewDataList.h ../Post/PViewData.h ../Geo/SBoundingBox3d.h \
   ../Geo/SPoint3.h ../Numeric/GmshMatrix.h ../Common/GmshConfig.h \
-  ../Common/ListUtils.h ../Common/SmoothData.h ../Numeric/Numeric.h \
-  ../Numeric/GmshMatrix.h
+  ../Common/SmoothData.h ../Numeric/Numeric.h ../Numeric/GmshMatrix.h
 SphericalRaise${OBJEXT}: SphericalRaise.cpp SphericalRaise.h Plugin.h \
   ../Common/Options.h ../Post/ColorTable.h ../Common/GmshMessage.h \
   ../Post/PView.h ../Geo/SPoint3.h ../Post/PViewDataList.h \
   ../Post/PViewData.h ../Geo/SBoundingBox3d.h ../Geo/SPoint3.h \
-  ../Numeric/GmshMatrix.h ../Common/GmshConfig.h ../Common/ListUtils.h \
-  ../Numeric/Numeric.h ../Numeric/GmshMatrix.h
+  ../Numeric/GmshMatrix.h ../Common/GmshConfig.h ../Numeric/Numeric.h \
+  ../Numeric/GmshMatrix.h
 Skin${OBJEXT}: Skin.cpp Skin.h Plugin.h ../Common/Options.h ../Post/ColorTable.h \
   ../Common/GmshMessage.h ../Post/PView.h ../Geo/SPoint3.h \
   ../Post/PViewDataList.h ../Post/PViewData.h ../Geo/SBoundingBox3d.h \
   ../Geo/SPoint3.h ../Numeric/GmshMatrix.h ../Common/GmshConfig.h \
-  ../Common/ListUtils.h ../Common/TreeUtils.h ../Common/avl.h \
-  ../Common/ListUtils.h ../Common/MallocUtils.h ../Common/Context.h \
-  ../Geo/CGNSOptions.h ../Mesh/meshPartitionOptions.h
+  ../Common/TreeUtils.h ../Common/avl.h ../Common/ListUtils.h \
+  ../Common/MallocUtils.h ../Common/Context.h ../Geo/CGNSOptions.h \
+  ../Mesh/meshPartitionOptions.h
 GSHHS${OBJEXT}: GSHHS.cpp ../Mesh/Field.h ../Common/GmshConfig.h \
   ../Geo/STensor3.h ../Geo/SVector3.h ../Geo/SPoint3.h \
   ../Numeric/GmshMatrix.h ../Common/GmshMessage.h ../Numeric/Numeric.h \
   ../Numeric/GmshMatrix.h ../Post/PView.h ../Geo/SPoint2.h GSHHS.h \
   Plugin.h ../Common/Options.h ../Post/ColorTable.h \
   ../Post/PViewDataList.h ../Post/PViewData.h ../Geo/SBoundingBox3d.h \
-  ../Geo/SPoint3.h ../Common/ListUtils.h ../Geo/GModel.h ../Geo/GVertex.h \
-  ../Geo/GEntity.h ../Geo/Range.h ../Geo/SPoint3.h \
-  ../Geo/SBoundingBox3d.h ../Geo/GPoint.h ../Geo/SPoint2.h ../Geo/GEdge.h \
+  ../Geo/SPoint3.h ../Geo/GModel.h ../Geo/GVertex.h ../Geo/GEntity.h \
+  ../Geo/Range.h ../Geo/SPoint3.h ../Geo/SBoundingBox3d.h \
+  ../Geo/SOrientedBoundingBox.h ../Geo/SVector3.h ../Geo/SPoint2.h \
+  ../Geo/Pair.h ../Geo/GPoint.h ../Geo/SPoint2.h ../Geo/GEdge.h \
   ../Geo/GEntity.h ../Geo/GVertex.h ../Geo/SVector3.h ../Geo/SPoint3.h \
   ../Geo/SPoint2.h ../Geo/GFace.h ../Geo/GEntity.h ../Geo/GPoint.h \
   ../Geo/GEdgeLoop.h ../Geo/GEdge.h ../Geo/SPoint2.h ../Geo/SVector3.h \
@@ -221,125 +216,141 @@ Extract${OBJEXT}: Extract.cpp ../Common/GmshConfig.h Extract.h Plugin.h \
   ../Common/Options.h ../Post/ColorTable.h ../Common/GmshMessage.h \
   ../Post/PView.h ../Geo/SPoint3.h ../Post/PViewDataList.h \
   ../Post/PViewData.h ../Geo/SBoundingBox3d.h ../Geo/SPoint3.h \
-  ../Numeric/GmshMatrix.h ../Common/ListUtils.h
+  ../Numeric/GmshMatrix.h
 ExtractElements${OBJEXT}: ExtractElements.cpp ExtractElements.h Plugin.h \
   ../Common/Options.h ../Post/ColorTable.h ../Common/GmshMessage.h \
   ../Post/PView.h ../Geo/SPoint3.h ../Post/PViewDataList.h \
   ../Post/PViewData.h ../Geo/SBoundingBox3d.h ../Geo/SPoint3.h \
-  ../Numeric/GmshMatrix.h ../Common/GmshConfig.h ../Common/ListUtils.h \
-  ../Numeric/Numeric.h ../Numeric/GmshMatrix.h
+  ../Numeric/GmshMatrix.h ../Common/GmshConfig.h ../Numeric/Numeric.h \
+  ../Numeric/GmshMatrix.h
 ExtractEdges${OBJEXT}: ExtractEdges.cpp ExtractEdges.h Plugin.h \
   ../Common/Options.h ../Post/ColorTable.h ../Common/GmshMessage.h \
   ../Post/PView.h ../Geo/SPoint3.h ../Post/PViewDataList.h \
   ../Post/PViewData.h ../Geo/SBoundingBox3d.h ../Geo/SPoint3.h \
-  ../Numeric/GmshMatrix.h ../Common/GmshConfig.h ../Common/ListUtils.h \
-  ../Mesh/BDS.h
+  ../Numeric/GmshMatrix.h ../Common/GmshConfig.h
 MakeSimplex${OBJEXT}: MakeSimplex.cpp MakeSimplex.h Plugin.h ../Common/Options.h \
   ../Post/ColorTable.h ../Common/GmshMessage.h ../Post/PView.h \
   ../Geo/SPoint3.h ../Post/PViewDataList.h ../Post/PViewData.h \
   ../Geo/SBoundingBox3d.h ../Geo/SPoint3.h ../Numeric/GmshMatrix.h \
-  ../Common/GmshConfig.h ../Common/ListUtils.h
+  ../Common/GmshConfig.h
 Evaluate${OBJEXT}: Evaluate.cpp ../Common/GmshConfig.h Evaluate.h Plugin.h \
   ../Common/Options.h ../Post/ColorTable.h ../Common/GmshMessage.h \
   ../Post/PView.h ../Geo/SPoint3.h ../Post/PViewDataList.h \
   ../Post/PViewData.h ../Geo/SBoundingBox3d.h ../Geo/SPoint3.h \
-  ../Numeric/GmshMatrix.h ../Common/ListUtils.h ../Post/OctreePost.h \
-  ../Common/Octree.h ../Common/OctreeInternals.h
+  ../Numeric/GmshMatrix.h ../Post/OctreePost.h ../Common/Octree.h \
+  ../Common/OctreeInternals.h
 FieldView${OBJEXT}: FieldView.cpp FieldView.h Plugin.h ../Common/Options.h \
   ../Post/ColorTable.h ../Common/GmshMessage.h ../Post/PView.h \
   ../Geo/SPoint3.h ../Post/PViewDataList.h ../Post/PViewData.h \
   ../Geo/SBoundingBox3d.h ../Geo/SPoint3.h ../Numeric/GmshMatrix.h \
-  ../Common/GmshConfig.h ../Common/ListUtils.h ../Mesh/Field.h \
-  ../Geo/STensor3.h ../Geo/SVector3.h ../Geo/SPoint3.h \
-  ../Numeric/Numeric.h ../Numeric/GmshMatrix.h ../Geo/GModel.h \
-  ../Geo/GVertex.h ../Geo/GEntity.h ../Geo/Range.h ../Geo/SPoint3.h \
-  ../Geo/SBoundingBox3d.h ../Geo/GPoint.h ../Geo/SPoint2.h ../Geo/GEdge.h \
-  ../Geo/GEntity.h ../Geo/GVertex.h ../Geo/SVector3.h ../Geo/SPoint3.h \
-  ../Geo/SPoint2.h ../Geo/GFace.h ../Geo/GEntity.h ../Geo/GPoint.h \
-  ../Geo/GEdgeLoop.h ../Geo/GEdge.h ../Geo/SPoint2.h ../Geo/SVector3.h \
-  ../Geo/Pair.h ../Geo/GRegion.h ../Geo/GEntity.h ../Geo/SPoint3.h \
-  ../Geo/SBoundingBox3d.h
+  ../Common/GmshConfig.h ../Mesh/Field.h ../Geo/STensor3.h \
+  ../Geo/SVector3.h ../Geo/SPoint3.h ../Numeric/Numeric.h \
+  ../Numeric/GmshMatrix.h ../Geo/GModel.h ../Geo/GVertex.h \
+  ../Geo/GEntity.h ../Geo/Range.h ../Geo/SPoint3.h \
+  ../Geo/SBoundingBox3d.h ../Geo/SOrientedBoundingBox.h ../Geo/SVector3.h \
+  ../Geo/SPoint2.h ../Geo/Pair.h ../Geo/GPoint.h ../Geo/SPoint2.h \
+  ../Geo/GEdge.h ../Geo/GEntity.h ../Geo/GVertex.h ../Geo/SVector3.h \
+  ../Geo/SPoint3.h ../Geo/SPoint2.h ../Geo/GFace.h ../Geo/GEntity.h \
+  ../Geo/GPoint.h ../Geo/GEdgeLoop.h ../Geo/GEdge.h ../Geo/SPoint2.h \
+  ../Geo/SVector3.h ../Geo/Pair.h ../Geo/GRegion.h ../Geo/GEntity.h \
+  ../Geo/SPoint3.h ../Geo/SBoundingBox3d.h
 Integrate${OBJEXT}: Integrate.cpp Integrate.h Plugin.h ../Common/Options.h \
   ../Post/ColorTable.h ../Common/GmshMessage.h ../Post/PView.h \
   ../Geo/SPoint3.h ../Post/PViewDataList.h ../Post/PViewData.h \
   ../Geo/SBoundingBox3d.h ../Geo/SPoint3.h ../Numeric/GmshMatrix.h \
-  ../Common/GmshConfig.h ../Common/ListUtils.h ../Post/shapeFunctions.h \
-  ../Numeric/Numeric.h ../Numeric/GmshMatrix.h ../Post/PViewOptions.h \
-  ../Post/ColorTable.h
+  ../Common/GmshConfig.h ../Post/shapeFunctions.h ../Numeric/Numeric.h \
+  ../Numeric/GmshMatrix.h ../Post/PViewOptions.h ../Post/ColorTable.h
 Gradient${OBJEXT}: Gradient.cpp Gradient.h Plugin.h ../Common/Options.h \
   ../Post/ColorTable.h ../Common/GmshMessage.h ../Post/PView.h \
   ../Geo/SPoint3.h ../Post/PViewDataList.h ../Post/PViewData.h \
   ../Geo/SBoundingBox3d.h ../Geo/SPoint3.h ../Numeric/GmshMatrix.h \
-  ../Common/GmshConfig.h ../Common/ListUtils.h ../Post/shapeFunctions.h \
-  ../Numeric/Numeric.h ../Numeric/GmshMatrix.h
+  ../Common/GmshConfig.h ../Post/shapeFunctions.h ../Numeric/Numeric.h \
+  ../Numeric/GmshMatrix.h
 Curl${OBJEXT}: Curl.cpp Curl.h Plugin.h ../Common/Options.h ../Post/ColorTable.h \
   ../Common/GmshMessage.h ../Post/PView.h ../Geo/SPoint3.h \
   ../Post/PViewDataList.h ../Post/PViewData.h ../Geo/SBoundingBox3d.h \
   ../Geo/SPoint3.h ../Numeric/GmshMatrix.h ../Common/GmshConfig.h \
-  ../Common/ListUtils.h ../Post/shapeFunctions.h ../Numeric/Numeric.h \
-  ../Numeric/GmshMatrix.h
+  ../Post/shapeFunctions.h ../Numeric/Numeric.h ../Numeric/GmshMatrix.h
 Divergence${OBJEXT}: Divergence.cpp Divergence.h Plugin.h ../Common/Options.h \
   ../Post/ColorTable.h ../Common/GmshMessage.h ../Post/PView.h \
   ../Geo/SPoint3.h ../Post/PViewDataList.h ../Post/PViewData.h \
   ../Geo/SBoundingBox3d.h ../Geo/SPoint3.h ../Numeric/GmshMatrix.h \
-  ../Common/GmshConfig.h ../Common/ListUtils.h ../Post/shapeFunctions.h \
-  ../Numeric/Numeric.h ../Numeric/GmshMatrix.h
+  ../Common/GmshConfig.h ../Post/shapeFunctions.h ../Numeric/Numeric.h \
+  ../Numeric/GmshMatrix.h
 Annotate${OBJEXT}: Annotate.cpp ../Common/GmshConfig.h Annotate.h Plugin.h \
   ../Common/Options.h ../Post/ColorTable.h ../Common/GmshMessage.h \
   ../Post/PView.h ../Geo/SPoint3.h ../Post/PViewDataList.h \
   ../Post/PViewData.h ../Geo/SBoundingBox3d.h ../Geo/SPoint3.h \
-  ../Numeric/GmshMatrix.h ../Common/ListUtils.h ../Common/Context.h \
-  ../Geo/CGNSOptions.h ../Mesh/meshPartitionOptions.h \
-  ../Graphics/drawContext.h ../Fltk/Draw.h ../Fltk/GUI.h
+  ../Numeric/GmshMatrix.h ../Common/Context.h ../Geo/CGNSOptions.h \
+  ../Mesh/meshPartitionOptions.h ../Graphics/drawContext.h ../Fltk/Draw.h \
+  ../Fltk/GUI.h
 Remove${OBJEXT}: Remove.cpp Remove.h Plugin.h ../Common/Options.h \
   ../Post/ColorTable.h ../Common/GmshMessage.h ../Post/PView.h \
   ../Geo/SPoint3.h ../Post/PViewDataList.h ../Post/PViewData.h \
   ../Geo/SBoundingBox3d.h ../Geo/SPoint3.h ../Numeric/GmshMatrix.h \
-  ../Common/GmshConfig.h ../Common/ListUtils.h
+  ../Common/GmshConfig.h
 Probe${OBJEXT}: Probe.cpp ../Common/GmshConfig.h Probe.h Plugin.h \
   ../Common/Options.h ../Post/ColorTable.h ../Common/GmshMessage.h \
   ../Post/PView.h ../Geo/SPoint3.h ../Post/PViewDataList.h \
   ../Post/PViewData.h ../Geo/SBoundingBox3d.h ../Geo/SPoint3.h \
-  ../Numeric/GmshMatrix.h ../Common/ListUtils.h ../Common/Context.h \
-  ../Geo/CGNSOptions.h ../Mesh/meshPartitionOptions.h \
-  ../Post/OctreePost.h ../Common/Octree.h ../Common/OctreeInternals.h \
-  ../Graphics/drawContext.h ../Fltk/Draw.h
+  ../Numeric/GmshMatrix.h ../Common/Context.h ../Geo/CGNSOptions.h \
+  ../Mesh/meshPartitionOptions.h ../Post/OctreePost.h ../Common/Octree.h \
+  ../Common/OctreeInternals.h ../Graphics/drawContext.h ../Fltk/Draw.h
 HarmonicToTime${OBJEXT}: HarmonicToTime.cpp HarmonicToTime.h Plugin.h \
   ../Common/Options.h ../Post/ColorTable.h ../Common/GmshMessage.h \
   ../Post/PView.h ../Geo/SPoint3.h ../Post/PViewDataList.h \
   ../Post/PViewData.h ../Geo/SBoundingBox3d.h ../Geo/SPoint3.h \
-  ../Numeric/GmshMatrix.h ../Common/GmshConfig.h ../Common/ListUtils.h
+  ../Numeric/GmshMatrix.h ../Common/GmshConfig.h
 ModulusPhase${OBJEXT}: ModulusPhase.cpp ModulusPhase.h Plugin.h \
   ../Common/Options.h ../Post/ColorTable.h ../Common/GmshMessage.h \
   ../Post/PView.h ../Geo/SPoint3.h ../Post/PViewDataList.h \
   ../Post/PViewData.h ../Geo/SBoundingBox3d.h ../Geo/SPoint3.h \
-  ../Numeric/GmshMatrix.h ../Common/GmshConfig.h ../Common/ListUtils.h
+  ../Numeric/GmshMatrix.h ../Common/GmshConfig.h
 FiniteElement${OBJEXT}: FiniteElement.cpp ../Common/GmshConfig.h ../Geo/GModel.h \
   ../Geo/GVertex.h ../Geo/GEntity.h ../Geo/Range.h ../Geo/SPoint3.h \
-  ../Geo/SBoundingBox3d.h ../Geo/SPoint3.h ../Geo/GPoint.h \
-  ../Geo/SPoint2.h ../Geo/GEdge.h ../Geo/GEntity.h ../Geo/GVertex.h \
-  ../Geo/SVector3.h ../Geo/SPoint3.h ../Geo/SPoint3.h ../Geo/SPoint2.h \
+  ../Geo/SBoundingBox3d.h ../Geo/SPoint3.h ../Geo/SOrientedBoundingBox.h \
+  ../Geo/SVector3.h ../Geo/SPoint3.h ../Geo/SPoint2.h ../Geo/Pair.h \
+  ../Geo/GPoint.h ../Geo/SPoint2.h ../Geo/GEdge.h ../Geo/GEntity.h \
+  ../Geo/GVertex.h ../Geo/SVector3.h ../Geo/SPoint3.h ../Geo/SPoint2.h \
   ../Geo/GFace.h ../Geo/GEntity.h ../Geo/GPoint.h ../Geo/GEdgeLoop.h \
   ../Geo/GEdge.h ../Geo/SPoint2.h ../Geo/SVector3.h ../Geo/Pair.h \
   ../Geo/GRegion.h ../Geo/GEntity.h ../Geo/SPoint3.h \
   ../Geo/SBoundingBox3d.h FiniteElement.h Plugin.h ../Common/Options.h \
   ../Post/ColorTable.h ../Common/GmshMessage.h ../Post/PView.h \
   ../Post/PViewDataList.h ../Post/PViewData.h ../Numeric/GmshMatrix.h \
-  ../Common/ListUtils.h ../Numeric/gmshAssembler.h \
-  ../Numeric/gmshLinearSystem.h ../Numeric/gmshProjection.h \
-  ../Numeric/gmshTermOfFormulation.h ../Numeric/GmshMatrix.h \
-  ../Numeric/gmshFunction.h ../Numeric/gmshAssembler.h ../Geo/MElement.h \
-  ../Common/GmshDefines.h ../Geo/MVertex.h ../Geo/SPoint2.h \
-  ../Geo/SPoint3.h ../Geo/MEdge.h ../Geo/MVertex.h ../Geo/SVector3.h \
-  ../Geo/MFace.h ../Geo/MVertex.h ../Geo/MEdge.h ../Geo/SVector3.h \
-  ../Numeric/FunctionSpace.h ../Numeric/GmshMatrix.h ../Numeric/Gauss.h \
-  ../Numeric/gmshFunction.h ../Common/Gmsh.h ../Common/GmshMessage.h \
-  ../Numeric/GmshMatrix.h ../Numeric/gmshLaplace.h \
-  ../Numeric/gmshTermOfFormulation.h ../Numeric/gmshFunction.h \
-  ../Numeric/GmshMatrix.h ../Numeric/gmshHelmholtz.h \
-  ../Numeric/gmshTermOfFormulation.h ../Numeric/gmshFunction.h \
-  ../Numeric/GmshMatrix.h ../Numeric/gmshLinearSystemGmm.h \
-  ../Numeric/gmshLinearSystem.h
-HomologyComputation${OBJEXT}: HomologyComputation.cpp Plugin.h \
-  ../Geo/GModel.h ../Geo/GEntity.h ../Geo/CellComplex.h \
-  ../Post/PView.h HomologyComputation.h ../Geo/Homology.h
+  ../Numeric/gmshAssembler.h ../Numeric/gmshLinearSystem.h \
+  ../Numeric/gmshProjection.h ../Numeric/gmshTermOfFormulation.h \
+  ../Numeric/GmshMatrix.h ../Numeric/gmshFunction.h \
+  ../Numeric/gmshAssembler.h ../Geo/MElement.h ../Common/GmshDefines.h \
+  ../Geo/MVertex.h ../Geo/SPoint2.h ../Geo/SPoint3.h ../Geo/MEdge.h \
+  ../Geo/MVertex.h ../Geo/SVector3.h ../Geo/MFace.h ../Geo/MVertex.h \
+  ../Geo/MEdge.h ../Geo/SVector3.h ../Numeric/FunctionSpace.h \
+  ../Numeric/GmshMatrix.h ../Numeric/Gauss.h ../Numeric/gmshFunction.h \
+  ../Common/Gmsh.h ../Common/GmshMessage.h ../Numeric/GmshMatrix.h \
+  ../Numeric/gmshLaplace.h ../Numeric/gmshTermOfFormulation.h \
+  ../Numeric/gmshFunction.h ../Numeric/GmshMatrix.h \
+  ../Numeric/gmshHelmholtz.h ../Numeric/gmshTermOfFormulation.h \
+  ../Numeric/gmshFunction.h ../Numeric/GmshMatrix.h \
+  ../Numeric/gmshLinearSystemGmm.h ../Numeric/gmshLinearSystem.h
+HomologyComputation${OBJEXT}: HomologyComputation.cpp ../Common/Gmsh.h \
+  ../Common/GmshMessage.h ../Common/GmshConfig.h ../Geo/GModel.h \
+  ../Geo/GVertex.h ../Geo/GEntity.h ../Geo/Range.h ../Geo/SPoint3.h \
+  ../Geo/SBoundingBox3d.h ../Geo/SPoint3.h ../Geo/SOrientedBoundingBox.h \
+  ../Geo/SVector3.h ../Geo/SPoint3.h ../Geo/SPoint2.h ../Geo/Pair.h \
+  ../Geo/GPoint.h ../Geo/SPoint2.h ../Geo/GEdge.h ../Geo/GEntity.h \
+  ../Geo/GVertex.h ../Geo/SVector3.h ../Geo/SPoint3.h ../Geo/SPoint2.h \
+  ../Geo/GFace.h ../Geo/GEntity.h ../Geo/GPoint.h ../Geo/GEdgeLoop.h \
+  ../Geo/GEdge.h ../Geo/SPoint2.h ../Geo/SVector3.h ../Geo/Pair.h \
+  ../Geo/GRegion.h ../Geo/GEntity.h ../Geo/SPoint3.h \
+  ../Geo/SBoundingBox3d.h ../Geo/Homology.h ../Geo/CellComplex.h \
+  ../Geo/MElement.h ../Common/GmshDefines.h ../Geo/MVertex.h \
+  ../Geo/SPoint2.h ../Geo/SPoint3.h ../Geo/MEdge.h ../Geo/MVertex.h \
+  ../Geo/SVector3.h ../Geo/MFace.h ../Geo/MVertex.h ../Geo/MEdge.h \
+  ../Geo/SVector3.h ../Numeric/FunctionSpace.h ../Numeric/GmshMatrix.h \
+  ../Numeric/Gauss.h ../Geo/MPoint.h ../Geo/MElement.h ../Geo/MLine.h \
+  ../Geo/MElement.h ../Geo/MTriangle.h ../Geo/MElement.h \
+  ../Geo/MTetrahedron.h ../Geo/MElement.h ../Geo/GModel.h \
+  ../Geo/GEntity.h ../Geo/GRegion.h ../Geo/GFace.h ../Geo/GVertex.h \
+  ../Post/PViewDataGModel.h ../Post/PViewData.h HomologyComputation.h \
+  Plugin.h ../Common/Options.h ../Post/ColorTable.h ../Post/PView.h \
+  ../Post/PViewDataList.h ../Post/PViewData.h
diff --git a/Plugin/PluginManager.cpp b/Plugin/PluginManager.cpp
index 0485342d86641294895e3f4a5f9950d14bc0300d..54a7232cff62875688f533eeb88d754b02fe8578 100644
--- a/Plugin/PluginManager.cpp
+++ b/Plugin/PluginManager.cpp
@@ -7,6 +7,7 @@
 #include <stdlib.h>
 
 #include "GmshConfig.h"
+#include "Context.h"
 #include "Plugin.h"
 #include "PluginManager.h"
 #include "CutMap.h"
@@ -42,7 +43,6 @@
 #include "FieldView.h"
 #include "GSHHS.h"
 #include "FiniteElement.h"
-#include "Context.h"
 #include "HomologyComputation.h"
 
 #if !defined(HAVE_NO_DLL)
diff --git a/Plugin/Probe.cpp b/Plugin/Probe.cpp
index 3f821e686aaf1554a814930e1b3f3c2cf9972740..ec2f4deed573d776abb16b3a8e1a8019d5461e0c 100644
--- a/Plugin/Probe.cpp
+++ b/Plugin/Probe.cpp
@@ -142,7 +142,7 @@ PView *GMSH_ProbePlugin::execute(PView *v)
   PView *v1 = getView(iView, v);
   if(!v1) return v;
 
-  PView *v2 = new PView(true);
+  PView *v2 = new PView();
   PViewDataList *data2 = getDataList(v2);
 
   int numSteps = v1->getData()->getNumTimeSteps();
@@ -151,32 +151,32 @@ PView *GMSH_ProbePlugin::execute(PView *v)
   OctreePost o(v1);
 
   if(o.searchScalar(x, y, z, val)){
-    List_Add(data2->SP, &x);
-    List_Add(data2->SP, &y);
-    List_Add(data2->SP, &z);
+    data2->SP.push_back(x);
+    data2->SP.push_back(y);
+    data2->SP.push_back(z);
     for(int i = 0; i < numSteps; i++)
-      List_Add(data2->SP, &val[i]);
+      data2->SP.push_back(val[i]);
     data2->NbSP++;
   }
 
   if(o.searchVector(x, y, z, val)){
-    List_Add(data2->VP, &x);
-    List_Add(data2->VP, &y);
-    List_Add(data2->VP, &z);
+    data2->VP.push_back(x);
+    data2->VP.push_back(y);
+    data2->VP.push_back(z);
     for(int i = 0; i < numSteps; i++){
       for(int j = 0; j < 3; j++)
-        List_Add(data2->VP, &val[3*i+j]);
+        data2->VP.push_back(val[3 * i + j]);
     }
     data2->NbVP++;
   }
 
   if(o.searchTensor(x, y, z, val)){
-    List_Add(data2->TP, &x);
-    List_Add(data2->TP, &y);
-    List_Add(data2->TP, &z);
+    data2->TP.push_back(x);
+    data2->TP.push_back(y);
+    data2->TP.push_back(z);
     for(int i = 0; i < numSteps; i++){
       for(int j = 0; j < 9; j++)
-        List_Add(data2->TP, &val[9*i+j]);
+        data2->TP.push_back(val[9 * i + j]);
     }
     data2->NbTP++;
   }
@@ -185,7 +185,7 @@ PView *GMSH_ProbePlugin::execute(PView *v)
   
   for(int i = 0; i < numSteps; i++){
     double time = v1->getData()->getTime(i);
-    List_Add(data2->Time, &time);
+    data2->Time.push_back(time);
   }
   data2->setName(v1->getData()->getName() + "_Probe");
   data2->setFileName(v1->getData()->getName() + "_Probe.pos");
diff --git a/Plugin/Remove.cpp b/Plugin/Remove.cpp
index 8727ca41f09c6f8809b8eb71351954208430f272..325db88e29dc11f6d4530b4319a6762ddd921ce5 100644
--- a/Plugin/Remove.cpp
+++ b/Plugin/Remove.cpp
@@ -78,50 +78,50 @@ PView *GMSH_RemovePlugin::execute(PView *v)
   int tensor = (int)RemoveOptions_Number[12].def;
 
   if(RemoveOptions_Number[0].def){ 
-    data1->NbT2 = 0; List_Reset(data1->T2D); List_Reset(data1->T2C); 
+    data1->NbT2 = 0; data1->T2D.clear(); data1->T2C.clear(); 
   }
   if(RemoveOptions_Number[1].def){ 
-    data1->NbT3 = 0; List_Reset(data1->T3D); List_Reset(data1->T3C); 
+    data1->NbT3 = 0; data1->T3D.clear(); data1->T3C.clear(); 
   }
   if(RemoveOptions_Number[2].def){ 
-    if(scalar){ data1->NbSP = 0; List_Reset(data1->SP); }
-    if(vector){ data1->NbVP = 0; List_Reset(data1->VP); }
-    if(tensor){ data1->NbTP = 0; List_Reset(data1->TP); }
+    if(scalar){ data1->NbSP = 0; data1->SP.clear(); }
+    if(vector){ data1->NbVP = 0; data1->VP.clear(); }
+    if(tensor){ data1->NbTP = 0; data1->TP.clear(); }
   }
   if(RemoveOptions_Number[3].def){
-    if(scalar){ data1->NbSL = 0; List_Reset(data1->SL); }
-    if(vector){ data1->NbVL = 0; List_Reset(data1->VL); }
-    if(tensor){ data1->NbTL = 0; List_Reset(data1->TL); }
+    if(scalar){ data1->NbSL = 0; data1->SL.clear(); }
+    if(vector){ data1->NbVL = 0; data1->VL.clear(); }
+    if(tensor){ data1->NbTL = 0; data1->TL.clear(); }
   }
   if(RemoveOptions_Number[4].def){ 
-    if(scalar){ data1->NbST = 0; List_Reset(data1->ST); }
-    if(vector){ data1->NbVT = 0; List_Reset(data1->VT); }
-    if(tensor){ data1->NbTT = 0; List_Reset(data1->TT); }
+    if(scalar){ data1->NbST = 0; data1->ST.clear(); }
+    if(vector){ data1->NbVT = 0; data1->VT.clear(); }
+    if(tensor){ data1->NbTT = 0; data1->TT.clear(); }
   }
   if(RemoveOptions_Number[5].def){ 
-    if(scalar){ data1->NbSQ = 0; List_Reset(data1->SQ); }
-    if(vector){ data1->NbVQ = 0; List_Reset(data1->VQ); }
-    if(tensor){ data1->NbTQ = 0; List_Reset(data1->TQ); }
+    if(scalar){ data1->NbSQ = 0; data1->SQ.clear(); }
+    if(vector){ data1->NbVQ = 0; data1->VQ.clear(); }
+    if(tensor){ data1->NbTQ = 0; data1->TQ.clear(); }
   }
   if(RemoveOptions_Number[6].def){
-    if(scalar){ data1->NbSS = 0; List_Reset(data1->SS); }
-    if(vector){ data1->NbVS = 0; List_Reset(data1->VS); }
-    if(tensor){ data1->NbTS = 0; List_Reset(data1->TS); }
+    if(scalar){ data1->NbSS = 0; data1->SS.clear(); }
+    if(vector){ data1->NbVS = 0; data1->VS.clear(); }
+    if(tensor){ data1->NbTS = 0; data1->TS.clear(); }
   }
   if(RemoveOptions_Number[7].def){
-    if(scalar){ data1->NbSH = 0; List_Reset(data1->SH); }
-    if(vector){ data1->NbVH = 0; List_Reset(data1->VH); }
-    if(tensor){ data1->NbTH = 0; List_Reset(data1->TH); }
+    if(scalar){ data1->NbSH = 0; data1->SH.clear(); }
+    if(vector){ data1->NbVH = 0; data1->VH.clear(); }
+    if(tensor){ data1->NbTH = 0; data1->TH.clear(); }
   }
   if(RemoveOptions_Number[8].def){
-    if(scalar){ data1->NbSI = 0; List_Reset(data1->SI); }
-    if(vector){ data1->NbVI = 0; List_Reset(data1->VI); }
-    if(tensor){ data1->NbTI = 0; List_Reset(data1->TI); }
+    if(scalar){ data1->NbSI = 0; data1->SI.clear(); }
+    if(vector){ data1->NbVI = 0; data1->VI.clear(); }
+    if(tensor){ data1->NbTI = 0; data1->TI.clear(); }
   }
   if(RemoveOptions_Number[9].def){
-    if(scalar){ data1->NbSY = 0; List_Reset(data1->SY); }
-    if(vector){ data1->NbVY = 0; List_Reset(data1->VY); }
-    if(tensor){ data1->NbTY = 0; List_Reset(data1->TY); }
+    if(scalar){ data1->NbSY = 0; data1->SY.clear(); }
+    if(vector){ data1->NbVY = 0; data1->VY.clear(); }
+    if(tensor){ data1->NbTY = 0; data1->TY.clear(); }
   }
 
   data1->finalize();
diff --git a/Plugin/Skin.cpp b/Plugin/Skin.cpp
index a039ae94f85a3594eb3996d7270e8f08ffb95eb5..a5a74782090f262509b53874399cb0c3808eddf9 100644
--- a/Plugin/Skin.cpp
+++ b/Plugin/Skin.cpp
@@ -7,9 +7,9 @@
 #include "MallocUtils.h"
 #include "Context.h"
 
-List_T *GMSH_SkinPlugin::_list = NULL;
-Tree_T *GMSH_SkinPlugin::_skin = NULL;
-int *GMSH_SkinPlugin::_nbList = NULL;
+std::vector<double> *GMSH_SkinPlugin::_list = 0;
+Tree_T *GMSH_SkinPlugin::_skin = 0;
+int *GMSH_SkinPlugin::_nbList = 0;
 int GMSH_SkinPlugin::_nbNod = 0;
 int GMSH_SkinPlugin::_nbComp = 0;
 int GMSH_SkinPlugin::_nbTimeStep = 0;
@@ -100,24 +100,24 @@ void GMSH_SkinPlugin::addInView(void *a, void *b)
   Elm *e = (Elm *)a;
 
   for(int i = 0; i < 3 * _nbNod; i++)
-    List_Add(_list, &e->coord[i]);
+    _list->push_back(e->coord[i]);
   for(int ts = 0; ts < _nbTimeStep; ts++)
     for(int k = 0; k < _nbNod * _nbComp; k++)
-      List_Add(_list, &e->val[_nbNod * _nbComp * ts + k]);
+      _list->push_back(e->val[_nbNod * _nbComp * ts + k]);
   Free(e->val);
   (*_nbList)++;
 }
 
-void GMSH_SkinPlugin::skinList(List_T *inList, int inNbList, 
+void GMSH_SkinPlugin::skinList(std::vector<double> &inList, int inNbList, 
                                int inNbNod, int inNbFac, int fxn[6][4])
 {
   if(!inNbList)
     return;
 
-  int nb = List_Nbr(inList) / inNbList;
-  for(int i = 0; i < List_Nbr(inList); i += nb) {
-    double *coord = (double *)List_Pointer_Fast(inList, i);
-    double *val = (double *)List_Pointer_Fast(inList, i + 3 * inNbNod);
+  int nb = inList.size() / inNbList;
+  for(unsigned int i = 0; i < inList.size(); i += nb) {
+    double *coord = &inList[i];
+    double *val = &inList[i + 3 * inNbNod];
     for(int j = 0; j < inNbFac; j++) {
       Elm e, *pe;
       for(int k = 0; k < _nbNod; k++) {
@@ -152,7 +152,7 @@ PView *GMSH_SkinPlugin::execute(PView *v)
   PViewDataList *data1 = getDataList(v1);
   if(!data1) return v;
 
-  PView *v2 = new PView(true);
+  PView *v2 = new PView();
 
   PViewDataList *data2 = getDataList(v2);
   if(!data2) return v;
@@ -173,21 +173,21 @@ PView *GMSH_SkinPlugin::execute(PView *v)
   _nbNod = 2;
   // scalar
   _skin = Tree_Create(sizeof(Elm), fcmpElm);
-  _list = data2->SL; _nbList = &data2->NbSL; _nbComp = 1;
+  _list = &data2->SL; _nbList = &data2->NbSL; _nbComp = 1;
   skinList(data1->ST, data1->NbST, 3, 3, skinTri);
   skinList(data1->SQ, data1->NbSQ, 4, 4, skinQua);
   Tree_Action(_skin, addInView);
   Tree_Delete(_skin);
   // vector
   _skin = Tree_Create(sizeof(Elm), fcmpElm);
-  _list = data2->VL; _nbList = &data2->NbVL; _nbComp = 3;
+  _list = &data2->VL; _nbList = &data2->NbVL; _nbComp = 3;
   skinList(data1->VT, data1->NbVT, 3, 3, skinTri);
   skinList(data1->VQ, data1->NbVQ, 4, 4, skinQua);
   Tree_Action(_skin, addInView);
   Tree_Delete(_skin);
   // tensor
   _skin = Tree_Create(sizeof(Elm), fcmpElm);
-  _list = data2->TL; _nbList = &data2->NbTL; _nbComp = 9;
+  _list = &data2->TL; _nbList = &data2->NbTL; _nbComp = 9;
   skinList(data1->TT, data1->NbTT, 3, 3, skinTri);
   skinList(data1->TQ, data1->NbTQ, 4, 4, skinQua);
   Tree_Action(_skin, addInView);
@@ -197,7 +197,7 @@ PView *GMSH_SkinPlugin::execute(PView *v)
   _nbNod = 3;
   // scalar
   _skin = Tree_Create(sizeof(Elm), fcmpElm);
-  _list = data2->ST; _nbList = &data2->NbST; _nbComp = 1;
+  _list = &data2->ST; _nbList = &data2->NbST; _nbComp = 1;
   skinList(data1->SS, data1->NbSS, 4, 4, skinTet);
   skinList(data1->SI, data1->NbSI, 6, 2, skinPri2);
   skinList(data1->SY, data1->NbSY, 5, 4, skinPyr2);
@@ -205,7 +205,7 @@ PView *GMSH_SkinPlugin::execute(PView *v)
   Tree_Delete(_skin);
   // vector
   _skin = Tree_Create(sizeof(Elm), fcmpElm);
-  _list = data2->VT; _nbList = &data2->NbVT; _nbComp = 3;
+  _list = &data2->VT; _nbList = &data2->NbVT; _nbComp = 3;
   skinList(data1->VS, data1->NbVS, 4, 4, skinTet);
   skinList(data1->VI, data1->NbVI, 6, 2, skinPri2);
   skinList(data1->VY, data1->NbVY, 5, 4, skinPyr2);
@@ -213,7 +213,7 @@ PView *GMSH_SkinPlugin::execute(PView *v)
   Tree_Delete(_skin);
   // tensor
   _skin = Tree_Create(sizeof(Elm), fcmpElm);
-  _list = data2->TT; _nbList = &data2->NbTT; _nbComp = 9;
+  _list = &data2->TT; _nbList = &data2->NbTT; _nbComp = 9;
   skinList(data1->TS, data1->NbTS, 4, 4, skinTet);
   skinList(data1->TI, data1->NbTI, 6, 2, skinPri2);
   skinList(data1->TY, data1->NbTY, 5, 4, skinPyr2);
@@ -224,7 +224,7 @@ PView *GMSH_SkinPlugin::execute(PView *v)
   _nbNod = 4;
   // scalar
   _skin = Tree_Create(sizeof(Elm), fcmpElm);
-  _list = data2->SQ; _nbList = &data2->NbSQ; _nbComp = 1;
+  _list = &data2->SQ; _nbList = &data2->NbSQ; _nbComp = 1;
   skinList(data1->SH, data1->NbSH, 8, 6, skinHex);
   skinList(data1->SI, data1->NbSI, 6, 3, skinPri1);
   skinList(data1->SY, data1->NbSY, 5, 1, skinPyr1);
@@ -232,7 +232,7 @@ PView *GMSH_SkinPlugin::execute(PView *v)
   Tree_Delete(_skin);
   // vector
   _skin = Tree_Create(sizeof(Elm), fcmpElm);
-  _list = data2->VQ; _nbList = &data2->NbVQ; _nbComp = 3;
+  _list = &data2->VQ; _nbList = &data2->NbVQ; _nbComp = 3;
   skinList(data1->VH, data1->NbVH, 8, 6, skinHex);
   skinList(data1->VI, data1->NbVI, 6, 3, skinPri1);
   skinList(data1->VY, data1->NbVY, 5, 1, skinPyr1);
@@ -240,15 +240,14 @@ PView *GMSH_SkinPlugin::execute(PView *v)
   Tree_Delete(_skin);
   // tensor
   _skin = Tree_Create(sizeof(Elm), fcmpElm);
-  _list = data2->TQ; _nbList = &data2->NbTQ; _nbComp = 9;
+  _list = &data2->TQ; _nbList = &data2->NbTQ; _nbComp = 9;
   skinList(data1->TH, data1->NbTH, 8, 6, skinHex);
   skinList(data1->TI, data1->NbTI, 6, 3, skinPri1);
   skinList(data1->TY, data1->NbTY, 5, 1, skinPyr1);
   Tree_Action(_skin, addInView);
   Tree_Delete(_skin);
 
-  for(int i = 0; i < List_Nbr(data1->Time); i++)
-    List_Add(data2->Time, List_Pointer(data1->Time, i));
+  data2->Time = data1->Time;
   data2->setName(data1->getName() + "_Skin");
   data2->setFileName(data1->getName() + "_Skin.pos");
   data2->finalize();
diff --git a/Plugin/Skin.h b/Plugin/Skin.h
index 169931c80eecf8e9a1ab9ad8fa66e02505b5f20a..db9c35b836828f39a47b3705c6343e0a236f13cd 100644
--- a/Plugin/Skin.h
+++ b/Plugin/Skin.h
@@ -7,7 +7,6 @@
 #define _SKIN_H_
 
 #include "Plugin.h"
-#include "ListUtils.h"
 #include "TreeUtils.h"
 
 extern "C"
@@ -21,12 +20,12 @@ class GMSH_SkinPlugin : public GMSH_PostPlugin
     double coord[12];
     double *val;
   } Elm;
-  static List_T *_list;
+  static std::vector<double> *_list;
   static Tree_T *_skin;
   static int *_nbList, _nbNod, _nbComp, _nbTimeStep;
   static int fcmpElm(const void *a, const void *b);
   static void addInView(void *a, void *b);
-  void skinList(List_T *inList, int inNbList, 
+  void skinList(std::vector<double> &inList, int inNbList, 
                 int inNbNod, int inNbFac, int fxn[6][4]);
  public:
   GMSH_SkinPlugin(){}
diff --git a/Plugin/StreamLines.cpp b/Plugin/StreamLines.cpp
index 42f28db45874cf7136e3e57c5e962e9c5f24412a..ac59714c4f98fc42be95f270b7cd6071c6a1facc 100644
--- a/Plugin/StreamLines.cpp
+++ b/Plugin/StreamLines.cpp
@@ -244,7 +244,7 @@ PView *GMSH_StreamLinesPlugin::execute(PView *v)
     o2 = new OctreePost(v2);
   }
 
-  PView *v3 = new PView(true);
+  PView *v3 = new PView();
   PViewDataList *data3 = getDataList(v3);
 
   const double b1 = 1. / 3., b2 = 2. / 3., b3 = 1. / 3., b4 = 1. / 6.;
@@ -261,9 +261,9 @@ PView *GMSH_StreamLinesPlugin::execute(PView *v)
       }
       else{
         data3->NbVP++;
-        List_Add(data3->VP, &X[0]);
-        List_Add(data3->VP, &X[1]);
-        List_Add(data3->VP, &X[2]);            
+        data3->VP.push_back(X[0]);
+        data3->VP.push_back(X[1]);
+        data3->VP.push_back(X[2]);            
       }
 
       int currentTimeStep = 0;
@@ -275,11 +275,11 @@ PView *GMSH_StreamLinesPlugin::execute(PView *v)
         if(timeStep < 0){
           double T0 = data1->getTime(0);
           double currentT = T0 + DT * iter;
-          List_Add(data3->Time, &currentT);
+          data3->Time.push_back(currentT);
           for(; currentTimeStep < data1->getNumTimeSteps() - 1 && 
                 currentT > 0.5 * (data1->getTime(currentTimeStep) + 
                                   data1->getTime(currentTimeStep + 1));
-              currentTimeStep++);
+          currentTimeStep++);
         }
         else{
           currentTimeStep = timeStep;
@@ -308,22 +308,19 @@ PView *GMSH_StreamLinesPlugin::execute(PView *v)
 
         if(data2){
           data3->NbSL++;
-          List_Add(data3->SL, &XPREV[0]);
-          List_Add(data3->SL, &X[0]);
-          List_Add(data3->SL, &XPREV[1]);
-          List_Add(data3->SL, &X[1]);
-          List_Add(data3->SL, &XPREV[2]);
-          List_Add(data3->SL, &X[2]);
+          data3->SL.push_back(XPREV[0]); data3->SL.push_back(X[0]);
+          data3->SL.push_back(XPREV[1]); data3->SL.push_back(X[1]);
+          data3->SL.push_back(XPREV[2]); data3->SL.push_back(X[2]);
           for(int k = 0; k < data2->getNumTimeSteps(); k++)
-            List_Add(data3->SL, &val2[k]);
+            data3->SL.push_back(val2[k]);
           o2->searchScalar(X[0], X[1], X[2], val2, -1);
           for(int k = 0; k < data2->getNumTimeSteps(); k++)
-            List_Add(data3->SL, &val2[k]);
+            data3->SL.push_back(val2[k]);
         }
         else{
-          List_Add(data3->VP, &DX[0]);
-          List_Add(data3->VP, &DX[1]);
-          List_Add(data3->VP, &DX[2]);         
+          data3->VP.push_back(DX[0]);
+          data3->VP.push_back(DX[1]);
+          data3->VP.push_back(DX[2]);         
         }
       }
     }
diff --git a/Plugin/Triangulate.cpp b/Plugin/Triangulate.cpp
index 9997c3127b5056f1700bcab28f6b0e3ccc8f14cf..1dacf34ec0a00203eb4438d972fe8c299e6a436b 100644
--- a/Plugin/Triangulate.cpp
+++ b/Plugin/Triangulate.cpp
@@ -69,16 +69,17 @@ static void Project(MVertex *v, double mat[3][3])
   v->z() = Z;
 }
 
-static void Triangulate(int nbIn, List_T *inList, int *nbOut, List_T *outList,
+static void Triangulate(int nbIn, std::vector<double> &inList, 
+                        int *nbOut, std::vector<double> &outList,
                         int nbTimeStep, int nbComp)
 {
   if(nbIn < 3) return;
 
   // project points onto plane
   std::vector<MVertex*> points;
-  int nb = List_Nbr(inList) / nbIn;
-  for(int i = 0; i < List_Nbr(inList); i += nb){
-    double *p = (double *)List_Pointer_Fast(inList, i);
+  int nb = inList.size() / nbIn;
+  for(unsigned int i = 0; i < inList.size(); i += nb){
+    double *p = &inList[i];
     points.push_back(new MVertex(p[0], p[1], p[2]));
   }
   discreteFace *s = new discreteFace(GModel::current(), GModel::current()->getNumFaces() + 1);
@@ -101,7 +102,7 @@ static void Triangulate(int nbIn, List_T *inList, int *nbOut, List_T *outList,
     doc.points[i].where.h = points[i]->x() + XX;
     doc.points[i].where.v = points[i]->y() + YY;
     doc.points[i].adjacent = NULL;
-    doc.points[i].data = List_Pointer_Fast(inList, i * nb); 
+    doc.points[i].data = (void*)&inList[i * nb]; 
     delete points[i];
   }
 
@@ -114,14 +115,14 @@ static void Triangulate(int nbIn, List_T *inList, int *nbOut, List_T *outList,
     double *pb = (double*)doc.points[doc.triangles[i].b].data;
     double *pc = (double*)doc.points[doc.triangles[i].c].data;
     for(int j = 0; j < 3; j++) {
-      List_Add(outList, pa + j);
-      List_Add(outList, pb + j);
-      List_Add(outList, pc + j);
+      outList.push_back(pa[j]);
+      outList.push_back(pb[j]);
+      outList.push_back(pc[j]);
     }
     for(int j = 0; j < nbTimeStep; j++) {
-      for(int k = 0; k < nbComp; k++) List_Add(outList, pa + 3 + j * nbComp + k);
-      for(int k = 0; k < nbComp; k++) List_Add(outList, pb + 3 + j * nbComp + k);
-      for(int k = 0; k < nbComp; k++) List_Add(outList, pc + 3 + j * nbComp + k);
+      for(int k = 0; k < nbComp; k++) outList.push_back(pa[3 + j * nbComp + k]);
+      for(int k = 0; k < nbComp; k++) outList.push_back(pb[3 + j * nbComp + k]);
+      for(int k = 0; k < nbComp; k++) outList.push_back(pc[3 + j * nbComp + k]);
     }
     (*nbOut)++;
   }
@@ -137,7 +138,7 @@ PView *GMSH_TriangulatePlugin::execute(PView *v)
   PViewDataList *data1 = getDataList(v1);
   if(!data1) return v;
 
-  PView *v2 = new PView(true, data1->getNumElements());
+  PView *v2 = new PView();
 
   PViewDataList *data2 = getDataList(v2);
   if(!data2) return v;
@@ -147,8 +148,7 @@ PView *GMSH_TriangulatePlugin::execute(PView *v)
   Triangulate(data1->NbVP, data1->VP, &data2->NbVT, data2->VT, nts, 3);
   Triangulate(data1->NbTP, data1->TP, &data2->NbTT, data2->TT, nts, 9);
 
-  for(int i = 0; i < List_Nbr(data1->Time); i++)
-    List_Add(data2->Time, List_Pointer(data1->Time, i));
+  data2->Time = data1->Time;
   data2->setName(data1->getName() + "_Triangulate");
   data2->setFileName(data1->getName() + "_Triangulate.pos");
   data2->finalize();
diff --git a/Post/Makefile b/Post/Makefile
index acf38cba1945a9f92e35c9c51ac556d9776e2d15..7c08c79e69f4400e573970656833bf8acf74ab7e 100644
--- a/Post/Makefile
+++ b/Post/Makefile
@@ -51,11 +51,12 @@ depend:
 # DO NOT DELETE THIS LINE
 PView${OBJEXT}: PView.cpp PView.h ../Geo/SPoint3.h PViewDataList.h PViewData.h \
   ../Geo/SBoundingBox3d.h ../Geo/SPoint3.h ../Numeric/GmshMatrix.h \
-  ../Common/GmshConfig.h ../Common/GmshMessage.h ../Common/ListUtils.h \
-  PViewDataGModel.h ../Geo/GModel.h ../Geo/GVertex.h ../Geo/GEntity.h \
-  ../Geo/Range.h ../Geo/SPoint3.h ../Geo/SBoundingBox3d.h ../Geo/GPoint.h \
-  ../Geo/SPoint2.h ../Geo/GEdge.h ../Geo/GEntity.h ../Geo/GVertex.h \
-  ../Geo/SVector3.h ../Geo/SPoint3.h ../Geo/SPoint3.h ../Geo/SPoint2.h \
+  ../Common/GmshConfig.h ../Common/GmshMessage.h PViewDataGModel.h \
+  ../Geo/GModel.h ../Geo/GVertex.h ../Geo/GEntity.h ../Geo/Range.h \
+  ../Geo/SPoint3.h ../Geo/SBoundingBox3d.h ../Geo/SOrientedBoundingBox.h \
+  ../Geo/SVector3.h ../Geo/SPoint3.h ../Geo/SPoint2.h ../Geo/Pair.h \
+  ../Geo/GPoint.h ../Geo/SPoint2.h ../Geo/GEdge.h ../Geo/GEntity.h \
+  ../Geo/GVertex.h ../Geo/SVector3.h ../Geo/SPoint3.h ../Geo/SPoint2.h \
   ../Geo/GFace.h ../Geo/GEntity.h ../Geo/GPoint.h ../Geo/GEdgeLoop.h \
   ../Geo/GEdge.h ../Geo/SPoint2.h ../Geo/SVector3.h ../Geo/Pair.h \
   ../Geo/GRegion.h ../Geo/GEntity.h ../Geo/SPoint3.h \
@@ -64,57 +65,61 @@ PView${OBJEXT}: PView.cpp PView.h ../Geo/SPoint3.h PViewDataList.h PViewData.h \
 PViewIO${OBJEXT}: PViewIO.cpp ../Common/GmshConfig.h ../Common/GmshMessage.h \
   PView.h ../Geo/SPoint3.h PViewDataList.h PViewData.h \
   ../Geo/SBoundingBox3d.h ../Geo/SPoint3.h ../Numeric/GmshMatrix.h \
-  ../Common/ListUtils.h PViewDataGModel.h ../Geo/GModel.h \
-  ../Geo/GVertex.h ../Geo/GEntity.h ../Geo/Range.h ../Geo/SPoint3.h \
-  ../Geo/SBoundingBox3d.h ../Geo/GPoint.h ../Geo/SPoint2.h ../Geo/GEdge.h \
-  ../Geo/GEntity.h ../Geo/GVertex.h ../Geo/SVector3.h ../Geo/SPoint3.h \
+  PViewDataGModel.h ../Geo/GModel.h ../Geo/GVertex.h ../Geo/GEntity.h \
+  ../Geo/Range.h ../Geo/SPoint3.h ../Geo/SBoundingBox3d.h \
+  ../Geo/SOrientedBoundingBox.h ../Geo/SVector3.h ../Geo/SPoint3.h \
+  ../Geo/SPoint2.h ../Geo/Pair.h ../Geo/GPoint.h ../Geo/SPoint2.h \
+  ../Geo/GEdge.h ../Geo/GEntity.h ../Geo/GVertex.h ../Geo/SVector3.h \
   ../Geo/SPoint3.h ../Geo/SPoint2.h ../Geo/GFace.h ../Geo/GEntity.h \
   ../Geo/GPoint.h ../Geo/GEdgeLoop.h ../Geo/GEdge.h ../Geo/SPoint2.h \
   ../Geo/SVector3.h ../Geo/Pair.h ../Geo/GRegion.h ../Geo/GEntity.h \
   ../Geo/SPoint3.h ../Geo/SBoundingBox3d.h ../Common/StringUtils.h
 PViewData${OBJEXT}: PViewData.cpp PViewData.h ../Geo/SBoundingBox3d.h \
   ../Geo/SPoint3.h ../Numeric/GmshMatrix.h ../Common/GmshConfig.h \
-  ../Common/GmshMessage.h ../Common/ListUtils.h adaptiveData.h \
-  ../Numeric/Numeric.h ../Numeric/GmshMatrix.h
+  ../Common/GmshMessage.h adaptiveData.h ../Numeric/Numeric.h \
+  ../Numeric/GmshMatrix.h
 PViewDataIO${OBJEXT}: PViewDataIO.cpp ../Common/GmshMessage.h \
   ../Numeric/Numeric.h ../Numeric/GmshMatrix.h ../Common/GmshConfig.h \
   PViewData.h ../Geo/SBoundingBox3d.h ../Geo/SPoint3.h
 PViewDataList${OBJEXT}: PViewDataList.cpp PViewDataList.h PViewData.h \
   ../Geo/SBoundingBox3d.h ../Geo/SPoint3.h ../Numeric/GmshMatrix.h \
-  ../Common/GmshConfig.h ../Common/GmshMessage.h ../Common/ListUtils.h \
-  ../Numeric/Numeric.h ../Numeric/GmshMatrix.h ../Common/SmoothData.h \
-  ../Common/Context.h ../Geo/CGNSOptions.h ../Mesh/meshPartitionOptions.h
+  ../Common/GmshConfig.h ../Common/GmshMessage.h ../Common/GmshDefines.h \
+  ../Numeric/FunctionSpace.h ../Numeric/GmshMatrix.h ../Numeric/Numeric.h \
+  ../Numeric/GmshMatrix.h ../Common/SmoothData.h ../Common/Context.h \
+  ../Geo/CGNSOptions.h ../Mesh/meshPartitionOptions.h
 PViewDataListIO${OBJEXT}: PViewDataListIO.cpp PViewDataList.h PViewData.h \
   ../Geo/SBoundingBox3d.h ../Geo/SPoint3.h ../Numeric/GmshMatrix.h \
-  ../Common/GmshConfig.h ../Common/GmshMessage.h ../Common/ListUtils.h \
-  ../Numeric/Numeric.h ../Numeric/GmshMatrix.h ../Common/Context.h \
+  ../Common/GmshConfig.h ../Common/GmshMessage.h ../Numeric/Numeric.h \
+  ../Numeric/GmshMatrix.h ../Common/StringUtils.h ../Common/Context.h \
   ../Geo/CGNSOptions.h ../Mesh/meshPartitionOptions.h adaptiveData.h
 PViewDataGModel${OBJEXT}: PViewDataGModel.cpp PViewDataGModel.h PViewData.h \
   ../Geo/SBoundingBox3d.h ../Geo/SPoint3.h ../Numeric/GmshMatrix.h \
   ../Common/GmshConfig.h ../Common/GmshMessage.h ../Geo/GModel.h \
   ../Geo/GVertex.h ../Geo/GEntity.h ../Geo/Range.h ../Geo/SPoint3.h \
-  ../Geo/SBoundingBox3d.h ../Geo/GPoint.h ../Geo/SPoint2.h ../Geo/GEdge.h \
-  ../Geo/GEntity.h ../Geo/GVertex.h ../Geo/SVector3.h ../Geo/SPoint3.h \
-  ../Geo/SPoint3.h ../Geo/SPoint2.h ../Geo/GFace.h ../Geo/GEntity.h \
-  ../Geo/GPoint.h ../Geo/GEdgeLoop.h ../Geo/GEdge.h ../Geo/SPoint2.h \
-  ../Geo/SVector3.h ../Geo/Pair.h ../Geo/GRegion.h ../Geo/GEntity.h \
-  ../Geo/SPoint3.h ../Geo/SBoundingBox3d.h ../Geo/MLine.h \
-  ../Geo/MElement.h ../Common/GmshDefines.h ../Geo/MVertex.h \
-  ../Geo/SPoint2.h ../Geo/SPoint3.h ../Geo/MEdge.h ../Geo/MVertex.h \
-  ../Geo/SVector3.h ../Geo/MFace.h ../Geo/MVertex.h ../Geo/MEdge.h \
-  ../Geo/SVector3.h ../Numeric/FunctionSpace.h ../Numeric/GmshMatrix.h \
-  ../Numeric/Gauss.h ../Geo/MTriangle.h ../Geo/MElement.h \
-  ../Geo/MQuadrangle.h ../Geo/MElement.h ../Geo/MTetrahedron.h \
-  ../Geo/MElement.h ../Geo/MHexahedron.h ../Geo/MElement.h \
-  ../Geo/MPrism.h ../Geo/MElement.h ../Geo/MPyramid.h ../Geo/MElement.h \
-  ../Numeric/Numeric.h ../Numeric/GmshMatrix.h
+  ../Geo/SBoundingBox3d.h ../Geo/SOrientedBoundingBox.h ../Geo/SVector3.h \
+  ../Geo/SPoint3.h ../Geo/SPoint2.h ../Geo/Pair.h ../Geo/GPoint.h \
+  ../Geo/SPoint2.h ../Geo/GEdge.h ../Geo/GEntity.h ../Geo/GVertex.h \
+  ../Geo/SVector3.h ../Geo/SPoint3.h ../Geo/SPoint2.h ../Geo/GFace.h \
+  ../Geo/GEntity.h ../Geo/GPoint.h ../Geo/GEdgeLoop.h ../Geo/GEdge.h \
+  ../Geo/SPoint2.h ../Geo/SVector3.h ../Geo/Pair.h ../Geo/GRegion.h \
+  ../Geo/GEntity.h ../Geo/SPoint3.h ../Geo/SBoundingBox3d.h \
+  ../Geo/MLine.h ../Geo/MElement.h ../Common/GmshDefines.h \
+  ../Geo/MVertex.h ../Geo/SPoint2.h ../Geo/SPoint3.h ../Geo/MEdge.h \
+  ../Geo/MVertex.h ../Geo/SVector3.h ../Geo/MFace.h ../Geo/MVertex.h \
+  ../Geo/MEdge.h ../Geo/SVector3.h ../Numeric/FunctionSpace.h \
+  ../Numeric/GmshMatrix.h ../Numeric/Gauss.h ../Geo/MTriangle.h \
+  ../Geo/MElement.h ../Geo/MQuadrangle.h ../Geo/MElement.h \
+  ../Geo/MTetrahedron.h ../Geo/MElement.h ../Geo/MHexahedron.h \
+  ../Geo/MElement.h ../Geo/MPrism.h ../Geo/MElement.h ../Geo/MPyramid.h \
+  ../Geo/MElement.h ../Numeric/Numeric.h ../Numeric/GmshMatrix.h
 PViewDataGModelIO${OBJEXT}: PViewDataGModelIO.cpp ../Common/GmshConfig.h \
   ../Common/GmshMessage.h PViewDataGModel.h PViewData.h \
   ../Geo/SBoundingBox3d.h ../Geo/SPoint3.h ../Numeric/GmshMatrix.h \
   ../Geo/GModel.h ../Geo/GVertex.h ../Geo/GEntity.h ../Geo/Range.h \
-  ../Geo/SPoint3.h ../Geo/SBoundingBox3d.h ../Geo/GPoint.h \
-  ../Geo/SPoint2.h ../Geo/GEdge.h ../Geo/GEntity.h ../Geo/GVertex.h \
-  ../Geo/SVector3.h ../Geo/SPoint3.h ../Geo/SPoint3.h ../Geo/SPoint2.h \
+  ../Geo/SPoint3.h ../Geo/SBoundingBox3d.h ../Geo/SOrientedBoundingBox.h \
+  ../Geo/SVector3.h ../Geo/SPoint3.h ../Geo/SPoint2.h ../Geo/Pair.h \
+  ../Geo/GPoint.h ../Geo/SPoint2.h ../Geo/GEdge.h ../Geo/GEntity.h \
+  ../Geo/GVertex.h ../Geo/SVector3.h ../Geo/SPoint3.h ../Geo/SPoint2.h \
   ../Geo/GFace.h ../Geo/GEntity.h ../Geo/GPoint.h ../Geo/GEdgeLoop.h \
   ../Geo/GEdge.h ../Geo/SPoint2.h ../Geo/SVector3.h ../Geo/Pair.h \
   ../Geo/GRegion.h ../Geo/GEntity.h ../Geo/SPoint3.h \
@@ -131,19 +136,19 @@ adaptiveData${OBJEXT}: adaptiveData.cpp adaptiveData.h ../Numeric/GmshMatrix.h \
   ../Common/GmshConfig.h ../Common/GmshMessage.h ../Plugin/Plugin.h \
   ../Common/Options.h ../Post/ColorTable.h ../Post/PView.h \
   ../Geo/SPoint3.h ../Post/PViewDataList.h ../Post/PViewData.h \
-  ../Geo/SBoundingBox3d.h ../Geo/SPoint3.h ../Common/ListUtils.h \
-  ../Common/OS.h
+  ../Geo/SBoundingBox3d.h ../Geo/SPoint3.h ../Common/OS.h
 shapeFunctions${OBJEXT}: shapeFunctions.cpp shapeFunctions.h \
   ../Numeric/Numeric.h ../Numeric/GmshMatrix.h ../Common/GmshConfig.h \
   ../Common/GmshMessage.h
 OctreePost${OBJEXT}: OctreePost.cpp ../Common/Octree.h \
-  ../Common/OctreeInternals.h OctreePost.h ../Common/ListUtils.h PView.h \
-  ../Geo/SPoint3.h PViewDataList.h PViewData.h ../Geo/SBoundingBox3d.h \
-  ../Geo/SPoint3.h ../Numeric/GmshMatrix.h ../Common/GmshConfig.h \
-  ../Common/GmshMessage.h PViewDataGModel.h ../Geo/GModel.h \
-  ../Geo/GVertex.h ../Geo/GEntity.h ../Geo/Range.h ../Geo/SPoint3.h \
-  ../Geo/SBoundingBox3d.h ../Geo/GPoint.h ../Geo/SPoint2.h ../Geo/GEdge.h \
-  ../Geo/GEntity.h ../Geo/GVertex.h ../Geo/SVector3.h ../Geo/SPoint3.h \
+  ../Common/OctreeInternals.h OctreePost.h PView.h ../Geo/SPoint3.h \
+  PViewDataList.h PViewData.h ../Geo/SBoundingBox3d.h ../Geo/SPoint3.h \
+  ../Numeric/GmshMatrix.h ../Common/GmshConfig.h ../Common/GmshMessage.h \
+  PViewDataGModel.h ../Geo/GModel.h ../Geo/GVertex.h ../Geo/GEntity.h \
+  ../Geo/Range.h ../Geo/SPoint3.h ../Geo/SBoundingBox3d.h \
+  ../Geo/SOrientedBoundingBox.h ../Geo/SVector3.h ../Geo/SPoint3.h \
+  ../Geo/SPoint2.h ../Geo/Pair.h ../Geo/GPoint.h ../Geo/SPoint2.h \
+  ../Geo/GEdge.h ../Geo/GEntity.h ../Geo/GVertex.h ../Geo/SVector3.h \
   ../Geo/SPoint3.h ../Geo/SPoint2.h ../Geo/GFace.h ../Geo/GEntity.h \
   ../Geo/GPoint.h ../Geo/GEdgeLoop.h ../Geo/GEdge.h ../Geo/SPoint2.h \
   ../Geo/SVector3.h ../Geo/Pair.h ../Geo/GRegion.h ../Geo/GEntity.h \
diff --git a/Post/OctreePost.cpp b/Post/OctreePost.cpp
index 4c28078c4b04d5b50840b5983cb2f30df65ebf9b..2bfbc93f12d22116ef0fe81fe31f2885d583c41a 100644
--- a/Post/OctreePost.cpp
+++ b/Post/OctreePost.cpp
@@ -5,7 +5,6 @@
 
 #include "Octree.h"
 #include "OctreePost.h"
-#include "ListUtils.h"
 #include "PView.h"
 #include "PViewDataList.h"
 #include "PViewDataGModel.h"
@@ -192,14 +191,10 @@ void pyrCentroid(void *a, double *x)
   centroid(5, X, Y, Z, x);
 }
 
-static void addListOfStuff(Octree *o, List_T *l, int nbelm)
+static void addListOfStuff(Octree *o, std::vector<double> &l, int nbelm)
 {
-  if(!l) return;
- 
-  for(int i = 0; i < List_Nbr(l); i += nbelm){
-    double * X = (double *)List_Pointer_Fast(l, i);
-    Octree_Insert(X, o);
-  }
+  for(unsigned int i = 0; i < l.size(); i += nbelm)
+    Octree_Insert(&l[i], o);
 }
 
 // OctreePost implementation
diff --git a/Post/PView.cpp b/Post/PView.cpp
index cf7194a5ac4b502a357c8ac7d909ff52378113b3..8282e3331f7d064f4a3b5656f504d5674dffd404 100644
--- a/Post/PView.cpp
+++ b/Post/PView.cpp
@@ -29,10 +29,10 @@ void PView::_init()
   for(unsigned int i = 0; i < list.size(); i++) list[i]->setIndex(i);
 }
 
-PView::PView(bool allocate, int numalloc)
+PView::PView()
 {
   _init();
-  _data = new PViewDataList(allocate, numalloc);
+  _data = new PViewDataList();
   _options = new PViewOptions(PViewOptions::reference);
   if(_options->adaptVisualizationGrid)
     _data->initAdaptiveData(_options->timeStep, _options->maxRecursionLevel,
@@ -67,20 +67,20 @@ PView::PView(std::string xname, std::string yname,
              std::vector<double> &x, std::vector<double> &y)
 {
   _init();
-  PViewDataList *data = new PViewDataList(true);
+  PViewDataList *data = new PViewDataList();
   for(unsigned int i = 0; i < y.size(); i++){
     double d;
     if(x.size() == y.size()){
-      List_Add(data->SP, &x[i]);
+      data->SP.push_back(x[i]);
     }
     else{
       d = y.size() > 1 ? (double)i / (double)(y.size() - 1) : 0.;
-      List_Add(data->SP, &d);
+      data->SP.push_back(d);
     }
     d = 0.;
-    List_Add(data->SP, &d);
-    List_Add(data->SP, &d);
-    List_Add(data->SP, &y[i]);
+    data->SP.push_back(d);
+    data->SP.push_back(d);
+    data->SP.push_back(y[i]);
     data->NbSP++;
   }
   data->setName(yname);
@@ -220,7 +220,7 @@ void PView::combine(bool time, int how, bool remove)
   for(unsigned int i = 0; i < nds.size(); i++){
     if(nds[i].data.size() > 1){
       // there's potentially something to combine
-      PView *p = new PView(true);
+      PView *p = new PView();
       PViewData *data = p->getData();
       bool res = time ? data->combineTime(nds[i]): data->combineSpace(nds[i]);
       if(res)
diff --git a/Post/PView.h b/Post/PView.h
index 51e3e7e2eb1e996f091e1a4b9eeb8ba119d0fd77..bd0fe69e9ef6170b13a412cabae1faea6f948840 100644
--- a/Post/PView.h
+++ b/Post/PView.h
@@ -40,8 +40,8 @@ class PView{
   void _init();
 
  public:
-  // create a new view with list-based data, allocated or not
-  PView(bool allocate=true, int numalloc=1000);
+  // create a new view with list-based data
+  PView();
   // construct a new view using the given data
   PView(PViewData *data);
   // construct a new view, alias of the view "ref"
diff --git a/Post/PViewData.cpp b/Post/PViewData.cpp
index af43e33958ec369c669e9c302a66eda807d56eb5..a1cdd26b5f2e6e03431be58131e9c1356fbf6e4a 100644
--- a/Post/PViewData.cpp
+++ b/Post/PViewData.cpp
@@ -4,7 +4,6 @@
 // bugs and problems to <gmsh@geuz.org>.
 
 #include "PViewData.h"
-#include "ListUtils.h"
 #include "adaptiveData.h"
 #include "Numeric.h"
 #include "GmshMessage.h"
diff --git a/Post/PViewDataList.cpp b/Post/PViewDataList.cpp
index ce67f3bdaaeed1479ea2cd554a7f3ed8fab178bb..20957492522eb395763bfe2e590cb32afc5314e9 100644
--- a/Post/PViewDataList.cpp
+++ b/Post/PViewDataList.cpp
@@ -4,68 +4,25 @@
 // bugs and problems to <gmsh@geuz.org>.
 
 #include "PViewDataList.h"
+#include "GmshMessage.h"
+#include "GmshDefines.h"
+#include "FunctionSpace.h"
 #include "Numeric.h"
 #include "SmoothData.h"
-#include "GmshMessage.h"
 #include "Context.h"
 
-PViewDataList::PViewDataList(bool allocate, int numalloc)
-  : PViewData(), DataSize(sizeof(double)), NbTimeStep(0), 
-    Min(VAL_INF), Max(-VAL_INF), Time(0),
+PViewDataList::PViewDataList()
+  : PViewData(), NbTimeStep(0), Min(VAL_INF), Max(-VAL_INF), Time(0),
     NbSP(0), NbVP(0), NbTP(0), SP(0), VP(0), TP(0),
-    NbSL(0), NbVL(0), NbTL(0), NbSL2(0), NbVL2(0), NbTL2(0),
-    SL(0), VL(0), TL(0), SL2(0), VL2(0), TL2(0),
-    NbST(0), NbVT(0), NbTT(0), NbST2(0), NbVT2(0), NbTT2(0),
-    ST(0), VT(0), TT(0), ST2(0), VT2(0), TT2(0),
-    NbSQ(0), NbVQ(0), NbTQ(0), NbSQ2(0), NbVQ2(0), NbTQ2(0),
-    SQ(0), VQ(0), TQ(0), SQ2(0), VQ2(0), TQ2(0),
-    NbSS(0), NbVS(0), NbTS(0), NbSS2(0), NbVS2(0), NbTS2(0),
-    SS(0), VS(0), TS(0), SS2(0), VS2(0), TS2(0),
-    NbSH(0), NbVH(0), NbTH(0), NbSH2(0), NbVH2(0), NbTH2(0),
-    SH(0), VH(0), TH(0), SH2(0), VH2(0), TH2(0),
-    NbSI(0), NbVI(0), NbTI(0), NbSI2(0), NbVI2(0), NbTI2(0),
-    SI(0), VI(0), TI(0), SI2(0), VI2(0), TI2(0),
-    NbSY(0), NbVY(0), NbTY(0), NbSY2(0), NbVY2(0), NbTY2(0),
-    SY(0), VY(0), TY(0), SY2(0), VY2(0), TY2(0),
-    NbT2(0), NbT3(0), T2D(0), T2C(0), T3D(0), T3C(0), 
+    NbSL(0), NbVL(0), NbTL(0), NbST(0), NbVT(0), NbTT(0),
+    NbSQ(0), NbVQ(0), NbTQ(0), NbSS(0), NbVS(0), NbTS(0),
+    NbSH(0), NbVH(0), NbTH(0), NbSI(0), NbVI(0), NbTI(0), 
+    NbSY(0), NbVY(0), NbTY(0), NbT2(0), NbT3(0),
     _lastElement(-1), _lastDimension(-1), _lastNumNodes(-1), 
     _lastNumComponents(-1), _lastNumValues(-1), _lastNumEdges(-1),
     _lastXYZ(0), _lastVal(0)
 {
   for(int i = 0; i < 24; i++) _index[i] = 0;
-
-  if(allocate){
-#define LCD List_Create(1, numalloc, sizeof(double))
-    Time = LCD;
-    SP = LCD; VP = LCD; TP = LCD;
-    SL = LCD; VL = LCD; TL = LCD; SL2 = LCD; VL2 = LCD; TL2 = LCD; 
-    ST = LCD; VT = LCD; TT = LCD; ST2 = LCD; VT2 = LCD; TT2 = LCD; 
-    SQ = LCD; VQ = LCD; TQ = LCD; SQ2 = LCD; VQ2 = LCD; TQ2 = LCD; 
-    SS = LCD; VS = LCD; TS = LCD; SS2 = LCD; VS2 = LCD; TS2 = LCD; 
-    SH = LCD; VH = LCD; TH = LCD; SH2 = LCD; VH2 = LCD; TH2 = LCD; 
-    SI = LCD; VI = LCD; TI = LCD; SI2 = LCD; VI2 = LCD; TI2 = LCD; 
-    SY = LCD; VY = LCD; TY = LCD; SY2 = LCD; VY2 = LCD; TY2 = LCD; 
-#undef LCD
-    T2D = List_Create(1, 100, sizeof(double));
-    T2C = List_Create(1, 100, sizeof(char));
-    T3D = List_Create(1, 100, sizeof(double));
-    T3C = List_Create(1, 100, sizeof(char));
-  }
-}
-
-PViewDataList::~PViewDataList()
-{
-  List_Delete(Time);
-  List_Delete(SP); List_Delete(VP); List_Delete(TP);
-  List_Delete(SL); List_Delete(VL); List_Delete(TL);
-  List_Delete(ST); List_Delete(VT); List_Delete(TT);
-  List_Delete(SQ); List_Delete(VQ); List_Delete(TQ);
-  List_Delete(SS); List_Delete(VS); List_Delete(TS);
-  List_Delete(SH); List_Delete(VH); List_Delete(TH);
-  List_Delete(SI); List_Delete(VI); List_Delete(TI);
-  List_Delete(SY); List_Delete(VY); List_Delete(TY);
-  List_Delete(T2D); List_Delete(T2C);
-  List_Delete(T3D); List_Delete(T3C);
 }
 
 bool PViewDataList::finalize()
@@ -81,12 +38,6 @@ bool PViewDataList::finalize()
   // minimum number of time steps common to all elements.
   _stat(T2D, T2C, 4); _stat(T3D, T3C, 5);
 
-  // FIXME: convert all "old-style" 2nd order elements into linear
-  // elements *and* free all the data associated with the 2nd order
-  // elements (this is a temporary solution, until we use
-  // Adaptive_Views on all curved elements)
-  _splitCurvedElements();
-
   // compute min/max and other statistics for all element lists
   _stat(SP, 1, NbSP, 1, 0); _stat(VP, 3, NbVP, 1, 0); _stat(TP, 9, NbTP, 1, 0);
   _stat(SL, 1, NbSL, 2, 1); _stat(VL, 3, NbVL, 2, 1); _stat(TL, 9, NbTL, 2, 1);
@@ -99,11 +50,9 @@ bool PViewDataList::finalize()
 
   // add dummy time values if none (or too few) time values are
   // provided (e.g. using the old parsed format)
-  if(Time && List_Nbr(Time) < NbTimeStep) {
-    for(int i = List_Nbr(Time); i < NbTimeStep; i++) {
-      double d = (double)i;
-      List_Add(Time, &d);
-    }
+  if(Time.size() < NbTimeStep) {
+    for(int i = Time.size(); i < NbTimeStep; i++)
+      Time.push_back(i);
   }
 
   // compute starting element indices
@@ -143,10 +92,8 @@ int PViewDataList::getNumElements(int step, int ent)
 
 double PViewDataList::getTime(int step)
 {
-  if(step < 0 || step >= List_Nbr(Time)) return 0.;
-  double val;
-  List_Read(Time, step, &val);
-  return val;
+  if(step < 0 || step >= (int)Time.size()) return 0.;
+  return Time[step];
 }
 
 double PViewDataList::getMin(int step)
@@ -161,17 +108,17 @@ double PViewDataList::getMax(int step)
   return TimeStepMax[step];
 }
 
-void PViewDataList::_stat(List_T *D, List_T *C, int nb)
+void PViewDataList::_stat(std::vector<double> &D, std::vector<char> &C, int nb)
 {
   // compute statistics for text lists
-  for(int i = 0; i < List_Nbr(D); i += nb){
-    double beg, end;
-    List_Read(D, i + nb - 1, &beg);
-    if(i > List_Nbr(D) - 2 * nb)
-      end = (double)List_Nbr(C);
+  for(unsigned int i = 0; i < D.size(); i += nb){
+    double beg = D[i + nb - 1];
+    double end;
+    if(i > D.size() - 2 * nb)
+      end = C.size();
     else
-      List_Read(D, i + nb + nb - 1, &end);
-    char *c = (char*)List_Pointer(C, (int)beg);
+      end = D[i + nb + nb - 1];
+    char *c = &C[(int)beg];
     int nbtime = 0;
     for(int j = 0; j < (int)(end - beg); j++)
       if(c[j] == '\0') nbtime++;
@@ -179,17 +126,13 @@ void PViewDataList::_stat(List_T *D, List_T *C, int nb)
       NbTimeStep = nbtime;
   }
   if(nb == 5){
-    for(int i = 0; i < List_Nbr(D); i += nb){
-      double x, y, z;
-      List_Read(D, i, &x);
-      List_Read(D, i + 1, &y);
-      List_Read(D, i + 2, &z);
-      BBox += SPoint3(x, y, z);
-    }
+    for(unsigned int i = 0; i < D.size(); i += nb)
+      BBox += SPoint3(D[i], D[i + 1], D[i + 2]);
   }
 }
 
-void PViewDataList::_stat(List_T *list, int nbcomp, int nbelm, int nbnod, int nbedg)
+void PViewDataList::_stat(std::vector<double> &list, int nbcomp, int nbelm,
+                          int nbnod, int nbedg)
 {
   // compute statistics for element lists
   if(!nbelm) return;  
@@ -205,13 +148,13 @@ void PViewDataList::_stat(List_T *list, int nbcomp, int nbelm, int nbnod, int nb
       nbval = nbcomp * im[0]->size1();
   }
   
-  int nb = List_Nbr(list) / nbelm;
-  for(int i = 0; i < List_Nbr(list); i += nb){
+  int nb = list.size() / nbelm;
+  for(unsigned int i = 0; i < list.size(); i += nb){
     int N = nb - 3 * nbnod;
-    double *X = (double *)List_Pointer_Fast(list, i);
-    double *Y = (double *)List_Pointer_Fast(list, i + 1 * nbnod);
-    double *Z = (double *)List_Pointer_Fast(list, i + 2 * nbnod);
-    double *V = (double *)List_Pointer_Fast(list, i + 3 * nbnod);
+    double *X = &list[i];
+    double *Y = &list[i + 1 * nbnod];
+    double *Z = &list[i + 2 * nbnod];
+    double *V = &list[i + 3 * nbnod];
 
     // update bounding box
     for(int j = 0; j < nbnod; j++)
@@ -247,7 +190,7 @@ void PViewDataList::_stat(List_T *list, int nbcomp, int nbelm, int nbnod, int nb
 }
 
 void PViewDataList::_setLast(int ele, int dim, int nbnod, int nbcomp, int nbedg,
-                             List_T *list, int nblist)
+                             std::vector<double> &list, int nblist)
 {
   if(haveInterpolationMatrices()){
     std::vector<gmshMatrix<double>*> im;
@@ -259,9 +202,9 @@ void PViewDataList::_setLast(int ele, int dim, int nbnod, int nbcomp, int nbedg,
   _lastNumNodes = nbnod;
   _lastNumComponents = nbcomp;
   _lastNumEdges = nbedg;
-  int nb = List_Nbr(list) / nblist;
-  _lastXYZ = (double*)List_Pointer_Fast(list, ele * nb);
-  _lastVal = (double*)List_Pointer_Fast(list, ele * nb + 3 * _lastNumNodes);
+  int nb = list.size() / nblist;
+  _lastXYZ = &list[ele * nb];
+  _lastVal = &list[ele * nb + 3 * _lastNumNodes];
   _lastNumValues = (nb - 3 * nbnod) / NbTimeStep;
 }
 
@@ -395,13 +338,14 @@ void PViewDataList::_getString(int dim, int i, int step, std::string &str,
   //     T2C is a list of chars: string\0,string\0,string\0,string\0,...
   //     Parser format is: T2(x,y,style){"str","str",...};
 
-  List_T *td = (dim == 2) ? T2D : T3D;
-  List_T *tc = (dim == 2) ? T2C : T3C;
+  std::vector<double> &td = (dim == 2) ? T2D : T3D;
+  std::vector<char> &tc = (dim == 2) ? T2C : T3C;
   int nbd = (dim == 2) ? 4 : 5;
 
   int index, nbchar;
-  double *d1 = (double *)List_Pointer(td, i * nbd);
-  double *d2 = (double *)List_Pointer_Test(td, (i + 1) * nbd);
+  double *d1 = &td[i * nbd];
+  double *d2 = ((i + 1) * nbd < td.size()) ? &td[(i + 1) * nbd] : 0;
+
   if(dim == 2) {
     x = d1[0];
     y = d1[1];
@@ -411,7 +355,7 @@ void PViewDataList::_getString(int dim, int i, int step, std::string &str,
     if(d2)
       nbchar = (int)d2[3] - index;
     else
-      nbchar = List_Nbr(tc) - index;
+      nbchar = tc.size() - index;
   }
   else {
     x = d1[0];
@@ -422,10 +366,10 @@ void PViewDataList::_getString(int dim, int i, int step, std::string &str,
     if(d2)
       nbchar = (int)d2[4] - index;
     else
-      nbchar = List_Nbr(tc) - index;
+      nbchar = tc.size() - index;
   }
   
-  char *c = (char *)List_Pointer(tc, index);
+  char *c = &tc[index];
   int k = 0, l = 0;
   while(k < nbchar && l != step) {
     if(c[k++] == '\0')
@@ -480,118 +424,17 @@ void PViewDataList::revertElement(int step, int ent, int ele)
 	    _lastNumComponents * (_lastNumNodes - i - 1) + k];
 }
 
-static void splitCurvedElement(List_T **in, int *nbin, List_T *out, int *nbout, 
-                               int nodin, int nodout, int nbcomp, int nbsplit,
-                               int split[][8], int remove=1)
-{
-  if(*nbin){
-    int nb = List_Nbr(*in) / *nbin;
-    int nbstep = (nb - 3 * nodin) / (nodin * nbcomp); // we don't know this yet for the view
-    for(int i = 0; i < List_Nbr(*in); i += nb) {
-      double *coord = (double *)List_Pointer_Fast(*in, i);
-      double *val = (double *)List_Pointer_Fast(*in, i + 3 * nodin);
-      for(int j = 0; j < nbsplit; j++){
-        for(int k = 0; k < nodout; k++)
-          List_Add(out, &coord[split[j][k]]);
-        for(int k = 0; k < nodout; k++)
-          List_Add(out, &coord[nodin + split[j][k]]);
-        for(int k = 0; k < nodout; k++)
-          List_Add(out, &coord[2 * nodin + split[j][k]]);
-        for(int ts = 0; ts < nbstep; ts++){
-          for(int k = 0; k < nodout; k++){
-            for(int l = 0; l < nbcomp; l++){
-              List_Add(out, &val[nodin * nbcomp * ts + nbcomp * split[j][k] + l]);
-            }
-          }
-        }
-        (*nbout)++;
-      }
-    }
-  }
-
-  if(remove){
-    *nbin = 0;
-    List_Delete(*in);
-    *in = NULL;
-  }
-}
-
-void PViewDataList::_splitCurvedElements()
-{
-  int lin[2][8] = { // 2-split
-    {0,2}, {2,1}
-  };
-  splitCurvedElement(&SL2, &NbSL2, SL, &NbSL, 3,2, 1, 2, lin);
-  splitCurvedElement(&VL2, &NbVL2, VL, &NbVL, 3,2, 3, 2, lin);
-  splitCurvedElement(&TL2, &NbTL2, TL, &NbTL, 3,2, 9, 2, lin);
-
-  int tri[4][8] = { // 4-split
-    {0,3,5}, {1,4,3}, {2,5,4}, {3,4,5}
-  };
-  splitCurvedElement(&ST2, &NbST2, ST, &NbST, 6,3, 1, 4, tri);
-  splitCurvedElement(&VT2, &NbVT2, VT, &NbVT, 6,3, 3, 4, tri);
-  splitCurvedElement(&TT2, &NbTT2, TT, &NbTT, 6,3, 9, 4, tri);
-
-  int qua[4][8] = { // 4-split
-    {0,4,8,7}, {1,5,8,4}, {2,6,8,5}, {3,7,8,6}
-  };
-  splitCurvedElement(&SQ2, &NbSQ2, SQ, &NbSQ, 9,4, 1, 4, qua);
-  splitCurvedElement(&VQ2, &NbVQ2, VQ, &NbVQ, 9,4, 3, 4, qua);
-  splitCurvedElement(&TQ2, &NbTQ2, TQ, &NbTQ, 9,4, 9, 4, qua);
-
-  int tet[8][8] = { // 8-split
-    {0,4,6,7}, {1,5,4,9}, {2,6,5,8}, {3,9,7,8},
-    {4,6,7,8}, {4,6,5,8}, {4,5,9,8}, {4,7,9,8}
-  };
-  splitCurvedElement(&SS2, &NbSS2, SS, &NbSS, 10,4, 1, 8, tet);
-  splitCurvedElement(&VS2, &NbVS2, VS, &NbVS, 10,4, 3, 8, tet);
-  splitCurvedElement(&TS2, &NbTS2, TS, &NbTS, 10,4, 9, 8, tet);
-
-  int hex[8][8] = { // 8-split
-    {0,8,20,9, 10,21,26,22}, {8,1,11,20, 21,12,23,26},
-    {9,20,13,3, 22,26,24,15}, {20,11,2,13, 26,23,14,24},
-    {10,21,26,22, 4,16,25,17}, {21,12,23,26, 16,5,18,25},
-    {22,26,24,15, 17,25,19,7}, {26,23,14,24, 25,18,6,19}
-  };
-  splitCurvedElement(&SH2, &NbSH2, SH, &NbSH, 27,8, 1, 8, hex);
-  splitCurvedElement(&VH2, &NbVH2, VH, &NbVH, 27,8, 3, 8, hex);
-  splitCurvedElement(&TH2, &NbTH2, TH, &NbTH, 27,8, 9, 8, hex);
-
-  int pri[8][8] = { // 8-split
-    {0,6,7, 8,15,16}, {1,9,6, 10,17,15}, {2,7,9, 11,16,17}, {6,9,7, 15,17,16},
-    {8,15,16, 3,12,13}, {10,17,15, 4,14,12}, {11,16,17, 5,13,14}, {15,17,16, 12,14,13}
-  };
-  splitCurvedElement(&SI2, &NbSI2, SI, &NbSI, 18,6, 1, 8, pri);
-  splitCurvedElement(&VI2, &NbVI2, VI, &NbVI, 18,6, 3, 8, pri);
-  splitCurvedElement(&TI2, &NbTI2, TI, &NbTI, 18,6, 9, 8, pri);
-
-  int pyr[6][8] = { // 6 pyramids
-    {0,5,13,6, 7}, {5,1,8,13, 9}, {6,13,10,3, 12}, {13,8,2,10, 11},
-    {7,9,11,12, 4}, {7,12,11,9, 13}
-  };
-  splitCurvedElement(&SY2, &NbSY2, SY, &NbSY, 14,5, 1, 6, pyr, 0); // don't remove yet
-  splitCurvedElement(&VY2, &NbVY2, VY, &NbVY, 14,5, 3, 6, pyr, 0);
-  splitCurvedElement(&TY2, &NbTY2, TY, &NbTY, 14,5, 9, 6, pyr, 0);
-
-  int pyr2[4][8] = { // + 4 tets to fill the holes
-    {6,12,7,13}, {7,9,5,13}, {9,11,8,13}, {12,10,11,13}
-  };
-  splitCurvedElement(&SY2, &NbSY2, SS, &NbSS, 14,4, 1, 4, pyr2);
-  splitCurvedElement(&VY2, &NbVY2, VS, &NbVS, 14,4, 3, 4, pyr2);
-  splitCurvedElement(&TY2, &NbTY2, TS, &NbTS, 14,4, 9, 4, pyr2);
-}
-
-static void generateConnectivities(List_T *list, int nbList, int nbTimeStep, 
+static void generateConnectivities(std::vector<double> &list, int nbList, int nbTimeStep,
                                    int nbVert, int nbComp, smooth_data &data)
 {
   if(!nbList) return;
   double *vals = new double[nbTimeStep * nbComp];
-  int nb = List_Nbr(list) / nbList;
-  for(int i = 0; i < List_Nbr(list); i += nb) {
-    double *x = (double *)List_Pointer_Fast(list, i);
-    double *y = (double *)List_Pointer_Fast(list, i + nbVert);
-    double *z = (double *)List_Pointer_Fast(list, i + 2 * nbVert);
-    double *v = (double *)List_Pointer_Fast(list, i + 3 * nbVert);
+  int nb = list.size() / nbList;
+  for(unsigned int i = 0; i < list.size(); i += nb) {
+    double *x = &list[i];
+    double *y = &list[i + nbVert];
+    double *z = &list[i + 2 * nbVert];
+    double *v = &list[list, i + 3 * nbVert];
     for(int j = 0; j < nbVert; j++) {
       for(int ts = 0; ts < nbTimeStep; ts++)
         for(int k = 0; k < nbComp; k++)
@@ -602,17 +445,17 @@ static void generateConnectivities(List_T *list, int nbList, int nbTimeStep,
   delete [] vals;
 }
 
-static void smoothList(List_T *list, int nbList, int nbTimeStep,
+static void smoothList(std::vector<double> &list, int nbList, int nbTimeStep,
                        int nbVert, int nbComp, smooth_data &data)
 {
   if(!nbList) return;
   double *vals = new double[nbTimeStep * nbComp];
-  int nb = List_Nbr(list)/nbList;
-  for(int i = 0; i < List_Nbr(list); i += nb) {
-    double *x = (double *)List_Pointer_Fast(list, i);
-    double *y = (double *)List_Pointer_Fast(list, i + nbVert);
-    double *z = (double *)List_Pointer_Fast(list, i + 2 * nbVert);
-    double *v = (double *)List_Pointer_Fast(list, i + 3 * nbVert);
+  int nb = list.size() / nbList;
+  for(unsigned int i = 0; i < list.size(); i += nb) {
+    double *x = &list[i];
+    double *y = &list[i + nbVert];
+    double *z = &list[i + 2 * nbVert];
+    double *v = &list[i + 3 * nbVert];
     for(int j = 0; j < nbVert; j++) {
       if(data.get(x[j], y[j], z[j], nbTimeStep * nbComp, vals)){
         for(int ts = 0; ts < nbTimeStep; ts++) 
@@ -630,22 +473,27 @@ void PViewDataList::smooth()
   xyzv::eps = CTX::instance()->lc * 1.e-8;
   smooth_data data;
 
-  List_T *list = 0;
+  std::vector<double> *list = 0;
   int *nbe = 0, nbc, nbn;
   for(int i = 0; i < 24; i++){
     getRawData(i, &list, &nbe, &nbc, &nbn);
     if(nbn > 1)
-      generateConnectivities(list, *nbe, NbTimeStep, nbn, nbc, data);
+      generateConnectivities(*list, *nbe, NbTimeStep, nbn, nbc, data);
   }
   for(int i = 0; i < 24; i++){
     getRawData(i, &list, &nbe, &nbc, &nbn);
     if(nbn > 1)
-      smoothList(list, *nbe, NbTimeStep, nbn, nbc, data);
+      smoothList(*list, *nbe, NbTimeStep, nbn, nbc, data);
   }
   xyzv::eps = old_eps;
   finalize();
 }
 
+static void dVecMerge(std::vector<double> &v, std::vector<double> &dest)
+{
+  for(unsigned int i = 0; i < v.size(); i++) dest.push_back(v[i]);
+}
+
 bool PViewDataList::combineSpace(nameData &nd)
 {
   // sanity checks
@@ -671,59 +519,57 @@ bool PViewDataList::combineSpace(nameData &nd)
       if(_interpolation[it->first].empty())
         for(unsigned int i = 0; i < it->second.size(); i++)
           _interpolation[it->first].push_back(new gmshMatrix<double>(*it->second[i]));
-    
+
     // merge elememts
-    List_Merge(l->SP, SP); NbSP += l->NbSP; List_Merge(l->VP, VP); NbVP += l->NbVP;
-    List_Merge(l->TP, TP); NbTP += l->NbTP; List_Merge(l->SL, SL); NbSL += l->NbSL;
-    List_Merge(l->VL, VL); NbVL += l->NbVL; List_Merge(l->TL, TL); NbTL += l->NbTL;
-    List_Merge(l->ST, ST); NbST += l->NbST; List_Merge(l->VT, VT); NbVT += l->NbVT;
-    List_Merge(l->TT, TT); NbTT += l->NbTT; List_Merge(l->SQ, SQ); NbSQ += l->NbSQ;
-    List_Merge(l->VQ, VQ); NbVQ += l->NbVQ; List_Merge(l->TQ, TQ); NbTQ += l->NbTQ;
-    List_Merge(l->SS, SS); NbSS += l->NbSS; List_Merge(l->VS, VS); NbVS += l->NbVS;
-    List_Merge(l->TS, TS); NbTS += l->NbTS; List_Merge(l->SH, SH); NbSH += l->NbSH;
-    List_Merge(l->VH, VH); NbVH += l->NbVH; List_Merge(l->TH, TH); NbTH += l->NbTH;
-    List_Merge(l->SI, SI); NbSI += l->NbSI; List_Merge(l->VI, VI); NbVI += l->NbVI;
-    List_Merge(l->TI, TI); NbTI += l->NbTI; List_Merge(l->SY, SY); NbSY += l->NbSY;
-    List_Merge(l->VY, VY); NbVY += l->NbVY; List_Merge(l->TY, TY); NbTY += l->NbTY;
+    dVecMerge(l->SP, SP); NbSP += l->NbSP; dVecMerge(l->VP, VP); NbVP += l->NbVP;
+    dVecMerge(l->TP, TP); NbTP += l->NbTP; dVecMerge(l->SL, SL); NbSL += l->NbSL;
+    dVecMerge(l->VL, VL); NbVL += l->NbVL; dVecMerge(l->TL, TL); NbTL += l->NbTL;
+    dVecMerge(l->ST, ST); NbST += l->NbST; dVecMerge(l->VT, VT); NbVT += l->NbVT;
+    dVecMerge(l->TT, TT); NbTT += l->NbTT; dVecMerge(l->SQ, SQ); NbSQ += l->NbSQ;
+    dVecMerge(l->VQ, VQ); NbVQ += l->NbVQ; dVecMerge(l->TQ, TQ); NbTQ += l->NbTQ;
+    dVecMerge(l->SS, SS); NbSS += l->NbSS; dVecMerge(l->VS, VS); NbVS += l->NbVS;
+    dVecMerge(l->TS, TS); NbTS += l->NbTS; dVecMerge(l->SH, SH); NbSH += l->NbSH;
+    dVecMerge(l->VH, VH); NbVH += l->NbVH; dVecMerge(l->TH, TH); NbTH += l->NbTH;
+    dVecMerge(l->SI, SI); NbSI += l->NbSI; dVecMerge(l->VI, VI); NbVI += l->NbVI;
+    dVecMerge(l->TI, TI); NbTI += l->NbTI; dVecMerge(l->SY, SY); NbSY += l->NbSY;
+    dVecMerge(l->VY, VY); NbVY += l->NbVY; dVecMerge(l->TY, TY); NbTY += l->NbTY;
 
     // merge strings
-    for(int i = 0; i < List_Nbr(l->T2D); i += 4){
-      List_Add(T2D, List_Pointer(l->T2D, i));
-      List_Add(T2D, List_Pointer(l->T2D, i + 1));
-      List_Add(T2D, List_Pointer(l->T2D, i + 2)); 
-      double d = List_Nbr(T2C);
-      List_Add(T2D, &d);
-      double beg, end;
-      List_Read(l->T2D, i + 3, &beg); 
-      if(i > List_Nbr(l->T2D) - 8)
-        end = (double)List_Nbr(l->T2C);
+    for(unsigned int i = 0; i < l->T2D.size(); i += 4){
+      T2D.push_back(l->T2D[i]);
+      T2D.push_back(l->T2D[i + 1]);
+      T2D.push_back(l->T2D[i + 2]);
+      T2D.push_back(T2C.size());
+      double beg = l->T2D[i + 3]; 
+      double end;
+      if(i > l->T2D.size() - 8)
+        end = l->T2C.size();
       else
-        List_Read(l->T2D, i + 3 + 4, &end); 
-      char *c = (char*)List_Pointer(l->T2C, (int)beg);
+        end = l->T2D[i + 3 + 4]; 
+      char *c = &l->T2C[(int)beg];
       for(int j = 0; j < (int)(end - beg); j++)
-        List_Add(T2C, &c[j]); 
+        T2C.push_back(c[j]);
       NbT2++;
     }
-    for(int i = 0; i < List_Nbr(l->T3D); i += 5){
-      List_Add(T3D, List_Pointer(l->T3D, i));
-      List_Add(T3D, List_Pointer(l->T3D, i + 1));
-      List_Add(T3D, List_Pointer(l->T3D, i + 2)); 
-      List_Add(T3D, List_Pointer(l->T3D, i + 3)); 
-      double d = List_Nbr(T3C);
-      List_Add(T3D, &d);
-      double beg, end;
-      List_Read(l->T3D, i + 4, &beg); 
-      if(i > List_Nbr(l->T3D) - 10)
-        end = (double)List_Nbr(l->T3C);
+    for(unsigned int i = 0; i < l->T3D.size(); i += 5){
+      T3D.push_back(l->T3D[i]);
+      T3D.push_back(l->T3D[i + 1]);
+      T3D.push_back(l->T3D[i + 2]); 
+      T3D.push_back(l->T3D[i + 3]); 
+      T3D.push_back(T3C.size());
+      double beg = l->T3D[i + 4]; 
+      double end;
+      if(i > l->T3D.size() - 10)
+        end = l->T3C.size();
       else
-        List_Read(l->T3D, i + 4 + 5, &end); 
-      char *c = (char*)List_Pointer(l->T3C, (int)beg);
+        end = l->T3D[i + 4 + 5]; 
+      char *c = &l->T3C[(int)beg];
       for(int j = 0; j < (int)(end-beg); j++)
-        List_Add(T3C, &c[j]); 
+        T3C.push_back(c[j]);
       NbT3++;
     }
   }
-  
+
   std::string tmp;
   if(nd.name == "__all__")
     tmp = "all";
@@ -739,37 +585,6 @@ bool PViewDataList::combineSpace(nameData &nd)
   return finalize();
 }
 
-void PViewDataList::getRawData(int type, List_T **l, int **ne, int *nc, int *nn)
-{
-  switch(type){
-  case 0 : *l = SP; *ne = &NbSP; *nc = 1; *nn = 1; break;
-  case 1 : *l = VP; *ne = &NbVP; *nc = 3; *nn = 1; break;
-  case 2 : *l = TP; *ne = &NbTP; *nc = 9; *nn = 1; break;
-  case 3 : *l = SL; *ne = &NbSL; *nc = 1; *nn = 2; break;
-  case 4 : *l = VL; *ne = &NbVL; *nc = 3; *nn = 2; break;
-  case 5 : *l = TL; *ne = &NbTL; *nc = 9; *nn = 2; break;
-  case 6 : *l = ST; *ne = &NbST; *nc = 1; *nn = 3; break;
-  case 7 : *l = VT; *ne = &NbVT; *nc = 3; *nn = 3; break;
-  case 8 : *l = TT; *ne = &NbTT; *nc = 9; *nn = 3; break;
-  case 9 : *l = SQ; *ne = &NbSQ; *nc = 1; *nn = 4; break;
-  case 10: *l = VQ; *ne = &NbVQ; *nc = 3; *nn = 4; break;
-  case 11: *l = TQ; *ne = &NbTQ; *nc = 9; *nn = 4; break;
-  case 12: *l = SS; *ne = &NbSS; *nc = 1; *nn = 4; break;
-  case 13: *l = VS; *ne = &NbVS; *nc = 3; *nn = 4; break;
-  case 14: *l = TS; *ne = &NbTS; *nc = 9; *nn = 4; break;
-  case 15: *l = SH; *ne = &NbSH; *nc = 1; *nn = 8; break;
-  case 16: *l = VH; *ne = &NbVH; *nc = 3; *nn = 8; break;
-  case 17: *l = TH; *ne = &NbTH; *nc = 9; *nn = 8; break;
-  case 18: *l = SI; *ne = &NbSI; *nc = 1; *nn = 6; break;
-  case 19: *l = VI; *ne = &NbVI; *nc = 3; *nn = 6; break;
-  case 20: *l = TI; *ne = &NbTI; *nc = 9; *nn = 6; break;
-  case 21: *l = SY; *ne = &NbSY; *nc = 1; *nn = 5; break;
-  case 22: *l = VY; *ne = &NbVY; *nc = 3; *nn = 5; break;
-  case 23: *l = TY; *ne = &NbTY; *nc = 9; *nn = 5; break;
-  default: Msg::Error("Wrong type in PViewDataList"); break;
-  }
-}
-
 bool PViewDataList::combineTime(nameData &nd)
 {
   // sanity checks
@@ -784,7 +599,7 @@ bool PViewDataList::combineTime(nameData &nd)
   }
 
   int *nbe = 0, *nbe2 = 0, nbn, nbn2, nbc, nbc2;
-  List_T *list = 0, *list2 = 0;
+  std::vector<double> *list = 0, *list2 = 0;
   
   // use the first data set as the reference
   for(int i = 0; i < 24; i++){
@@ -796,8 +611,9 @@ bool PViewDataList::combineTime(nameData &nd)
   NbT3 = data[0]->NbT3;
   for(std::map<int, std::vector<gmshMatrix<double>*> >::iterator it = 
         data[0]->_interpolation.begin(); it != data[0]->_interpolation.end(); it++)
-    for(unsigned int i = 0; i < it->second.size(); i++)
-      _interpolation[it->first].push_back(new gmshMatrix<double>(*it->second[i]));
+    if(_interpolation[it->first].empty())
+      for(unsigned int i = 0; i < it->second.size(); i++)
+        _interpolation[it->first].push_back(new gmshMatrix<double>(*it->second[i]));
   
   // merge values for all element types
   for(int i = 0; i < 24; i++){
@@ -806,16 +622,16 @@ bool PViewDataList::combineTime(nameData &nd)
       for(unsigned int k = 0; k < data.size(); k++){
         data[k]->getRawData(i, &list2, &nbe2, &nbc2, &nbn2);
         if(*nbe && *nbe == *nbe2){
-          int nb2 = List_Nbr(list2) / *nbe2;
+          int nb2 = list2->size() / *nbe2;
           if(!k){ 
             // copy coordinates of elm j (we are always here as
             // expected, since the ref view is the first one)
             for(int l = 0; l < 3 * nbn2; l++)
-              List_Add(list, List_Pointer(list2, j * nb2 + l));
+              list->push_back((*list2)[j * nb2 + l]);
           }
           // copy values of elm j
           for(int l = 0; l < nb2 - 3 * nbn2; l++)
-            List_Add(list, List_Pointer(list2, j * nb2 + 3 * nbn2 + l));
+            list->push_back((*list2)[j * nb2 + 3 * nbn2 + l]);
         }
       }
     }
@@ -827,23 +643,22 @@ bool PViewDataList::combineTime(nameData &nd)
       if(NbT2 == data[k]->NbT2){
         if(!k){
           // copy coordinates 
-          List_Add(T2D, List_Pointer(data[k]->T2D, j * 4));
-          List_Add(T2D, List_Pointer(data[k]->T2D, j * 4 + 1));
-          List_Add(T2D, List_Pointer(data[k]->T2D, j * 4 + 2));
+          T2D.push_back(data[k]->T2D[j * 4]);
+          T2D.push_back(data[k]->T2D[j * 4 + 1]);
+          T2D.push_back(data[k]->T2D[j * 4 + 2]);
           // index
-          double d = List_Nbr(T2C);
-          List_Add(T2D, &d);
+          T2D.push_back(T2C.size());
         }
         // copy char values
-        double beg, end;
-        List_Read(data[k]->T2D, j * 4 + 3, &beg);
+        double beg = data[k]->T2D[j * 4 + 3];
+        double end;
         if(j == NbT2 - 1)
-          end = (double)List_Nbr(data[k]->T2C);
+          end = data[k]->T2C.size();
         else
-          List_Read(data[k]->T2D, j * 4 + 4 + 3, &end);
-        char *c = (char*)List_Pointer(data[k]->T2C, (int)beg);
+          end = data[k]->T2D[j * 4 + 4 + 3];
+        char *c = &data[k]->T2C[(int)beg];
         for(int l = 0; l < (int)(end - beg); l++)
-          List_Add(T2C, &c[l]);
+          T2C.push_back(c[l]);
       }
     }
   }
@@ -854,47 +669,45 @@ bool PViewDataList::combineTime(nameData &nd)
       if(NbT3 == data[k]->NbT3){
         if(!k){
           // copy coordinates 
-          List_Add(T3D, List_Pointer(data[k]->T3D, j * 5));
-          List_Add(T3D, List_Pointer(data[k]->T3D, j * 5 + 1));
-          List_Add(T3D, List_Pointer(data[k]->T3D, j * 5 + 2));
-          List_Add(T3D, List_Pointer(data[k]->T3D, j * 5 + 3));
+          T3D.push_back(data[k]->T3D[j * 5]);
+          T3D.push_back(data[k]->T3D[j * 5 + 1]);
+          T3D.push_back(data[k]->T3D[j * 5 + 2]);
+          T3D.push_back(data[k]->T3D[j * 5 + 3]);
           // index
-          double d = List_Nbr(T3C);
-          List_Add(T3D, &d);
+          T3D.push_back(T3C.size());
         }
         // copy char values
-        double beg, end;
-        List_Read(data[k]->T3D, j * 5 + 4, &beg);
+        double beg = data[k]->T3D[j * 5 + 4];
+        double end;
         if(j == NbT3 - 1)
-          end = (double)List_Nbr(data[k]->T3C);
+          end = data[k]->T3C.size();
         else
-          List_Read(data[k]->T3D, j * 5 + 5 + 4, &end);
-        char *c = (char*)List_Pointer(data[k]->T3C, (int)beg);
+          end = data[k]->T3D[j * 5 + 5 + 4];
+        char *c = &data[k]->T3C[(int)beg];
         for(int l = 0; l < (int)(end - beg); l++)
-          List_Add(T3C, &c[l]);
+          T3C.push_back(c[l]);
       }
     }
   }
-
+  
   // create the time data
   for(unsigned int i = 0; i < data.size(); i++)
-    List_Merge(data[i]->Time, Time);
+    dVecMerge(data[i]->Time, Time);
   
   // if all the time values are the same, it probably means that the
   // original views didn't have any time data: then we'll just use
   // time step values
-  if(List_Nbr(Time)){
-    double t0, ti;
-    List_Read(Time, 0, &t0);
+  if(Time.size()){
+    double t0 = Time[0], ti;
     bool allTheSame = true;
-    for(int i = 1; i < List_Nbr(Time); i++){
-      List_Read(Time, i, &ti);
+    for(unsigned int i = 1; i < Time.size(); i++){
+      ti = Time[i];
       if(ti != t0){
         allTheSame = false;
         break;
       }
     }
-    if(allTheSame) List_Reset(Time);
+    if(allTheSame) Time.clear();
   }
 
   std::string tmp;
@@ -911,3 +724,56 @@ bool PViewDataList::combineTime(nameData &nd)
   setFileName(std::string(name) + ".pos");
   return finalize();
 }
+
+void PViewDataList::getRawData(int type, std::vector<double> **l, int **ne, 
+                               int *nc, int *nn)
+{
+  switch(type){
+  case 0 : *l = &SP; *ne = &NbSP; *nc = 1; *nn = 1; break;
+  case 1 : *l = &VP; *ne = &NbVP; *nc = 3; *nn = 1; break;
+  case 2 : *l = &TP; *ne = &NbTP; *nc = 9; *nn = 1; break;
+  case 3 : *l = &SL; *ne = &NbSL; *nc = 1; *nn = 2; break;
+  case 4 : *l = &VL; *ne = &NbVL; *nc = 3; *nn = 2; break;
+  case 5 : *l = &TL; *ne = &NbTL; *nc = 9; *nn = 2; break;
+  case 6 : *l = &ST; *ne = &NbST; *nc = 1; *nn = 3; break;
+  case 7 : *l = &VT; *ne = &NbVT; *nc = 3; *nn = 3; break;
+  case 8 : *l = &TT; *ne = &NbTT; *nc = 9; *nn = 3; break;
+  case 9 : *l = &SQ; *ne = &NbSQ; *nc = 1; *nn = 4; break;
+  case 10: *l = &VQ; *ne = &NbVQ; *nc = 3; *nn = 4; break;
+  case 11: *l = &TQ; *ne = &NbTQ; *nc = 9; *nn = 4; break;
+  case 12: *l = &SS; *ne = &NbSS; *nc = 1; *nn = 4; break;
+  case 13: *l = &VS; *ne = &NbVS; *nc = 3; *nn = 4; break;
+  case 14: *l = &TS; *ne = &NbTS; *nc = 9; *nn = 4; break;
+  case 15: *l = &SH; *ne = &NbSH; *nc = 1; *nn = 8; break;
+  case 16: *l = &VH; *ne = &NbVH; *nc = 3; *nn = 8; break;
+  case 17: *l = &TH; *ne = &NbTH; *nc = 9; *nn = 8; break;
+  case 18: *l = &SI; *ne = &NbSI; *nc = 1; *nn = 6; break;
+  case 19: *l = &VI; *ne = &NbVI; *nc = 3; *nn = 6; break;
+  case 20: *l = &TI; *ne = &NbTI; *nc = 9; *nn = 6; break;
+  case 21: *l = &SY; *ne = &NbSY; *nc = 1; *nn = 5; break;
+  case 22: *l = &VY; *ne = &NbVY; *nc = 3; *nn = 5; break;
+  case 23: *l = &TY; *ne = &NbTY; *nc = 9; *nn = 5; break;
+  default: Msg::Error("Wrong type in PViewDataList"); break;
+  }
+}
+
+void PViewDataList::setOrder2(int numEdges)
+{
+  int type = 0;
+  switch(numEdges){
+  case 1: type = MSH_LIN_3; break;
+  case 3: type = MSH_TRI_6; break;
+  case 4: type = MSH_QUA_9; break;
+  case 6: type = MSH_TET_10; break;
+  case 12: type = MSH_HEX_27; break;
+  case 9: type = MSH_PRI_18; break;
+  case 8: type = MSH_PYR_14; break;
+  }
+  const gmshFunctionSpace *fs = &gmshFunctionSpaces::find(type);
+  if(!fs){
+    Msg::Error("Could not find function space for element type %d", type);
+    return;
+  }
+  setInterpolationMatrices(numEdges, fs->coefficients, fs->monomials,
+                           fs->coefficients, fs->monomials);
+}
diff --git a/Post/PViewDataList.h b/Post/PViewDataList.h
index 30e101ca6df09e350268ffa3b43fed4f5552dd10..0644ae8b777a12cfef6c15cf149a6afce8e119a6 100644
--- a/Post/PViewDataList.h
+++ b/Post/PViewDataList.h
@@ -10,7 +10,6 @@
 #include <string>
 #include "PViewData.h"
 #include "SBoundingBox3d.h"
-#include "ListUtils.h"
 
 // The container for list-based datasets (for which all elements are
 // discontinuous).
@@ -18,46 +17,46 @@ class PViewDataList : public PViewData {
  public: 
   // FIXME: all these members will be made private once the plugins
   // have been rewritten
-  int DataSize; // size(double) or sizeof(float)
   int NbTimeStep;
   double Min, Max;
   std::vector<double> TimeStepMin, TimeStepMax;
   SBoundingBox3d BBox;
-  List_T *Time;
+  std::vector<double> Time;
   int NbSP, NbVP, NbTP;
-  List_T *SP, *VP, *TP; // points
-  int NbSL, NbVL, NbTL, NbSL2, NbVL2, NbTL2;
-  List_T *SL, *VL, *TL, *SL2, *VL2, *TL2; // lines
-  int NbST, NbVT, NbTT, NbST2, NbVT2, NbTT2;
-  List_T *ST, *VT, *TT, *ST2, *VT2, *TT2; // triangles
-  int NbSQ, NbVQ, NbTQ, NbSQ2, NbVQ2, NbTQ2;
-  List_T *SQ, *VQ, *TQ, *SQ2, *VQ2, *TQ2; // quadrangles
-  int NbSS, NbVS, NbTS, NbSS2, NbVS2, NbTS2;
-  List_T *SS, *VS, *TS, *SS2, *VS2, *TS2; // tetrahedra
-  int NbSH, NbVH, NbTH, NbSH2, NbVH2, NbTH2;
-  List_T *SH, *VH, *TH, *SH2, *VH2, *TH2; // hexahedra
-  int NbSI, NbVI, NbTI, NbSI2, NbVI2, NbTI2;
-  List_T *SI, *VI, *TI, *SI2, *VI2, *TI2; // prisms
-  int NbSY, NbVY, NbTY, NbSY2, NbVY2, NbTY2;
-  List_T *SY, *VY, *TY, *SY2, *VY2, *TY2; // pyramids
+  std::vector<double> SP, VP, TP; // points
+  int NbSL, NbVL, NbTL;
+  std::vector<double> SL, VL, TL; // lines
+  int NbST, NbVT, NbTT;
+  std::vector<double> ST, VT, TT; // triangles
+  int NbSQ, NbVQ, NbTQ;
+  std::vector<double> SQ, VQ, TQ; // quadrangles
+  int NbSS, NbVS, NbTS;
+  std::vector<double> SS, VS, TS; // tetrahedra
+  int NbSH, NbVH, NbTH;
+  std::vector<double> SH, VH, TH; // hexahedra
+  int NbSI, NbVI, NbTI;
+  std::vector<double> SI, VI, TI; // prisms
+  int NbSY, NbVY, NbTY;
+  std::vector<double> SY, VY, TY; // pyramids
   int NbT2, NbT3;
-  List_T *T2D, *T2C, *T3D, *T3C; // 2D and 3D text strings
+  std::vector<double> T2D, T3D; // 2D and 3D text strings
+  std::vector<char> T2C, T3C; 
  private:
   int _index[24];
   int _lastElement, _lastDimension;
   int _lastNumNodes, _lastNumComponents, _lastNumValues, _lastNumEdges;
   double *_lastXYZ, *_lastVal;
-  void _stat(List_T *D, List_T *C, int nb);
-  void _stat(List_T *list, int nbcomp, int nbelm, int nbnod, int nbedg);
+  void _stat(std::vector<double> &D, std::vector<char> &C, int nb);
+  void _stat(std::vector<double> &list, int nbcomp, int nbelm, int nbnod, int nbedg);
   void _setLast(int ele);
   void _setLast(int ele, int dim, int nbnod, int nbcomp, int nbedg,
-                List_T *list, int nblist);
+                std::vector<double> &list, int nblist);
   void _getString(int dim, int i, int timestep, std::string &str, 
                   double &x, double &y, double &z, double &style);
   void _splitCurvedElements();
  public:
-  PViewDataList(bool allocate=true, int numalloc=1000);
-  ~PViewDataList();
+  PViewDataList();
+  ~PViewDataList(){}
   bool finalize();
   int getNumTimeSteps(){ return NbTimeStep; }
   double getTime(int step);
@@ -99,10 +98,11 @@ class PViewDataList : public PViewData {
   bool combineSpace(nameData &nd);
 
   // specific to list-based data sets
-  void getRawData(int type, List_T **l, int **ne, int *nc, int *nn);
+  void getRawData(int type, std::vector<double> **l, int **ne, int *nc, int *nn);
+  void setOrder2(int nbedg);
 
   // I/O routines
-  bool readPOS(FILE *fp, double version, int format, int size);
+  bool readPOS(FILE *fp, double version, bool binary);
   bool writePOS(std::string fileName, bool binary=false, bool parsed=true,
                 bool append=false);
   bool writeMSH(std::string fileName, bool binary=false);
diff --git a/Post/PViewDataListIO.cpp b/Post/PViewDataListIO.cpp
index b4df9016c25e58b67810192284bd36f46d14479b..c914353fa71606b2c3ac5581f58c0aea233e3fc8 100644
--- a/Post/PViewDataListIO.cpp
+++ b/Post/PViewDataListIO.cpp
@@ -7,15 +7,100 @@
 #include <set>
 #include "PViewDataList.h"
 #include "Numeric.h"
+#include "StringUtils.h"
 #include "GmshMessage.h"
 #include "Context.h"
 #include "adaptiveData.h"
 
-bool PViewDataList::readPOS(FILE *fp, double version, int format, int size)
+static void dVecRead(std::vector<double> &v, int n, FILE *fp, 
+                     bool binary, int swap)
+{
+  if(!n) return;
+  v.resize(n);
+  if(binary){
+    if(!fread(&v[0], sizeof(double), n, fp))
+      Msg::Error("Read error");
+    if(swap) SwapBytes((char*)&v[0], sizeof(double), n);
+  }
+  else{
+    for(int i = 0; i < n; i++){
+      if(!fscanf(fp, "%lf", &v[i])){
+        Msg::Error("Read error");
+        break;
+      }
+    }
+  }
+}
+
+static void cVecRead(std::vector<char> &v, int n, FILE *fp, 
+                     bool binary, int swap, bool oldStyle)
+{
+  if(!n) return;
+  v.resize(n);
+  if(binary){
+    if(!fread(&v[0], sizeof(char), n, fp))
+      Msg::Error("Read error");
+    if(swap) SwapBytes((char*)&v[0], sizeof(char), n);
+  }
+  else{
+    if(oldStyle){
+      for(int i = 0; i < n; i++){
+        if(!fscanf(fp, "%c", &v[i])){
+          Msg::Error("Read error");
+          break;
+        }
+        if(v[i] == '^') v[i] = '\0';
+      }
+    }
+    else{
+      for(int i = 0; i < n; i++){
+        char c = (char)fgetc(fp);
+        if(c == EOF){
+          Msg::Error("Read error");
+          break;
+        }
+        else{
+          v[i] = c;
+        }
+      }
+    }
+  }
+}
+
+static void dVecWrite(std::vector<double> &v, FILE *fp, bool binary)
+{
+  if(v.empty()) return;
+  if(binary)
+    fwrite(&v[0], sizeof(double), v.size(), fp);
+  else
+    for(unsigned i = 0; i < v.size(); i++)
+      fprintf(fp, " %.16g", v[i]);
+}
+
+static void cVecWrite(std::vector<char> &v, FILE *fp, bool binary)
+{
+  if(v.empty()) return;
+  if(binary)
+    fwrite(&v[0], sizeof(char), v.size(), fp);
+  else
+    for(unsigned i = 0; i < v.size(); i++)
+      fputc(v[i], fp);
+}
+
+bool PViewDataList::readPOS(FILE *fp, double version, bool binary)
 {
   char name[256];
   int t2l, t3l;
 
+  int NbSL2 = 0, NbVL2 = 0, NbTL2 = 0, NbST2 = 0, NbVT2 = 0, NbTT2 = 0;
+  int NbSQ2 = 0, NbVQ2 = 0, NbTQ2 = 0, NbSS2 = 0, NbVS2 = 0, NbTS2 = 0;
+  int NbSH2 = 0, NbVH2 = 0, NbTH2 = 0, NbSI2 = 0, NbVI2 = 0, NbTI2 = 0;
+  int NbSY2 = 0, NbVY2 = 0, NbTY2 = 0;
+  std::vector<double> SL2, VL2, TL2, ST2, VT2, TT2;
+  std::vector<double> SQ2, VQ2, TQ2, SS2, VS2, TS2;
+  std::vector<double> SH2, VH2, TH2, SI2, VI2, TI2;
+  std::vector<double> SY2, VY2, TY2;
+
   if(version <= 1.0) {
     Msg::Debug("Detected post-processing view format <= 1.0");
     if(!fscanf(fp, "%s %d %d %d %d %d %d %d %d %d %d %d %d %d\n",
@@ -67,13 +152,13 @@ bool PViewDataList::readPOS(FILE *fp, double version, int format, int size)
     Msg::Error("Unknown post-processing file format (version %g)", version);
     return false;
   }
-  
+
   for(int i = 0; i < (int)strlen(name); i++)
     if(name[i] == '^')
       name[i] = ' ';
   
   int swap = 0;
-  if(format == LIST_FORMAT_BINARY) {
+  if(binary) {
     int testone;
     if(!fread(&testone, sizeof(int), 1, fp)){
       Msg::Error("Read error");
@@ -85,172 +170,129 @@ bool PViewDataList::readPOS(FILE *fp, double version, int format, int size)
     }
   }
   
-  DataSize = size;
-  
-  // Time values
-  Time = List_CreateFromFile(NbTimeStep, 100, size, fp, format, swap);
-  
-  // Note: if nb==0, we still allocates the lists (so that they
-  // are ready to be filled later, e.g. in plugins)
-  
-#define LCD List_CreateFromFile(nb, 1000, size, fp, format, swap)
-  int nb;
-  // Points
-  nb = NbSP ? NbSP * (NbTimeStep * 1 + 3) : 0; SP = LCD;
-  nb = NbVP ? NbVP * (NbTimeStep * 3 + 3) : 0; VP = LCD;
-  nb = NbTP ? NbTP * (NbTimeStep * 9 + 3) : 0; TP = LCD;
-  
-  // Lines
-  nb = NbSL ? NbSL * (NbTimeStep * 2 * 1 + 6) : 0; SL = LCD;
-  nb = NbVL ? NbVL * (NbTimeStep * 2 * 3 + 6) : 0; VL = LCD;
-  nb = NbTL ? NbTL * (NbTimeStep * 2 * 9 + 6) : 0; TL = LCD;
-  
-  // Triangles
-  nb = NbST ? NbST * (NbTimeStep * 3 * 1 + 9) : 0; ST = LCD;
-  nb = NbVT ? NbVT * (NbTimeStep * 3 * 3 + 9) : 0; VT = LCD;
-  nb = NbTT ? NbTT * (NbTimeStep * 3 * 9 + 9) : 0; TT = LCD;
-  
-  // Quadrangles
-  nb = NbSQ ? NbSQ * (NbTimeStep * 4 * 1 + 12) : 0; SQ = LCD;
-  nb = NbVQ ? NbVQ * (NbTimeStep * 4 * 3 + 12) : 0; VQ = LCD;
-  nb = NbTQ ? NbTQ * (NbTimeStep * 4 * 9 + 12) : 0; TQ = LCD;
-  
-  // Tetrahedra
-  nb = NbSS ? NbSS * (NbTimeStep * 4 * 1 + 12) : 0; SS = LCD;
-  nb = NbVS ? NbVS * (NbTimeStep * 4 * 3 + 12) : 0; VS = LCD;
-  nb = NbTS ? NbTS * (NbTimeStep * 4 * 9 + 12) : 0; TS = LCD;
-  
-  // Hexahedra
-  nb = NbSH ? NbSH * (NbTimeStep * 8 * 1 + 24) : 0; SH = LCD;
-  nb = NbVH ? NbVH * (NbTimeStep * 8 * 3 + 24) : 0; VH = LCD;
-  nb = NbTH ? NbTH * (NbTimeStep * 8 * 9 + 24) : 0; TH = LCD;
-  
-  // Prisms
-  nb = NbSI ? NbSI * (NbTimeStep * 6 * 1 + 18) : 0; SI = LCD;
-  nb = NbVI ? NbVI * (NbTimeStep * 6 * 3 + 18) : 0; VI = LCD;
-  nb = NbTI ? NbTI * (NbTimeStep * 6 * 9 + 18) : 0; TI = LCD;
-  
-  // Pyramids
-  nb = NbSY ? NbSY * (NbTimeStep * 5 * 1 + 15) : 0; SY = LCD;
-  nb = NbVY ? NbVY * (NbTimeStep * 5 * 3 + 15) : 0; VY = LCD;
-  nb = NbTY ? NbTY * (NbTimeStep * 5 * 9 + 15) : 0; TY = LCD;
-  
-  // 2nd order Lines
-  nb = NbSL2 ? NbSL2 * (NbTimeStep * 3 * 1 + 9) : 0; SL2 = LCD;
-  nb = NbVL2 ? NbVL2 * (NbTimeStep * 3 * 3 + 9) : 0; VL2 = LCD;
-  nb = NbTL2 ? NbTL2 * (NbTimeStep * 3 * 9 + 9) : 0; TL2 = LCD;
-  
-  // 2nd order Triangles
-  nb = NbST2 ? NbST2 * (NbTimeStep * 6 * 1 + 18) : 0; ST2 = LCD;
-  nb = NbVT2 ? NbVT2 * (NbTimeStep * 6 * 3 + 18) : 0; VT2 = LCD;
-  nb = NbTT2 ? NbTT2 * (NbTimeStep * 6 * 9 + 18) : 0; TT2 = LCD;
-  
-  // 2nd order Quadrangles
-  nb = NbSQ2 ? NbSQ2 * (NbTimeStep * 9 * 1 + 27) : 0; SQ2 = LCD;
-  nb = NbVQ2 ? NbVQ2 * (NbTimeStep * 9 * 3 + 27) : 0; VQ2 = LCD;
-  nb = NbTQ2 ? NbTQ2 * (NbTimeStep * 9 * 9 + 27) : 0; TQ2 = LCD;
-  
-  // 2nd order Tetrahedra
-  nb = NbSS2 ? NbSS2 * (NbTimeStep * 10 * 1 + 30) : 0; SS2 = LCD;
-  nb = NbVS2 ? NbVS2 * (NbTimeStep * 10 * 3 + 30) : 0; VS2 = LCD;
-  nb = NbTS2 ? NbTS2 * (NbTimeStep * 10 * 9 + 30) : 0; TS2 = LCD;
-  
-  // 2nd order Hexahedra
-  nb = NbSH2 ? NbSH2 * (NbTimeStep * 27 * 1 + 81) : 0; SH2 = LCD;
-  nb = NbVH2 ? NbVH2 * (NbTimeStep * 27 * 3 + 81) : 0; VH2 = LCD;
-  nb = NbTH2 ? NbTH2 * (NbTimeStep * 27 * 9 + 81) : 0; TH2 = LCD;
-  
-  // 2nd order Prisms
-  nb = NbSI2 ? NbSI2 * (NbTimeStep * 18 * 1 + 54) : 0; SI2 = LCD;
-  nb = NbVI2 ? NbVI2 * (NbTimeStep * 18 * 3 + 54) : 0; VI2 = LCD;
-  nb = NbTI2 ? NbTI2 * (NbTimeStep * 18 * 9 + 54) : 0; TI2 = LCD;
-  
-  // 2nd order Pyramids
-  nb = NbSY2 ? NbSY2 * (NbTimeStep * 14 * 1 + 42) : 0; SY2 = LCD;
-  nb = NbVY2 ? NbVY2 * (NbTimeStep * 14 * 3 + 42) : 0; VY2 = LCD;
-  nb = NbTY2 ? NbTY2 * (NbTimeStep * 14 * 9 + 42) : 0; TY2 = LCD;
-#undef LCD
-  
-  // 2D strings
-  nb = NbT2 ? NbT2 * 4 : 0;
-  T2D = List_CreateFromFile(nb, 100, size, fp, format, swap);
-  if(version <= 1.2)
-    T2C = List_CreateFromFileOld(t2l, 100, sizeof(char), fp, format, swap);
-  else
-    T2C = List_CreateFromFile(t2l, 100, sizeof(char), fp, format, swap);
-  
-  // 3D strings
-  nb = NbT3 ? NbT3 * 5 : 0;
-  T3D = List_CreateFromFile(nb, 100, size, fp, format, swap);
-  if(version <= 1.2)
-    T3C = List_CreateFromFileOld(t3l, 100, sizeof(char), fp, format, swap);
-  else
-    T3C = List_CreateFromFile(t3l, 100, sizeof(char), fp, format, swap);
+  dVecRead(Time, NbTimeStep, fp, binary, swap);
+  dVecRead(SP, NbSP * (NbTimeStep * 1 + 3), fp, binary, swap);
+  dVecRead(VP, NbVP * (NbTimeStep * 3 + 3), fp, binary, swap);
+  dVecRead(TP, NbTP * (NbTimeStep * 9 + 3), fp, binary, swap);
+  dVecRead(SL, NbSL * (NbTimeStep * 2 * 1 + 6), fp, binary, swap);
+  dVecRead(VL, NbVL * (NbTimeStep * 2 * 3 + 6), fp, binary, swap);
+  dVecRead(TL, NbTL * (NbTimeStep * 2 * 9 + 6), fp, binary, swap);
+  dVecRead(ST, NbST * (NbTimeStep * 3 * 1 + 9), fp, binary, swap);
+  dVecRead(VT, NbVT * (NbTimeStep * 3 * 3 + 9), fp, binary, swap);
+  dVecRead(TT, NbTT * (NbTimeStep * 3 * 9 + 9), fp, binary, swap);
+  dVecRead(SQ, NbSQ * (NbTimeStep * 4 * 1 + 12), fp, binary, swap);
+  dVecRead(VQ, NbVQ * (NbTimeStep * 4 * 3 + 12), fp, binary, swap);
+  dVecRead(TQ, NbTQ * (NbTimeStep * 4 * 9 + 12), fp, binary, swap);
+  dVecRead(SS, NbSS * (NbTimeStep * 4 * 1 + 12), fp, binary, swap);
+  dVecRead(VS, NbVS * (NbTimeStep * 4 * 3 + 12), fp, binary, swap);
+  dVecRead(TS, NbTS * (NbTimeStep * 4 * 9 + 12), fp, binary, swap);
+  dVecRead(SH, NbSH * (NbTimeStep * 8 * 1 + 24), fp, binary, swap);
+  dVecRead(VH, NbVH * (NbTimeStep * 8 * 3 + 24), fp, binary, swap);
+  dVecRead(TH, NbTH * (NbTimeStep * 8 * 9 + 24), fp, binary, swap);
+  dVecRead(SI, NbSI * (NbTimeStep * 6 * 1 + 18), fp, binary, swap);
+  dVecRead(VI, NbVI * (NbTimeStep * 6 * 3 + 18), fp, binary, swap);
+  dVecRead(TI, NbTI * (NbTimeStep * 6 * 9 + 18), fp, binary, swap);
+  dVecRead(SY, NbSY * (NbTimeStep * 5 * 1 + 15), fp, binary, swap);
+  dVecRead(VY, NbVY * (NbTimeStep * 5 * 3 + 15), fp, binary, swap);
+  dVecRead(TY, NbTY * (NbTimeStep * 5 * 9 + 15), fp, binary, swap);
+
+  // overwrite first order data with second order data (if any)
+  dVecRead(SL, NbSL2 * (NbTimeStep * 3 * 1 + 9), fp, binary, swap);
+  dVecRead(VL, NbVL2 * (NbTimeStep * 3 * 3 + 9), fp, binary, swap);
+  dVecRead(TL, NbTL2 * (NbTimeStep * 3 * 9 + 9), fp, binary, swap);
+  dVecRead(ST, NbST2 * (NbTimeStep * 6 * 1 + 18), fp, binary, swap);
+  dVecRead(VT, NbVT2 * (NbTimeStep * 6 * 3 + 18), fp, binary, swap);
+  dVecRead(TT, NbTT2 * (NbTimeStep * 6 * 9 + 18), fp, binary, swap);
+  dVecRead(SQ, NbSQ2 * (NbTimeStep * 9 * 1 + 27), fp, binary, swap);
+  dVecRead(VQ, NbVQ2 * (NbTimeStep * 9 * 3 + 27), fp, binary, swap);
+  dVecRead(TQ, NbTQ2 * (NbTimeStep * 9 * 9 + 27), fp, binary, swap);
+  dVecRead(SS, NbSS2 * (NbTimeStep * 10 * 1 + 30), fp, binary, swap);
+  dVecRead(VS, NbVS2 * (NbTimeStep * 10 * 3 + 30), fp, binary, swap);
+  dVecRead(TS, NbTS2 * (NbTimeStep * 10 * 9 + 30), fp, binary, swap);
+  dVecRead(SH, NbSH2 * (NbTimeStep * 27 * 1 + 81), fp, binary, swap);
+  dVecRead(VH, NbVH2 * (NbTimeStep * 27 * 3 + 81), fp, binary, swap);
+  dVecRead(TH, NbTH2 * (NbTimeStep * 27 * 9 + 81), fp, binary, swap);
+  dVecRead(SI, NbSI2 * (NbTimeStep * 18 * 1 + 54), fp, binary, swap);
+  dVecRead(VI, NbVI2 * (NbTimeStep * 18 * 3 + 54), fp, binary, swap);
+  dVecRead(TI, NbTI2 * (NbTimeStep * 18 * 9 + 54), fp, binary, swap);
+  dVecRead(SY, NbSY2 * (NbTimeStep * 14 * 1 + 42), fp, binary, swap);
+  dVecRead(VY, NbVY2 * (NbTimeStep * 14 * 3 + 42), fp, binary, swap);
+  dVecRead(TY, NbTY2 * (NbTimeStep * 14 * 9 + 42), fp, binary, swap);
+  if(NbSL2){ NbSL = NbSL2; setOrder2(1); }
+  if(NbVL2){ NbVL = NbVL2; setOrder2(1); }
+  if(NbTL2){ NbTL = NbTL2; setOrder2(1); }
+  if(NbST2){ NbST = NbST2; setOrder2(3); }
+  if(NbVT2){ NbVT = NbVT2; setOrder2(3); }
+  if(NbTT2){ NbTT = NbTT2; setOrder2(3); }
+  if(NbSQ2){ NbSQ = NbSQ2; setOrder2(4); }
+  if(NbVQ2){ NbVQ = NbVQ2; setOrder2(4); }
+  if(NbTQ2){ NbTQ = NbTQ2; setOrder2(4); }
+  if(NbSS2){ NbSS = NbSS2; setOrder2(6); }
+  if(NbVS2){ NbVS = NbVS2; setOrder2(6); }
+  if(NbTS2){ NbTS = NbTS2; setOrder2(6); }
+  if(NbSH2){ NbSH = NbSH2; setOrder2(12); }
+  if(NbVH2){ NbVH = NbVH2; setOrder2(12); }
+  if(NbTH2){ NbTH = NbTH2; setOrder2(12); }
+  if(NbSI2){ NbSI = NbSI2; setOrder2(9); }
+  if(NbVI2){ NbVI = NbVI2; setOrder2(9); }
+  if(NbTI2){ NbTI = NbTI2; setOrder2(9); }
+  if(NbSY2){ NbSY = NbSY2; setOrder2(8); }
+  if(NbVY2){ NbVY = NbVY2; setOrder2(8); }
+  if(NbTY2){ NbTY = NbTY2; setOrder2(8); }
+ 
+  dVecRead(T2D, NbT2 * 4, fp, binary, swap);
+  cVecRead(T2C, t2l, fp, binary, swap, (version <= 1.2));
+  dVecRead(T3D, NbT3 * 5, fp, binary, swap);
+  cVecRead(T3C, t3l, fp, binary, swap, (version <= 1.2));
   
-  Msg::Debug(
-      "Read View '%s' (%d TimeSteps): "
-      "SP(%d/%d) VP(%d/%d) TP(%d/%d) "
-      "SL(%d/%d) VL(%d/%d) TL(%d/%d) "
-      "ST(%d/%d) VT(%d/%d) TT(%d/%d) "
-      "SQ(%d/%d) VQ(%d/%d) TQ(%d/%d) "
-      "SS(%d/%d) VS(%d/%d) TS(%d/%d) "
-      "SH(%d/%d) VH(%d/%d) TH(%d/%d) "
-      "SI(%d/%d) VI(%d/%d) TI(%d/%d) "
-      "SY(%d/%d) VY(%d/%d) TY(%d/%d) " 
-      "SL2(%d/%d) VL2(%d/%d) TL2(%d/%d) "
-      "ST2(%d/%d) VT2(%d/%d) TT2(%d/%d) "
-      "SQ2(%d/%d) VQ2(%d/%d) TQ2(%d/%d) "
-      "SS2(%d/%d) VS2(%d/%d) TS2(%d/%d) " 
-      "SH2(%d/%d) VH2(%d/%d) TH2(%d/%d) "
-      "SI2(%d/%d) VI2(%d/%d) TI2(%d/%d) "
-      "SY2(%d/%d) VY2(%d/%d) TY2(%d/%d) "
-      "T2(%d/%d/%d) T3(%d/%d/%d) ", 
-      name, NbTimeStep,
-      NbSP, List_Nbr(SP), NbVP, List_Nbr(VP), NbTP, List_Nbr(TP),
-      NbSL, List_Nbr(SL), NbVL, List_Nbr(VL), NbTL, List_Nbr(TL),
-      NbST, List_Nbr(ST), NbVT, List_Nbr(VT), NbTT, List_Nbr(TT),
-      NbSQ, List_Nbr(SQ), NbVQ, List_Nbr(VQ), NbTQ, List_Nbr(TQ),
-      NbSS, List_Nbr(SS), NbVS, List_Nbr(VS), NbTS, List_Nbr(TS),
-      NbSH, List_Nbr(SH), NbVH, List_Nbr(VH), NbTH, List_Nbr(TH),
-      NbSI, List_Nbr(SI), NbVI, List_Nbr(VI), NbTI, List_Nbr(TI),
-      NbSY, List_Nbr(SY), NbVY, List_Nbr(VY), NbTY, List_Nbr(TY),
-      NbSL2, List_Nbr(SL2), NbVL2, List_Nbr(VL2), NbTL2, List_Nbr(TL2),
-      NbST2, List_Nbr(ST2), NbVT2, List_Nbr(VT2), NbTT2, List_Nbr(TT2),
-      NbSQ2, List_Nbr(SQ2), NbVQ2, List_Nbr(VQ2), NbTQ2, List_Nbr(TQ2),
-      NbSS2, List_Nbr(SS2), NbVS2, List_Nbr(VS2), NbTS2, List_Nbr(TS2),
-      NbSH2, List_Nbr(SH2), NbVH2, List_Nbr(VH2), NbTH2, List_Nbr(TH2),
-      NbSI2, List_Nbr(SI2), NbVI2, List_Nbr(VI2), NbTI2, List_Nbr(TI2),
-      NbSY2, List_Nbr(SY2), NbVY2, List_Nbr(VY2), NbTY2, List_Nbr(TY2),
-      NbT2, List_Nbr(T2D), List_Nbr(T2C), 
-      NbT3, List_Nbr(T3D), List_Nbr(T3C));
+  Msg::Debug("Read View '%s' (%d TimeSteps): "
+             "SP(%d/%d) VP(%d/%d) TP(%d/%d) "
+             "SL(%d/%d) VL(%d/%d) TL(%d/%d) "
+             "ST(%d/%d) VT(%d/%d) TT(%d/%d) "
+             "SQ(%d/%d) VQ(%d/%d) TQ(%d/%d) "
+             "SS(%d/%d) VS(%d/%d) TS(%d/%d) "
+             "SH(%d/%d) VH(%d/%d) TH(%d/%d) "
+             "SI(%d/%d) VI(%d/%d) TI(%d/%d) "
+             "SY(%d/%d) VY(%d/%d) TY(%d/%d) " 
+             "T2(%d/%d/%d) T3(%d/%d/%d) ", 
+             name, NbTimeStep,
+             NbSP, SP.size(), NbVP, VP.size(), NbTP, TP.size(),
+             NbSL, SL.size(), NbVL, VL.size(), NbTL, TL.size(),
+             NbST, ST.size(), NbVT, VT.size(), NbTT, TT.size(),
+             NbSQ, SQ.size(), NbVQ, VQ.size(), NbTQ, TQ.size(),
+             NbSS, SS.size(), NbVS, VS.size(), NbTS, TS.size(),
+             NbSH, SH.size(), NbVH, VH.size(), NbTH, TH.size(),
+             NbSI, SI.size(), NbVI, VI.size(), NbTI, TI.size(),
+             NbSY, SY.size(), NbVY, VY.size(), NbTY, TY.size(),
+             NbT2, T2D.size(), T2C.size(), 
+             NbT3, T3D.size(), T3C.size());
   
   setName(name);
   finalize();
-
   return true;
 }
 
-static void writeTimePOS(FILE *fp, List_T *list)
+static void writeTimePOS(FILE *fp, std::vector<double> &list)
 {
-  if(List_Nbr(list) > 1){
+  if(list.size() > 1){
     fprintf(fp, "TIME{");
-    for(int i = 0; i < List_Nbr(list); i ++){
+    for(unsigned int i = 0; i < list.size(); i++){
       if(i) fprintf(fp, ",");
-      fprintf(fp, "%.16g", *(double *)List_Pointer(list, i));
+      fprintf(fp, "%.16g", list[i]);
     }
     fprintf(fp, "};\n");
   }
 }
 
 static void writeElementPOS(FILE *fp, const char *str, int nbnod, int nb,
-                            List_T *list)
+                            std::vector<double> &list)
 {
   if(nb){
-    int n = List_Nbr(list) / nb;
-    for(int i = 0; i < List_Nbr(list); i += n) {
-      double *x = (double *)List_Pointer(list, i);
-      double *y = (double *)List_Pointer(list, i + nbnod);
-      double *z = (double *)List_Pointer(list, i + 2 * nbnod);
+    int n = list.size() / nb;
+    for(unsigned int i = 0; i < list.size(); i += n) {
+      double *x = &list[i];
+      double *y = &list[i + nbnod];
+      double *z = &list[i + 2 * nbnod];
       fprintf(fp, "%s(", str);
       for(int j = 0; j < nbnod; j++) {
         if(j) fprintf(fp, ",");
@@ -259,38 +301,38 @@ static void writeElementPOS(FILE *fp, const char *str, int nbnod, int nb,
       fprintf(fp, "){");
       for(int j = 3 * nbnod; j < n; j++) {
         if(j - 3 * nbnod) fprintf(fp, ",");
-        fprintf(fp, "%.16g", *(double *)List_Pointer(list, i + j));
+        fprintf(fp, "%.16g", list[i + j]);
       }
       fprintf(fp, "};\n");
     }
   }
 }
 
-static void writeTextPOS(FILE *fp, int nbc, int nb, List_T *TD, List_T *TC)
+static void writeTextPOS(FILE *fp, int nbc, int nb, std::vector<double> &TD, 
+                         std::vector<char> &TC)
 {
   if(!nb || (nbc != 4 && nbc != 5)) return;
-  for(int j = 0; j < List_Nbr(TD); j += nbc){
-    double x, y, z, style, start, end;
-    List_Read(TD, j, &x);
-    List_Read(TD, j+1, &y);
-    if(nbc == 5)
-      List_Read(TD, j+2, &z);
-    List_Read(TD, j+nbc-2, &style);
+  for(unsigned int j = 0; j < TD.size(); j += nbc){
+    double x = TD[j];
+    double y = TD[j + 1];
+    double z = (nbc == 5) ? TD[j + 2] : 0.;
+    double style = TD[j + nbc - 2];
     if(nbc == 4)
       fprintf(fp, "T2(%g,%g,%g){", x, y, style);
     else
       fprintf(fp, "T3(%g,%g,%g,%g){", x, y, z, style);
-    List_Read(TD, j+nbc-1, &start);
-    if(j+nbc*2-1 < List_Nbr(TD))
-      List_Read(TD, j+nbc*2-1, &end);
+    double start = TD[j + nbc - 1];
+    double end;
+    if(j + nbc * 2 - 1 < TD.size())
+      end = TD[j + nbc * 2 - 1];
     else
-      end = List_Nbr(TC);
+      end = TC.size();
     int l = 0;
-    while(l < end-start){
-      char *str = (char*)List_Pointer(TC, (int)start + l);
+    while(l < end - start){
+      char *str = &TC[(int)start + l];
       if(l) fprintf(fp, ",");
       fprintf(fp, "\"%s\"", str);
-      l += strlen(str)+1;
+      l += strlen(str) + 1;
     }
     fprintf(fp, "};\n");
   }
@@ -298,12 +340,10 @@ static void writeTextPOS(FILE *fp, int nbc, int nb, List_T *TD, List_T *TC)
 
 bool PViewDataList::writePOS(std::string fileName, bool binary, bool parsed, bool append)
 {
+  if(_adaptive)
+    return _adaptive->getData()->writePOS(fileName, binary, parsed, append);
 
-  if ( _adaptive ){
-    return _adaptive->getData()->writePOS (fileName,binary,parsed,append);
-  }
-
-  FILE *fp = fopen(fileName.c_str(), 
+  FILE *fp = fopen(fileName.c_str(),
                    append ? (binary ? "ab" : "a") : (binary ? "wb" : "w"));
   if(!fp){
     Msg::Error("Unable to open file '%s'", fileName.c_str());
@@ -328,13 +368,12 @@ bool PViewDataList::writePOS(std::string fileName, bool binary, bool parsed, boo
       fprintf(fp, "%s ", str.c_str());
     fprintf(fp, "%d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d "
             "%d %d %d %d %d %d %d %d %d %d %d %d\n",
-            List_Nbr(Time),
+            Time.size(),
             NbSP, NbVP, NbTP, NbSL, NbVL, NbTL,
             NbST, NbVT, NbTT, NbSQ, NbVQ, NbTQ,
             NbSS, NbVS, NbTS, NbSH, NbVH, NbTH,
             NbSI, NbVI, NbTI, NbSY, NbVY, NbTY,
-            NbT2, List_Nbr(T2C), NbT3, List_Nbr(T3C));
-    int f = binary ? LIST_FORMAT_BINARY : LIST_FORMAT_ASCII;
+            NbT2, T2C.size(), NbT3, T3C.size());
     if(binary) {
       int one = 1;
       if(!fwrite(&one, sizeof(int), 1, fp)){
@@ -342,21 +381,21 @@ bool PViewDataList::writePOS(std::string fileName, bool binary, bool parsed, boo
         return false;
       }
     }
-    List_WriteToFile(Time, fp, f);
-    List_WriteToFile(SP, fp, f); List_WriteToFile(VP, fp, f); 
-    List_WriteToFile(TP, fp, f); List_WriteToFile(SL, fp, f);
-    List_WriteToFile(VL, fp, f); List_WriteToFile(TL, fp, f);
-    List_WriteToFile(ST, fp, f); List_WriteToFile(VT, fp, f);
-    List_WriteToFile(TT, fp, f); List_WriteToFile(SQ, fp, f);
-    List_WriteToFile(VQ, fp, f); List_WriteToFile(TQ, fp, f);
-    List_WriteToFile(SS, fp, f); List_WriteToFile(VS, fp, f);
-    List_WriteToFile(TS, fp, f); List_WriteToFile(SH, fp, f);
-    List_WriteToFile(VH, fp, f); List_WriteToFile(TH, fp, f);
-    List_WriteToFile(SI, fp, f); List_WriteToFile(VI, fp, f);
-    List_WriteToFile(TI, fp, f); List_WriteToFile(SY, fp, f);
-    List_WriteToFile(VY, fp, f); List_WriteToFile(TY, fp, f);
-    List_WriteToFile(T2D, fp, f); List_WriteToFile(T2C, fp, f);
-    List_WriteToFile(T3D, fp, f); List_WriteToFile(T3C, fp, f);
+    dVecWrite(Time, fp, binary);
+    dVecWrite(SP, fp, binary); dVecWrite(VP, fp, binary); 
+    dVecWrite(TP, fp, binary); dVecWrite(SL, fp, binary);
+    dVecWrite(VL, fp, binary); dVecWrite(TL, fp, binary);
+    dVecWrite(ST, fp, binary); dVecWrite(VT, fp, binary);
+    dVecWrite(TT, fp, binary); dVecWrite(SQ, fp, binary);
+    dVecWrite(VQ, fp, binary); dVecWrite(TQ, fp, binary);
+    dVecWrite(SS, fp, binary); dVecWrite(VS, fp, binary);
+    dVecWrite(TS, fp, binary); dVecWrite(SH, fp, binary);
+    dVecWrite(VH, fp, binary); dVecWrite(TH, fp, binary);
+    dVecWrite(SI, fp, binary); dVecWrite(VI, fp, binary);
+    dVecWrite(TI, fp, binary); dVecWrite(SY, fp, binary);
+    dVecWrite(VY, fp, binary); dVecWrite(TY, fp, binary);
+    dVecWrite(T2D, fp, binary); cVecWrite(T2C, fp, binary);
+    dVecWrite(T3D, fp, binary); cVecWrite(T3C, fp, binary);
     fprintf(fp, "\n");
     fprintf(fp, "$EndView\n");
   }
@@ -406,16 +445,17 @@ class pVertexLessThan{
   }
 };
 
-static void getNodeMSH(int nbelm, List_T *list, int nbnod, int nbcomp, int nbstep,
+static void getNodeMSH(int nbelm, std::vector<double> &list, 
+                       int nbnod, int nbcomp, int nbstep,
                        std::set<pVertex, pVertexLessThan> *nodes, int *numelm)
 {
   if(!nbelm) return;
-  int nb = List_Nbr(list) / nbelm;
-  for(int i = 0; i < List_Nbr(list); i += nb){
-    double *x = (double *)List_Pointer_Fast(list, i);
-    double *y = (double *)List_Pointer_Fast(list, i + nbnod);
-    double *z = (double *)List_Pointer_Fast(list, i + 2 * nbnod);
-    double *v = (double *)List_Pointer_Fast(list, i + 3 * nbnod);
+  int nb = list.size() / nbelm;
+  for(unsigned int i = 0; i < list.size(); i += nb){
+    double *x = &list[i];
+    double *y = &list[i + nbnod];
+    double *z = &list[i + 2 * nbnod];
+    double *v = &list[i + 3 * nbnod];
     for(int j = 0; j < nbnod; j++) {
       pVertex n(x[j], y[j], z[j]);
       std::set<pVertex, pVertexLessThan>::iterator it = nodes->find(n);
@@ -467,19 +507,19 @@ static void writeElementMSH(FILE *fp, int num, int nbnod, pVertex nod[8],
   }
 }
 
-static void writeElementsMSH(FILE *fp, int nbelm, List_T *list,
+static void writeElementsMSH(FILE *fp, int nbelm, std::vector<double> &list,
                              int nbnod, int nbcomp, int dim, 
                              std::set<pVertex, pVertexLessThan> *nodes,
                              int *numelm)
 {
   if(!nbelm) return;
   pVertex nod[8];
-  int nb = List_Nbr(list) / nbelm;
-  for(int i = 0; i < List_Nbr(list); i += nb){
-    double *x = (double *)List_Pointer_Fast(list, i);
-    double *y = (double *)List_Pointer_Fast(list, i + nbnod);
-    double *z = (double *)List_Pointer_Fast(list, i + 2 * nbnod);
-    double *v = (double *)List_Pointer_Fast(list, i + 3 * nbnod);
+  int nb = list.size() / nbelm;
+  for(unsigned int i = 0; i < list.size(); i += nb){
+    double *x = &list[i];
+    double *y = &list[i + nbnod];
+    double *z = &list[i + 2 * nbnod];
+    double *v = &list[i + 3 * nbnod];
     for(int j = 0; j < nbnod; j++) {
       pVertex n(x[j], y[j], z[j]);
       std::set<pVertex, pVertexLessThan>::iterator it = nodes->find(n);
diff --git a/Post/PViewIO.cpp b/Post/PViewIO.cpp
index bef680d1eec06107afd929a70d0a1d5452eb967b..4123686a1a643b1d08f58ec27243af4c16457323 100644
--- a/Post/PViewIO.cpp
+++ b/Post/PViewIO.cpp
@@ -48,22 +48,14 @@ bool PView::readPOS(std::string fileName, int fileIndex)
         Msg::Error("Unknown data size (%d) in post-processing file", size);
         return false;
       }
-      if(format == 0)
-        format = LIST_FORMAT_ASCII;
-      else if(format == 1)
-        format = LIST_FORMAT_BINARY;
-      else {
-        Msg::Error("Unknown format for view");
-        return false;
-      }
 
     }
     else if(!strncmp(&str[1], "View", 4)){
 
       index++;
       if(fileIndex < 0 || fileIndex == index){
-        PViewDataList *d = new PViewDataList(false);
-        if(!d->readPOS(fp, version, format, size)){
+        PViewDataList *d = new PViewDataList();
+        if(!d->readPOS(fp, version, format ? true : false)){
           Msg::Error("Could not read data in list format");
           delete d;
           return false;
diff --git a/Post/adaptiveData.cpp b/Post/adaptiveData.cpp
index d5b584fd1d565f20620d96c2b60f99d79762bbb0..3eefc3f5ad60f0765c2f49fe6ed9c67fc66ff271 100644
--- a/Post/adaptiveData.cpp
+++ b/Post/adaptiveData.cpp
@@ -8,7 +8,6 @@
 #include <set>
 #include "adaptiveData.h"
 #include "Plugin.h"
-#include "ListUtils.h"
 #include "OS.h"
 
 //#define TIMER
@@ -1044,42 +1043,42 @@ void adaptiveElements<T>::addInView(double tol, int step,
   if(numComp != 1 && numComp != 3) return;
   
   int numEle = 0, *outNb = 0;
-  List_T *outList = 0;
+  std::vector<double> *outList = 0;
   switch(T::numEdges){
   case 1: 
     numEle = in->getNumLines(); 
     outNb = (numComp == 1) ? &out->NbSL : &out->NbVL;
-    outList = (numComp == 1) ? out->SL : out->VL;
+    outList = (numComp == 1) ? &out->SL : &out->VL;
     break;
   case 3:
     numEle = in->getNumTriangles();
     outNb = (numComp == 1) ? &out->NbST : &out->NbVT;
-    outList = (numComp == 1) ? out->ST : out->VT;
+    outList = (numComp == 1) ? &out->ST : &out->VT;
     break;
   case 4:
     numEle = in->getNumQuadrangles();
     outNb = (numComp == 1) ? &out->NbSQ : &out->NbVQ;
-    outList = (numComp == 1) ? out->SQ : out->VQ;
+    outList = (numComp == 1) ? &out->SQ : &out->VQ;
     break;
   case 6:
     numEle = in->getNumTetrahedra();
     outNb = (numComp == 1) ? &out->NbSS : &out->NbVS;
-    outList = (numComp == 1) ? out->SS : out->VS;
+    outList = (numComp == 1) ? &out->SS : &out->VS;
     break;
   case 9: 
     numEle = in->getNumPrisms();
     outNb = (numComp == 1) ? &out->NbSI : &out->NbVI;
-    outList = (numComp == 1) ? out->SI : out->VI;
+    outList = (numComp == 1) ? &out->SI : &out->VI;
     break;
   case 12: 
     numEle = in->getNumHexahedra();
     outNb = (numComp == 1) ? &out->NbSH : &out->NbVH;
-    outList = (numComp == 1) ? out->SH : out->VH;
+    outList = (numComp == 1) ? &out->SH : &out->VH;
     break;
   }
   if(!numEle) return;
   
-  List_Reset(outList);
+  outList->clear();
   *outNb = 0;
   
   for(int ent = 0; ent < in->getNumEntities(step); ent++){
@@ -1115,14 +1114,14 @@ void adaptiveElements<T>::addInView(double tol, int step,
       *outNb += coords.size() / T::numNodes;
       for(unsigned int i = 0; i < coords.size() / T::numNodes; i++){
         for(int k = 0; k < T::numNodes; ++k) 
-          List_Add(outList, &coords[T::numNodes * i + k].c[0]);
+          outList->push_back(coords[T::numNodes * i + k].c[0]);
         for(int k = 0; k < T::numNodes; ++k) 
-          List_Add(outList, &coords[T::numNodes * i + k].c[1]);
+          outList->push_back(coords[T::numNodes * i + k].c[1]);
         for(int k = 0; k < T::numNodes; ++k) 
-          List_Add(outList, &coords[T::numNodes * i + k].c[2]);
+          outList->push_back(coords[T::numNodes * i + k].c[2]);
         for(int k = 0; k < T::numNodes; ++k)
           for(int l = 0; l < numComp; ++l)
-            List_Add(outList, &values[T::numNodes * i + k].v[l]);
+            outList->push_back(values[T::numNodes * i + k].v[l]);
       }
     }
   }
@@ -1133,7 +1132,7 @@ adaptiveData::adaptiveData(PViewData *data)
     _lines(0), _triangles(0), _quadrangles(0), 
     _tetrahedra(0), _hexahedra(0), _prisms(0)
 {
-  _outData = new PViewDataList(true);
+  _outData = new PViewDataList();
   std::vector<gmshMatrix<double>*> p;
   if(_inData->getNumLines()){
     _inData->getInterpolationMatrices(1, p);
diff --git a/contrib/Tetgen/Makefile b/contrib/Tetgen/Makefile
index f20b3c38e63673af31a93b9636d78f62a09f16fe..f6b3590c5cb1620e7501fa295fe535a9a54210a5 100644
--- a/contrib/Tetgen/Makefile
+++ b/contrib/Tetgen/Makefile
@@ -39,3 +39,5 @@ depend:
 	rm -f Makefile.new
 
 # DO NOT DELETE THIS LINE
+tetgen${OBJEXT}: tetgen.cxx tetgen.h
+predicates${OBJEXT}: predicates.cxx tetgen.h
diff --git a/doc/VERSIONS.txt b/doc/VERSIONS.txt
index 5c2d25ebe5678a543a750d902306cce9715aa729..0fccc3a736b6bc401cfb92254ef2a0ac161a2ab7 100644
--- a/doc/VERSIONS.txt
+++ b/doc/VERSIONS.txt
@@ -1,9 +1,9 @@
-$Id: VERSIONS.txt,v 1.45 2009-05-19 19:29:52 geuzaine Exp $
+$Id: VERSIONS.txt,v 1.46 2009-06-28 15:53:49 geuzaine Exp $
 
-2.3.2 (?): optionally copy transfinite mesh contraints during geometry
+2.4.0 (?): optionally copy transfinite mesh contraints during geometry
 transformations; bumped mesh version format to 2.1 (small change in
 the $PhysicalNames section, where the group dimension is now
-required).
+required);
 
 2.3.1 (Mar 18, 2009): removed GSL dependency (Gmsh now simply uses
 Blas and Lapack); new per-window visibility; added support for
diff --git a/doc/texinfo/gmsh.texi b/doc/texinfo/gmsh.texi
index f9531db7da93eddf833ca4c3f937893f89fa0dae..fe3be572eb3cd250a92d9de1006e15b7b7d3631e 100644
--- a/doc/texinfo/gmsh.texi
+++ b/doc/texinfo/gmsh.texi
@@ -2884,27 +2884,6 @@ Tensor prism                  TI    18           54 * @var{nb-time-steps}
 Scalar pyramid                SY    15           5  * @var{nb-time-steps}
 Vector pyramid                VY    15           15 * @var{nb-time-steps}
 Tensor pyramid                TY    15           45 * @var{nb-time-steps}
-2nd order scalar line         SL2   9            3  * @var{nb-time-steps}
-2nd order vector line         VL2   9            9  * @var{nb-time-steps}
-2nd order tensor line         TL2   9            27 * @var{nb-time-steps}
-2nd order scalar triangle     ST2   18           6  * @var{nb-time-steps}
-2nd order vector triangle     VT2   18           18 * @var{nb-time-steps}
-2nd order tensor triangle     TT2   18           54 * @var{nb-time-steps}
-2nd order scalar quadrangle   SQ2   27           9  * @var{nb-time-steps}
-2nd order vector quadrangle   VQ2   27           27 * @var{nb-time-steps}
-2nd order tensor quadrangle   TQ2   27           81 * @var{nb-time-steps}
-2nd order scalar tetrahedron  SS2   30           10 * @var{nb-time-steps}
-2nd order vector tetrahedron  VS2   30           30 * @var{nb-time-steps}
-2nd order tensor tetrahedron  TS2   30           90 * @var{nb-time-steps}
-2nd order scalar hexahedron   SH2   81           27 * @var{nb-time-steps}
-2nd order vector hexahedron   VH2   81           81 * @var{nb-time-steps}
-2nd order tensor hexahedron   TH2   81           243* @var{nb-time-steps}
-2nd order scalar prism        SI2   54           18 * @var{nb-time-steps}
-2nd order vector prism        VI2   54           54 * @var{nb-time-steps}
-2nd order tensor prism        TI2   54           162* @var{nb-time-steps}
-2nd order scalar pyramid      SY2   42           14 * @var{nb-time-steps}
-2nd order vector pyramid      VY2   42           42 * @var{nb-time-steps}
-2nd order tensor pyramid      TY2   42           126* @var{nb-time-steps}
 2D text                       T2    3            arbitrary
 3D text                       T3    4            arbitrary
 @end smallexample