diff --git a/pcbnew/autorout.h b/pcbnew/autorout.h
index 2e3355da43..538d1ab1bb 100644
--- a/pcbnew/autorout.h
+++ b/pcbnew/autorout.h
@@ -61,13 +61,13 @@ public:
 /****************************************************************/
 /* description d'un point de piste pour le suivi des connexions */
 /****************************************************************/
-#define START_SUR_PAD   0x10
-#define END_SUR_PAD     0x20
-#define START_SUR_TRACK 0x40
-#define END_SUR_TRACK   0x80
+#define START_ON_PAD    0x10
+#define END_ON_PAD      0x20
+#define START_ON_TRACK  0x40
+#define END_ON_TRACK    0x80
 
-#define START_EQU_VIA 0x10
-#define END_EQU_VIA   0x20
+//#define START_EQU_VIA   0x10
+//#define END_EQU_VIA     0x20
 
 
 /* Status bit (OR'ed bits) for class BOARD member .m_Status_Pcb */
diff --git a/pcbnew/clean.cpp b/pcbnew/clean.cpp
index 656518e968..caa1e2f863 100644
--- a/pcbnew/clean.cpp
+++ b/pcbnew/clean.cpp
@@ -68,23 +68,23 @@ void Clean_Pcb_Items( WinEDA_PcbFrame* frame, wxDC* DC )
 /************************************************************/
 {
     frame->MsgPanel->EraseMsgBox();
-    frame->m_Pcb->GetNumSegmTrack();    /* Met a jour le compte */
+    frame->m_Pcb->GetNumSegmTrack();    // update the count
     
     /* construction de la liste des coordonn�s des pastilles */
     frame->m_Pcb->m_Status_Pcb = 0;
     frame->build_liste_pads();
     frame->recalcule_pad_net_code();
 
-    if( s_CleanVias )       /* delete redundant vias */
+    if( s_CleanVias )       // delete redundant vias
     {
         TRACK* track;
         TRACK* next_track;
-        for( track = frame->m_Pcb->m_Track; track != NULL; track = track->Next() )
+        for( track = frame->m_Pcb->m_Track;  track;  track = track->Next() )
         {
-            if( track->m_Shape != VIA_THROUGH )
+            if( track->Shape() != VIA_THROUGH )
                 continue;
             
-            /* Search and delete others vias at same location */
+            // Search and delete others vias at same location
             TRACK* alt_track = track->Next();
             for( ; alt_track != NULL; alt_track = next_track )
             {
@@ -156,10 +156,11 @@ static void suppression_piste_non_connectee( WinEDA_PcbFrame* frame, wxDC* DC )
  *  et le segment seront supprimes
  */
 {
-    TRACK*          segment, * pt_other, * pt_via;
-    TRACK*          PtStartNetCode;
-    EDA_BaseStruct* NextS;
-    D_PAD*          ptr_pad;
+    TRACK*          segment;
+    TRACK*          other;
+    TRACK*          startNetcode;
+    TRACK*          next;
+    
     int             nbpoints_supprimes = 0;
     int             masklayer, oldnetcode;
     int             type_end, flag_erase;
@@ -169,20 +170,20 @@ static void suppression_piste_non_connectee( WinEDA_PcbFrame* frame, wxDC* DC )
     frame->Affiche_Message( _( "Delete unconnected tracks:" ) );
     frame->DrawPanel->m_AbortRequest = FALSE;
 
-    /* Correction des defauts des vias et recalcul du nombre de segm */
-    frame->m_Pcb->m_NbSegmTrack = 0; ii = 0;
-    for( segment = frame->m_Pcb->m_Track; segment != NULL; segment = (TRACK*) NextS )
+    // correct via m_End defects and count number of segments
+    frame->m_Pcb->m_NbSegmTrack = 0;
+    ii = 0;
+    for( segment = frame->m_Pcb->m_Track; segment != NULL; segment = next )
     {
         frame->m_Pcb->m_NbSegmTrack++;
-        NextS = segment->Pnext;
+        next = segment->Next();
         
         if( segment->Type() == TYPEVIA )
         {
-            if( (segment->m_Start.x != segment->m_End.x )
-             || (segment->m_Start.y != segment->m_End.y ) )
+            if( segment->m_Start != segment->m_End )
             {
-                segment->m_End.x = segment->m_Start.x;
-                segment->m_End.y = segment->m_Start.y;
+                segment->m_End = segment->m_Start;
+                
                 ii++;
                 msg.Printf( wxT( "%d " ), ii );
                 Affiche_1_Parametre( frame, POS_AFF_PASSE, _( "ViaDef" ), msg, LIGHTRED );
@@ -191,18 +192,17 @@ static void suppression_piste_non_connectee( WinEDA_PcbFrame* frame, wxDC* DC )
         }
     }
 
-    /* Suppression des pistes en l'air */
-    segment     = frame->m_Pcb->m_Track;
+    // removal of unconnected tracks
     percent    = 0; 
     oldpercent = -1;
     oldnetcode = 0; 
     
-    PtStartNetCode = frame->m_Pcb->m_Track;
-    for( ii = 0; segment != NULL; segment = (TRACK*) NextS, ii++ )
+    segment = startNetcode = frame->m_Pcb->m_Track;
+    for( ii = 0;  segment;   segment = next, ii++ )
     {
-        NextS = segment->Pnext;
+        next = segment->Next();
         
-        /* Affiche activite */
+        // display activity
         percent = (100 * ii) / frame->m_Pcb->m_NbSegmTrack;
         if( percent != oldpercent )
         {
@@ -211,6 +211,7 @@ static void suppression_piste_non_connectee( WinEDA_PcbFrame* frame, wxDC* DC )
 
             msg.Printf( wxT( "%d " ), frame->m_Pcb->m_NbSegmTrack );
             Affiche_1_Parametre( frame, POS_AFF_MAX, wxT( "Max" ), msg, GREEN );
+            
             msg.Printf( wxT( "%d " ), ii );
             Affiche_1_Parametre( frame, POS_AFF_NUMSEGM, wxT( "Segm" ), msg, CYAN );
         }
@@ -220,73 +221,84 @@ static void suppression_piste_non_connectee( WinEDA_PcbFrame* frame, wxDC* DC )
 
         if( segment->GetNet() != oldnetcode )
         {
-            PtStartNetCode = segment; oldnetcode = segment->GetNet();
+            startNetcode = segment; 
+            oldnetcode = segment->GetNet();
         }
 
-        flag_erase = 0; type_end = 0;
+        flag_erase = 0; 
+        type_end = 0;
         /* y a t-il une pastille sur chaque extremite */
 
         masklayer = segment->ReturnMaskLayer();
 
-        ptr_pad = Fast_Locate_Pad_Connecte( frame->m_Pcb, segment->m_Start, masklayer );
-
-        if( ptr_pad != NULL )
+        D_PAD* pad;
+        
+        pad = Fast_Locate_Pad_Connecte( frame->m_Pcb, segment->m_Start, masklayer );
+        if( pad != NULL )
         {
-            segment->start = ptr_pad;
-            type_end |= START_SUR_PAD;
+            segment->start = pad;
+            type_end |= START_ON_PAD;
         }
 
-        ptr_pad = Fast_Locate_Pad_Connecte( frame->m_Pcb, segment->m_End, masklayer );
-
-        if( ptr_pad != NULL )
+        pad = Fast_Locate_Pad_Connecte( frame->m_Pcb, segment->m_End, masklayer );
+        if( pad != NULL )
         {
-            segment->end = ptr_pad;
-            type_end   |= END_SUR_PAD;
+            segment->end = pad;
+            type_end |= END_ON_PAD;
         }
 
-        /* Test si une extremite est connectee sur une piste */
-        if( (type_end & START_SUR_PAD ) == 0 )
+        // if not connected to a pad, test if segment's START is connected to another track
+        if( (type_end & START_ON_PAD ) == 0 )
         {
-            pt_other = Locate_Piste_Connectee( segment, frame->m_Pcb->m_Track,
+            other = Locate_Piste_Connectee( segment, frame->m_Pcb->m_Track,
                                                NULL, START );
-
-            if( pt_other == NULL )
+            if( other == NULL )
                 flag_erase |= 1;
 
-            else    /* Segment ou via connectee a cette extremite */
+            else    // segment or via connected to this end
             {
-                segment->start = pt_other;
-                if( pt_other->Type() == TYPEVIA ) /* recherche d'un autre segment */
+                segment->start = other;
+                
+                if( other->Type() == TYPEVIA )  
                 {
+                    // search for another segment following the via
+                    
                     segment->SetState( BUSY, ON );
-                    pt_via   = pt_other;
-                    pt_other = Locate_Piste_Connectee( pt_via, frame->m_Pcb->m_Track,
+                    
+                    TRACK* via = other;
+                    other = Locate_Piste_Connectee( via, frame->m_Pcb->m_Track,
                                                        NULL, START );
-                    if( pt_other == NULL )
+                    if( other == NULL )
                         flag_erase |= 2;
+                    
                     segment->SetState( BUSY, OFF );
                 }
             }
         }
 
-        if( (type_end & END_SUR_PAD ) == 0 )
+        // if not connected to a pad, test if segment's END is connected to another track
+        if( (type_end & END_ON_PAD ) == 0 )
         {
-            pt_other = Locate_Piste_Connectee( segment, frame->m_Pcb->m_Track,
+            other = Locate_Piste_Connectee( segment, frame->m_Pcb->m_Track,
                                                NULL, END );
-            if( pt_other == NULL )
+            if( other == NULL )
                 flag_erase |= 0x10;
-            else     /* Segment ou via connectee a cette extremite */
+            
+            else     // segment or via connected to this end
             {
-                segment->end = pt_other;
-                if( pt_other->Type() == TYPEVIA ) /* recherche d'un autre segment */
+                segment->end = other;
+                if( other->Type() == TYPEVIA )
                 {
+                    // search for another segment following the via
+                    
                     segment->SetState( BUSY, ON );
-                    pt_via = pt_other;
-
-                    pt_other = Locate_Piste_Connectee( pt_via, frame->m_Pcb->m_Track,
+                    
+                    TRACK* via = other;
+                    other = Locate_Piste_Connectee( via, frame->m_Pcb->m_Track,
                                                        NULL, END );
-                    if( pt_other == NULL )
+                    if( other == NULL )
                         flag_erase |= 0x20;
+                    
                     segment->SetState( BUSY, OFF );
                 }
             }
@@ -294,7 +306,7 @@ static void suppression_piste_non_connectee( WinEDA_PcbFrame* frame, wxDC* DC )
 
         if( flag_erase )
         {
-            oldpercent = -1;    /* force affichage activite */
+            oldpercent = -1;    // force dispay activity
             
             nbpoints_supprimes++; 
             ii--;
@@ -302,21 +314,20 @@ static void suppression_piste_non_connectee( WinEDA_PcbFrame* frame, wxDC* DC )
             msg.Printf( wxT( "%d " ), nbpoints_supprimes );
             Affiche_1_Parametre( frame, POS_AFF_VAR, wxT( "NoConn." ), msg, LIGHTRED );
 
-            /* rectification du pointeur segment pour repartir en debut
-             *      du block des segments de meme net_code */
-            if( segment == PtStartNetCode )
+            // update the pointer to start of the contiguous netcode group
+            if( segment == startNetcode )
             {
-                NextS = segment->Pnext;
-                PtStartNetCode = (TRACK*) NextS;
+                next = segment->Next();
+                startNetcode = next;
             }
             else
-                NextS = PtStartNetCode;
+                next = startNetcode;
 
-            /* Suppression du segment */
+            // remove segment from screen and board
             segment->Draw( frame->DrawPanel, DC, GR_XOR );
-            
             segment->DeleteStructure();
-            if( NextS == NULL )
+            
+            if( next == NULL )
                 break;
         }
     }
@@ -328,8 +339,9 @@ static int clean_segments( WinEDA_PcbFrame* frame, wxDC* DC )
 /************************************************************/
 /* Supprime segments nulls, points inutiles .. */
 {
-    TRACK*          segment, * pt_aux;
-    EDA_BaseStruct* NextS;
+    TRACK*          segment;
+    TRACK*          other;
+    TRACK*          next;
     int             ii, nbpoints_supprimes = 0;
     int             flag, no_inc, percent, oldpercent;
     wxString        msg;
@@ -344,15 +356,16 @@ static int clean_segments( WinEDA_PcbFrame* frame, wxDC* DC )
     nbpoints_supprimes = 0; 
     percent = 0; 
     oldpercent = -1;
+    
     frame->MsgPanel->EraseMsgBox();
     frame->Affiche_Message( _( "Clean Null Segments" ) );
 
     Affiche_1_Parametre( frame, POS_AFF_VAR, wxT( "NullSeg" ), wxT( "0" ), a_color );
     
     segment = frame->m_Pcb->m_Track;
-    for( segment = frame->m_Pcb->m_Track; segment != NULL; segment = (TRACK*) NextS )
+    for( segment = frame->m_Pcb->m_Track;  segment;  segment = next )
     {
-        NextS = segment->Pnext;
+        next = (TRACK*) segment->Next();
         if( !segment->IsNull() )
             continue;
 
@@ -375,7 +388,7 @@ static int clean_segments( WinEDA_PcbFrame* frame, wxDC* DC )
     oldpercent = -1;
     
     segment  = frame->m_Pcb->m_Track;
-    for( ii = 0; segment != NULL; segment = (TRACK*) segment->Pnext, ii++ )
+    for( ii = 0;  segment;  segment = (TRACK*) segment->Next(), ii++ )
     {
         /* affichage activite */
         percent = (100 * ii) / frame->m_Pcb->m_NbSegmTrack;
@@ -394,29 +407,29 @@ static int clean_segments( WinEDA_PcbFrame* frame, wxDC* DC )
                 return -1;
         }
 
-        for( pt_aux = (TRACK*) segment->Pnext; pt_aux != NULL; pt_aux = (TRACK*) NextS )
+        for( other = (TRACK*) segment->Next();  other;  other = next )
         {
             int erase = 0;
-            NextS = pt_aux->Pnext;
+            next = (TRACK*) other->Next();
 
-            if( segment->Type() != pt_aux->Type() )
+            if( segment->Type() != other->Type() )
                 continue;
             
-            if( segment->GetLayer() != pt_aux->GetLayer() )
+            if( segment->GetLayer() != other->GetLayer() )
                 continue;
             
-            if( segment->GetNet() != pt_aux->GetNet() )
+            if( segment->GetNet() != other->GetNet() )
                 break;
 
-            if( segment->m_Start == pt_aux->m_Start )
+            if( segment->m_Start == other->m_Start )
             {
-                if( segment->m_End == pt_aux->m_End )
+                if( segment->m_End == other->m_End )
                     erase = 1;
             }
 
-            if( segment->m_Start == pt_aux->m_End )
+            if( segment->m_Start == other->m_End )
             {
-                if( segment->m_End == pt_aux->m_Start )
+                if( segment->m_End == other->m_Start )
                     erase = 1;
             }
 
@@ -424,8 +437,8 @@ static int clean_segments( WinEDA_PcbFrame* frame, wxDC* DC )
             if( erase )
             {
                 ii--;
-                pt_aux->Draw( frame->DrawPanel, DC, GR_OR );
-                pt_aux->DeleteStructure();
+                other->Draw( frame->DrawPanel, DC, GR_OR );
+                other->DeleteStructure();
                 nbpoints_supprimes++;
 
                 msg.Printf( wxT( "  %d" ), nbpoints_supprimes );
@@ -446,12 +459,14 @@ static int clean_segments( WinEDA_PcbFrame* frame, wxDC* DC )
     Affiche_1_Parametre( frame, POS_AFF_VAR, _( "Merge" ), _( "0" ), a_color );
 
     ii = 0;
-    segment  = frame->m_Pcb->m_Track; 
-    for( segment = frame->m_Pcb->m_Track; segment!= NULL; segment = (TRACK*) NextS )
+    for( segment = frame->m_Pcb->m_Track;  segment;  segment = next )
     {
-        TRACK* pt_segm_s, * pt_segm_e, * pt_segm_delete;
+        TRACK*  segStart;
+        TRACK*  segEnd;
+        TRACK*  pt_segm_delete;
 
-        NextS = segment->Pnext;
+        next = (TRACK*) segment->Next();
+        
         /* affichage activite */
         ii++;
         percent = (100 * ii) / frame->m_Pcb->m_NbSegmTrack;
@@ -475,29 +490,30 @@ static int clean_segments( WinEDA_PcbFrame* frame, wxDC* DC )
 
         flag = no_inc = 0;
 
-        /* Recherche d'un point possible raccorde sur DEBUT de segment: */
-        for( pt_segm_s = (TRACK*) segment->Pnext; ; )
+        // search for a possible point that connects on START of segment
+        for( segStart = (TRACK*) segment->Next(); ; )
         {
-            pt_segm_s = Locate_Piste_Connectee( segment, pt_segm_s,
+            segStart = Locate_Piste_Connectee( segment, segStart,
                                                 NULL, START );
-            if( pt_segm_s )
+            if( segStart )
             {
-                /* les 2 segments doivent avoir meme largeur */
-                if( segment->m_Width != pt_segm_s->m_Width )
+                // the two segments must have the same width
+                if( segment->m_Width != segStart->m_Width )
                     break;
 
-                /* Ce ne peut etre une via */
-                if( pt_segm_s->Type() != TYPETRACK )
+                // it cannot be a via
+                if( segStart->Type() != TYPETRACK )
                     break;
 
                 /* On ne peut avoir que 1 seul segment connecte */
-                pt_segm_s->SetState( BUSY, ON );
-                pt_aux = Locate_Piste_Connectee( segment, frame->m_Pcb->m_Track,
+                segStart->SetState( BUSY, ON );
+                other = Locate_Piste_Connectee( segment, frame->m_Pcb->m_Track,
                                                  NULL, START );
-                pt_segm_s->SetState( BUSY, OFF );
+                segStart->SetState( BUSY, OFF );
 
-                if( pt_aux == NULL )
-                    flag = 1;/* OK */
+                if( other == NULL )
+                    flag = 1;           /* OK */
+                
                 break;
             }
             break;
@@ -505,7 +521,7 @@ static int clean_segments( WinEDA_PcbFrame* frame, wxDC* DC )
 
         if( flag )    /* debut de segment raccorde a un autre segment */
         {
-            pt_segm_delete = AlignSegment( frame->m_Pcb, segment, pt_segm_s, START );
+            pt_segm_delete = AlignSegment( frame->m_Pcb, segment, segStart, START );
             if( pt_segm_delete )
             {
                 nbpoints_supprimes++; no_inc = 1;
@@ -514,27 +530,27 @@ static int clean_segments( WinEDA_PcbFrame* frame, wxDC* DC )
         }
 
         /* Recherche d'un point possible raccorde sur FIN de segment: */
-        for( pt_segm_e = (TRACK*) segment->Pnext; ; )
+        for( segEnd = (TRACK*) segment->Next(); ; )
         {
-            pt_segm_e = Locate_Piste_Connectee( segment, pt_segm_e,
+            segEnd = Locate_Piste_Connectee( segment, segEnd,
                                                 NULL, END );
-            if( pt_segm_e )
+            if( segEnd )
             {
-                /* les 2 segments doivent avoir meme largeur */
-                if( segment->m_Width != pt_segm_e->m_Width )
+                if( segment->m_Width != segEnd->m_Width )
                     break;
                 
-                /* Ce ne peut etre une via */
-                if( pt_segm_e->Type() != TYPETRACK )
+                if( segEnd->Type() != TYPETRACK )
                     break;
 
                 /* On ne peut avoir que 1 seul segment connecte */
-                pt_segm_e->SetState( BUSY, ON );
-                pt_aux = Locate_Piste_Connectee( segment, frame->m_Pcb->m_Track,
+                segEnd->SetState( BUSY, ON );
+                other = Locate_Piste_Connectee( segment, frame->m_Pcb->m_Track,
                                                  NULL, END );
-                pt_segm_e->SetState( BUSY, OFF );
-                if( pt_aux == NULL )
-                    flag |= 2;/* Ok */
+                segEnd->SetState( BUSY, OFF );
+                
+                if( other == NULL )
+                    flag |= 2;          /* Ok */
+                
                 break;
             }
             else
@@ -543,10 +559,11 @@ static int clean_segments( WinEDA_PcbFrame* frame, wxDC* DC )
 
         if( flag & 2 )    /* FIN de segment raccorde a un autre segment */
         {
-            pt_segm_delete = AlignSegment( frame->m_Pcb, segment, pt_segm_e, END );
+            pt_segm_delete = AlignSegment( frame->m_Pcb, segment, segEnd, END );
             if( pt_segm_delete )
             {
-                nbpoints_supprimes++; no_inc = 1;
+                nbpoints_supprimes++; 
+                no_inc = 1;
                 pt_segm_delete->DeleteStructure();
             }
         }
@@ -556,7 +573,7 @@ static int clean_segments( WinEDA_PcbFrame* frame, wxDC* DC )
             msg.Printf( wxT( "%d " ), nbpoints_supprimes );
             Affiche_1_Parametre( frame, POS_AFF_VAR, wxEmptyString, msg, a_color );
             
-            NextS = segment->Pnext;
+            next = (TRACK*) segment->Next();
         }
     }
 
@@ -568,6 +585,10 @@ static int clean_segments( WinEDA_PcbFrame* frame, wxDC* DC )
 static TRACK* AlignSegment( BOARD* Pcb, TRACK* pt_ref, TRACK* pt_segm, int extremite )
 /****************************************************************************/
 
+/**
+ * Function AlignSegment
+ */
+
 /* Routine utilisee par clean_segments.
  *  Verifie l'alignement de pt_segm / pt_ref. et verifie que le point commun
  *  a faire disparaitre n'est pas sur un pad.
@@ -577,16 +598,15 @@ static TRACK* AlignSegment( BOARD* Pcb, TRACK* pt_ref, TRACK* pt_segm, int extre
  *  sinon retourne NULL
  */
 {
-    int refdx, refdy, segmdx, segmdy;/* projections des segments */
     int flag = 0;
 
-    refdx  = pt_ref->m_End.x - pt_ref->m_Start.x; 
-    refdy = pt_ref->m_End.y - pt_ref->m_Start.y;
+    int refdx = pt_ref->m_End.x - pt_ref->m_Start.x; 
+    int refdy = pt_ref->m_End.y - pt_ref->m_Start.y;
     
-    segmdx = pt_segm->m_End.x - pt_segm->m_Start.x; 
-    segmdy = pt_segm->m_End.y - pt_segm->m_Start.y;
+    int segmdx = pt_segm->m_End.x - pt_segm->m_Start.x; 
+    int segmdy = pt_segm->m_End.y - pt_segm->m_Start.y;
 
-    /* Tst alignement vertical possible: */
+    // test for vertical alignment
     if( refdx == 0 )
     {
         if( segmdx != 0 )
@@ -594,7 +614,8 @@ static TRACK* AlignSegment( BOARD* Pcb, TRACK* pt_ref, TRACK* pt_segm, int extre
         else
             flag = 1;
     }
-    /* Tst alignement horizontal possible: */
+    
+    // test for horizontal alignment
     if( refdy == 0 )
     {
         if( segmdy != 0 )
@@ -607,7 +628,7 @@ static TRACK* AlignSegment( BOARD* Pcb, TRACK* pt_ref, TRACK* pt_segm, int extre
      *  il faut que refdy/refdx == (+/-)segmdy/segmdx, c.a.d meme direction */
     if( flag == 0 )
     {
-        if( (refdy * segmdx != refdx * segmdy)
+        if( (refdy * segmdx !=  refdx * segmdy)
          && (refdy * segmdx != -refdx * segmdy) )
             return NULL;
         flag = 4;
@@ -622,22 +643,22 @@ static TRACK* AlignSegment( BOARD* Pcb, TRACK* pt_ref, TRACK* pt_segm, int extre
                                       g_TabOneLayerMask[pt_ref->GetLayer()] ) )
             return NULL;
 
-        if( (pt_ref->m_Start.x == pt_segm->m_Start.x)
-         && (pt_ref->m_Start.y == pt_segm->m_Start.y) )
+        if( pt_ref->m_Start == pt_segm->m_Start )
         {
-            pt_ref->m_Start.x = pt_segm->m_End.x; pt_ref->m_Start.y = pt_segm->m_End.y;
+            pt_ref->m_Start = pt_segm->m_End; 
             return pt_segm;
         }
         else        /* connexion par la fin de pt_segm */
         {
-            pt_ref->m_Start.x = pt_segm->m_Start.x; pt_ref->m_Start.y = pt_segm->m_Start.y;
+            pt_ref->m_Start = pt_segm->m_Start; 
             return pt_segm;
         }
     }
     else    /* extremite == END */
     {
         /* Ce ne doit pas etre sur un pad */
-        if( Fast_Locate_Pad_Connecte( Pcb, pt_ref->m_End, g_TabOneLayerMask[pt_ref->GetLayer()] ) )
+        if( Fast_Locate_Pad_Connecte( Pcb, pt_ref->m_End, 
+                                     g_TabOneLayerMask[pt_ref->GetLayer()] ) )
             return NULL;
 
         if( pt_ref->m_End == pt_segm->m_Start )