diff --git a/src/@deproj/find_countour.m b/src/@deproj/find_countour.m
index a5cae48b9c90660a3e362e092b63339727134051..47920b8a859d5c8a6234ead49eabe240a33df864 100644
--- a/src/@deproj/find_countour.m
+++ b/src/@deproj/find_countour.m
@@ -4,9 +4,12 @@ function P2 = find_countour( P )
     P2 = NaN( size( P ) );
     current = 1;
 
+    D = squareform( pdist ( P ) );
+    D( D == 0 ) = Inf;
+    
     % Start point
-    ps = P( 1, : );    
-    set_visited( 1 )
+    id = 1;
+    ps = P( id, : );    
     P2( current, : ) = ps;
     current = current + 1;
     
@@ -16,9 +19,10 @@ function P2 = find_countour( P )
 
         done = current == size( P, 1 );
 
-        id = find_next_point( ps );
+        prev_id = id;
+        id = find_next_point( id );
         ps = P( id, : );
-        set_visited( id )
+        set_visited( prev_id )
         P2( current, : ) = ps;
         current = current + 1;
         
@@ -26,11 +30,12 @@ function P2 = find_countour( P )
     
     
     function set_visited( id )
-        P( id, : ) = NaN;
+        D( id, : ) = Inf;
+        D( :, id ) = Inf;
     end
     
-    function id = find_next_point( p0 )        
-        [ ~, id ] = pdist2( P, p0, 'Euclidean', 'Smallest', 1 );
+    function id = find_next_point( id )                
+        [ ~, id ] = min( D( :, id ) );
     end
     
 end