diff --git a/Plugin/GSHHS.cpp b/Plugin/GSHHS.cpp
index 8faf29a9e4697d4c5645b988c76ce409257a8e0c..68a3629f814171debfd19822165eb862e94712dd 100644
--- a/Plugin/GSHHS.cpp
+++ b/Plugin/GSHHS.cpp
@@ -541,7 +541,7 @@ public:
       }
       return i1;
     }
-    int orientation(iterator i0, iterator i1,bool reverse_stereo)
+    int orientation(iterator i0, iterator i1,bool reverse_stereo=false)
     {
       if(next(i0)==i1)
         return 0;
@@ -559,7 +559,7 @@ public:
       }while(p!=i1);
       i0->to_stereo(x[2],y[2],reverse_stereo);
       alpha+=get_angle(x[0],y[0],x[1],y[1],x[2],y[2]);
-      return (int)(alpha/(M_PI*2));
+      return (int)round(alpha/(M_PI*2));
     }
     int length(iterator i0,iterator i1)
     {
@@ -681,7 +681,7 @@ public:
   bool loop_check_close_points_self(loop *l,box &b)
   {
     bool result=false;
-    bool reverse_stereo=(l->orientation(l->begin(),--l->end(),false)<0);
+    int orientation = l->orientation(l->begin(), --l->end());
     for(loop::iterator i=l->begin();i!=l->end();){
       double d[2]={i->min_dist*1.001,i->min_dist*1.001};
       point *cp[2];
@@ -694,11 +694,11 @@ public:
           for(ii=i;ii!=l->end() && ii!=id1;ii++);
           not_a_loop= ii==l->end()?0:1;
         }
-        if(not_a_loop!=0 && (l->orientation(i,id1,reverse_stereo)==-1 || l->length(i,id1)<3)){
+        if(not_a_loop!=0 && (l->orientation(i,id1)!=orientation || l->length(i,id1)<3)){
           i=l->remove_range(i,id1);
           result=true;
         }
-        if(not_a_loop!=1 && (l->orientation(id1,i,reverse_stereo)==-1 || l->length(id1,i)<3)){
+        if(not_a_loop!=1 && (l->orientation(id1,i)!=orientation || l->length(id1,i)<3)){
           i=l->remove_range(id1,i);
           result=true;
         }else