diff --git a/Fltk/GUI_Projection.cpp b/Fltk/GUI_Projection.cpp
index c9838680b18ca31f780c3d7d9aa79f2b972ffce5..4676356b3c6b8d7646fbca271bfb51e91ebb5ae5 100644
--- a/Fltk/GUI_Projection.cpp
+++ b/Fltk/GUI_Projection.cpp
@@ -562,66 +562,7 @@ void compute_cb(Fl_Widget *w, void *data)
 		   e->hardEdges[3]->value());
       patchL->SetMinU(-0.35);
       patchL->SetMaxU(0.35);
-      
-      double LL[2], LR[2], UL[2], UR[2];
-      LL[0] = 0.0; LL[1] = 0.0;
-      LR[0] = 1.0; LR[1] = 0.0;
-      UL[0] = 0.0; UL[1] = 1.0;
-      UR[0] = 1.0; UR[1] = 1.0;
-      
-      int i1, i2;
-      double xx,yy,zz;
-      
-      int tagVertex = GMODEL->numVertex();
-      patchL->F(LL[0],LL[1],xx,yy,zz);
-      FM_Vertex* vLLL = new FM_Vertex(++tagVertex,xx,yy,zz);
-      GMODEL->add(new FVertex(GMODEL,vLLL->GetTag(),vLLL));
-      patchL->F(LR[0],LR[1],xx,yy,zz);
-      FM_Vertex* vLLR = new FM_Vertex(++tagVertex,xx,yy,zz);
-      GMODEL->add(new FVertex(GMODEL,vLLR->GetTag(),vLLR));
-      patchL->F(UL[0],UL[1],xx,yy,zz);
-      FM_Vertex* vLUL = new FM_Vertex(++tagVertex,xx,yy,zz);
-      GMODEL->add(new FVertex(GMODEL,vLUL->GetTag(),vLUL));
-      patchL->F(UR[0],UR[1],xx,yy,zz);
-      FM_Vertex* vLUR = new FM_Vertex(++tagVertex,xx,yy,zz);
-      GMODEL->add(new FVertex(GMODEL,vLUR->GetTag(),vLUR));
-      
-      Curve* curveLB = new FCurve(0,patchL,LL,LR);
-      Curve* curveLR = new FCurve(0,patchL,LR,UR);
-      Curve* curveLT = new FCurve(0,patchL,UR,UL);
-      Curve* curveLL = new FCurve(0,patchL,UL,LL);
-      
-      int tagEdge = GMODEL->numEdge();
-      FM_Edge* eLB = new FM_Edge(++tagEdge,curveLB,vLLL,vLLR);
-      i1 = eLB->GetStartPoint()->GetTag();
-      i2 = eLB->GetEndPoint()->GetTag();
-      GMODEL->add(new FEdge(GMODEL,eLB,eLB->GetTag(),GMODEL->vertexByTag(i1),
-			    GMODEL->vertexByTag(i2)));
-      FM_Edge* eLR = new FM_Edge(++tagEdge,curveLR,vLLR,vLUR); 
-      i1 = eLR->GetStartPoint()->GetTag();
-      i2 = eLR->GetEndPoint()->GetTag();
-      GMODEL->add(new FEdge(GMODEL,eLR,eLR->GetTag(),GMODEL->vertexByTag(i1),
-			    GMODEL->vertexByTag(i2))); 
-      FM_Edge* eLT = new FM_Edge(++tagEdge,curveLT,vLUR,vLUL);
-      i1 = eLT->GetStartPoint()->GetTag();
-      i2 = eLT->GetEndPoint()->GetTag();
-      GMODEL->add(new FEdge(GMODEL,eLT,eLT->GetTag(),GMODEL->vertexByTag(i1),
-			    GMODEL->vertexByTag(i2)));
-      FM_Edge* eLL = new FM_Edge(++tagEdge,curveLL,vLUL,vLLL); 
-      i1 = eLL->GetStartPoint()->GetTag();
-      i2 = eLL->GetEndPoint()->GetTag();
-      GMODEL->add(new FEdge(GMODEL,eLL,eLL->GetTag(),GMODEL->vertexByTag(i1),
-			    GMODEL->vertexByTag(i2)));
-      
-      FM_Face* faceL = new FM_Face(GMODEL->numFace() + 1,patchL);
-      faceL->AddEdge(eLB); faceL->AddEdge(eLR); 
-      faceL->AddEdge(eLT); faceL->AddEdge(eLL);
-      std::list<GEdge*> l_edgesL;
-      for (int j=0;j<faceL->GetNumEdges();j++) {
-	int tag = faceL->GetEdge(j)->GetTag(); 
-	l_edgesL.push_back(GMODEL->edgeByTag(tag));
-      }
-      GMODEL->add(new FFace(GMODEL,faceL,faceL->GetTag(),l_edgesL));
+      makeGFace(patchL);
 
       Patch* patchR = 
 	new FPatch(0,ps->clone(),u,v,f,3,(int)(e->modes[0]->value()),
@@ -631,57 +572,7 @@ void compute_cb(Fl_Widget *w, void *data)
 		   e->hardEdges[3]->value());
       patchR->SetMinU(0.15);
       patchR->SetMaxU(0.85);
