diff --git a/Common/Makefile b/Common/Makefile
index 407bc019d1943e36f291895c477ac6454be22041..e615364441d07e89b1a82151e84604cb9e4386d9 100644
--- a/Common/Makefile
+++ b/Common/Makefile
@@ -126,9 +126,10 @@ OpenFile${OBJEXT}: OpenFile.cpp GmshConfig.h GmshMessage.h ../Geo/Geo.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/SVector3.h \
-  Context.h ../Geo/CGNSOptions.h ../Mesh/meshPartitionOptions.h \
-  OpenFile.h CommandLine.h ../Graphics/ReadImg.h OS.h StringUtils.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 \
   ../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 \
diff --git a/Fltk/Makefile b/Fltk/Makefile
index 12b8c8d53083dfd3df1c65bba19218f8d940b2a7..eedf5f03760d4cbd03ab288dea4bd985cb025363 100644
--- a/Fltk/Makefile
+++ b/Fltk/Makefile
@@ -100,12 +100,12 @@ GUI${OBJEXT}: GUI.cpp GUI.h graphicWindow.h openglWindow.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/SVector3.h ../Numeric/FunctionSpace.h ../Numeric/GmshMatrix.h \
-  ../Numeric/Gauss.h ../Post/PView.h Solvers.h ../Mesh/Field.h \
-  ../Plugin/Plugin.h ../Common/Options.h ../Post/PViewDataList.h \
-  ../Post/PViewData.h ../Common/ListUtils.h ../Plugin/PluginManager.h \
-  ../Common/OpenFile.h Win32Icon.h ../Common/Context.h \
-  ../Geo/CGNSOptions.h ../Mesh/meshPartitionOptions.h
+  ../Geo/MEdge.h ../Geo/SVector3.h ../Numeric/FunctionSpace.h \
+  ../Numeric/GmshMatrix.h ../Numeric/Gauss.h ../Post/PView.h Solvers.h \
+  ../Mesh/Field.h ../Plugin/Plugin.h ../Common/Options.h \
+  ../Post/PViewDataList.h ../Post/PViewData.h ../Common/ListUtils.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 \
   ../Graphics/drawContext.h ../Geo/SBoundingBox3d.h ../Geo/SPoint3.h \
   paletteWindow.h mainWindow.h menuWindow.h popupButton.h messageWindow.h \
@@ -126,10 +126,10 @@ openglWindow${OBJEXT}: openglWindow.cpp openglWindow.h ../Graphics/drawContext.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/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/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 \
@@ -149,14 +149,15 @@ menuWindow${OBJEXT}: menuWindow.cpp ../Common/GmshConfig.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/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 ../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/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 \
+  ../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 \
@@ -171,11 +172,11 @@ optionWindow${OBJEXT}: optionWindow.cpp ../Common/GmshConfig.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/SVector3.h \
-  ../Numeric/FunctionSpace.h ../Numeric/GmshMatrix.h ../Numeric/Gauss.h \
-  ../Post/PView.h ../Post/PViewData.h ../Post/PViewOptions.h \
-  ../Post/ColorTable.h ../Common/OS.h ../Common/Context.h \
-  ../Geo/CGNSOptions.h ../Mesh/meshPartitionOptions.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 \
+  ../Post/PViewOptions.h ../Post/ColorTable.h ../Common/OS.h \
+  ../Common/Context.h ../Geo/CGNSOptions.h ../Mesh/meshPartitionOptions.h
 colorbarWindow${OBJEXT}: colorbarWindow.cpp colorbarWindow.h \
   ../Post/ColorTable.h Draw.h ../Common/Context.h ../Geo/CGNSOptions.h \
   ../Mesh/meshPartitionOptions.h
@@ -210,7 +211,7 @@ statisticsWindow${OBJEXT}: statisticsWindow.cpp GUI.h Draw.h statisticsWindow.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/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 \
@@ -229,11 +230,11 @@ visibilityWindow${OBJEXT}: visibilityWindow.cpp ../Common/GmshConfig.h GUI.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/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/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 \
@@ -312,8 +313,8 @@ projectionEditor${OBJEXT}: projectionEditor.cpp ../Common/GmshConfig.h GUI.h \
   paletteWindow.h fileDialogs.h ../Geo/GModelIO_Fourier.h ../Geo/GModel.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/SVector3.h \
-  ../Common/GmshMessage.h ../Numeric/FunctionSpace.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 ../Numeric/Gauss.h Draw.h ../Common/Options.h \
   ../Common/StringUtils.h ../Geo/fourierFace.h ../Geo/GFace.h \
   ../Geo/GModel.h ../Geo/Range.h ../Geo/fourierEdge.h ../Geo/GEdge.h \
@@ -332,13 +333,14 @@ classificationEditor${OBJEXT}: classificationEditor.cpp GUI.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/SVector3.h ../Common/GmshMessage.h ../Numeric/FunctionSpace.h \
-  ../Numeric/GmshMatrix.h ../Common/GmshConfig.h ../Numeric/Gauss.h \
-  ../Post/ColorTable.h paletteWindow.h ../Numeric/Numeric.h \
-  ../Numeric/GmshMatrix.h Draw.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 \
+  ../Geo/MEdge.h ../Geo/SVector3.h ../Common/GmshMessage.h \
+  ../Numeric/FunctionSpace.h ../Numeric/GmshMatrix.h \
+  ../Common/GmshConfig.h ../Numeric/Gauss.h ../Post/ColorTable.h \
+  paletteWindow.h ../Numeric/Numeric.h ../Numeric/GmshMatrix.h Draw.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/discreteFace.h ../Geo/GModel.h \
   ../Geo/GFace.h
diff --git a/Fltk/clippingWindow.cpp b/Fltk/clippingWindow.cpp
index 99f7678a906b2881983540ce8967442bfe3d4abe..d097d1e426ffa866320090c30d7c36949ecc9967 100644
--- a/Fltk/clippingWindow.cpp
+++ b/Fltk/clippingWindow.cpp
@@ -306,7 +306,7 @@ void clippingWindow::resetBrowser()
                                    fabs(CTX::instance()->max[i])));
   val1 *= 1.5;
   for(int i = 3; i < 10; i++){
-    value[i]->step(val1/200.);
+    value[i]->step(val1 / 200.);
     value[i]->minimum(-val1);
     value[i]->maximum(val1);
   }
diff --git a/Fltk/manipWindow.cpp b/Fltk/manipWindow.cpp
index 684e1491be7a9d725d02f5821f28b4a5b01859a9..fb03b7b477b43dbf75174c160fe111aed8b0dbfc 100644
--- a/Fltk/manipWindow.cpp
+++ b/Fltk/manipWindow.cpp
@@ -124,7 +124,7 @@ void manipWindow::update(bool force)
       value[i]->step(1.);
       value[i+3]->minimum(-val1);
       value[i+3]->maximum(val1);
