diff --git a/Geo/gmshEdge.cpp b/Geo/gmshEdge.cpp
index 58cb751a381da0b09ce36fcba3b68142c56a67c8..4cc1414ecceb7fdf57abe431cd8d2f978ecd4a03 100644
--- a/Geo/gmshEdge.cpp
+++ b/Geo/gmshEdge.cpp
@@ -1,4 +1,4 @@
-// $Id: gmshEdge.cpp,v 1.30 2007-02-27 17:15:47 remacle Exp $
+// $Id: gmshEdge.cpp,v 1.31 2007-03-02 18:20:56 remacle Exp $
 //
 // Copyright (C) 1997-2007 C. Geuzaine, J.-F. Remacle
 //
@@ -174,15 +174,23 @@ SPoint2 gmshEdge::reparamOnFace(GFace *face, double epar,int dir) const
 	List_Read(c->Control_Points, i, &v[1]);
 	List_Read(c->Control_Points, i + 1, &v[2]);
 	if(!i) {
-	  v[0] = &temp1;
-	  v[0]->pntOnGeometry = v[1]->pntOnGeometry * 2. - v[2]->pntOnGeometry;
+		if(c->beg == c->end){
+			List_Read(c->Control_Points,N-2,&v[0]);
+		}else{
+			v[0] = &temp1;
+			v[0]->pntOnGeometry = v[1]->pntOnGeometry * 2. - v[2]->pntOnGeometry;
+		}
 	}
 	else {
 	  List_Read(c->Control_Points, i - 1, &v[0]);
 	}
 	if(i == N - 2) {
-	  v[3] = &temp2;
-	  v[3]->pntOnGeometry = v[2]->pntOnGeometry * 2. - v[1]->pntOnGeometry;
+		if(c->beg == c->end){
+			List_Read(c->Control_Points,1,&v[3]);
+		}else{
+			v[3] = &temp2;
+			v[3]->pntOnGeometry = v[2]->pntOnGeometry * 2. - v[1]->pntOnGeometry;
+		}
 	}
 	else {
 	  List_Read(c->Control_Points, i + 2, &v[3]);