diff --git a/Geo/discreteDiskFace.cpp b/Geo/discreteDiskFace.cpp
index b7724e6bea6804d6444d876541dacbdc4dfb7d8d..b52d22a38c2a3c99eca91c323b28fd65810a294b 100644
--- a/Geo/discreteDiskFace.cpp
+++ b/Geo/discreteDiskFace.cpp
@@ -284,12 +284,15 @@ discreteDiskFace::discreteDiskFace(GFace *gf, triangulation* diskTriangulation,
   _totLength = geoTriangulation->bord.rbegin()->first;
   _U0 = geoTriangulation->bord.rbegin()->second;
   orderVertices(_totLength, _U0, _coords);
-  parametrize();
+  parametrize(false);
   buildOct(CAD);
   printParamMesh();
-  if (_order > 1 && !checkOrientationUV()){
-    Msg::Info("discreteDiskFace:: parametrization is not one-to-one; the parametric mesh is going to be corrected.");
-    optimize();
+  if (!checkOrientationUV()){
+    Msg::Info("discreteDiskFace:: parametrization is not one-to-one; it is going to be corrected.");
+    if(_order==1)
+      parametrize(true);
+    else
+      optimize();
     buildOct(CAD);
     printParamMesh();
   }
@@ -336,7 +339,7 @@ void discreteDiskFace::buildOct(std::vector<GFace*> *CAD) const
   Octree_Arrange(oct);
 }
 
-bool discreteDiskFace::parametrize()// const
+bool discreteDiskFace::parametrize(bool one2one)// const
 { // #improveme
 
 
@@ -349,7 +352,7 @@ bool discreteDiskFace::parametrize()// const
   dofManager<double> myAssemblerU(lsys_u);   // hashing
   dofManager<double> myAssemblerV(lsys_v);
 
-  if(_order>1){
+  if(!one2one){
     for(size_t i = 0; i < _U0.size(); i++){
       MVertex *v = _U0[i];
       const double theta = 2 * M_PI * _coords[i];
@@ -389,7 +392,8 @@ bool discreteDiskFace::parametrize()// const
   }
 
 
-  if(_order==1){
+  if(one2one){
+    Msg::Info("discreteDiskFace::parametrize \t Modifying discrete system");
     checklsys(lsys_u,&myAssemblerU,1);
     checklsys(lsys_v,&myAssemblerV,0);
   }
diff --git a/Geo/discreteDiskFace.h b/Geo/discreteDiskFace.h
index b5aed56fa930f0c7791b5ff736f73b2056aeda80..1719fe3d39591c718badd77f8df21d39e95f3b66 100644
--- a/Geo/discreteDiskFace.h
+++ b/Geo/discreteDiskFace.h
@@ -26,6 +26,7 @@
 #include "linearSystemCSR.h"
 #include "dofManager.h"
 
+
 inline int nodeLocalNum(MElement* e, MVertex* v)
 {
   for(int i=0; i<e->getNumVertices(); i++)
@@ -219,7 +220,7 @@ class  discreteDiskFaceTriangle {
 class discreteDiskFace : public GFace {
   GFace *_parent;
   void buildOct(std::vector<GFace*> *CAD = NULL) const;
-  bool parametrize();// const;
+  bool parametrize(bool);// const;
   void checklsys(linearSystemCSRTaucs<double>*,dofManager<double>*,int);
   void putOnView(bool,bool);
   bool checkOrientationUV();