diff --git a/Plugin/Tetrahedralize.cpp b/Plugin/Tetrahedralize.cpp
index bb0ba2f57cef8c13433c32dba94312a75518c303..f26f57b2fdce6c68e21bd00bd56d6d98e065f67c 100644
--- a/Plugin/Tetrahedralize.cpp
+++ b/Plugin/Tetrahedralize.cpp
@@ -43,19 +43,16 @@ StringXNumber *GMSH_TetrahedralizePlugin::getOption(int iopt)
   return &TetrahedralizeOptions_Number[iopt];
 }
 
-class PointData {
+#if defined(HAVE_MESH)
+
+class PointData : public MVertex {
  public:
-  MVertex *v;
   std::vector<double> val;
   PointData(double x, double y, double z, int numVal)
+    : MVertex(x, y, z)
   {
-    v = new MVertex(x, y, z);
     val.resize(numVal);
   }
-  ~PointData()
-  {
-    delete v;
-  }
 };
 
 PView *GMSH_TetrahedralizePlugin::execute(PView *v)
@@ -72,7 +69,7 @@ PView *GMSH_TetrahedralizePlugin::execute(PView *v)
   }
 
   // create list of points with associated data
-  std::vector<PointData> points;
+  std::vector<MVertex*> points;
   int numSteps = data1->getNumTimeSteps();
   for(int ent = 0; ent < data1->getNumEntities(0); ent++){
     for(int ele = 0; ele < data1->getNumElements(0, ent); ele++){
@@ -81,50 +78,32 @@ PView *GMSH_TetrahedralizePlugin::execute(PView *v)
       int numComp = data1->getNumComponents(0, ent, ele);
       double x, y, z;
       data1->getNode(0, ent, ele, 0, x, y, z);
-      PointData p(x, y, z, numComp * numSteps);
+      PointData *p = new PointData(x, y, z, numComp * numSteps);
       for(int step = 0; step < numSteps; step++)
         for(int comp = 0; comp < numComp; comp++)
-          data1->getValue(step, ent, ele, 0, comp, p.val[numComp * step + comp]);
+          data1->getValue(step, ent, ele, 0, comp, p->val[numComp * step + comp]);
       points.push_back(p);
     }
   }
 
   if(points.size() < 4){
     Msg::Error("Need at least 4 points to tetrahedralize");
+    for(unsigned int i = 0; i < points.size(); i++) delete points[i];
     return v1;
   }
 
-#if !defined(HAVE_MESH)
-  Msg::Error("Gmsh has to be compiled with Mesh support to run "
-             "Plugin(Tetrahedralize)");
-  return v1;
-#else
-  std::vector<MVertex*> vertices(points.size());
-  for(unsigned int i = 0; i < points.size(); i++){
-    MVertex *v = points[i].v;
-    v->setIndex(i);
-    vertices[i] = v;
-  }
   std::vector<MTetrahedron*> tets;
-  delaunayMeshIn3D(vertices, tets);
+  delaunayMeshIn3D(points, tets);
 
   // create output
   PView *v2 = new PView();
   PViewDataList *data2 = getDataList(v2);
   for(unsigned int i = 0; i < tets.size(); i++){
-    MTetrahedron *t = tets[i];
-    int i0 = t->getVertex(0)->getIndex();
-    int i1 = t->getVertex(1)->getIndex();
-    int i2 = t->getVertex(2)->getIndex();
-    int i3 = t->getVertex(3)->getIndex();
-    int n = points.size();
-    if(i0 < 0 || i0 >= n || i1 < 0 || i1 >= n ||
-       i2 < 0 || i2 >= n || i3 < 0 || i3 >= n){
-      Msg::Warning("Bad vertex in tetrahedralization");
-      continue;
-    }
-    PointData *p[4] = {&points[i0], &points[i1],
-                       &points[i2], &points[i3]};
+    PointData *p[4];
+    p[0] = (PointData*)tets[i]->getVertex(0);
+    p[1] = (PointData*)tets[i]->getVertex(1);
+    p[2] = (PointData*)tets[i]->getVertex(2);
+    p[3] = (PointData*)tets[i]->getVertex(3);
     int numComp = 0;
     std::vector<double> *vec = 0;
     if((int)p[0]->val.size() == 9 * numSteps &&
@@ -149,17 +128,17 @@ PView *GMSH_TetrahedralizePlugin::execute(PView *v)
       Msg::Warning("Bad data in tetrahedralization");
       continue;
     }
-    for(int nod = 0; nod < 4; nod++) vec->push_back(p[nod]->v->x());
-    for(int nod = 0; nod < 4; nod++) vec->push_back(p[nod]->v->y());
-    for(int nod = 0; nod < 4; nod++) vec->push_back(p[nod]->v->z());
+    for(int nod = 0; nod < 4; nod++) vec->push_back(p[nod]->x());
+    for(int nod = 0; nod < 4; nod++) vec->push_back(p[nod]->y());
+    for(int nod = 0; nod < 4; nod++) vec->push_back(p[nod]->z());
     for(int step = 0; step < numSteps; step++)
       for(int nod = 0; nod < 4; nod++)
         for(int comp = 0; comp < numComp; comp++)
           vec->push_back(p[nod]->val[numComp * step + comp]);
   }
 
-  for(unsigned int i = 0; i < tets.size(); i++)
-    delete tets[i];
+  for(unsigned int i = 0; i < tets.size(); i++) delete tets[i];
+  for(unsigned int i = 0; i < points.size(); i++) delete points[i];
 
   for(int i = 0; i < data1->getNumTimeSteps(); i++)
     data2->Time.push_back(data1->getTime(i));
@@ -167,5 +146,14 @@ PView *GMSH_TetrahedralizePlugin::execute(PView *v)
   data2->setFileName(data1->getName() + "_Tetrahedralize.pos");
   data2->finalize();
   return v2;
-#endif
 }
+
+#else
+
+PView *GMSH_TetrahedralizePlugin::execute(PView *v)
+{
+  Msg::Error("Plugin(Tetrahedralize requires mesh module");
+  return v;
+}
+
+#endif
diff --git a/Plugin/Triangulate.cpp b/Plugin/Triangulate.cpp
index aea43e54ed0c1d4830bc62a67ba74a5a56f4000a..218d49e9849bc014acf51bba9c4ad11be41a77f3 100644
--- a/Plugin/Triangulate.cpp
+++ b/Plugin/Triangulate.cpp
@@ -98,8 +98,7 @@ PView *GMSH_TriangulatePlugin::execute(PView *v)
 
   if(points.size() < 3){
     Msg::Error("Need at least 3 points to triangulate");
-    for(unsigned int i = 0; i < points.size(); i++)
-      delete points[i];
+    for(unsigned int i = 0; i < points.size(); i++) delete points[i];
     return v1;
   }