-      
-      tagVertex = GMODEL->numVertex();
-      patchR->F(LL[0],LL[1],xx,yy,zz);
-      FM_Vertex* vRLL = new FM_Vertex(++tagVertex,xx,yy,zz);
-      GMODEL->add(new FVertex(GMODEL,vRLL->GetTag(),vRLL));
-      patchR->F(LR[0],LR[1],xx,yy,zz);
-      FM_Vertex* vRLR = new FM_Vertex(++tagVertex,xx,yy,zz);
-      GMODEL->add(new FVertex(GMODEL,vRLR->GetTag(),vRLR));
-      patchR->F(UL[0],UL[1],xx,yy,zz);
-      FM_Vertex* vRUL = new FM_Vertex(++tagVertex,xx,yy,zz);
-      GMODEL->add(new FVertex(GMODEL,vRUL->GetTag(),vRUL));
-      patchR->F(UR[0],UR[1],xx,yy,zz);
-      FM_Vertex* vRUR = new FM_Vertex(++tagVertex,xx,yy,zz);
-      GMODEL->add(new FVertex(GMODEL,vRUR->GetTag(),vRUR));
-      
-      Curve* curveRB = new FCurve(0,patchR,LL,LR);
-      Curve* curveRR = new FCurve(0,patchR,LR,UR);
-      Curve* curveRT = new FCurve(0,patchR,UR,UL);
-      Curve* curveRL = new FCurve(0,patchR,UL,LL);
-      
-      tagEdge = GMODEL->numEdge();
-      FM_Edge* eRB = new FM_Edge(++tagEdge,curveRB,vRLL,vRLR);
-      i1 = eRB->GetStartPoint()->GetTag();
-      i2 = eRB->GetEndPoint()->GetTag();
-      GMODEL->add(new FEdge(GMODEL,eRB,eRB->GetTag(),GMODEL->vertexByTag(i1),
-			    GMODEL->vertexByTag(i2)));
-      FM_Edge* eRR = new FM_Edge(++tagEdge,curveRR,vRLR,vRUR); 
-      i1 = eRR->GetStartPoint()->GetTag();
-      i2 = eRR->GetEndPoint()->GetTag();
-      GMODEL->add(new FEdge(GMODEL,eRR,eRR->GetTag(),GMODEL->vertexByTag(i1),
-			    GMODEL->vertexByTag(i2))); 
-      FM_Edge* eRT = new FM_Edge(++tagEdge,curveRT,vRUR,vRUL);
-      i1 = eRT->GetStartPoint()->GetTag();
-      i2 = eRT->GetEndPoint()->GetTag();
-      GMODEL->add(new FEdge(GMODEL,eRT,eRT->GetTag(),GMODEL->vertexByTag(i1),
-			    GMODEL->vertexByTag(i2)));
-      FM_Edge* eRL = new FM_Edge(++tagEdge,curveRL,vRUL,vRLL); 
-      i1 = eRL->GetStartPoint()->GetTag();
-      i2 = eRL->GetEndPoint()->GetTag();
-      GMODEL->add(new FEdge(GMODEL,eRL,eRL->GetTag(),GMODEL->vertexByTag(i1),
-			    GMODEL->vertexByTag(i2)));
-      
-      FM_Face* faceR = new FM_Face(GMODEL->numFace() + 1,patchR);
-      faceR->AddEdge(eRB); faceR->AddEdge(eRR); 
-      faceR->AddEdge(eRT); faceR->AddEdge(eRL);
-      std::list<GEdge*> l_edgesR;
-      for (int j=0;j<faceR->GetNumEdges();j++) {
-	int tag = faceR->GetEdge(j)->GetTag(); 
-	l_edgesR.push_back(GMODEL->edgeByTag(tag));
-      }
-      GMODEL->add(new FFace(GMODEL,faceR,faceR->GetTag(),l_edgesR));
+      makeGFace(patchR);
     }
     else if (ps->IsVPeriodic()) {
       Patch* patchL = 
@@ -692,66 +583,7 @@ void compute_cb(Fl_Widget *w, void *data)
 		   e->hardEdges[3]->value());
       patchL->SetMinV(-0.35);
       patchL->SetMaxV(0.35);