-      value[i+3]->step(val1/200.);
+      value[i+3]->step(val1 / 200.);
       value[i+6]->minimum(0.01);
       value[i+6]->maximum(100.);
       value[i+6]->step(0.01);
diff --git a/Fltk/optionWindow.cpp b/Fltk/optionWindow.cpp
index 1678359ef6247f3d14efbd57748279afe1744dad..288e2f89b0c88bacbda88da664f0056989b6db42 100644
--- a/Fltk/optionWindow.cpp
+++ b/Fltk/optionWindow.cpp
@@ -3152,7 +3152,7 @@ void optionWindow::updateViewGroup(int index)
   opt_view_axes_zmin(index, GMSH_GUI, 0);
   opt_view_axes_zmax(index, GMSH_GUI, 0);
   for(int i = 13; i <= 18; i++){
-    view.value[i]->step(CTX::instance()->lc/200.);
+    view.value[i]->step(CTX::instance()->lc / 200.);
     view.value[i]->minimum(-CTX::instance()->lc);
     view.value[i]->maximum(CTX::instance()->lc);
   }
@@ -3200,7 +3200,7 @@ void optionWindow::updateViewGroup(int index)
   opt_view_offset1(index, GMSH_GUI, 0);
   opt_view_offset2(index, GMSH_GUI, 0);
   for(int i = 40; i <= 42; i++) {
-    view.value[i]->step(val1 / 100.);
+    view.value[i]->step(val1 / 200.);
     view.value[i]->minimum(-val1);
     view.value[i]->maximum(val1);
   }
@@ -3218,7 +3218,7 @@ void optionWindow::updateViewGroup(int index)
   opt_view_raise2(index, GMSH_GUI, 0);
   opt_view_normal_raise(index, GMSH_GUI, 0);
   for(int i = 43; i <= 46; i++) {
-    view.value[i]->step(val2 / 100.);
+    view.value[i]->step(val2 / 200.);
     view.value[i]->minimum(-val2);
     view.value[i]->maximum(val2);
   }
@@ -3228,7 +3228,7 @@ void optionWindow::updateViewGroup(int index)
   opt_view_gen_raise0(index, GMSH_GUI, "");
   opt_view_gen_raise1(index, GMSH_GUI, "");
   opt_view_gen_raise2(index, GMSH_GUI, "");
-  view.value[2]->step(val2 / 100.);
+  view.value[2]->step(val2 / 200.);
   view.value[2]->minimum(-val2);
   view.value[2]->maximum(val2);
 
diff --git a/Geo/GEdge.cpp b/Geo/GEdge.cpp
index 055c2a797262e54e2380a9b50cd96207f2afd4ca..85309dda0a342df7ed94521edb4b6886d0c21eed 100644
--- a/Geo/GEdge.cpp
+++ b/Geo/GEdge.cpp
@@ -5,7 +5,6 @@
 
 #include <sstream>
 #include <algorithm>
-
 #include "GmshConfig.h"
 #include "GmshDefines.h"
 #include "GmshMessage.h"
diff --git a/Geo/GeoInterpolation.cpp b/Geo/GeoInterpolation.cpp
index 46f746226e7f7797b178dab653e49c6d28103fa5..427c47fec0a99baa7901bf45c7893406d72df76a 100644
--- a/Geo/GeoInterpolation.cpp
+++ b/Geo/GeoInterpolation.cpp
@@ -441,7 +441,7 @@ static void TransfiniteSph(Vertex S, Vertex center, Vertex *T)
 
 bool iSRuledSurfaceASphere(Surface *s, SPoint3 &center, double &radius)
 {
-  if(s->Typ != MSH_SURF_REGL && s->Typ != MSH_SURF_TRIC)return false;
+  if(s->Typ != MSH_SURF_REGL && s->Typ != MSH_SURF_TRIC) return false;
 
   bool isSphere = true;
   Vertex *O = 0;
diff --git a/Geo/Makefile b/Geo/Makefile
index 1359693f44dc05320d8a2d54457b5d1847f5602c..28fc4a8679721b96c8a36fd4730ab8d0d0e241ac 100644
--- a/Geo/Makefile
+++ b/Geo/Makefile
@@ -320,9 +320,9 @@ MVertex${OBJEXT}: MVertex.cpp MVertex.h SPoint2.h SPoint3.h GVertex.h GEntity.h
   GEdgeLoop.h Pair.h GFaceCompound.h ../Common/GmshMessage.h \
   ../Common/StringUtils.h
 MFace${OBJEXT}: MFace.cpp ../Common/GmshConfig.h MFace.h MVertex.h SPoint2.h \
-  SPoint3.h SVector3.h ../Numeric/Numeric.h ../Numeric/GmshMatrix.h \
-  ../Common/GmshMessage.h ../Common/Context.h ../Geo/CGNSOptions.h \
-  ../Mesh/meshPartitionOptions.h
+  SPoint3.h MEdge.h SVector3.h ../Numeric/Numeric.h \
+  ../Numeric/GmshMatrix.h ../Common/GmshMessage.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 \
@@ -378,5 +378,9 @@ MPyramid${OBJEXT}: MPyramid.cpp MPyramid.h MElement.h ../Common/GmshDefines.h \
   ../Numeric/Numeric.h ../Numeric/GmshMatrix.h
 MZone${OBJEXT}: MZone.cpp ../Common/GmshConfig.h
 MZoneBoundary${OBJEXT}: MZoneBoundary.cpp ../Common/GmshConfig.h
-CellComplex${OBJEXT}: CellComplex.cpp CellComplex.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 ../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
diff --git a/Geo/gmshEdge.cpp b/Geo/gmshEdge.cpp
index 2a7f48ae179f72cc8e23298d81c79bc2efe17586..6ce4647ce9ac5900c4ed795a1fbad95b85ce4ec3 100644
--- a/Geo/gmshEdge.cpp
+++ b/Geo/gmshEdge.cpp
@@ -3,6 +3,7 @@
 // See the LICENSE.txt file for license information. Please report all
 // bugs and problems to <gmsh@geuz.org>.
 
+#include <sstream>
 #include "GModel.h"
 #include "GFace.h"
 #include "GFaceCompound.h"
@@ -63,6 +64,24 @@ GEntity::GeomType gmshEdge::geomType() const
   }
 }
 
