diff --git a/Common/CommandLine.cpp b/Common/CommandLine.cpp
index 925e484edc101bf294db63ce01d69773e8f633b2..73011a72e12b1bbda025caff409cdd0a5dcb6c05 100644
--- a/Common/CommandLine.cpp
+++ b/Common/CommandLine.cpp
@@ -492,11 +492,17 @@ void GetOptions(int argc, char *argv[])
         int j;
         int radical;
         double max;
+        double xMax;
+        double yMax;
+        double zMax;
         std::vector<double> properties;
         if(argv[i]){
           std::ifstream file(argv[i++]);
           file >> max;
           file >> radical;
+          file >> xMax;
+          file >> yMax;
+          file >> zMax;
           properties.clear();
           properties.resize(4*max);
           for(j=0;j<max;j++){
@@ -506,10 +512,10 @@ void GetOptions(int argc, char *argv[])
             file >> properties[4*j+3];
           }
           voroMetal3D vm1;
-          vm1.execute(properties,radical,0.1);
+          vm1.execute(properties,radical,0.1,xMax,yMax,zMax);
           GModel::current()->load("MicrostructurePolycrystal3D.geo");
           voroMetal3D vm2;
-          vm2.correspondance(0.00001);
+          vm2.correspondance(0.00001,xMax,yMax,zMax);
         }
       }
 #endif
diff --git a/Mesh/meshGFace.cpp b/Mesh/meshGFace.cpp
index 91ee53ec0be22cfb6e9849176ccd8d9c57bd9fbd..1590d0d43de714a4077612fcdec4130fec021159 100644
--- a/Mesh/meshGFace.cpp
+++ b/Mesh/meshGFace.cpp
@@ -175,7 +175,7 @@ static void copyMesh(GFace *source, GFace *target)
     else {
       SVector3 DX2 = DX - SVector3 (vt->x() - vs->x(), vt->y() - vs->y(),
                                     vt->z() - vs->z());
-      if (DX2.norm() > DX.norm() * 1.e-8) translation = false;
+      if (DX2.norm() > DX.norm() * 1.e-5) translation = false;
     }
     count ++;
   }
diff --git a/Mesh/periodical.cpp b/Mesh/periodical.cpp
index 2c4f943b4173497e3b43d48617481cccae76f15d..de07870ce1470c637749b302dc9a6826ee1036dd 100644
--- a/Mesh/periodical.cpp
+++ b/Mesh/periodical.cpp
@@ -105,10 +105,13 @@ void voroMetal3D::execute(GRegion* gr,double h){
     radii.push_back(1.0);
   }
 
-  execute(vertices2,radii,0,h);
+  double xMax = 1.0;
+  double yMax = 1.0;
+  double zMax = 1.0;
+  execute(vertices2,radii,0,h,xMax,yMax,zMax);
 }
 