-      
-      double LL[2], LR[2], UL[2], UR[2];
-      LL[0] = 0.0; LL[1] = 0.0;
-      LR[0] = 1.0; LR[1] = 0.0;
-      UL[0] = 0.0; UL[1] = 1.0;
-      UR[0] = 1.0; UR[1] = 1.0;
-      
-      int i1, i2;
-      double xx,yy,zz;
-      
-      int tagVertex = GMODEL->numVertex();
-      patchL->F(LL[0],LL[1],xx,yy,zz);
-      FM_Vertex* vLLL = new FM_Vertex(++tagVertex,xx,yy,zz);
-      GMODEL->add(new FVertex(GMODEL,vLLL->GetTag(),vLLL));
-      patchL->F(LR[0],LR[1],xx,yy,zz);
-      FM_Vertex* vLLR = new FM_Vertex(++tagVertex,xx,yy,zz);
-      GMODEL->add(new FVertex(GMODEL,vLLR->GetTag(),vLLR));
-      patchL->F(UL[0],UL[1],xx,yy,zz);
-      FM_Vertex* vLUL = new FM_Vertex(++tagVertex,xx,yy,zz);
-      GMODEL->add(new FVertex(GMODEL,vLUL->GetTag(),vLUL));
-      patchL->F(UR[0],UR[1],xx,yy,zz);
-      FM_Vertex* vLUR = new FM_Vertex(++tagVertex,xx,yy,zz);
-      GMODEL->add(new FVertex(GMODEL,vLUR->GetTag(),vLUR));
-      
-      Curve* curveLB = new FCurve(0,patchL,LL,LR);
-      Curve* curveLR = new FCurve(0,patchL,LR,UR);
-      Curve* curveLT = new FCurve(0,patchL,UR,UL);
-      Curve* curveLL = new FCurve(0,patchL,UL,LL);
-      
-      int tagEdge = GMODEL->numEdge();
-      FM_Edge* eLB = new FM_Edge(++tagEdge,curveLB,vLLL,vLLR);
-      i1 = eLB->GetStartPoint()->GetTag();
-      i2 = eLB->GetEndPoint()->GetTag();
-      GMODEL->add(new FEdge(GMODEL,eLB,eLB->GetTag(),GMODEL->vertexByTag(i1),
-			    GMODEL->vertexByTag(i2)));
-      FM_Edge* eLR = new FM_Edge(++tagEdge,curveLR,vLLR,vLUR); 
-      i1 = eLR->GetStartPoint()->GetTag();
-      i2 = eLR->GetEndPoint()->GetTag();
-      GMODEL->add(new FEdge(GMODEL,eLR,eLR->GetTag(),GMODEL->vertexByTag(i1),
-			    GMODEL->vertexByTag(i2))); 
-      FM_Edge* eLT = new FM_Edge(++tagEdge,curveLT,vLUR,vLUL);
-      i1 = eLT->GetStartPoint()->GetTag();
-      i2 = eLT->GetEndPoint()->GetTag();
-      GMODEL->add(new FEdge(GMODEL,eLT,eLT->GetTag(),GMODEL->vertexByTag(i1),
-			    GMODEL->vertexByTag(i2)));
-      FM_Edge* eLL = new FM_Edge(++tagEdge,curveLL,vLUL,vLLL); 
-      i1 = eLL->GetStartPoint()->GetTag();
-      i2 = eLL->GetEndPoint()->GetTag();
-      GMODEL->add(new FEdge(GMODEL,eLL,eLL->GetTag(),GMODEL->vertexByTag(i1),
-			    GMODEL->vertexByTag(i2)));
-      
-      FM_Face* faceL = new FM_Face(GMODEL->numFace() + 1,patchL);
-      faceL->AddEdge(eLB); faceL->AddEdge(eLR); 
-      faceL->AddEdge(eLT); faceL->AddEdge(eLL);
-      std::list<GEdge*> l_edgesL;
-      for (int j=0;j<faceL->GetNumEdges();j++) {
-	int tag = faceL->GetEdge(j)->GetTag(); 
-	l_edgesL.push_back(GMODEL->edgeByTag(tag));
-      }
-      GMODEL->add(new FFace(GMODEL,faceL,faceL->GetTag(),l_edgesL));
+      makeGFace(patchL);
 
       Patch* patchR = 
 	new FPatch(0,ps->clone(),u,v,f,3,(int)(e->modes[0]->value()),
@@ -761,57 +593,7 @@ void compute_cb(Fl_Widget *w, void *data)
 		   e->hardEdges[3]->value());
       patchR->SetMinV(0.15);
       patchR->SetMaxV(0.85);