+std::string gmshEdge::getAdditionalInfoString()
+{
+  if(List_Nbr(c->Control_Points) > 0){
+    std::ostringstream sstream;
+    sstream << "{";
+    for(int i = 0; i < List_Nbr(c->Control_Points); i++){
+      if(i) sstream << ",";
+      Vertex *v;
+      List_Read(c->Control_Points, i, &v);
+      sstream << v->Num;
+    }
+    sstream << "}";
+    return sstream.str();    
+  }
+  else
+    return GEdge::getAdditionalInfoString();
+}
+
 int gmshEdge::minimumMeshSegments () const
 {
   int np;
diff --git a/Geo/gmshEdge.h b/Geo/gmshEdge.h
index 72155dbd33d2054e1ddebd324e29a522a1e8110e..8f6055cf98bdf9635f55800b0b877695a820d875 100644
--- a/Geo/gmshEdge.h
+++ b/Geo/gmshEdge.h
@@ -22,6 +22,7 @@ class gmshEdge : public GEdge {
   virtual SVector3 firstDer(double par) const;
   ModelType getNativeType() const { return GmshModel; }
   void * getNativePtr() const { return c; }
+  virtual std::string getAdditionalInfoString();
   virtual int minimumMeshSegments() const;
   virtual int minimumDrawSegments() const;
   virtual void resetMeshAttributes();
diff --git a/Graphics/Makefile b/Graphics/Makefile
index 8b76b62685aa87b1bd26751abc64783e27232133..3d4bfc680bcf9685c708a92b2355673fa85b76a8 100644
--- a/Graphics/Makefile
+++ b/Graphics/Makefile
@@ -90,15 +90,15 @@ drawMesh${OBJEXT}: drawMesh.cpp drawContext.h ../Geo/SBoundingBox3d.h \
   ../Geo/SBoundingBox3d.h ../Geo/MLine.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/SVector3.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/Context.h ../Geo/CGNSOptions.h \
-  ../Mesh/meshPartitionOptions.h ../Common/OS.h gl2ps.h \
-  ../Common/VertexArray.h ../Common/SmoothData.h ../Post/PView.h \
-  ../Post/PViewData.h
+  ../Geo/MEdge.h ../Geo/SVector3.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/Context.h ../Geo/CGNSOptions.h ../Mesh/meshPartitionOptions.h \
+  ../Common/OS.h gl2ps.h ../Common/VertexArray.h ../Common/SmoothData.h \
+  ../Post/PView.h ../Post/PViewData.h
 drawGeom${OBJEXT}: drawGeom.cpp drawContext.h ../Geo/SBoundingBox3d.h \
   ../Geo/SPoint3.h ../Common/Context.h ../Geo/CGNSOptions.h \
   ../Mesh/meshPartitionOptions.h gl2ps.h ../Common/GmshConfig.h \
diff --git a/Mesh/Makefile b/Mesh/Makefile
index 7710cc1c92522efbcb0b02f0bce3d8a1ee1f9c8c..fb4a23be924091825934c9e3378ea7c6025f6458 100644
--- a/Mesh/Makefile
+++ b/Mesh/Makefile
@@ -88,7 +88,7 @@ Generator${OBJEXT}: Generator.cpp ../Common/GmshConfig.h ../Common/GmshMessage.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/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 \
@@ -121,21 +121,21 @@ gmshSmoothHighOrder${OBJEXT}: gmshSmoothHighOrder.cpp ../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/SPoint3.h ../Geo/MFace.h ../Geo/MVertex.h \
-  ../Geo/SVector3.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 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/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 \
+  ../Geo/MEdge.h ../Geo/SVector3.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 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/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 \
@@ -157,7 +157,7 @@ meshGEdge${OBJEXT}: meshGEdge.cpp ../Geo/GModel.h ../Geo/GVertex.h \
   ../Geo/SBoundingBox3d.h meshGEdge.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/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 \
   BackgroundMesh.h ../Numeric/Numeric.h ../Numeric/GmshMatrix.h \
@@ -173,7 +173,7 @@ meshGEdgeExtruded${OBJEXT}: meshGEdgeExtruded.cpp ../Geo/GModel.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/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 \
   ../Geo/ExtrudeParams.h ../Common/SmoothData.h
@@ -181,8 +181,8 @@ meshGFace${OBJEXT}: meshGFace.cpp meshGFace.h meshGFaceBDS.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/SPoint3.h ../Geo/MFace.h ../Geo/MVertex.h ../Geo/SVector3.h \
-  ../Common/GmshMessage.h ../Numeric/FunctionSpace.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/GVertex.h ../Geo/GEntity.h ../Geo/Range.h \
@@ -208,12 +208,12 @@ meshGFaceTransfinite${OBJEXT}: meshGFaceTransfinite.cpp meshGFace.h \
   ../Geo/MVertex.h ../Geo/SPoint2.h ../Geo/SPoint3.h ../Geo/MTriangle.h \
   ../Geo/MElement.h ../Common/GmshDefines.h ../Geo/MVertex.h \
   ../Geo/MEdge.h ../Geo/MVertex.h ../Geo/SVector3.h ../Geo/MFace.h \
-  ../Geo/MVertex.h ../Geo/SVector3.h ../Common/GmshMessage.h \
-  ../Numeric/FunctionSpace.h ../Numeric/GmshMatrix.h \
-  ../Common/GmshConfig.h ../Numeric/Gauss.h ../Geo/MQuadrangle.h \
-  ../Geo/MElement.h ../Common/Context.h ../Geo/CGNSOptions.h \
-  ../Mesh/meshPartitionOptions.h ../Numeric/Numeric.h \
-  ../Numeric/GmshMatrix.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 \
+  ../Geo/MQuadrangle.h ../Geo/MElement.h ../Common/Context.h \
+  ../Geo/CGNSOptions.h ../Mesh/meshPartitionOptions.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 \
@@ -225,7 +225,7 @@ meshGFaceExtruded${OBJEXT}: meshGFaceExtruded.cpp ../Geo/GModel.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/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 \
   ../Geo/MTriangle.h ../Geo/MElement.h ../Geo/MQuadrangle.h \
@@ -236,27 +236,27 @@ meshGFaceBDS${OBJEXT}: meshGFaceBDS.cpp ../Common/GmshMessage.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/SPoint3.h ../Geo/MFace.h ../Geo/MVertex.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/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 ../Common/Context.h \
-  ../Geo/CGNSOptions.h ../Mesh/meshPartitionOptions.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 \
-  ../Numeric/Numeric.h ../Numeric/GmshMatrix.h BDS.h qualityMeasures.h \
-  Field.h ../Post/PView.h ../Common/OS.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/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 \
+  ../Common/Context.h ../Geo/CGNSOptions.h ../Mesh/meshPartitionOptions.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 ../Numeric/Numeric.h ../Numeric/GmshMatrix.h \
+  BDS.h qualityMeasures.h Field.h ../Post/PView.h ../Common/OS.h
 meshGFaceDelaunayInsertion${OBJEXT}: meshGFaceDelaunayInsertion.cpp \
   ../Common/GmshMessage.h ../Numeric/GmshPredicates.h BackgroundMesh.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/SPoint3.h ../Geo/MFace.h ../Geo/MVertex.h ../Geo/SVector3.h \
-  ../Numeric/FunctionSpace.h ../Numeric/GmshMatrix.h \
+  ../Geo/SPoint3.h ../Geo/MFace.h ../Geo/MVertex.h ../Geo/MEdge.h \
+  ../Geo/SVector3.h ../Numeric/FunctionSpace.h ../Numeric/GmshMatrix.h \
   ../Common/GmshConfig.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 \
@@ -269,17 +269,17 @@ meshGFaceOptimize${OBJEXT}: meshGFaceOptimize.cpp meshGFaceOptimize.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/SPoint3.h ../Geo/MFace.h ../Geo/MVertex.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 ../Numeric/Numeric.h ../Numeric/GmshMatrix.h \
-  Generator.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 \
+  ../Numeric/Numeric.h ../Numeric/GmshMatrix.h Generator.h
 meshGFaceQuadrilateralize${OBJEXT}: meshGFaceQuadrilateralize.cpp \
   meshGFaceQuadrilateralize.h ../Common/GmshMessage.h \
   ../Numeric/Numeric.h ../Numeric/GmshMatrix.h ../Common/GmshConfig.h \
@@ -292,23 +292,24 @@ meshGFaceQuadrilateralize${OBJEXT}: meshGFaceQuadrilateralize.cpp \
   ../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/SVector3.h ../Numeric/FunctionSpace.h ../Numeric/GmshMatrix.h \
-  ../Numeric/Gauss.h meshGFaceOptimize.h meshGFaceBDS.h BDS.h
+  ../Geo/MEdge.h ../Geo/SVector3.h ../Numeric/FunctionSpace.h \
+  ../Numeric/GmshMatrix.h ../Numeric/Gauss.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 \
   ../Geo/MVertex.h ../Geo/SPoint2.h ../Geo/SPoint3.h ../Geo/MEdge.h \
   ../Geo/MVertex.h ../Geo/SVector3.h ../Geo/SPoint3.h ../Geo/MFace.h \
-  ../Geo/MVertex.h ../Geo/SVector3.h ../Numeric/FunctionSpace.h \
-  ../Numeric/GmshMatrix.h ../Numeric/Gauss.h ../Numeric/Numeric.h \
-  ../Numeric/GmshMatrix.h BackgroundMesh.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/MVertex.h ../Geo/MEdge.h ../Geo/SVector3.h \
+  ../Numeric/FunctionSpace.h ../Numeric/GmshMatrix.h ../Numeric/Gauss.h \
+  ../Numeric/Numeric.h ../Numeric/GmshMatrix.h BackgroundMesh.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/gmshRegion.h ../Geo/Geo.h \
   ../Geo/gmshSurface.h ../Geo/Pair.h ../Geo/Range.h ../Geo/SPoint2.h \
   ../Geo/SPoint3.h ../Geo/SVector3.h ../Geo/SBoundingBox3d.h \
@@ -324,8 +325,8 @@ meshGRegionDelaunayInsertion${OBJEXT}: meshGRegionDelaunayInsertion.cpp \
   meshGRegionDelaunayInsertion.h ../Geo/MTetrahedron.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/SPoint3.h ../Geo/MFace.h ../Geo/MVertex.h ../Geo/SVector3.h \
-  ../Numeric/FunctionSpace.h ../Numeric/GmshMatrix.h \
+  ../Geo/SPoint3.h ../Geo/MFace.h ../Geo/MVertex.h ../Geo/MEdge.h \
+  ../Geo/SVector3.h ../Numeric/FunctionSpace.h ../Numeric/GmshMatrix.h \
   ../Common/GmshConfig.h ../Numeric/Gauss.h ../Numeric/Numeric.h \
   ../Numeric/GmshMatrix.h qualityMeasures.h ../Geo/GModel.h \
   ../Geo/GVertex.h ../Geo/GEntity.h ../Geo/Range.h ../Geo/SPoint3.h \
@@ -346,7 +347,7 @@ meshGRegionTransfinite${OBJEXT}: meshGRegionTransfinite.cpp meshGFace.h \
   ../Geo/MVertex.h ../Geo/SPoint2.h ../Geo/SPoint3.h \
   ../Geo/MTetrahedron.h ../Geo/MElement.h ../Common/GmshDefines.h \
   ../Geo/MVertex.h ../Geo/MEdge.h ../Geo/MVertex.h ../Geo/SVector3.h \
-  ../Geo/MFace.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 \
   ../Geo/MHexahedron.h ../Geo/MElement.h ../Geo/MPrism.h \
@@ -363,7 +364,7 @@ meshGRegionExtruded${OBJEXT}: meshGRegionExtruded.cpp ../Geo/GModel.h \
   ../Geo/SBoundingBox3d.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/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 \
   ../Geo/MQuadrangle.h ../Geo/MElement.h ../Geo/MTetrahedron.h \
@@ -383,7 +384,7 @@ meshGRegionCarveHole${OBJEXT}: meshGRegionCarveHole.cpp ../Common/GmshConfig.h \
   ../Geo/SBoundingBox3d.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/SVector3.h \
+  ../Geo/MFace.h ../Geo/MVertex.h ../Geo/MEdge.h ../Geo/SVector3.h \
   ../Numeric/FunctionSpace.h ../Numeric/GmshMatrix.h ../Numeric/Gauss.h \
   ../Geo/MQuadrangle.h ../Geo/MElement.h ../Geo/MTetrahedron.h \
   ../Geo/MElement.h ../Geo/MHexahedron.h ../Geo/MElement.h \
@@ -394,11 +395,11 @@ meshGRegionLocalMeshMod${OBJEXT}: meshGRegionLocalMeshMod.cpp \
   ../Geo/MTetrahedron.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/SPoint3.h ../Geo/MFace.h \
-  ../Geo/MVertex.h ../Geo/SVector3.h ../Common/GmshMessage.h \
-  ../Numeric/FunctionSpace.h ../Numeric/GmshMatrix.h \
-  ../Common/GmshConfig.h ../Numeric/Gauss.h ../Numeric/Numeric.h \
-  ../Numeric/GmshMatrix.h BackgroundMesh.h qualityMeasures.h \
-  ../Geo/GEntity.h ../Geo/Range.h ../Geo/SPoint3.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 \
+  ../Numeric/Numeric.h ../Numeric/GmshMatrix.h BackgroundMesh.h \
+  qualityMeasures.h ../Geo/GEntity.h ../Geo/Range.h ../Geo/SPoint3.h \
   ../Geo/SBoundingBox3d.h ../Geo/SPoint3.h ../Geo/GRegion.h \
   ../Geo/GEntity.h
 DivideAndConquer${OBJEXT}: DivideAndConquer.cpp ../Common/GmshMessage.h \
@@ -422,10 +423,10 @@ qualityMeasures${OBJEXT}: qualityMeasures.cpp qualityMeasures.h BDS.h \
   ../Geo/SPoint3.h ../Geo/MTriangle.h ../Geo/MElement.h \
   ../Common/GmshDefines.h ../Geo/MVertex.h ../Geo/MEdge.h \
   ../Geo/MVertex.h ../Geo/SVector3.h ../Geo/SPoint3.h ../Geo/MFace.h \
-  ../Geo/MVertex.h ../Geo/SVector3.h ../Numeric/FunctionSpace.h \
-  ../Numeric/GmshMatrix.h ../Common/GmshConfig.h ../Numeric/Gauss.h \
-  ../Geo/MTetrahedron.h ../Geo/MElement.h ../Numeric/Numeric.h \
-  ../Numeric/GmshMatrix.h
+  ../Geo/MVertex.h ../Geo/MEdge.h ../Geo/SVector3.h \
+  ../Numeric/FunctionSpace.h ../Numeric/GmshMatrix.h \
+  ../Common/GmshConfig.h ../Numeric/Gauss.h ../Geo/MTetrahedron.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 \
@@ -437,7 +438,7 @@ BoundaryLayers${OBJEXT}: BoundaryLayers.cpp ../Geo/GModel.h ../Geo/GVertex.h \
   ../Geo/SBoundingBox3d.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/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 \
   ../Geo/MQuadrangle.h ../Geo/MElement.h BoundaryLayers.h \
@@ -453,8 +454,8 @@ BDS${OBJEXT}: BDS.cpp ../Common/GmshMessage.h ../Numeric/GmshPredicates.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/SVector3.h ../Numeric/FunctionSpace.h ../Numeric/GmshMatrix.h \
-  ../Numeric/Gauss.h qualityMeasures.h
+  ../Geo/MEdge.h ../Geo/SVector3.h ../Numeric/FunctionSpace.h \
+  ../Numeric/GmshMatrix.h ../Numeric/Gauss.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 \
@@ -464,18 +465,18 @@ HighOrder${OBJEXT}: HighOrder.cpp HighOrder.h ../Geo/GModel.h ../Geo/GVertex.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/SVector3.h \
-  gmshSmoothHighOrder.h ../Geo/MLine.h ../Geo/MElement.h \
-  ../Common/GmshDefines.h ../Geo/MVertex.h ../Geo/MEdge.h \
-  ../Geo/MVertex.h ../Geo/SVector3.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 \
-  ../Numeric/Numeric.h ../Numeric/GmshMatrix.h ../Common/Context.h \
-  ../Geo/CGNSOptions.h ../Mesh/meshPartitionOptions.h
+  ../Geo/SPoint2.h ../Geo/SPoint3.h ../Geo/MEdge.h ../Geo/MVertex.h \
+  ../Geo/SVector3.h ../Geo/SVector3.h gmshSmoothHighOrder.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 ../Numeric/Numeric.h \
+  ../Numeric/GmshMatrix.h ../Common/Context.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 \
@@ -487,8 +488,8 @@ meshPartition${OBJEXT}: meshPartition.cpp ../Common/GmshConfig.h ../Geo/GModel.h
   ../Geo/SBoundingBox3d.h meshPartition.h meshPartitionObjects.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/SVector3.h \
-  ../Common/GmshMessage.h ../Numeric/FunctionSpace.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 ../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 \
@@ -499,9 +500,9 @@ meshRefine${OBJEXT}: meshRefine.cpp HighOrder.h ../Geo/GModel.h ../Geo/GVertex.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/SVector3.h ../Geo/MLine.h \
-  ../Geo/MElement.h ../Common/GmshDefines.h ../Geo/MVertex.h \
-  ../Geo/MEdge.h ../Geo/MVertex.h ../Geo/SVector3.h ../Geo/MFace.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 \
diff --git a/Mesh/meshGFace.cpp b/Mesh/meshGFace.cpp
index 491eb6d21e6d6ffc4f128c94d1c83823b9fe2392..de8a3658e63e53e546a432aaf74a102e3ce2a11b 100644
--- a/Mesh/meshGFace.cpp
+++ b/Mesh/meshGFace.cpp
@@ -753,7 +753,7 @@ static bool gmsh2DMeshGenerator(GFace *gf, int RECUR_ITER, bool repairSelfInters
       ++itt;
     }
   }
-  
+
   // the delaunay algo is based directly on internal gmsh structures
   // BDS mesh is passed in order not to recompute local coordinates of
   // vertices
diff --git a/Numeric/Makefile b/Numeric/Makefile
index 410f88fceb274db1b7ff82246a635b0a9f835955..9728023741ee073549d666899dd06552f191a0a3 100644
--- a/Numeric/Makefile
+++ b/Numeric/Makefile
@@ -75,8 +75,9 @@ gmshLaplace${OBJEXT}: gmshLaplace.cpp gmshLaplace.h gmshTermOfFormulation.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/SVector3.h ../Numeric/FunctionSpace.h ../Numeric/GmshMatrix.h \
-  ../Numeric/Gauss.h ../Common/Gmsh.h ../Common/GmshMessage.h Numeric.h
+  ../Geo/MEdge.h ../Geo/SVector3.h ../Numeric/FunctionSpace.h \
+  ../Numeric/GmshMatrix.h ../Numeric/Gauss.h ../Common/Gmsh.h \
+  ../Common/GmshMessage.h Numeric.h
 gmshHelmholtz${OBJEXT}: gmshHelmholtz.cpp gmshHelmholtz.h \
   gmshTermOfFormulation.h GmshMatrix.h ../Common/GmshConfig.h \
   ../Common/GmshMessage.h gmshFunction.h gmshAssembler.h \
@@ -90,7 +91,7 @@ gmshHelmholtz${OBJEXT}: gmshHelmholtz.cpp gmshHelmholtz.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/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 \
@@ -106,7 +107,7 @@ gmshElasticity${OBJEXT}: gmshElasticity.cpp gmshElasticity.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/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 \
@@ -122,7 +123,7 @@ gmshProjection${OBJEXT}: gmshProjection.cpp gmshProjection.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/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
diff --git a/Plugin/Evaluate.cpp b/Plugin/Evaluate.cpp
index 21a166298f0e01b74569bbfd22505c2d97626e05..3c8286989108dcd16775f3137e431becad2d5128 100644
--- a/Plugin/Evaluate.cpp
+++ b/Plugin/Evaluate.cpp
@@ -5,6 +5,7 @@
 
 #include "GmshConfig.h"
 #include "Evaluate.h"
+#include "OctreePost.h"
 
 #if defined(HAVE_MATH_EVAL)
 #include "matheval.h"
@@ -113,92 +114,9 @@ void GMSH_EvaluatePlugin::catchErrorMessage(char *errorMessage) const
   strcpy(errorMessage, "Evaluate failed...");
 }
 