-void voroMetal3D::execute(std::vector<double>& properties,int radical,double h){
+void voroMetal3D::execute(std::vector<double>& properties,int radical,double h, double xMax, double yMax, double zMax){
   unsigned int i;
   std::vector<SPoint3> vertices;
   std::vector<double> radii;
@@ -121,10 +124,10 @@ void voroMetal3D::execute(std::vector<double>& properties,int radical,double h){
     radii.push_back(properties[4*i+3]);
   }
 
-  execute(vertices,radii,radical,h);
+  execute(vertices,radii,radical,h,xMax,yMax,zMax);
 }
 
-void voroMetal3D::execute(std::vector<SPoint3>& vertices,std::vector<double>& radii,int radical,double h){
+void voroMetal3D::execute(std::vector<SPoint3>& vertices,std::vector<double>& radii,int radical,double h, double xMax, double yMax, double zMax){
 #if defined(HAVE_VORO3D)
   unsigned int i;
   unsigned int j;
@@ -173,7 +176,10 @@ void voroMetal3D::execute(std::vector<SPoint3>& vertices,std::vector<double>& ra
 
   delta = 0.2*(max_x - min_x);
   min_x=min_y=min_z = 0;
-  max_x=max_y=max_z = 1;
+//  max_x=max_y=max_z = 1;
+  max_x = xMax;
+  max_y = yMax;
+  max_z = zMax;
   delta = 0;
 
   container contA(min_x-delta,max_x+delta,min_y-delta,max_y+delta,min_z-delta,max_z+delta,6,6,6,true,true,true,vertices.size());
@@ -444,7 +450,7 @@ void voroMetal3D::print_geo_face_loop(int index,std::vector<int>& indices,std::o
   file << "};\n";
 }
 
-void voroMetal3D::correspondance(double e){
+void voroMetal3D::correspondance(double e, double xMax, double yMax, double zMax){
   unsigned int i;
   unsigned int j;
   int count;
@@ -555,7 +561,7 @@ void voroMetal3D::correspondance(double e){
       delta_y = fabs(p2.y()-p1.y());
       delta_z = fabs(p2.z()-p1.z());
 
-      flag = correspondance(delta_x,delta_y,delta_z,e,val);
+      flag = correspondance(delta_x,delta_y,delta_z,e,val,xMax,yMax,zMax);
 
       if(flag){
         it5 = markings.find(faces[i]);
@@ -748,11 +754,11 @@ void voroMetal3D::correspondance(double e){
         v3 = (*it8)->getBeginVertex();
         v4 = (*it8)->getEndVertex();
 
-        correspondance(fabs(v3->x()-v1->x()),fabs(v3->y()-v1->y()),fabs(v3->z()-v1->z()),e,categories[i],flag1);
-        correspondance(fabs(v4->x()-v2->x()),fabs(v4->y()-v2->y()),fabs(v4->z()-v2->z()),e,categories[i],flag2);
+        correspondance(fabs(v3->x()-v1->x()),fabs(v3->y()-v1->y()),fabs(v3->z()-v1->z()),e,categories[i],flag1,xMax,yMax,zMax);
+        correspondance(fabs(v4->x()-v2->x()),fabs(v4->y()-v2->y()),fabs(v4->z()-v2->z()),e,categories[i],flag2,xMax,yMax,zMax);
 
-        correspondance(fabs(v4->x()-v1->x()),fabs(v4->y()-v1->y()),fabs(v4->z()-v1->z()),e,categories[i],flag3);
-        correspondance(fabs(v3->x()-v2->x()),fabs(v3->y()-v2->y()),fabs(v3->z()-v2->z()),e,categories[i],flag4);
+        correspondance(fabs(v4->x()-v1->x()),fabs(v4->y()-v1->y()),fabs(v4->z()-v1->z()),e,categories[i],flag3,xMax,yMax,zMax);
+        correspondance(fabs(v3->x()-v2->x()),fabs(v3->y()-v2->y()),fabs(v3->z()-v2->z()),e,categories[i],flag4,xMax,yMax,zMax);
 
         if(flag1 && flag2){
           if(phase==1){
@@ -832,39 +838,39 @@ void voroMetal3D::correspondance(double e){
   file4 << "};\n";
 }
 
-bool voroMetal3D::correspondance(double delta_x,double delta_y,double delta_z,double e,int& val){
+bool voroMetal3D::correspondance(double delta_x,double delta_y,double delta_z,double e,int& val,double xMax,double yMax,double zMax){
   bool flag;
 
   flag = 0;
   val = 1000;
 
-  if(equal(delta_x,1.0,e) && equal(delta_y,0.0,e) && equal(delta_z,0.0,e)){
+  if(equal(delta_x,xMax,e) && equal(delta_y,0.0,e) && equal(delta_z,0.0,e)){
     flag = 1;
     val = 1;
   }
-  if(equal(delta_x,0.0,e) && equal(delta_y,1.0,e) && equal(delta_z,0.0,e)){
+  if(equal(delta_x,0.0,e) && equal(delta_y,yMax,e) && equal(delta_z,0.0,e)){
     flag = 1;
     val = 2;
   }
-  if(equal(delta_x,0.0,e) && equal(delta_y,0.0,e) && equal(delta_z,1.0,e)){
+  if(equal(delta_x,0.0,e) && equal(delta_y,0.0,e) && equal(delta_z,zMax,e)){
     flag = 1;
     val = 3;
   }
 
-  if(equal(delta_x,1.0,e) && equal(delta_y,1.0,e) && equal(delta_z,0.0,e)){
+  if(equal(delta_x,xMax,e) && equal(delta_y,yMax,e) && equal(delta_z,0.0,e)){
     flag = 1;
     val = 4;
   }
-  if(equal(delta_x,0.0,e) && equal(delta_y,1.0,e) && equal(delta_z,1.0,e)){
+  if(equal(delta_x,0.0,e) && equal(delta_y,yMax,e) && equal(delta_z,zMax,e)){
     flag = 1;
     val = 5;
   }
-  if(equal(delta_x,1.0,e) && equal(delta_y,0.0,e) && equal(delta_z,1.0,e)){
+  if(equal(delta_x,xMax,e) && equal(delta_y,0.0,e) && equal(delta_z,zMax,e)){
     flag = 1;
     val = 6;
   }
 
-  if(equal(delta_x,1.0,e) && equal(delta_y,1.0,e) && equal(delta_z,1.0,e)){
+  if(equal(delta_x,xMax,e) && equal(delta_y,yMax,e) && equal(delta_z,zMax,e)){
     flag = 1;
     val = 7;
   }
@@ -872,30 +878,30 @@ bool voroMetal3D::correspondance(double delta_x,double delta_y,double delta_z,do
   return flag;
 }
 
-void voroMetal3D::correspondance(double delta_x,double delta_y,double delta_z,double e,int val,bool& flag){
+void voroMetal3D::correspondance(double delta_x,double delta_y,double delta_z,double e,int val,bool& flag,double xMax,double yMax,double zMax){
   flag = 0;
 
-  if(val==1 && equal(delta_x,1.0,e) && equal(delta_y,0.0,e) && equal(delta_z,0.0,e)){
+  if(val==1 && equal(delta_x,xMax,e) && equal(delta_y,0.0,e) && equal(delta_z,0.0,e)){
     flag = 1;
   }
-  if(val==2 && equal(delta_x,0.0,e) && equal(delta_y,1.0,e) && equal(delta_z,0.0,e)){
+  if(val==2 && equal(delta_x,0.0,e) && equal(delta_y,yMax,e) && equal(delta_z,0.0,e)){
     flag = 1;
   }
-  if(val==3 && equal(delta_x,0.0,e) && equal(delta_y,0.0,e) && equal(delta_z,1.0,e)){
+  if(val==3 && equal(delta_x,0.0,e) && equal(delta_y,0.0,e) && equal(delta_z,zMax,e)){
     flag = 1;
   }
 
-  if(val==4 && equal(delta_x,1.0,e) && equal(delta_y,1.0,e) && equal(delta_z,0.0,e)){
+  if(val==4 && equal(delta_x,xMax,e) && equal(delta_y,yMax,e) && equal(delta_z,0.0,e)){
     flag = 1;
   }
-  if(val==5 && equal(delta_x,0.0,e) && equal(delta_y,1.0,e) && equal(delta_z,1.0,e)){
+  if(val==5 && equal(delta_x,0.0,e) && equal(delta_y,yMax,e) && equal(delta_z,zMax,e)){
     flag = 1;
   }
-  if(val==6 && equal(delta_x,1.0,e) && equal(delta_y,0.0,e) && equal(delta_z,1.0,e)){
+  if(val==6 && equal(delta_x,xMax,e) && equal(delta_y,0.0,e) && equal(delta_z,zMax,e)){
     flag = 1;
   }
 
-  if(val==7 && equal(delta_x,1.0,e) && equal(delta_y,1.0,e) && equal(delta_z,1.0,e)){
+  if(val==7 && equal(delta_x,xMax,e) && equal(delta_y,yMax,e) && equal(delta_z,zMax,e)){
     flag = 1;
   }
 }
diff --git a/Mesh/periodical.h b/Mesh/periodical.h
index 8bb96d2df5f80b1007d737a364d50be242d1357f..dae1b49ec08dbbe1b3ab9e0f0ee1a649f644f68b 100644
--- a/Mesh/periodical.h
+++ b/Mesh/periodical.h
@@ -16,8 +16,8 @@ class voroMetal3D{
   ~voroMetal3D();
   void execute(double);
   void execute(GRegion*,double);
-  void execute(std::vector<SPoint3>&,std::vector<double>&,int,double);
-  void execute(std::vector<double>&,int,double);
+  void execute(std::vector<SPoint3>&,std::vector<double>&,int,double,double,double,double);
+  void execute(std::vector<double>&,int,double,double,double,double);
   void print_segment(SPoint3,SPoint3,std::ofstream&);
   void initialize_counter();
   void increase_counter();
@@ -30,8 +30,8 @@ class voroMetal3D{
   void print_geo_physical_volume(int,int,std::ofstream&);
   void print_geo_line_loop(int,std::vector<int>&,std::vector<int>&,std::ofstream&);
   void print_geo_face_loop(int,std::vector<int>&,std::ofstream&);
-  void correspondance(double);
-  bool correspondance(double,double,double,double,int&);
-  void correspondance(double,double,double,double,int,bool&);
+  void correspondance(double,double,double,double);
+  bool correspondance(double,double,double,double,int&,double,double,double);
+  void correspondance(double,double,double,double,int,bool&,double,double,double);
   bool equal(double,double,double);
 };