-      
-      tagVertex = GMODEL->numVertex();
-      patchR->F(LL[0],LL[1],xx,yy,zz);
-      FM_Vertex* vRLL = new FM_Vertex(++tagVertex,xx,yy,zz);
-      GMODEL->add(new FVertex(GMODEL,vRLL->GetTag(),vRLL));
-      patchR->F(LR[0],LR[1],xx,yy,zz);
-      FM_Vertex* vRLR = new FM_Vertex(++tagVertex,xx,yy,zz);
-      GMODEL->add(new FVertex(GMODEL,vRLR->GetTag(),vRLR));
-      patchR->F(UL[0],UL[1],xx,yy,zz);
-      FM_Vertex* vRUL = new FM_Vertex(++tagVertex,xx,yy,zz);
-      GMODEL->add(new FVertex(GMODEL,vRUL->GetTag(),vRUL));
-      patchR->F(UR[0],UR[1],xx,yy,zz);
-      FM_Vertex* vRUR = new FM_Vertex(++tagVertex,xx,yy,zz);
-      GMODEL->add(new FVertex(GMODEL,vRUR->GetTag(),vRUR));
-      
-      Curve* curveRB = new FCurve(0,patchR,LL,LR);
-      Curve* curveRR = new FCurve(0,patchR,LR,UR);
-      Curve* curveRT = new FCurve(0,patchR,UR,UL);
-      Curve* curveRL = new FCurve(0,patchR,UL,LL);
-      
-      tagEdge = GMODEL->numEdge();
-      FM_Edge* eRB = new FM_Edge(++tagEdge,curveRB,vRLL,vRLR);
-      i1 = eRB->GetStartPoint()->GetTag();
-      i2 = eRB->GetEndPoint()->GetTag();
-      GMODEL->add(new FEdge(GMODEL,eRB,eRB->GetTag(),GMODEL->vertexByTag(i1),
-			    GMODEL->vertexByTag(i2)));
-      FM_Edge* eRR = new FM_Edge(++tagEdge,curveRR,vRLR,vRUR); 
-      i1 = eRR->GetStartPoint()->GetTag();
-      i2 = eRR->GetEndPoint()->GetTag();
-      GMODEL->add(new FEdge(GMODEL,eRR,eRR->GetTag(),GMODEL->vertexByTag(i1),
-			    GMODEL->vertexByTag(i2))); 
-      FM_Edge* eRT = new FM_Edge(++tagEdge,curveRT,vRUR,vRUL);
-      i1 = eRT->GetStartPoint()->GetTag();
-      i2 = eRT->GetEndPoint()->GetTag();
-      GMODEL->add(new FEdge(GMODEL,eRT,eRT->GetTag(),GMODEL->vertexByTag(i1),
-			    GMODEL->vertexByTag(i2)));
-      FM_Edge* eRL = new FM_Edge(++tagEdge,curveRL,vRUL,vRLL); 
-      i1 = eRL->GetStartPoint()->GetTag();
-      i2 = eRL->GetEndPoint()->GetTag();
-      GMODEL->add(new FEdge(GMODEL,eRL,eRL->GetTag(),GMODEL->vertexByTag(i1),
-			    GMODEL->vertexByTag(i2)));
-      
-      FM_Face* faceR = new FM_Face(GMODEL->numFace() + 1,patchR);
-      faceR->AddEdge(eRB); faceR->AddEdge(eRR); 
-      faceR->AddEdge(eRT); faceR->AddEdge(eRL);
-      std::list<GEdge*> l_edgesR;
-      for (int j=0;j<faceR->GetNumEdges();j++) {
-	int tag = faceR->GetEdge(j)->GetTag(); 
-	l_edgesR.push_back(GMODEL->edgeByTag(tag));
-      }
-      GMODEL->add(new FFace(GMODEL,faceR,faceR->GetTag(),l_edgesR));
+      makeGFace(patchR);
     }
     else {
       Patch* patch = 
@@ -820,66 +602,7 @@ void compute_cb(Fl_Widget *w, void *data)
 		   (int)(e->modes[3]->value()), e->hardEdges[0]->value(), 
 		   e->hardEdges[1]->value(), e->hardEdges[2]->value(), 
 		   e->hardEdges[3]->value());