-void GMSH_EvaluatePlugin::evaluate(PView *v1, List_T *list1, int nbElm1,
-                                   PView *v2, List_T *list2, int nbElm2,
-                                   int nbNod, int nbComp, int comp, 
-                                   int timeStep1, int timeStep2,
-                                   const char *expression)
-{
-#if !defined(HAVE_MATH_EVAL)
-
-  Msg::Error("MathEval is not compiled in this version of Gmsh");
-
-#else
-
-  if(!nbElm1)
-    return;
-
-  void *f = evaluator_create((char*)expression);
-
-  if(!f){
-    Msg::Error("Invalid expression '%s'", expression);
-    return;
-  }
-
-  if((nbElm1 != nbElm2) && !_octree){
-    Msg::Info("External view based on different grid: interpolating...");
-    _octree = new OctreePost(v2);
-  }
-
-  v1->setChanged(true);
-
-  int nb = List_Nbr(list1) / nbElm1;
-  int nb2 = nbElm2 ? List_Nbr(list2) / nbElm2 : 0;
-  for(int i = 0, i2 = 0; i < List_Nbr(list1); i += nb, i2 += nb2) {
-    double *x = (double *)List_Pointer_Fast(list1, i);
-    double *y = (double *)List_Pointer_Fast(list1, i + nbNod);
-    double *z = (double *)List_Pointer_Fast(list1, i + 2 * nbNod);
-    for(int j = 0; j < nbNod; j++) {
-      // store data from the main view into v
-      double v[9] = {0., 0., 0., 0., 0., 0., 0., 0., 0.};
-      double *val1 = (double *)List_Pointer_Fast(list1, 
-                                                 i + 3 * nbNod + 
-                                                 nbNod * nbComp * timeStep1 + nbComp * j);
-      for(int k = 0; k < nbComp; k++) v[k] = val1[k];
-
-      // store data from the external view into w
-      double w[9] = {0., 0., 0., 0., 0., 0., 0., 0., 0.};
-      double *val2;
-      if(_octree){
-        double tmp[9];
-        val2 = tmp;
-        if(_octree->searchScalar(x[j], y[j], z[j], val2, timeStep2)){
-        //if(_octree->searchScalarWithTol(x[j], y[j], z[j], val2, timeStep2, 0, 0.1)){
-          w[0] = val2[0];
-        }
-        else if(_octree->searchVector(x[j], y[j], z[j], val2, timeStep2)){
-          for(int k = 0; k < 3; k++) w[k] = val2[k];
-        }
-        else if(_octree->searchTensor(x[j], y[j], z[j], val2, timeStep2)){
-          for(int k = 0; k < 9; k++) w[k] = val2[k];
-        }
-      }
-      else{
-        val2 = (double *)List_Pointer_Fast(list2, 
-                                           i2 + 3 * nbNod + 
-                                           nbNod * nbComp * timeStep2 + nbComp * j);
-        for(int k = 0; k < nbComp; k++) w[k] = val2[k];
-      }
-      
-      double time = v1->getData()->getTime(timeStep1);
-      double tstep = timeStep1; 
-      char *names[] = { "x", "y", "z", "Time", "TimeStep",
-                        "v", "v0", "v1", "v2", "v3", "v4", "v5", "v6", "v7", "v8",
-                        "w", "w0", "w1", "w2", "w3", "w4", "w5", "w6", "w7", "w8" };
-      double values[] = { x[j], y[j], z[j], time, tstep,
-                          v[comp], v[0], v[1], v[2], v[3], v[4], v[5], v[6], v[7], v[8],
-                          w[comp], w[0], w[1], w[2], w[3], w[4], w[5], w[6], w[7], w[8] };
-      val1[comp] = evaluator_evaluate(f, sizeof(names)/sizeof(names[0]), names, values);
-    }
-  }
-
-  evaluator_destroy(f);
-#endif
-}
-
 PView *GMSH_EvaluatePlugin::execute(PView *v)
 {
-  int comp = (int)EvaluateOptions_Number[0].def;
+  int component = (int)EvaluateOptions_Number[0].def;
   int timeStep = (int)EvaluateOptions_Number[1].def;
   int externalView = (int)EvaluateOptions_Number[2].def;
   int externalTimeStep = (int)EvaluateOptions_Number[3].def;
@@ -208,12 +126,11 @@ PView *GMSH_EvaluatePlugin::execute(PView *v)
   PView *v1 = getView(iView, v);
   if(!v1) return v;
 
-  PViewDataList *data1 = getDataList(v1);
-  if(!data1) return v;
+  PViewData *data1 = v1->getData();
 
   if(timeStep > data1->getNumTimeSteps() - 1){
     Msg::Error("Invalid time step (%d) in View[%d]: using step 0 instead",
-        timeStep, v1->getIndex());
+               timeStep, v1->getIndex());
     timeStep = 0;
   }
 
