diff --git a/wrappers/java/WrappingJava/build.xml b/wrappers/java/WrappingJava/build.xml
index b02b8d61b547dead37e1f5b5016cbf22fc844cae..1d8426efd4b5bb5854da1633759441573ce512fe 100644
--- a/wrappers/java/WrappingJava/build.xml
+++ b/wrappers/java/WrappingJava/build.xml
@@ -136,6 +136,7 @@
 	      <classpath refid="run.class.path" />
 	      <jvmarg value="-Xmx512M" />
 	      <jvmarg value="-Xms100M" />
+	      <jvmarg value="-Xss100M" />
 	</java>
     </target>
 
@@ -150,6 +151,7 @@
 	      <classpath refid="run.class.path" />
 	      <jvmarg value="-Xmx512M" />
 	      <jvmarg value="-Xms100M" />
+	      <jvmarg value="-Xss100M" />
 	</java>
     </target>
 
diff --git a/wrappers/java/WrappingJava/src/main/java/com/artenum/sample/EssaiGmsh_v1.java b/wrappers/java/WrappingJava/src/main/java/com/artenum/sample/EssaiGmsh_v1.java
index 0c2abbc260bdabc9f4abd0c3962fb947aff6fa65..5afe6bd69ce56f28919b6c1aa4e75189bf2bd328 100755
--- a/wrappers/java/WrappingJava/src/main/java/com/artenum/sample/EssaiGmsh_v1.java
+++ b/wrappers/java/WrappingJava/src/main/java/com/artenum/sample/EssaiGmsh_v1.java
@@ -28,235 +28,415 @@ import org.geuz.gmsh.generated.WrapGmsh;
  * 
  */
 public class EssaiGmsh_v1 {
-    
+
     static {
         try {
             System.loadLibrary("WrapGmsh");
         } catch (final UnsatisfiedLinkError e) {
             System.err
-                    .println("Native code library failed to load. See the chapter on Dynamic Linking Problems in the SWIG Java documentation for help.\n" + e);
+                    .println("Native code library failed to load. See the chapter on Dynamic Linking Problems in the SWIG Java documentation for help.\n"
+                            + e);
             System.exit(1);
         }
-        
+
     }
-    
+
     public static void main(final String[] args) {
-        
+
         // initialization of gmsh
         WrapGmsh.GmshInitialize(0, null);
-        
+
+        final GModel m = buildGeometry();
+
+        export(m);
+
+        accessElement(m);
+
+        m.deleteMesh();
+        m.delete();
+
+        WrapGmsh.GmshFinalize();
+
+    }
+
+    /**
+     * Shows methods used to access to different mesh elements.
+     * 
+     * @param m
+     *            is the GModel where the mesh is stored.
+     */
+    private static void accessElement(final GModel m) {
+        // read mesh elements produced by m.mesh(3)
+        System.out.println("$MeshFormat");
+        System.out.println("2.2 0 8");
+        System.out.println("$EndMeshFormat");
+        System.out.println("$Nodes");
+        // boolean which indicates if all elements are meshed
+        final boolean all = m.noPhysicalGroups();
+        // number of nodes which is defined in mesh
+        System.out.println(m.indexMeshVertices(all, 0));
+
+        final GEntityVector entities = new GEntityVector();
+        m.getEntities(entities);
+        for (int i = 0; i < entities.size(); i++) {
+            for (int j = 0; j < entities.get(i).getMesh_vertices().size(); j++) {
+                final int index = entities.get(i).getMesh_vertices().get(j).getIndex();
+
+                // if index <0 then there is not physical
+                if (index >= 0) {
+                    final double x = entities.get(i).getMesh_vertices().get(j).x();
+                    final double y = entities.get(i).getMesh_vertices().get(j).y();
+                    final double z = entities.get(i).getMesh_vertices().get(j).z();
+
+                    System.out.println(index + " " + x + " " + y + " " + z);
+
+                }
+
+            }
+        }
+
+        System.out.println("$EndNodes");
+        System.out.println("$Elements");
+
+        int iter = 1;
+
+        // point
+        final GVertexVector bindingsGetVertices = m.bindingsGetVertices();
+        for (int indexVertex = 0; indexVertex < bindingsGetVertices.size(); indexVertex++) {
+            final GVertex it = bindingsGetVertices.get(indexVertex);
+            for (int k = 0; k < it.getPoints().size(); k++) {
+                for (int j = 0; j < it.getPhysicals().size(); j++) {
+                    final int physical = it.getPhysicals().get(j);
+
+                    final MPoint mPt = it.getPoints().get(k);
+
+                    final int type = mPt.getTypeForMSH();
+
+                    final IntVector verts = new IntVector();
+
+                    mPt.getVerticesIdForMSH(verts);
+
+                    // 1 is the number of physical which is associated with the
+                    // element.
+                    // there is always 1 but it is possible to write several
+                    // times the same line but with a different physical. This
+                    // is the logical used by gmsh but in reality it is 2
+                    // because there is the physical AND the elemnentary. For
+                    // more information see the gmsh documentation
+                    System.out.println(iter + " " + type + " 1 " + physical + " " + verts.get(0));
+
+                    iter++;
+                }
+            }
+        }
+
+        // edges
+
+        final EdgeVector bindingsGetEdges = m.bindingsGetEdges();
+        for (int indexEdges = 0; indexEdges < bindingsGetEdges.size(); indexEdges++) {
+            final GEdge it = bindingsGetEdges.get(indexEdges);
+            for (int j = 0; j < it.getLines().size(); j++) {
+                for (int k = 0; k < it.getPhysicals().size(); k++) {
+                    final int physical = it.getPhysicals().get(k);
+
+                    final MLine mLine = it.getLines().get(j);
+
+                    final int type = mLine.getTypeForMSH();
+
+                    final IntVector verts = new IntVector();
+
+                    mLine.getVerticesIdForMSH(verts);
+                    System.out.println(iter + " " + type + " 1 " + physical + " " + verts.get(0) + " " + verts.get(1));
+
+                    iter++;
+                }
+            }
+        }
+
+        // triangles
+
+        final FaceVector bindingsGetFaces = m.bindingsGetFaces();
+        for (int indexFace = 0; indexFace < bindingsGetFaces.size(); indexFace++) {
+            final GFace it = bindingsGetFaces.get(indexFace);
+            for (int j = 0; j < it.getTriangles().size(); j++) {
+                for (int k = 0; k < it.getPhysicals().size(); k++) {
+                    final int physical = it.getPhysicals().get(k);
+
+                    final MTriangle mTriangle = it.getTriangles().get(j);
+
+                    final int type = mTriangle.getTypeForMSH();
+                    final IntVector verts = new IntVector();
+                    mTriangle.getVerticesIdForMSH(verts);
+                    System.out.println(iter + " " + type + " 1 " + physical + " " + verts.get(0) + " " + verts.get(1)
+                            + " " + verts.get(2));
+
+                    iter++;
+
+                }
+            }
+        }
+
+        // tetrahedron
+
+        final RegionVector bindingsGetRegions = m.bindingsGetRegions();
+
+        for (int indexRegion = 0; indexRegion < bindingsGetRegions.size(); indexRegion++) {
+            final GRegion it = bindingsGetRegions.get(indexRegion);
+            for (int j = 0; j < it.getTetrahedra().size(); j++) {
+                for (int k = 0; k < it.getPhysicals().size(); k++) {
+                    final int physical = it.getPhysicals().get(k);
+
+                    final MTetrahedron mTetrahedron = it.getTetrahedra().get(j);
+
+                    final int type = mTetrahedron.getTypeForMSH();
+
+                    final IntVector verts = new IntVector();
+                    mTetrahedron.getVerticesIdForMSH(verts);
+                    System.out.println(iter + " " + type + " 1 " + physical + " " + verts.get(0) + " " + verts.get(1)
+                            + " " + verts.get(2) + " " + verts.get(3));
+
+                    iter++;
+                }
+            }
+        }
+        System.out.println("$EndElements");
+    }
+
+    /**
+     * This method export a geometry file, mesh it and export the generated mesh in gmsh file.
+     * 
+     * @param m
+     *            is the GModel where is stored the geometry and the mesh.
+     */
+    private static void export(final GModel m) {
+        // write .geo file which contains the geomtry defined before
+        m.writeGEO("test.geo");
+
+        // mesh the geometry defined in the GModel m
+        m.mesh(3);
+
+        // write .msh file which contains informations about mesh in GModel m.
+        m.writeMSH("meshtest.msh");
+    }
+
+    /**
+     * Build a geometry and stores it in a GModel.
+     * 
+     * @return a GModel which is a Gmsh object where is stored the geometry.
+     */
+    private static GModel buildGeometry() {
         // creation of GModel which stores all geometric elements and all mesh
         // elements
         final GModel m = new GModel();
-        
+
         // creation of List which are used to define "physical property" for
         // some elements
         final List_T lst1 = WrapGmsh.List_Create(5, 5, 4);
         final List_T lst2 = WrapGmsh.List_Create(5, 5, 4);
         final List_T lst3 = WrapGmsh.List_Create(5, 5, 4);
         final List_T lst4 = WrapGmsh.List_Create(5, 5, 4);
-        
+
         // outside tetrahedron
-        
+
         final double x1 = 1.0;// x coordinate of first point
         final double y1 = 0.0;// y coordinate of first point
         final double z1 = 0.0;// z coordinate of first point
-        
+
         final double lc1 = 0.05;// define mesh precision
-        
+
         final double x2 = 0.0;
         final double y2 = 1.0;
         final double z2 = 0.0;
-        
+
         final double lc2 = 0.05;
-        
+
         final double x3 = 0.0;
         final double y3 = 0.0;
         final double z3 = 0.0;
-        
+
         final double lc3 = 0.05;
-        
+
         final double x4 = 0.0;
         final double y4 = 0.0;
         final double z4 = 1.0;
-        
+
         final double lc4 = 0.05;
-        
+
         // inside tetrahedron
-        
+
         final double x5 = 0.9;
         final double y5 = 0.025;
         final double z5 = 0.025;
-        
+
         final double lc5 = 0.05;
-        
+
         final double x6 = 0.025;
         final double y6 = 0.9;
         final double z6 = 0.025;
-        
+
         final double lc6 = 0.05;
-        
+
         final double x7 = 0.025;
         final double y7 = 0.025;
         final double z7 = 0.025;
-        
+
         final double lc7 = 0.05;
-        
+
         final double x8 = 0.025;
         final double y8 = 0.025;
         final double z8 = 0.9;
-        
+
         final double lc8 = 0.05;
-        
+
         // hole between outside tetrahedron and inside tetrahedron
-        
+
         final double x9 = 0.1;
         final double y9 = 0.0;
         final double z9 = 0.1;
-        
+
         final double lc9 = 0.05;
-        
+
         final double x10 = 0.4;
         final double y10 = 0.0;
         final double z10 = 0.1;
-        
+
         final double lc10 = 0.01;
-        
+
         final double x11 = 0.4;
         final double y11 = 0.0;
         final double z11 = 0.4;
-        
+
         final double lc11 = 0.01;
-        
+
         final double x12 = 0.1;
         final double y12 = 0.0;
         final double z12 = 0.4;
-        
+
         final double lc12 = 0.01;
-        
+
         final double x13 = 0.1;
         final double y13 = 0.025;
         final double z13 = 0.1;
-        
+
         final double lc13 = 0.01;
-        
+
         final double x14 = 0.4;
         final double y14 = 0.025;
         final double z14 = 0.1;
-        
+
         final double lc14 = 0.01;
-        
+
         final double x15 = 0.4;
         final double y15 = 0.025;
         final double z15 = 0.4;
-        
+
         final double lc15 = 0.01;
-        
+
         final double x16 = 0.1;
         final double y16 = 0.025;
         final double z16 = 0.4;
-        
+
         final double lc16 = 0.01;
-        
+
         // curved tetrahedron
-        
+
         final double x17 = 0.0;
         final double y17 = 0.0;
         final double z17 = -2.0;
-        
+
         final double lc17 = 0.1;
-        
+
         final double x18 = 1.0;
         final double y18 = 0.0;
         final double z18 = -1.0;
-        
+
         final double lc18 = 0.1;
-        
+
         final double x19 = 0.0;
         final double y19 = 1.0;
         final double z19 = -1.0;
-        
+
         final double lc19 = 0.1;
-        
+
         final double x20 = 0.0;
         final double y20 = 0.0;
         final double z20 = -1.0;
-        
+
         final double lc20 = 0.1;
-        
+
         // inside sphere
-        
+
         final double x21 = 0.7;
         final double y21 = 0.354;
         final double z21 = -1.354;
-        
+
         final double lc21 = 0.1;
-        
+
         final double x22 = 0.354;
         final double y22 = 0.008;
         final double z22 = -1.354;
-        
+
         final double lc22 = 0.1;
-        
+
         final double x23 = 0.008;
         final double y23 = 0.354;
         final double z23 = -1.354;
-        
+
         final double lc23 = 0.1;
-        
+
         final double x24 = 0.354;
         final double y24 = 0.7;
         final double z24 = -1.354;
-        
+
         final double lc24 = 0.1;
-        
+
         final double x25 = 0.354;
         final double y25 = 0.354;
         final double z25 = -1.008;
-        
+
         final double lc25 = 0.1;
-        
+
         final double x26 = 0.354;
         final double y26 = 0.354;
         final double z26 = -1.7;
-        
+
         final double lc26 = 0.1;
-        
+
         final double x27 = 0.354;
         final double y27 = 0.354;
         final double z27 = -1.354;
-        
+
         final double lc27 = 0.1;
-        
+
         // -----------------------------------------------------------------------//
         // declaration of variables
         // -----------------------------------------------------------------------//
         // variable used to define physical property of some elements (vertex,
         // edge, ...)
         int tag;
-        
+
         // string used to define physical of some elements. It can be equal to
         // "Point", "Line", "Surface" or "Volume"
         final String str = "Point";
         final String str1 = "Line";
         final String str2 = "Surface";
         final String str3 = "Volume";
-        
+
         // creation of GeoFactory used to create vertices, edges, faces, ...
         final GeoFactory gFact = new GeoFactory();
-        
+
         // GVertex of outside tetrahedron
         GVertex v1;
         GVertex v2;
         GVertex v3;
         GVertex v4;
-        
+
         // GVertex of inside tetrahedron
         GVertex v5;
         GVertex v6;
         GVertex v7;
         GVertex v8;
-        
+
         // GVertex of hole between inside tetrahedron and outside tetrahedron
         GVertex v9;
         GVertex v10;
@@ -266,13 +446,13 @@ public class EssaiGmsh_v1 {
         GVertex v14;
         GVertex v15;
         GVertex v16;
-        
+
         // GVertex of curved tetrahedron
         final GVertex v17;
         final GVertex v18;
         final GVertex v19;
         final GVertex v20;
-        
+
         // GVertex of inside sphere
         final GVertex v21;
         final GVertex v22;
@@ -281,7 +461,7 @@ public class EssaiGmsh_v1 {
         final GVertex v25;
         final GVertex v26;
         final GVertex v27;
-        
+
         // GEdge of outside tetrahedorn
         GEdge e1;
         GEdge e2;
@@ -289,7 +469,7 @@ public class EssaiGmsh_v1 {
         GEdge e4;
         GEdge e5;
         GEdge e6;
-        
+
         // GEdge of inside tetrahedron
         GEdge e7;
         GEdge e8;
@@ -297,7 +477,7 @@ public class EssaiGmsh_v1 {
         GEdge e10;
         GEdge e11;
         GEdge e12;
-        
+
         // GEdge of hole between inside tetrahedron and outside tetrahedron
         GEdge e13;
         GEdge e14;
@@ -311,7 +491,7 @@ public class EssaiGmsh_v1 {
         GEdge e22;
         GEdge e23;
         GEdge e24;
-        
+
         // GEdge of curved tetrahedron
         final GEdge e25;
         final GEdge e26;
@@ -319,7 +499,7 @@ public class EssaiGmsh_v1 {
         final GEdge e28;
         final GEdge e29;
         final GEdge e30;
-        
+
         // GEdge of inside sphere
         final GEdge e31;
         final GEdge e32;
@@ -333,31 +513,31 @@ public class EssaiGmsh_v1 {
         final GEdge e40;
         final GEdge e41;
         final GEdge e42;
-        
+
         // GFace of outside tetrahdron
         GFace f1;
         GFace f2;
         GFace f3;
         GFace f4;
-        
+
         // GFace of inside tetrahedron
         GFace f5;
         GFace f6;
         GFace f7;
         GFace f8;
-        
+
         // GFace of hole between inside tetrahderon and outside tetrahedron
         GFace f9;
         GFace f10;
         GFace f11;
         GFace f12;
-        
+
         // GFace of curved tetrahedron
         final GFace f15;
         final GFace f16;
         final GFace f17;
         final GFace f18;
-        
+
         // GFace of inside sphere
         final GFace f19;
         final GFace f20;
@@ -367,19 +547,19 @@ public class EssaiGmsh_v1 {
         final GFace f24;
         final GFace f25;
         final GFace f26;
-        
+
         // vector of Gedge used by definition of faces of outside teterahedon
         final EdgeVector edg1 = new EdgeVector();
         final EdgeVector edg2 = new EdgeVector();
         final EdgeVector edg3 = new EdgeVector();
         final EdgeVector edg4 = new EdgeVector();
-        
+
         // vector of Gedge used by definition of faces of inside teterahedon
         final EdgeVector edg5 = new EdgeVector();
         final EdgeVector edg6 = new EdgeVector();
         final EdgeVector edg7 = new EdgeVector();
         final EdgeVector edg8 = new EdgeVector();
-        
+
         // vector of Gedge used by definition of faces of hole between inside
         // tetrahedron and outside teterahedon
         final EdgeVector edg9 = new EdgeVector();
@@ -388,13 +568,13 @@ public class EssaiGmsh_v1 {
         final EdgeVector edg12 = new EdgeVector();
         final EdgeVector edg13 = new EdgeVector();
         final EdgeVector edg14 = new EdgeVector();
-        
+
         // vector of Gedge used by definition of faces of curved teterahedon
         final EdgeVector edg15 = new EdgeVector();
         final EdgeVector edg16 = new EdgeVector();
         final EdgeVector edg17 = new EdgeVector();
         final EdgeVector edg18 = new EdgeVector();
-        
+
         // vector of Gedge used by definition of faces of inside sphere
         final EdgeVector edg19 = new EdgeVector();
         final EdgeVector edg20 = new EdgeVector();
@@ -404,21 +584,21 @@ public class EssaiGmsh_v1 {
         final EdgeVector edg24 = new EdgeVector();
         final EdgeVector edg25 = new EdgeVector();
         final EdgeVector edg26 = new EdgeVector();
-        
+
         // vector of vector of Gedge used by definition of faces of outside
         // teterahedon
         final EdgeVectorOfVector edges1 = new EdgeVectorOfVector();
         final EdgeVectorOfVector edges2 = new EdgeVectorOfVector();
         final EdgeVectorOfVector edges3 = new EdgeVectorOfVector();
         final EdgeVectorOfVector edges4 = new EdgeVectorOfVector();
-        
+
         // vector of vector of Gedge used by definition of faces of inside
         // teterahedon
         final EdgeVectorOfVector edges5 = new EdgeVectorOfVector();
         final EdgeVectorOfVector edges6 = new EdgeVectorOfVector();
         final EdgeVectorOfVector edges7 = new EdgeVectorOfVector();
         final EdgeVectorOfVector edges8 = new EdgeVectorOfVector();
-        
+
         // vector of vector of Gedge used by definition of faces of hole between
         // inside tetrahedron and outside
         // teterahedon
@@ -426,14 +606,14 @@ public class EssaiGmsh_v1 {
         final EdgeVectorOfVector edges10 = new EdgeVectorOfVector();
         final EdgeVectorOfVector edges11 = new EdgeVectorOfVector();
         final EdgeVectorOfVector edges12 = new EdgeVectorOfVector();
-        
+
         // vector of vector of Gedge used by definition of faces of curved
         // teterahedon
         final EdgeVectorOfVector edges15 = new EdgeVectorOfVector();
         final EdgeVectorOfVector edges16 = new EdgeVectorOfVector();
         final EdgeVectorOfVector edges17 = new EdgeVectorOfVector();
         final EdgeVectorOfVector edges18 = new EdgeVectorOfVector();
-        
+
         // vector of vector of Gedge used by definition of faces of inside
         // sphere
         final EdgeVectorOfVector edges19 = new EdgeVectorOfVector();
@@ -444,12 +624,12 @@ public class EssaiGmsh_v1 {
         final EdgeVectorOfVector edges24 = new EdgeVectorOfVector();
         final EdgeVectorOfVector edges25 = new EdgeVectorOfVector();
         final EdgeVectorOfVector edges26 = new EdgeVectorOfVector();
-        
+
         // outside tetrahedron minus inside tetrahedron
         GRegion r1;
         // GRegion of curved tetrahedre minus inside sphere
         final GRegion r2;
-        
+
         // vector of GFace used to define the volume outside tetrahedron minus
         // inside tetrahedron minus hole between them
         final FaceVector fce1 = new FaceVector();
@@ -457,34 +637,34 @@ public class EssaiGmsh_v1 {
         final FaceVector fce2 = new FaceVector();
         // vector of GFace used to define the volume inside sphere
         final FaceVector fce3 = new FaceVector();
-        
+
         // vector of vector of GFace used to define the volume defined by the
         // outside tetrahedron minus the inside tetrahedron minus the hole
         // between them
         final FaceVectorOfVector faces1 = new FaceVectorOfVector();
-        
+
         // vector of vector of GFace used to define the volume defined by the
         // curved tetrahedron minus the inside sphere
         final FaceVectorOfVector faces2 = new FaceVectorOfVector();
-        
+
         // -----------------------------------------------------------------------//
         // creation of geometric elements
         // -----------------------------------------------------------------------//
-        
+
         // // VERTEX
-        
+
         // creation of vertices of outside tetrahedron
         v1 = gFact.addVertex(m, x1, y1, z1, lc1);
         v2 = gFact.addVertex(m, x2, y2, z2, lc2);
         v3 = gFact.addVertex(m, x3, y3, z3, lc3);
         v4 = gFact.addVertex(m, x4, y4, z4, lc4);
-        
+
         // creation of vertices of inside tetrahedron
         v5 = gFact.addVertex(m, x5, y5, z5, lc5);
         v6 = gFact.addVertex(m, x6, y6, z6, lc6);
         v7 = gFact.addVertex(m, x7, y7, z7, lc7);
         v8 = gFact.addVertex(m, x8, y8, z8, lc8);
-        
+
         // creation of vertices of hole between inside tetrahedron and inside
         // tetrahedron
         v9 = gFact.addVertex(m, x9, y9, z9, lc9);
@@ -495,13 +675,13 @@ public class EssaiGmsh_v1 {
         v14 = gFact.addVertex(m, x14, y14, z14, lc14);
         v15 = gFact.addVertex(m, x15, y15, z15, lc15);
         v16 = gFact.addVertex(m, x16, y16, z16, lc16);
-        
+
         // creation of vertices of curved tetrahedron
         v17 = gFact.addVertex(m, x17, y17, z17, lc17);
         v18 = gFact.addVertex(m, x18, y18, z18, lc18);
         v19 = gFact.addVertex(m, x19, y19, z19, lc19);
         v20 = gFact.addVertex(m, x20, y20, z20, lc20);
-        
+
         // creation of vertices of inside sphere
         v21 = gFact.addVertex(m, x21, y21, z21, lc21);
         v22 = gFact.addVertex(m, x22, y22, z22, lc22);
@@ -510,22 +690,22 @@ public class EssaiGmsh_v1 {
         v25 = gFact.addVertex(m, x25, y25, z25, lc25);
         v26 = gFact.addVertex(m, x26, y26, z26, lc26);
         v27 = gFact.addVertex(m, x27, y27, z27, lc27);
-        
+
         // // definition of "physical property" for all points
-        
+
         // 3 "physicals" for outside tetrahedron minus inside tetrahdron minus
         // hole between them
-        
+
         // compute the first vertex tag
         tag = v1.tag();
-        
+
         // add tag computed to first physical
         WrapGmsh.List_Add(lst1, tag);
-        
+
         // add tag computed to second physical, so the first vertex own 2
         // physicals
         WrapGmsh.List_Add(lst2, tag);
-        
+
         // add tag computed to second physical, so the first vertex own 3
         // physicals
         WrapGmsh.List_Add(lst3, tag);
@@ -589,18 +769,18 @@ public class EssaiGmsh_v1 {
         WrapGmsh.List_Add(lst1, tag);
         WrapGmsh.List_Add(lst2, tag);
         WrapGmsh.List_Add(lst3, tag);
-        
+
         // add all tags defines in the first physical in the GModel
         WrapGmsh.add_physical(str, lst1, m.getFileName());
-        
+
         WrapGmsh.add_physical(str, lst2, m.getFileName());
         WrapGmsh.add_physical(str, lst3, m.getFileName());
-        
+
         // delete what is in the List
         WrapGmsh.List_Reset(lst1);
         WrapGmsh.List_Reset(lst2);
         WrapGmsh.List_Reset(lst3);
-        
+
         // same action about curved tetrahedron minus inside sphere
         tag = v17.tag();
         WrapGmsh.List_Add(lst4, tag);
@@ -622,12 +802,12 @@ public class EssaiGmsh_v1 {
         WrapGmsh.List_Add(lst4, tag);
         tag = v26.tag();
         WrapGmsh.List_Add(lst4, tag);
-        
+
         WrapGmsh.add_physical(str, lst4, m.getFileName());
         WrapGmsh.List_Reset(lst4);
-        
+
         // //LINE
-        
+
         // creation of edges of outside tetrahedron
         e1 = gFact.addLine(m, v2, v1);
         e2 = gFact.addLine(m, v3, v1);
@@ -635,7 +815,7 @@ public class EssaiGmsh_v1 {
         e4 = gFact.addLine(m, v3, v2);
         e5 = gFact.addLine(m, v2, v4);
         e6 = gFact.addLine(m, v4, v3);
-        
+
         // creation of edges of inside tetrahedron
         e7 = gFact.addLine(m, v5, v6);
         e8 = gFact.addLine(m, v5, v8);
@@ -643,7 +823,7 @@ public class EssaiGmsh_v1 {
         e10 = gFact.addLine(m, v6, v7);
         e11 = gFact.addLine(m, v7, v8);
         e12 = gFact.addLine(m, v6, v8);
-        
+
         // creation of edges of hole between outside tetrahedron and insde
         // tetrahedron
         e13 = gFact.addLine(m, v9, v10);
@@ -658,17 +838,17 @@ public class EssaiGmsh_v1 {
         e22 = gFact.addLine(m, v13, v14);
         e23 = gFact.addLine(m, v14, v15);
         e24 = gFact.addLine(m, v15, v16);
-        
+
         // creation of edges of curved tetrahedron
         e25 = gFact.addLine(m, v18, v20);
         e26 = gFact.addLine(m, v19, v20);
-        
+
         // define a curved between v18 and v19, and v20 is the center
         e27 = gFact.addCircleArc(m, v18, v20, v19);
         e28 = gFact.addLine(m, v17, v20);
         e29 = gFact.addCircleArc(m, v17, v20, v19);
         e30 = gFact.addCircleArc(m, v17, v20, v18);
-        
+
         // creation of edges of inside tetrahedron
         e31 = gFact.addCircleArc(m, v21, v27, v25);
         e32 = gFact.addCircleArc(m, v22, v27, v25);
@@ -682,12 +862,12 @@ public class EssaiGmsh_v1 {
         e40 = gFact.addCircleArc(m, v21, v27, v24);
         e41 = gFact.addCircleArc(m, v23, v27, v24);
         e42 = gFact.addCircleArc(m, v23, v27, v22);
-        
+
         // // definition of physical for edges
-        
+
         // definition of 3 physicals for outside tetrahedron minus inside
         // tetrahedron minus hole between them
-        
+
         tag = e1.tag();
         WrapGmsh.List_Add(lst1, tag);
         WrapGmsh.List_Add(lst2, tag);
@@ -784,16 +964,16 @@ public class EssaiGmsh_v1 {
         WrapGmsh.List_Add(lst1, tag);
         WrapGmsh.List_Add(lst2, tag);
         WrapGmsh.List_Add(lst3, tag);
-        
+
         WrapGmsh.add_physical(str1, lst1, m.getFileName());
         WrapGmsh.add_physical(str1, lst2, m.getFileName());
         WrapGmsh.add_physical(str1, lst3, m.getFileName());
         WrapGmsh.List_Reset(lst1);
         WrapGmsh.List_Reset(lst2);
         WrapGmsh.List_Reset(lst3);
-        
+
         // same actions about curved tetrahedron minus inside sphere
-        
+
         tag = e25.tag();
         WrapGmsh.List_Add(lst4, tag);
         tag = e26.tag();
@@ -830,56 +1010,56 @@ public class EssaiGmsh_v1 {
         WrapGmsh.List_Add(lst4, tag);
         tag = e42.tag();
         WrapGmsh.List_Add(lst4, tag);
-        
+
         WrapGmsh.add_physical(str1, lst4, m.getFileName());
         WrapGmsh.List_Reset(lst4);
-        
+
         // //FACE
         // // A face is defined by a vector of vector of edges because it is
         // possible to define faces with holes.
-        
+
         // --------------------
         // definition of first face of outside tetrahedron
         edg1.add(e2);
         edg1.add(e3);
         edg1.add(e6);
-        
+
         // definition of second face of outside tetrahedron
         edg2.add(e2);
         edg2.add(e4);
         edg2.add(e1);
-        
+
         // definition of third face of outside tetrahedron
         edg3.add(e4);
         edg3.add(e5);
         edg3.add(e6);
-        
+
         // definition of fourth face of outside tetrahedron
         edg4.add(e1);
         edg4.add(e5);
         edg4.add(e3);
-        
+
         // --------------------
         // definition of first face of inside tetrahedron
         edg5.add(e8);
         edg5.add(e9);
         edg5.add(e11);
-        
+
         // definition of second face of inside tetrahedron
         edg6.add(e10);
         edg6.add(e11);
         edg6.add(e12);
-        
+
         // definition of third face of inside tetrahedron
         edg7.add(e7);
         edg7.add(e9);
         edg7.add(e10);
-        
+
         // definition of fourth face of inside tetrahedron
         edg8.add(e7);
         edg8.add(e8);
         edg8.add(e12);
-        
+
         // --------------------
         // definition of first face of hole between inside tetrahdron and
         // outside tetrahedron (it is a cube)
@@ -887,105 +1067,105 @@ public class EssaiGmsh_v1 {
         edg9.add(e13);
         edg9.add(e14);
         edg9.add(e15);
-        
+
         // definition of second face of hole between inside tetrahdron and
         // outside tetrahedron (it is a cube)
         edg10.add(e16);
         edg10.add(e17);
         edg10.add(e20);
         edg10.add(e21);
-        
+
         // definition of third face of hole between inside tetrahdron and
         // outside tetrahedron (it is a cube)
         edg11.add(e15);
         edg11.add(e17);
         edg11.add(e18);
         edg11.add(e24);
-        
+
         // definition of fourth face of hole between inside tetrahdron and
         // outside tetrahedron (it is a cube)
         edg12.add(e14);
         edg12.add(e18);
         edg12.add(e19);
         edg12.add(e23);
-        
+
         // definition of fifth face of hole between inside tetrahdron and
         // outside tetrahedron (it is a cube)
         edg13.add(e13);
         edg13.add(e19);
         edg13.add(e20);
         edg13.add(e22);
-        
+
         // definition of sixth face of hole between inside tetrahdron and
         // outside tetrahedron (it is a cube)
         edg14.add(e21);
         edg14.add(e22);
         edg14.add(e23);
         edg14.add(e24);
-        
+
         // --------------------
         // definition of first face of curved tetrahdron
         edg15.add(e25);
         edg15.add(e28);
         edg15.add(e30);
-        
+
         // definition of second face of curved tetrahdron
         edg16.add(e26);
         edg16.add(e28);
         edg16.add(e29);
-        
+
         // definition of third face of curved tetrahdron
         edg17.add(e25);
         edg17.add(e26);
         edg17.add(e27);
-        
+
         // definition of fourth face of curved tetrahdron
         edg18.add(e27);
         edg18.add(e29);
         edg18.add(e30);
-        
+
         // --------------------
         // definition of first face of inside tetrahdron
         edg19.add(e31);
         edg19.add(e32);
         edg19.add(e39);
-        
+
         // definition of second face of inside tetrahdron
         edg20.add(e32);
         edg20.add(e33);
         edg20.add(e42);
-        
+
         // definition of third face of inside tetrahdron
         edg21.add(e33);
         edg21.add(e34);
         edg21.add(e41);
-        
+
         // definition of fourth face of inside tetrahdron
         edg22.add(e34);
         edg22.add(e31);
         edg22.add(e40);
-        
+
         // --------------------------
         // definition of first face of inside sphere
         edg23.add(e39);
         edg23.add(e35);
         edg23.add(e36);
-        
+
         // definition of second face of inside sphere
         edg24.add(e35);
         edg24.add(e38);
         edg24.add(e40);
-        
+
         // definition of third face of inside sphere
         edg25.add(e37);
         edg25.add(e38);
         edg25.add(e41);
-        
+
         // definition of fourth face of inside sphere
         edg26.add(e36);
         edg26.add(e37);
         edg26.add(e42);
-        
+
         // --------------------
         // definition of first face with hole of outside tetrahedron
         edges1.add(edg1);
@@ -996,7 +1176,7 @@ public class EssaiGmsh_v1 {
         edges3.add(edg3);
         // definition of fourth face of outside tetrahedron
         edges4.add(edg4);
-        
+
         // --------------------
         // definition of first face with hole of inside tetrahedron
         edges5.add(edg5);
@@ -1007,7 +1187,7 @@ public class EssaiGmsh_v1 {
         edges7.add(edg7);
         // definition of fourth face of inside tetrahedron
         edges8.add(edg8);
-        
+
         // --------------------
         // definition of first face of hole between outside tetrahdron and
         // inside tetrahdron
@@ -1021,7 +1201,7 @@ public class EssaiGmsh_v1 {
         // definition of fourth face of hole between outside tetrahdron and
         // inside tetrahdron
         edges12.add(edg13);
-        
+
         // --------------------
         // definition of first face of curved tetrahedron
         edges15.add(edg15);
@@ -1031,7 +1211,7 @@ public class EssaiGmsh_v1 {
         edges17.add(edg17);
         // definition of fourth face of curved tetrahedron
         edges18.add(edg18);
-        
+
         // --------------------
         // definition of the first face of inside sphere
         edges19.add(edg19);
@@ -1049,41 +1229,41 @@ public class EssaiGmsh_v1 {
         edges25.add(edg25);
         // definition of the eighth face of inside sphere
         edges26.add(edg26);
-        
+
         // creation of faces of outside tetrahedron
         f1 = gFact.addPlanarFace(m, edges1);
         f2 = gFact.addPlanarFace(m, edges2);
         f3 = gFact.addPlanarFace(m, edges3);
         f4 = gFact.addPlanarFace(m, edges4);
-        
+
         // creation of faces of inside tetrahedron
         f5 = gFact.addPlanarFace(m, edges5);
         f6 = gFact.addPlanarFace(m, edges6);
         f7 = gFact.addPlanarFace(m, edges7);
         f8 = gFact.addPlanarFace(m, edges8);
-        
+
         // creation of faces of hole betwxeen inside and outside tetrahdron
         f9 = gFact.addPlanarFace(m, edges9);
         f10 = gFact.addPlanarFace(m, edges10);
         f11 = gFact.addPlanarFace(m, edges11);
         f12 = gFact.addPlanarFace(m, edges12);
-        
+
         // creation of faces of curved tetrahedron
         f15 = gFact.addPlanarFace(m, edges15);
         f16 = gFact.addPlanarFace(m, edges16);
         f17 = gFact.addPlanarFace(m, edges17);
-	final FaceVector ruledFace1=gFact.addRuledFaces(m, edges18);
+        final FaceVector ruledFace1 = gFact.addRuledFaces(m, edges18);
         f18 = ruledFace1.get(0);
-        
+
         // creation of faces of curved tetrahedron
-	final FaceVector ruledFace2=gFact.addRuledFaces(m, edges19);
-	final FaceVector ruledFace3=gFact.addRuledFaces(m, edges20);
-	final FaceVector ruledFace4=gFact.addRuledFaces(m, edges21);
-	final FaceVector ruledFace5=gFact.addRuledFaces(m, edges22);
-	final FaceVector ruledFace6=gFact.addRuledFaces(m, edges23);
-	final FaceVector ruledFace7=gFact.addRuledFaces(m, edges24);
-	final FaceVector ruledFace8=gFact.addRuledFaces(m, edges25);
-	final FaceVector ruledFace9=gFact.addRuledFaces(m, edges26);
+        final FaceVector ruledFace2 = gFact.addRuledFaces(m, edges19);
+        final FaceVector ruledFace3 = gFact.addRuledFaces(m, edges20);
+        final FaceVector ruledFace4 = gFact.addRuledFaces(m, edges21);
+        final FaceVector ruledFace5 = gFact.addRuledFaces(m, edges22);
+        final FaceVector ruledFace6 = gFact.addRuledFaces(m, edges23);
+        final FaceVector ruledFace7 = gFact.addRuledFaces(m, edges24);
+        final FaceVector ruledFace8 = gFact.addRuledFaces(m, edges25);
+        final FaceVector ruledFace9 = gFact.addRuledFaces(m, edges26);
         f19 = ruledFace2.get(0);
         f20 = ruledFace3.get(0);
         f21 = ruledFace4.get(0);
@@ -1092,12 +1272,12 @@ public class EssaiGmsh_v1 {
         f24 = ruledFace7.get(0);
         f25 = ruledFace8.get(0);
         f26 = ruledFace9.get(0);
-        
+
         // //definition of physical for faces
-        
+
         // 3 physicals for the outside tetraherdon minus inside tetrahdron minus
         // hole between them
-        
+
         tag = f1.tag();
         WrapGmsh.List_Add(lst1, tag);
         WrapGmsh.List_Add(lst2, tag);
@@ -1146,16 +1326,16 @@ public class EssaiGmsh_v1 {
         WrapGmsh.List_Add(lst1, tag);
         WrapGmsh.List_Add(lst2, tag);
         WrapGmsh.List_Add(lst3, tag);
-        
+
         WrapGmsh.add_physical(str2, lst1, m.getFileName());
         WrapGmsh.add_physical(str2, lst2, m.getFileName());
         WrapGmsh.add_physical(str2, lst3, m.getFileName());
         WrapGmsh.List_Reset(lst1);
         WrapGmsh.List_Reset(lst2);
         WrapGmsh.List_Reset(lst3);
-        
+
         // same actions about curved tetrahedron minus inside sphere
-        
+
         tag = f15.tag();
         WrapGmsh.List_Add(lst4, tag);
         tag = f16.tag();
@@ -1180,37 +1360,37 @@ public class EssaiGmsh_v1 {
         WrapGmsh.List_Add(lst4, tag);
         tag = f26.tag();
         WrapGmsh.List_Add(lst4, tag);
-        
+
         WrapGmsh.add_physical(str2, lst4, m.getFileName());
         WrapGmsh.List_Reset(lst4);
-        
+
         // //VOLUME
         // //same approach as creation of faces but in a superior dimension
-        
+
         // outside tetraheron
         fce1.add(f1);
         fce1.add(f2);
         fce1.add(f3);
         fce1.add(f4);
-        
+
         // inside tetrahedron
         fce1.add(f5);
         fce1.add(f6);
         fce1.add(f7);
         fce1.add(f8);
-        
+
         // hole between outside tetrahedron and inside tetrahdron
         fce1.add(f9);
         fce1.add(f10);
         fce1.add(f11);
         fce1.add(f12);
-        
+
         // curved tetrahdron
         fce2.add(f15);
         fce2.add(f16);
         fce2.add(f17);
         fce2.add(f18);
-        
+
         // inside sphere
         fce3.add(f19);
         fce3.add(f20);
@@ -1220,191 +1400,212 @@ public class EssaiGmsh_v1 {
         fce3.add(f24);
         fce3.add(f25);
         fce3.add(f26);
-        
+
         // outside tetrahedron minus inside tetrahedron minus hole between them
         faces1.add(fce1);
-        
+
         // // curved tetrahedron minus inside sphere
         faces2.add(fce2);
         faces2.add(fce3);
-        
+
         // outside tetrahedron minus inside tetrahedron minus hole between them
         r1 = gFact.addVolume(m, faces1);
         // // curved tetrahedron minus inside sphere
         r2 = gFact.addVolume(m, faces2);
-        
+
         // //definition of physical for volumes
-        
+
         // 3 "physicals" for the outside tetrhedron minus the inside tetrahdron
         // minus the hole between them.
         tag = r1.tag();
         WrapGmsh.List_Add(lst1, tag);
         WrapGmsh.List_Add(lst2, tag);
         WrapGmsh.List_Add(lst3, tag);
-        
+
         WrapGmsh.add_physical(str3, lst1, m.getFileName());
         WrapGmsh.add_physical(str3, lst2, m.getFileName());
         WrapGmsh.add_physical(str3, lst3, m.getFileName());
         WrapGmsh.List_Reset(lst1);
         WrapGmsh.List_Reset(lst2);
         WrapGmsh.List_Reset(lst3);
-        
+
         // // 1 "physical" for curved tetrahedron minus the inside sphere
         //
         tag = r2.tag();
         WrapGmsh.List_Add(lst4, tag);
-        
+
         WrapGmsh.add_physical(str3, lst4, m.getFileName());
         WrapGmsh.List_Reset(lst4);
-        
-        // write .geo file which contains the geomtry defined before
-        m.writeGEO("test.geo");
-        
-        // mesh the geometry defined in the GModel m
-        m.mesh(3);
-        
-        // write .msh file which contains informations about mesh in GModel m.
-        m.writeMSH("meshtest.msh");
-        
-        // read mesh elements produced by m.mesh(3)
-        System.out.println("$MeshFormat");
-        System.out.println("2.2 0 8");
-        System.out.println("$EndMeshFormat");
-        System.out.println("$Nodes");
-        // boolean which indicates if all elements are meshed
-        final boolean all = m.noPhysicalGroups();
-        // number of nodes which is defined in mesh
-        System.out.println(m.indexMeshVertices(all, 0));
-        
-        final GEntityVector entities = new GEntityVector();
-        m.getEntities(entities);
-        for (int i = 0; i < entities.size(); i++) {
-            for (int j = 0; j < entities.get(i).getMesh_vertices().size(); j++) {
-                final int index = entities.get(i).getMesh_vertices().get(j).getIndex();
-                
-                // if index <0 then there is not physical
-                if (index >= 0) {
-                    final double x = entities.get(i).getMesh_vertices().get(j).x();
-                    final double y = entities.get(i).getMesh_vertices().get(j).y();
-                    final double z = entities.get(i).getMesh_vertices().get(j).z();
-                    
-                    System.out.println(index + " " + x + " " + y + " " + z);
-                    
-                }
-                
-            }
-        }
-        
-        System.out.println("$EndNodes");
-        System.out.println("$Elements");
-        // number of elements which is defined in mesh
-        //System.out.println(WrapGmsh.getNumElementsMSH(m, all, 0));
-        
-        int iter = 1;
-        
-        // point
-        final GVertexVector bindingsGetVertices = m.bindingsGetVertices();
-        for (int indexVertex = 0; indexVertex < bindingsGetVertices.size(); indexVertex++) {
-            final GVertex it = bindingsGetVertices.get(indexVertex);
-            for (int k = 0; k < it.getPoints().size(); k++) {
-                for (int j = 0; j < it.getPhysicals().size(); j++) {
-                    final int physical = it.getPhysicals().get(j);
-                    
-                    final MPoint mPt = it.getPoints().get(k);
-                    
-                    final int type = mPt.getTypeForMSH();
-                    
-                    final IntVector verts = new IntVector();
-                    
-                    mPt.getVerticesIdForMSH(verts);
-                    
-                    // 1 is the number of physical which is associated with the
-                    // element.
-                    // there is always 1 but it is possible to write several
-                    // times the same line but with a different physical. This
-                    // is the logical used by gmsh but in reality it is 2
-                    // because there is the physical AND the elemnentary. For
-                    // more information see the gmsh documentation
-                    System.out.println(iter + " " + type + " 1 " + physical + " " + verts.get(0));
-                    
-                    iter++;
-                }
-            }
-        }
-        
-        // edges
-        
-        final EdgeVector bindingsGetEdges = m.bindingsGetEdges();
-        for (int indexEdges = 0; indexEdges < bindingsGetEdges.size(); indexEdges++) {
-            final GEdge it = bindingsGetEdges.get(indexEdges);
-            for (int j = 0; j < it.getLines().size(); j++) {
-                for (int k = 0; k < it.getPhysicals().size(); k++) {
-                    final int physical = it.getPhysicals().get(k);
-                    
-                    final MLine mLine = it.getLines().get(j);
-                    
-                    final int type = mLine.getTypeForMSH();
-                    
-                    final IntVector verts = new IntVector();
-                    
-                    mLine.getVerticesIdForMSH(verts);
-                    System.out.println(iter + " " + type + " 1 " + physical + " " + verts.get(0) + " " + verts.get(1));
-                    
-                    iter++;
-                }
-            }
-        }
-        
-        // triangles
-        
-        final FaceVector bindingsGetFaces = m.bindingsGetFaces();
-        for (int indexFace = 0; indexFace < bindingsGetFaces.size(); indexFace++) {
-            final GFace it = bindingsGetFaces.get(indexFace);
-            for (int j = 0; j < it.getTriangles().size(); j++) {
-                for (int k = 0; k < it.getPhysicals().size(); k++) {
-                    final int physical = it.getPhysicals().get(k);
-                    
-                    final MTriangle mTriangle = it.getTriangles().get(j);
-                    
-                    final int type = mTriangle.getTypeForMSH();
-                    final IntVector verts = new IntVector();
-                    mTriangle.getVerticesIdForMSH(verts);
-                    System.out.println(iter + " " + type + " 1 " + physical + " " + verts.get(0) + " " + verts.get(1) + " " + verts.get(2));
-                    
-                    iter++;
-                    
-                }
-            }
-        }
-        
-        // tetrahedron
-        
-        final RegionVector bindingsGetRegions = m.bindingsGetRegions();
-        
-        for (int indexRegion = 0; indexRegion < bindingsGetRegions.size(); indexRegion++) {
-            final GRegion it = bindingsGetRegions.get(indexRegion);
-            for (int j = 0; j < it.getTetrahedra().size(); j++) {
-                for (int k = 0; k < it.getPhysicals().size(); k++) {
-                    final int physical = it.getPhysicals().get(k);
-                    
-                    final MTetrahedron mTetrahedron = it.getTetrahedra().get(j);
-                    
-                    final int type = mTetrahedron.getTypeForMSH();
-                    
-                    final IntVector verts = new IntVector();
-                    mTetrahedron.getVerticesIdForMSH(verts);
-                    System.out
-                            .println(iter + " " + type + " 1 " + physical + " " + verts.get(0) + " " + verts.get(1) + " " + verts.get(2) + " " + verts.get(3));
-                    
-                    iter++;
-                }
-            }
-        }
-        System.out.println("$EndElements");
-        
-        WrapGmsh.GmshFinalize();
-        
+
+	//free memory
+        lst1.delete();
+        lst2.delete();
+        lst3.delete();
+        lst4.delete();
+
+        gFact.delete();
+
+        v1.delete();
+        v2.delete();
+        v3.delete();
+        v4.delete();
+        v5.delete();
+        v6.delete();
+        v7.delete();
+        v8.delete();
+        v9.delete();
+        v10.delete();
+        v11.delete();
+        v12.delete();
+        v13.delete();
+        v14.delete();
+        v15.delete();
+        v16.delete();
+        v17.delete();
+        v18.delete();
+        v19.delete();
+        v20.delete();
+        v21.delete();
+        v22.delete();
+        v23.delete();
+        v24.delete();
+        v25.delete();
+        v26.delete();
+        v27.delete();
+
+        e1.delete();
+        e2.delete();
+        e3.delete();
+        e4.delete();
+        e5.delete();
+        e6.delete();
+        e7.delete();
+        e8.delete();
+        e9.delete();
+        e10.delete();
+        e11.delete();
+        e12.delete();
+        e13.delete();
+        e14.delete();
+        e15.delete();
+        e16.delete();
+        e17.delete();
+        e18.delete();
+        e19.delete();
+        e20.delete();
+        e21.delete();
+        e22.delete();
+        e23.delete();
+        e24.delete();
+        e25.delete();
+        e26.delete();
+        e27.delete();
+        e28.delete();
+        e29.delete();
+        e30.delete();
+        e31.delete();
+        e32.delete();
+        e33.delete();
+        e34.delete();
+        e35.delete();
+        e36.delete();
+        e37.delete();
+        e38.delete();
+        e39.delete();
+        e40.delete();
+        e41.delete();
+        e42.delete();
+
+        f1.delete();
+        f2.delete();
+        f3.delete();
+        f4.delete();
+        f5.delete();
+        f6.delete();
+        f7.delete();
+        f8.delete();
+        f9.delete();
+        f10.delete();
+        f11.delete();
+        f12.delete();
+        f15.delete();
+        f16.delete();
+        f17.delete();
+        f18.delete();
+        f19.delete();
+        f20.delete();
+        f21.delete();
+        f22.delete();
+        f23.delete();
+        f24.delete();
+        f25.delete();
+        f26.delete();
+
+        edg1.delete();
+        edg2.delete();
+        edg3.delete();
+        edg4.delete();
+        edg5.delete();
+        edg6.delete();
+        edg7.delete();
+        edg8.delete();
+        edg9.delete();
+        edg10.delete();
+        edg11.delete();
+        edg12.delete();
+        edg13.delete();
+        edg14.delete();
+        edg15.delete();
+        edg16.delete();
+        edg17.delete();
+        edg18.delete();
+        edg19.delete();
+        edg20.delete();
+        edg21.delete();
+        edg22.delete();
+        edg23.delete();
+        edg24.delete();
+        edg25.delete();
+        edg26.delete();
+
+        edges1.delete();
+        edges2.delete();
+        edges3.delete();
+        edges4.delete();
+        edges5.delete();
+        edges6.delete();
+        edges7.delete();
+        edges8.delete();
+        edges9.delete();
+        edges10.delete();
+        edges11.delete();
+        edges12.delete();
+        edges15.delete();
+        edges16.delete();
+        edges17.delete();
+        edges18.delete();
+        edges19.delete();
+        edges20.delete();
+        edges21.delete();
+        edges22.delete();
+        edges23.delete();
+        edges24.delete();
+        edges25.delete();
+        edges26.delete();
+
+        r1.delete();
+        r2.delete();
+
+        fce1.delete();
+        fce2.delete();
+        fce3.delete();
+
+        faces1.delete();
+
+        faces2.delete();
+
+        return m;
     }
-    
 }
 
+
diff --git a/wrappers/java/WrappingJava/src/main/java/com/artenum/sample/EssaiGmsh_v2.java b/wrappers/java/WrappingJava/src/main/java/com/artenum/sample/EssaiGmsh_v2.java
index 190f63f4f2559d82bebd09d7c4ada58dac674857..c39651bc32aafb78be071d01dd393868fb7e44f0 100755
--- a/wrappers/java/WrappingJava/src/main/java/com/artenum/sample/EssaiGmsh_v2.java
+++ b/wrappers/java/WrappingJava/src/main/java/com/artenum/sample/EssaiGmsh_v2.java
@@ -51,6 +51,10 @@ public class EssaiGmsh_v2 {
         
         // write .msh file which contains informations about mesh in GModel m.
         m1.writeMSH("t5.msh");
+
+	// free memory
+	m1.deleteMesh();
+        m1.delete();
         
         WrapGmsh.GmshFinalize();