-      
-      double LL[2], LR[2], UL[2], UR[2];
-      LL[0] = 0.0; LL[1] = 0.0;
-      LR[0] = 1.0; LR[1] = 0.0;
-      UL[0] = 0.0; UL[1] = 1.0;
-      UR[0] = 1.0; UR[1] = 1.0;
-      
-      int i1, i2;
-      double xx,yy,zz;
-      
-      int tagVertex = GMODEL->numVertex();
-      patch->F(LL[0],LL[1],xx,yy,zz);
-      FM_Vertex* vLL = new FM_Vertex(++tagVertex,xx,yy,zz);
-      GMODEL->add(new FVertex(GMODEL,vLL->GetTag(),vLL));
-      patch->F(LR[0],LR[1],xx,yy,zz);
-      FM_Vertex* vLR = new FM_Vertex(++tagVertex,xx,yy,zz);
-      GMODEL->add(new FVertex(GMODEL,vLR->GetTag(),vLR));
-      patch->F(UL[0],UL[1],xx,yy,zz);
-      FM_Vertex* vUL = new FM_Vertex(++tagVertex,xx,yy,zz);
-      GMODEL->add(new FVertex(GMODEL,vUL->GetTag(),vUL));
-      patch->F(UR[0],UR[1],xx,yy,zz);
-      FM_Vertex* vUR = new FM_Vertex(++tagVertex,xx,yy,zz);
-      GMODEL->add(new FVertex(GMODEL,vUR->GetTag(),vUR));
-      
-      Curve* curveB = new FCurve(0,patch,LL,LR);
-      Curve* curveR = new FCurve(0,patch,LR,UR);
-      Curve* curveT = new FCurve(0,patch,UR,UL);
-      Curve* curveL = new FCurve(0,patch,UL,LL);
-      
-      int tagEdge = GMODEL->numEdge();
-      FM_Edge* eB = new FM_Edge(++tagEdge,curveB,vLL,vLR);
-      i1 = eB->GetStartPoint()->GetTag();
-      i2 = eB->GetEndPoint()->GetTag();
-      GMODEL->add(new FEdge(GMODEL,eB,eB->GetTag(),GMODEL->vertexByTag(i1),
-			    GMODEL->vertexByTag(i2)));
-      FM_Edge* eR = new FM_Edge(++tagEdge,curveR,vLR,vUR); 
-      i1 = eR->GetStartPoint()->GetTag();
-      i2 = eR->GetEndPoint()->GetTag();
-      GMODEL->add(new FEdge(GMODEL,eR,eR->GetTag(),GMODEL->vertexByTag(i1),
-			    GMODEL->vertexByTag(i2))); 
-      FM_Edge* eT = new FM_Edge(++tagEdge,curveT,vUR,vUL);
-      i1 = eT->GetStartPoint()->GetTag();
-      i2 = eT->GetEndPoint()->GetTag();
-      GMODEL->add(new FEdge(GMODEL,eT,eT->GetTag(),GMODEL->vertexByTag(i1),
-			    GMODEL->vertexByTag(i2)));
-      FM_Edge* eL = new FM_Edge(++tagEdge,curveL,vUL,vLL); 
-      i1 = eL->GetStartPoint()->GetTag();
-      i2 = eL->GetEndPoint()->GetTag();
-      GMODEL->add(new FEdge(GMODEL,eL,eL->GetTag(),GMODEL->vertexByTag(i1),
-			    GMODEL->vertexByTag(i2)));
-      
-      FM_Face* face = new FM_Face(GMODEL->numFace() + 1,patch);
-      face->AddEdge(eB); face->AddEdge(eR); 
-      face->AddEdge(eT); face->AddEdge(eL);
-      std::list<GEdge*> l_edges;
-      for (int j=0;j<face->GetNumEdges();j++) {
-	int tag = face->GetEdge(j)->GetTag(); 
-	l_edges.push_back(GMODEL->edgeByTag(tag));
-      }
-      GMODEL->add(new FFace(GMODEL,face,face->GetTag(),l_edges));
+      makeGFace(patch);
     }
   }
 
@@ -909,6 +632,9 @@ void compute_cb(Fl_Widget *w, void *data)
   fclose(fp);
 
   FM_Reader* reader = new FM_Reader(filename);
+  for (int i = 0; i < reader->GetNumPatches(); i++)
+    makeGFace(reader->GetPatch(i));
+
   // End Test
 
   Draw();
@@ -1001,6 +727,69 @@ void mesh_parameterize_cb(Fl_Widget* w, void* data)
   editor->show();
 }
 
+void makeGFace(Patch* patch)
+{
+  double LL[2], LR[2], UL[2], UR[2];
+  LL[0] = 0.0; LL[1] = 0.0;
+  LR[0] = 1.0; LR[1] = 0.0;
+  UL[0] = 0.0; UL[1] = 1.0;
+  UR[0] = 1.0; UR[1] = 1.0;
+  
+  int i1, i2;
+  double xx,yy,zz;
+  
+  int tagVertex = GMODEL->numVertex();
+  patch->F(LL[0],LL[1],xx,yy,zz);
+  FM_Vertex* vLL = new FM_Vertex(++tagVertex,xx,yy,zz);
+  GMODEL->add(new FVertex(GMODEL,vLL->GetTag(),vLL));
+  patch->F(LR[0],LR[1],xx,yy,zz);
+  FM_Vertex* vLR = new FM_Vertex(++tagVertex,xx,yy,zz);
+  GMODEL->add(new FVertex(GMODEL,vLR->GetTag(),vLR));
+  patch->F(UL[0],UL[1],xx,yy,zz);
+  FM_Vertex* vUL = new FM_Vertex(++tagVertex,xx,yy,zz);
+  GMODEL->add(new FVertex(GMODEL,vUL->GetTag(),vUL));
+  patch->F(UR[0],UR[1],xx,yy,zz);
+  FM_Vertex* vUR = new FM_Vertex(++tagVertex,xx,yy,zz);
+  GMODEL->add(new FVertex(GMODEL,vUR->GetTag(),vUR));
+  
+  Curve* curveB = new FCurve(0,patch,LL,LR);
+  Curve* curveR = new FCurve(0,patch,LR,UR);
+  Curve* curveT = new FCurve(0,patch,UR,UL);
+  Curve* curveL = new FCurve(0,patch,UL,LL);
+  
+  int tagEdge = GMODEL->numEdge();
+  FM_Edge* eB = new FM_Edge(++tagEdge,curveB,vLL,vLR);
+  i1 = eB->GetStartPoint()->GetTag();
+  i2 = eB->GetEndPoint()->GetTag();
+  GMODEL->add(new FEdge(GMODEL,eB,eB->GetTag(),GMODEL->vertexByTag(i1),
+			GMODEL->vertexByTag(i2)));
+  FM_Edge* eR = new FM_Edge(++tagEdge,curveR,vLR,vUR); 
+  i1 = eR->GetStartPoint()->GetTag();
+  i2 = eR->GetEndPoint()->GetTag();
+  GMODEL->add(new FEdge(GMODEL,eR,eR->GetTag(),GMODEL->vertexByTag(i1),
+			GMODEL->vertexByTag(i2))); 
+  FM_Edge* eT = new FM_Edge(++tagEdge,curveT,vUR,vUL);
+  i1 = eT->GetStartPoint()->GetTag();
+  i2 = eT->GetEndPoint()->GetTag();
+  GMODEL->add(new FEdge(GMODEL,eT,eT->GetTag(),GMODEL->vertexByTag(i1),
+			GMODEL->vertexByTag(i2)));
+  FM_Edge* eL = new FM_Edge(++tagEdge,curveL,vUL,vLL); 
+  i1 = eL->GetStartPoint()->GetTag();
+  i2 = eL->GetEndPoint()->GetTag();
+  GMODEL->add(new FEdge(GMODEL,eL,eL->GetTag(),GMODEL->vertexByTag(i1),
+			GMODEL->vertexByTag(i2)));
+  
+  FM_Face* face = new FM_Face(GMODEL->numFace() + 1,patch);
+  face->AddEdge(eB); face->AddEdge(eR); 
+  face->AddEdge(eT); face->AddEdge(eL);
+  std::list<GEdge*> l_edges;
+  for (int j=0;j<face->GetNumEdges();j++) {
+    int tag = face->GetEdge(j)->GetTag(); 
+    l_edges.push_back(GMODEL->edgeByTag(tag));
+  }
+  GMODEL->add(new FFace(GMODEL,face,face->GetTag(),l_edges));
+}
+
 #else
 
 void mesh_parameterize_cb(Fl_Widget* w, void* data)
