diff --git a/Mesh/periodical.cpp b/Mesh/periodical.cpp
index ecb780e86bbbacfc4bffafeb069209a2464a23ec..ecdb76176bda0bacec9e2e36c7ead99c8bf62810 100644
--- a/Mesh/periodical.cpp
+++ b/Mesh/periodical.cpp
@@ -366,12 +366,19 @@ void voroMetal3D::print_geo_face_loop(int index,std::vector<int>& indices,std::o
 }
 
 void voroMetal3D::correspondance(){
-  int i;
+  unsigned int i;
+  unsigned int j;
+  bool flag;
+  double e;
   GFace* gf;
   GModel* model = GModel::current();
   GModel::fiter it;
   std::vector<GFace*> faces;
   std::map<GFace*,bool> markings;
+  std::map<GFace*,bool>::iterator it1;
+  std::map<GFace*,bool>::iterator it2;
+  surface_params params1;
+  surface_params params2;
 	
   faces.clear();	
 	
@@ -393,7 +400,37 @@ void voroMetal3D::correspondance(){
     markings.insert(std::pair<GFace*,bool>(faces[i],0));
   }
 	
+  e = 0.000001;	
+  
   std::ofstream file;
-  file.open("cells.geo",std::ios::out | std::ios::app);
-  //geofile << "test\n";
+  file.open("cells.geo",std::ios::out | std::ios::app);	
+	
+  for(i=0;i<faces.size();i++){
+    for(j=0;j<faces.size();j++){
+	  flag = 0;	
+	
+	  params1 = faces[i]->getSurfaceParams();
+	  params2 = faces[j]->getSurfaceParams();
+		
+	  if(fabs(params1.cx-params2.cx)<1.0+e && fabs(params1.cx-params2.cx)>1.0-e && fabs(params1.cy-params2.cy)<e && fabs(params1.cz-params2.cz)<e){
+	    flag = 1;
+	  }
+	  if(fabs(params1.cy-params2.cy)<1.0+e && fabs(params1.cy-params2.cy)>1.0-e && fabs(params1.cx-params2.cx)<e && fabs(params1.cz-params2.cz)<e){
+	    flag = 1;
+	  }
+	  if(fabs(params1.cz-params2.cz)<1.0+e && fabs(params1.cz-params2.cz)>1.0-e && fabs(params1.cy-params2.cy)<e && fabs(params1.cx-params2.cx)<e){
+	    flag = 1;
+	  }
+		
+	  if(flag){
+	    it1 = markings.find(faces[i]); 
+	    it2 = markings.find(faces[j]);
+		if(it1->second==0 && it2->second==0){
+		  it1->second = 1;
+		  it2->second = 1;
+		  file << faces[i]->tag() << " " << faces[j]->tag() << "\n";
+		}
+	  }
+	}
+  }
 }
\ No newline at end of file