@@ -226,8 +143,7 @@ PView *GMSH_EvaluatePlugin::execute(PView *v)
       Msg::Error("View[%d] does not exist: using self", externalView);
   }
 
-  PViewDataList *data2 = getDataList(v2);
-  if(!data2) return v;
+  PViewData *data2 = v2->getData();
 
   if(externalTimeStep < 0 && data2->getNumTimeSteps() != data1->getNumTimeSteps()){
     Msg::Error("Number of time steps don't match: using step 0");
@@ -235,83 +151,88 @@ PView *GMSH_EvaluatePlugin::execute(PView *v)
   }
   else if(externalTimeStep > data2->getNumTimeSteps() - 1){
     Msg::Error("Invalid time step (%d) in View[%d]: using step 0 instead",
-        externalTimeStep, v2->getIndex());
+               externalTimeStep, v2->getIndex());
     externalTimeStep = 0;
   }
 
-  _octree = 0;
+  v1->setChanged(true);
 
-  for(int tt = 0; tt < data1->getNumTimeSteps(); tt++){
-    if(timeStep < 0 || timeStep == tt){
+  OctreePost *octree = 0;
+  if((data1->getNumEntities() != data2->getNumEntities()) ||
+     (data1->getNumElements() != data2->getNumElements())){
+    Msg::Info("External view based on different grid: interpolating...");
+    octree = new OctreePost(v2);
+  }
+  
+#if defined(HAVE_MATH_EVAL)
+  void *f = evaluator_create((char*)expr);
+  if(!f){
+    Msg::Error("Invalid expression '%s'", expr);
+    return v;
+  }
 
-      int t2;
-      if(externalTimeStep < 0)
-        t2 = tt;
-      else
-        t2 = externalTimeStep;
+  for(int step = 0; step < data1->getNumTimeSteps(); step++){
+    if(timeStep >= 0 && timeStep != step) continue;
 
-      evaluate(v1, data1->SP, data1->NbSP, 
-               v2, data2->SP, data2->NbSP, 1, 1, 0, tt, t2, expr);
-      evaluate(v1, data1->SL, data1->NbSL, 
-               v2, data2->SL, data2->NbSL, 2, 1, 0, tt, t2, expr);
-      evaluate(v1, data1->ST, data1->NbST, 
-               v2, data2->ST, data2->NbST, 3, 1, 0, tt, t2, expr);
-      evaluate(v1, data1->SQ, data1->NbSQ,
-               v2, data2->SQ, data2->NbSQ, 4, 1, 0, tt, t2, expr);      
-      evaluate(v1, data1->SS, data1->NbSS, 
-               v2, data2->SS, data2->NbSS, 4, 1, 0, tt, t2, expr);
-      evaluate(v1, data1->SH, data1->NbSH,
-               v2, data2->SH, data2->NbSH, 8, 1, 0, tt, t2, expr);      
-      evaluate(v1, data1->SI, data1->NbSI, 
-               v2, data2->SI, data2->NbSI, 6, 1, 0, tt, t2, expr);
-      evaluate(v1, data1->SY, data1->NbSY, 
-               v2, data2->SY, data2->NbSY, 5, 1, 0, tt, t2, expr);
+    double time = data1->getTime(step);
+    int step2 = (externalTimeStep < 0) ? step : externalTimeStep;
 
-      for(int cc = 0; cc < 3; cc++){
-        if(comp < 0 || comp == cc){
-          evaluate(v1, data1->VP, data1->NbVP, 
-                   v2, data2->VP, data2->NbVP, 1, 3, cc, tt, t2, expr);
-          evaluate(v1, data1->VL, data1->NbVL,
-                   v2, data2->VL, data2->NbVL, 2, 3, cc, tt, t2, expr);
-          evaluate(v1, data1->VT, data1->NbVT,
-                   v2, data2->VT, data2->NbVT, 3, 3, cc, tt, t2, expr);
-          evaluate(v1, data1->VQ, data1->NbVQ,
-                   v2, data2->VQ, data2->NbVQ, 4, 3, cc, tt, t2, expr);
-          evaluate(v1, data1->VS, data1->NbVS,
-                   v2, data2->VS, data2->NbVS, 4, 3, cc, tt, t2, expr);
-          evaluate(v1, data1->VH, data1->NbVH,
-                   v2, data2->VH, data2->NbVH, 8, 3, cc, tt, t2, expr);
-          evaluate(v1, data1->VI, data1->NbVI,
-                   v2, data2->VI, data2->NbVI, 6, 3, cc, tt, t2, expr);
-          evaluate(v1, data1->VY, data1->NbVY,
-                   v2, data2->VY, data2->NbVY, 5, 3, cc, tt, t2, expr);
-        }
+    // tag all the nodes with "0" (the default tag)
+    for(int ent = 0; ent < data1->getNumEntities(step); ent++){
+      for(int ele = 0; ele < data1->getNumElements(step, ent); ele++){
+	if(data1->skipElement(step, ent, ele)) continue;
+	for(int nod = 0; nod < data1->getNumNodes(step, ent, ele); nod++)
+	  data1->tagNode(step, ent, ele, nod, 0);
       }
+    }
 
-      for(int cc = 0; cc < 9; cc++){
-        if(comp < 0 || comp == cc){
-          evaluate(v1, data1->TP, data1->NbTP,
-                   v2, data2->TP, data2->NbTP, 1, 9, cc, tt, t2, expr);
-          evaluate(v1, data1->TL, data1->NbTL,
-                   v2, data2->TL, data2->NbTL, 2, 9, cc, tt, t2, expr);
-          evaluate(v1, data1->TT, data1->NbTT,
-                   v2, data2->TT, data2->NbTT, 3, 9, cc, tt, t2, expr);      
-          evaluate(v1, data1->TQ, data1->NbTQ,
-                   v2, data2->TQ, data2->NbTQ, 4, 9, cc, tt, t2, expr);
-          evaluate(v1, data1->TS, data1->NbTS,
-                   v2, data2->TS, data2->NbTS, 4, 9, cc, tt, t2, expr);
-          evaluate(v1, data1->TH, data1->NbTH,
-                   v2, data2->TH, data2->NbTH, 8, 9, cc, tt, t2, expr);
-          evaluate(v1, data1->TI, data1->NbTI,
-                   v2, data2->TI, data2->NbTI, 6, 9, cc, tt, t2, expr);
-          evaluate(v1, data1->TY, data1->NbTY,
-                   v2, data2->TY, data2->NbTY, 5, 9, cc, tt, t2, expr);
+    for(int ent = 0; ent < data1->getNumEntities(step); ent++){
+      for(int ele = 0; ele < data1->getNumElements(step, ent); ele++){
+	if(data1->skipElement(step, ent, ele)) continue;
+        for(int nod = 0; nod < data1->getNumNodes(step, ent, ele); nod++){
+          double x, y, z;
+          int tag = data1->getNode(step, ent, ele, nod, x, y, z);
+          if(tag) continue; // node has already been modified
+
+          double v[9] = {0., 0., 0., 0., 0., 0., 0., 0., 0.};
+	  for(int comp = 0; comp < data1->getNumComponents(step, ent, ele); comp++)
+	    data1->getValue(step, ent, ele, nod, comp, v[comp]);
+
+          double w[9] = {0., 0., 0., 0., 0., 0., 0., 0., 0.};
+          if(octree){
+            if(!octree->searchScalar(x, y, z, w, step2))
+              if(!octree->searchVector(x, y, z, w, step2))
+                octree->searchTensor(x, y, z, w, step2);
+          }
+          else
+            for(int comp = 0; comp < data2->getNumComponents(step2, ent, ele); comp++)
+              data2->getValue(step2, ent, ele, nod, comp, w[comp]);
+          
+	  for(int comp = 0; comp < data1->getNumComponents(step, ent, ele); comp++){
+            if(component >= 0 && component != comp) continue;
+            char *names[] = 
+              {"x", "y", "z", "Time", "TimeStep",
+               "v", "v0", "v1", "v2", "v3", "v4", "v5", "v6", "v7", "v8",
+               "w", "w0", "w1", "w2", "w3", "w4", "w5", "w6", "w7", "w8"};
+            double values[] = 
+              {x, y, z, time, step,
+               v[comp], v[0], v[1], v[2], v[3], v[4], v[5], v[6], v[7], v[8],
+               w[comp], w[0], w[1], w[2], w[3], w[4], w[5], w[6], w[7], w[8]};
+            double res = evaluator_evaluate
+              (f, sizeof(names)/sizeof(names[0]), names, values);
+            data1->setValue(step, ent, ele, nod, comp, res);
+            data1->tagNode(step, ent, ele, nod, 1);
+          }
         }
       }
     }
   }
+  evaluator_destroy(f);
+#else
+  Msg::Error("MathEval is not compiled in this version of Gmsh");
+#endif
 
-  if(_octree) delete _octree;
+  if(octree) delete octree;
 
   data1->finalize();
 
diff --git a/Plugin/Evaluate.h b/Plugin/Evaluate.h
index 28b5306220e6a2219e03b3d0fd83d0be97e473b9..6f9c686e954b3f4c02066d079a1df6e56a0a0a46 100644
--- a/Plugin/Evaluate.h
+++ b/Plugin/Evaluate.h
@@ -7,7 +7,6 @@
 #define _EVALUATE_H_
 
 #include "Plugin.h"
-#include "OctreePost.h"
 
 extern "C"
 {
@@ -16,13 +15,6 @@ extern "C"
 
 class GMSH_EvaluatePlugin : public GMSH_PostPlugin
 {
-private:
-  OctreePost *_octree;
-  void evaluate(PView *v1, List_T *list1, int nbElm1,
-                PView *v2, List_T *list2, int nbElm2,
-                int nbNod, int nbComp, int comp, 
-                int timeStep, int timeStep2,
-                const char *expression);
 public:
   GMSH_EvaluatePlugin(){}
   void getName(char *name) const;
diff --git a/Plugin/Extract.cpp b/Plugin/Extract.cpp
index df92ea29cd7e763b8ae8f395cee658b89e806e53..79846332391814da189b27a8c0cdba4b280533e2 100644
--- a/Plugin/Extract.cpp
+++ b/Plugin/Extract.cpp
@@ -232,7 +232,7 @@ PView *GMSH_ExtractPlugin::execute(PView *v)
   }
   else if(step > data1->getNumTimeSteps() - 1){
     Msg::Error("Invalid time step (%d) in View[%d]: using all steps instead",
-        step, v1->getIndex());
+               step, v1->getIndex());
     step = - data1->getNumTimeSteps();
   }
 
diff --git a/Plugin/Makefile b/Plugin/Makefile
index e822f87ef1f93b24b7ea84cb7fe232d786edc63b..332c8d5a6a9a3a7b41a829b3ee72cbc2d78276b8 100644
--- a/Plugin/Makefile
+++ b/Plugin/Makefile
@@ -77,8 +77,7 @@ PluginManager${OBJEXT}: PluginManager.cpp ../Common/GmshConfig.h Plugin.h \
   HarmonicToTime.h ModulusPhase.h Integrate.h Gradient.h Curl.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 ../Post/OctreePost.h \
-  ../Common/Octree.h ../Common/OctreeInternals.h Probe.h FieldView.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
 Levelset${OBJEXT}: Levelset.cpp Levelset.h Plugin.h ../Common/Options.h \
@@ -325,7 +324,7 @@ FiniteElement${OBJEXT}: FiniteElement.cpp ../Common/GmshConfig.h ../Geo/GModel.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/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 \
diff --git a/Post/Makefile b/Post/Makefile
index 7329b2514c31e73b292bcebd08f87d9c0c320f1a..acf38cba1945a9f92e35c9c51ac556d9776e2d15 100644
--- a/Post/Makefile
+++ b/Post/Makefile
@@ -101,12 +101,12 @@ PViewDataGModel${OBJEXT}: PViewDataGModel.cpp PViewDataGModel.h PViewData.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/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 \
+  ../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 \
@@ -121,7 +121,7 @@ PViewDataGModelIO${OBJEXT}: PViewDataGModelIO.cpp ../Common/GmshConfig.h \
   ../Geo/SBoundingBox3d.h ../Geo/MVertex.h ../Geo/SPoint2.h \
   ../Geo/SPoint3.h ../Geo/MElement.h ../Common/GmshDefines.h \
   ../Geo/MVertex.h ../Geo/MEdge.h ../Geo/MVertex.h ../Geo/SVector3.h \
-  ../Geo/MFace.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/Numeric.h ../Numeric/GmshMatrix.h ../Common/StringUtils.h
 PViewOptions${OBJEXT}: PViewOptions.cpp ../Common/GmshConfig.h \
@@ -151,7 +151,7 @@ OctreePost${OBJEXT}: OctreePost.cpp ../Common/Octree.h \
   ../Numeric/GmshMatrix.h shapeFunctions.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/SVector3.h \
+  ../Geo/MFace.h ../Geo/MVertex.h ../Geo/MEdge.h ../Geo/SVector3.h \
   ../Numeric/FunctionSpace.h ../Numeric/GmshMatrix.h ../Numeric/Gauss.h
 ColorTable${OBJEXT}: ColorTable.cpp ../Common/GmshMessage.h ColorTable.h \
   ../Common/Context.h ../Geo/CGNSOptions.h ../Mesh/meshPartitionOptions.h \
diff --git a/contrib/Tetgen/Makefile b/contrib/Tetgen/Makefile
index f9f022f055558b53966e41e5bd00b2c1923b930d..525e7e56bee6fb55606c09325815d1291517a779 100644
--- a/contrib/Tetgen/Makefile
+++ b/contrib/Tetgen/Makefile
@@ -61,4 +61,3 @@ meshio${OBJEXT}: meshio.cxx tetgen.h
 meshstat${OBJEXT}: meshstat.cxx tetgen.h
 predicates${OBJEXT}: predicates.cxx tetgen.h
 surface${OBJEXT}: surface.cxx tetgen.h
-tetgen${OBJEXT}: tetgen.cxx tetgen.h
diff --git a/doc/TODO.txt b/doc/TODO.txt
index 21b064eb7e270a9b315cc5fed9c0fcc8b73f3f92..2fd6dd46f363f6ad0e023b14bb381934cf48e4fd 100644
--- a/doc/TODO.txt
+++ b/doc/TODO.txt
@@ -1,4 +1,8 @@
-$Id: TODO.txt,v 1.24 2009-04-01 18:50:53 geuzaine Exp $
+$Id: TODO.txt,v 1.25 2009-04-04 21:08:02 geuzaine Exp $
+
+********************************************************************
+
+make embedded edges work with Delaunay/Frontal
 
 ********************************************************************
 
diff --git a/tutorial/t5.geo b/tutorial/t5.geo
index cea94ad40ea2b2f6489a8326227d7f9bd87a0a8b..3177673e9732176e157e540789bff624dede4fda 100644
--- a/tutorial/t5.geo
+++ b/tutorial/t5.geo
@@ -103,7 +103,7 @@ Function CheeseHole
   l7 = newreg; Line Loop(l7) = {-c2,-c7,-c12};Ruled Surface(newreg) = {l7};
   l8 = newreg; Line Loop(l8) = {-c6,-c9,c2};  Ruled Surface(newreg) = {l8};
 
-  // We then store the surface loops identification numbers in list
+  // We then store the surface loops identification numbers in a list
   // for later reference (we will need these to define the final
   // volume):