diff --git a/Fltk/GUI_Projection.h b/Fltk/GUI_Projection.h
index 0145df66064dc2b3f420dda5af569392d72b6dcb..908845b98a87f6178899c0288dcb2b5120d576c2 100644
--- a/Fltk/GUI_Projection.h
+++ b/Fltk/GUI_Projection.h
@@ -36,6 +36,8 @@ void save_cb(Fl_Widget *w, void *data);
 void compute_cb(Fl_Widget *w, void *data);
 void action_cb(Fl_Widget *w, void *data);
 
+void makeGFace(Patch* patch);
+
 class uvPlot : public Fl_Window {
  private:
   std::vector<double> _u, _v, _dist;
diff --git a/contrib/FourierModel/ContinuationPatch.cpp b/contrib/FourierModel/ContinuationPatch.cpp
index 01a17bf415d8cdf1421f2115b0a46ab6ad9bfdf9..49b62c9cb549423e28eadad32c58c5f4745735ee 100644
--- a/contrib/FourierModel/ContinuationPatch.cpp
+++ b/contrib/FourierModel/ContinuationPatch.cpp
@@ -264,7 +264,7 @@ ContinuationPatch::ContinuationPatch
     }
     else {
       for (int j = 0; j < _uM; j++) {
-	for (int k = 0; k < _vModes; k++) {
+	for (int k = 0; k < _vM; k++) {
 	  _coeffData[j][k] = _PI->coeffCheby[j][k];
 	  _coeffDerivU[j][k] = _PI->coeffDerivU[j][k];
 	  _coeffDerivV[j][k] = _PI->coeffDerivV[j][k];
diff --git a/contrib/FourierModel/FM_Reader.cpp b/contrib/FourierModel/FM_Reader.cpp
index 397ae813aafcaee48bc4d9214469dcf53c1abe3f..5c745756e9ba0008f1a3063a96a80d63ea64ca78 100644
--- a/contrib/FourierModel/FM_Reader.cpp
+++ b/contrib/FourierModel/FM_Reader.cpp
@@ -19,34 +19,25 @@ FM_Reader::FM_Reader(const char* fn)
   }
   InputFile >> _nPatches;
   _ps.resize(_nPatches, 0);
-  std::cout << "npatches = " << _nPatches << std::endl;
   for (unsigned int i = 0; i < _nPatches; i++) {
     char psName[32];
     InputFile >> psName;
-    std::cout << "psName = " << psName << std::endl;
     int psTag;
     InputFile >> psTag;
-    std::cout << "psTag = " << psTag << std::endl;
     double origin[3];
     InputFile >> origin[0] >> origin[1] >> origin[2];
-    std::cout << "o = "<<origin[0]<<" "<<origin[1]<<" "<<origin[2]<<std::endl;
     double E0[3];
     InputFile >> E0[0] >> E0[1] >> E0[2];
-    std::cout << "E0 = " << E0[0] <<" "<< E0[1] <<" "<< E0[2] << std::endl;
     double E1[3];
     InputFile >> E1[0] >> E1[1] >> E1[2];
-    std::cout << "E1 = " << E1[0] <<" "<< E1[1] <<" "<< E1[2] << std::endl;
     double scale[3];
     InputFile >> scale[0] >> scale[1] >> scale[2];
-    std::cout << "s = " <<scale[0]<<" "<< scale[1]<<" "<<scale[2]<<std::endl;
     int psNumParams;
     InputFile >> psNumParams;
-    std::cout << "psNumParams = " << psNumParams << std::endl;    
     double *psParams = new double [psNumParams];
     for (unsigned int j = 0; j < psNumParams; j++) {
       double tmp;
       InputFile >> psParams[j];
-      std::cout << "psParams[" << j << "]  = " << psParams[j] << std::endl;
     }
     if (!strcmp(psName,plane))
       _ps[i] = new PlaneProjectionSurface(psTag,origin,E0,E1,scale);
@@ -63,14 +54,9 @@ FM_Reader::FM_Reader(const char* fn)
       double R = psParams[0];
       double K[2];
       K[0] = psParams[1]; K[1] = psParams[2];
-      printf("%d :: P : %g %g %g\n",i,R,K[0],K[1]);
-      printf("%d :: O : %g %g %g\n",i,origin[0],origin[1],origin[2]);
-      printf("%d :: E0 : %g %g %g\n",i,E0[0],E0[1],E0[2]);
-      printf("%d :: E1 : %g %g %g\n",i,E1[0],E1[1],E1[2]);
-      printf("%d :: s : %g %g %g\n",i,scale[0],scale[1],scale[2]);
+
       _ps[i] = new RevolvedParabolaProjectionSurface
 	(psTag,origin,E0,E1,scale,R,K);
-      printf("%d : here :: %g %g\n",i,K[0],K[1]);
     }
     else {
       _ps[i] = new CylindricalProjectionSurface(psTag,origin,E0,E1,scale);
@@ -78,27 +64,15 @@ FM_Reader::FM_Reader(const char* fn)
     }
     delete [] psParams;
     InputFile >> psName;
-    std::cout << "psName = " << psName << std::endl;
     _patchList.push_back(new PatchInfo);
     InputFile >> _patchList[i]->tag;
-    std::cout << "pTag = " << _patchList[i]->tag << std::endl;
     InputFile >> _patchList[i]->derivative;
-    std::cout << "pDerivative = " << _patchList[i]->derivative << std::endl;
     InputFile >> _patchList[i]->uMin >> _patchList[i]->uMax;
-    std::cout <<"uLim = "<<_patchList[i]->uMin<<" "<<_patchList[i]->uMax << 
-      std::endl;
     InputFile >> _patchList[i]->vMin >> _patchList[i]->vMax;
-    std::cout <<"vLim = "<<_patchList[i]->vMin<<" "<<_patchList[i]->vMax << 
-      std::endl;
     if (strcmp(psName,Exact)) {
       InputFile >> _patchList[i]->hardEdge[0] >> _patchList[i]->hardEdge[1] >>
 	_patchList[i]->hardEdge[2] >> _patchList[i]->hardEdge[3];
-      std::cout<<"HE : "<< _patchList[i]->hardEdge[0] << " " << 
-	_patchList[i]->hardEdge[1] << " " << _patchList[i]->hardEdge[2] 
-	       << " " << _patchList[i]->hardEdge[3] << std::endl;
-      InputFile >> _patchList[i]->nModes[0] >> _patchList[i]->nModes[1];
-      std::cout <<"Modes = "<<_patchList[i]->nModes[0] << " " <<
-	_patchList[i]->nModes[1] << std::endl;     
+      InputFile >> _patchList[i]->nModes[0] >> _patchList[i]->nModes[1];   
       _patchList[i]->coeffFourier.resize(_patchList[i]->nModes[0]);
       for (int j=0;j<_patchList[i]->nModes[0];j++) {
 	_patchList[i]->coeffFourier[j].resize(_patchList[i]->nModes[1]);
@@ -107,14 +81,10 @@ FM_Reader::FM_Reader(const char* fn)
 	  InputFile >> realCoeff >> imagCoeff;
 	  _patchList[i]->coeffFourier[j][k] = 
 	    std::complex<double>(realCoeff,imagCoeff);
-	  std::cout << realCoeff << " " << imagCoeff << std::endl;
 	}
       }
-      InputFile >> _patchList[i]->nM[0] >> _patchList[i]->nM[1];
-      std::cout <<"M = "<<_patchList[i]->nM[0] << " " <<
-	_patchList[i]->nM[1] << std::endl;         
-      InputFile >> _patchList[i]->recompute;
-      std::cout << "pRecompute = " << _patchList[i]->recompute << std::endl; 
+      InputFile >> _patchList[i]->nM[0] >> _patchList[i]->nM[1];     
+      InputFile >> _patchList[i]->recompute; 
       if ((_patchList[i]->derivative) && (!_patchList[i]->recompute)) {
 	_patchList[i]->coeffCheby.resize(_patchList[i]->nM[0]);
 	for (int j=0;j<_patchList[i]->nM[0];j++) {
@@ -124,7 +94,6 @@ FM_Reader::FM_Reader(const char* fn)
 	    InputFile >> realCoeff >> imagCoeff;
 	    _patchList[i]->coeffCheby[j][k] = 
 	      std::complex<double>(realCoeff,imagCoeff);
-	    std::cout << realCoeff << " " << imagCoeff << std::endl;
 	  }
 	}
 	_patchList[i]->coeffDerivU.resize(_patchList[i]->nM[0]);
@@ -135,7 +104,6 @@ FM_Reader::FM_Reader(const char* fn)
 	    InputFile >> realCoeff >> imagCoeff;
 	    _patchList[i]->coeffDerivU[j][k] = 
 	      std::complex<double>(realCoeff,imagCoeff);
-	    std::cout << realCoeff << " " << imagCoeff << std::endl;
 	  }
 	}
 	_patchList[i]->coeffDerivV.resize(_patchList[i]->nM[0]);
@@ -146,7 +114,6 @@ FM_Reader::FM_Reader(const char* fn)
 	    InputFile >> realCoeff >> imagCoeff;
 	    _patchList[i]->coeffDerivV[j][k] = 
 	      std::complex<double>(realCoeff,imagCoeff);
-	    std::cout << realCoeff << " " << imagCoeff << std::endl;
 	  }
 	}
 	_patchList[i]->coeffDerivUU.resize(_patchList[i]->nM[0]);
@@ -157,7 +124,6 @@ FM_Reader::FM_Reader(const char* fn)
 	    InputFile >> realCoeff >> imagCoeff;
 	    _patchList[i]->coeffDerivUU[j][k] = 
 	      std::complex<double>(realCoeff,imagCoeff);
-	    std::cout << realCoeff << " " << imagCoeff << std::endl;
 	  }
 	}
 	_patchList[i]->coeffDerivUV.resize(_patchList[i]->nM[0]);
@@ -168,7 +134,6 @@ FM_Reader::FM_Reader(const char* fn)
 	    InputFile >> realCoeff >> imagCoeff;
 	    _patchList[i]->coeffDerivUV[j][k] = 
 	      std::complex<double>(realCoeff,imagCoeff);
-	    std::cout << realCoeff << " " << imagCoeff << std::endl;
 	  }
 	}
 	_patchList[i]->coeffDerivVV.resize(_patchList[i]->nM[0]);
@@ -179,7 +144,6 @@ FM_Reader::FM_Reader(const char* fn)
 	    InputFile >> realCoeff >> imagCoeff;
 	    _patchList[i]->coeffDerivVV[j][k] = 
 	      std::complex<double>(realCoeff,imagCoeff);
-	    std::cout << realCoeff << " " << imagCoeff << std::endl;
 	  }
 	}
       }
diff --git a/contrib/FourierModel/ProjectionSurface.cpp b/contrib/FourierModel/ProjectionSurface.cpp
index ece8137e234731be9b85125223bc6bfb8007f5c5..a5db40119488cbc3fb2521532b5c725727587b2a 100755
--- a/contrib/FourierModel/ProjectionSurface.cpp
+++ b/contrib/FourierModel/ProjectionSurface.cpp
@@ -4,7 +4,6 @@
 ProjectionSurface::ProjectionSurface
 (double uPeriod, double vPeriod)
 {
-  printf("here in ProjectoionSufrace\n");
   tag_ = -1;
   name_ = std::string("default");
   numParameters_ = 0;
diff --git a/contrib/FourierModel/RevolvedParabolaProjectionSurface.cpp b/contrib/FourierModel/RevolvedParabolaProjectionSurface.cpp
index 837d024aedb15a5bb48fd9d776811e431b63b469..33a988015091b4fa1c4dd88f6287e8992b3c4006 100755
--- a/contrib/FourierModel/RevolvedParabolaProjectionSurface.cpp
+++ b/contrib/FourierModel/RevolvedParabolaProjectionSurface.cpp
@@ -26,8 +26,6 @@ RevolvedParabolaProjectionSurface::RevolvedParabolaProjectionSurface
 (int tag, double O[3], double E0[3], double E1[3], double scale[3],
  double R, double K[2]) : ProjectionSurface(1.) 
 {
-  printf("here\n");
-
   SetTag(tag);
   SetName(std::string("revolvedParabola"));
 
@@ -46,12 +44,6 @@ RevolvedParabolaProjectionSurface::RevolvedParabolaProjectionSurface
   E2_[2] = E0_[0] * E1_[1] - E0_[1] * E1_[0]; 
 
   scale_[0] = scale[0]; scale_[1] = scale[1]; scale_[2] = scale[2];
-
-  printf("P : %g %g %g\n",R_,K_[0],K_[1]);
-  printf("O : %g %g %g\n",O_[0],O_[1],O_[2]);
-  printf("E0 : %g %g %g\n",E0_[0],E0_[1],E0_[2]);
-  printf("E1 : %g %g %g\n",E1_[0],E1_[1],E1_[2]);
-  printf("s : %g %g %g\n",scale_[0],scale_[1],scale_[2]);
 }
 
 void RevolvedParabolaProjectionSurface::F