diff --git a/pcbnew/generators/pcb_tuning_pattern.cpp b/pcbnew/generators/pcb_tuning_pattern.cpp
index 6ca265e215..0ce229a3d0 100644
--- a/pcbnew/generators/pcb_tuning_pattern.cpp
+++ b/pcbnew/generators/pcb_tuning_pattern.cpp
@@ -2,7 +2,7 @@
  * This program source code file is part of KiCad, a free EDA CAD application.
  *
  * Copyright (C) 2023 Alex Shvartzkop <dudesuchamazing@gmail.com>
- * Copyright (C) 2023 KiCad Developers, see AUTHORS.txt for contributors.
+ * Copyright (C) 2024 KiCad Developers, see AUTHORS.txt for contributors.
  *
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -498,11 +498,11 @@ protected:
 
     bool baselineValid();
 
-    bool initBaseLine( PNS::ROUTER* aRouter, int aLayer, BOARD* aBoard, VECTOR2I& aStart,
+    bool initBaseLine( PNS::ROUTER* aRouter, int aPNSLayer, BOARD* aBoard, VECTOR2I& aStart,
                        VECTOR2I& aEnd, NETINFO_ITEM* aNet,
                        std::optional<SHAPE_LINE_CHAIN>& aBaseLine );
 
-    bool initBaseLines( PNS::ROUTER* aRouter, int aLayer, BOARD* aBoard );
+    bool initBaseLines( PNS::ROUTER* aRouter, int aPNSLayer, BOARD* aBoard );
 
     bool removeToBaseline( PNS::ROUTER* aRouter, int aLayer, SHAPE_LINE_CHAIN& aBaseLine );
 
@@ -956,7 +956,7 @@ static std::optional<PNS::LINE> getPNSLine( const VECTOR2I& aStart, const VECTOR
 }
 
 
-bool PCB_TUNING_PATTERN::initBaseLine( PNS::ROUTER* aRouter, int aLayer, BOARD* aBoard,
+bool PCB_TUNING_PATTERN::initBaseLine( PNS::ROUTER* aRouter, int aPNSLayer, BOARD* aBoard,
                                        VECTOR2I& aStart, VECTOR2I& aEnd, NETINFO_ITEM* aNet,
                                        std::optional<SHAPE_LINE_CHAIN>& aBaseLine )
 {
@@ -967,8 +967,8 @@ bool PCB_TUNING_PATTERN::initBaseLine( PNS::ROUTER* aRouter, int aLayer, BOARD*
 
     VECTOR2I startSnapPoint, endSnapPoint;
 
-    PNS::LINKED_ITEM* startItem = pickSegment( aRouter, aStart, aLayer, startSnapPoint );
-    PNS::LINKED_ITEM* endItem = pickSegment( aRouter, aEnd, aLayer, endSnapPoint );
+    PNS::LINKED_ITEM* startItem = pickSegment( aRouter, aStart, aPNSLayer, startSnapPoint );
+    PNS::LINKED_ITEM* endItem = pickSegment( aRouter, aEnd, aPNSLayer, endSnapPoint );
 
     wxASSERT( startItem );
     wxASSERT( endItem );
@@ -996,7 +996,7 @@ bool PCB_TUNING_PATTERN::initBaseLine( PNS::ROUTER* aRouter, int aLayer, BOARD*
 }
 
 
-bool PCB_TUNING_PATTERN::initBaseLines( PNS::ROUTER* aRouter, int aLayer, BOARD* aBoard )
+bool PCB_TUNING_PATTERN::initBaseLines( PNS::ROUTER* aRouter, int aPNSLayer, BOARD* aBoard )
 {
     m_baseLineCoupled.reset();
 
@@ -1007,7 +1007,7 @@ bool PCB_TUNING_PATTERN::initBaseLines( PNS::ROUTER* aRouter, int aLayer, BOARD*
 
     NETINFO_ITEM* net = track->GetNet();
 
-    if( !initBaseLine( aRouter, aLayer, aBoard, m_origin, m_end, net, m_baseLine ) )
+    if( !initBaseLine( aRouter, aPNSLayer, aBoard, m_origin, m_end, net, m_baseLine ) )
         return false;
 
     // Generate both baselines even if we're skewing.  We need the coupled baseline to run the
@@ -1019,7 +1019,7 @@ bool PCB_TUNING_PATTERN::initBaseLines( PNS::ROUTER* aRouter, int aLayer, BOARD*
             VECTOR2I coupledStart = snapToNearestTrack( m_origin, aBoard, coupledNet, nullptr );
             VECTOR2I coupledEnd = snapToNearestTrack( m_end, aBoard, coupledNet, nullptr );
 
-            return initBaseLine( aRouter, aLayer, aBoard, coupledStart, coupledEnd, coupledNet,
+            return initBaseLine( aRouter, aPNSLayer, aBoard, coupledStart, coupledEnd, coupledNet,
                                  m_baseLineCoupled );
         }
 
@@ -1298,7 +1298,7 @@ bool PCB_TUNING_PATTERN::Update( GENERATOR_TOOL* aTool, BOARD* aBoard, BOARD_COM
     KIGFX::VIEW*     view = aTool->GetManager()->GetView();
     PNS::ROUTER*     router = aTool->Router();
     PNS_KICAD_IFACE* iface = aTool->GetInterface();
-    PCB_LAYER_ID     layer = GetLayer();
+    PCB_LAYER_ID     pcblayer = GetLayer();
 
     auto hideRemovedItems = [&]( bool aHide )
     {
@@ -1315,20 +1315,27 @@ bool PCB_TUNING_PATTERN::Update( GENERATOR_TOOL* aTool, BOARD* aBoard, BOARD_COM
         }
     };
 
-    iface->SetStartLayerFromPCBNew( layer );
+    iface->SetStartLayerFromPCBNew( pcblayer );
 
     if( router->RoutingInProgress() )
     {
         router->StopRouting();
     }
 
+    // PNS layers and PCB layers have different coding. so convert PCB layer
+    // to PNS layer
+    int pnslayer;
+    if( pcblayer == F_Cu ) pnslayer = 0;
+    else if( pcblayer == B_Cu ) pnslayer = aBoard->GetCopperLayerCount() - 1;
+    else pnslayer = pcblayer/2 -1;
+
     if( !baselineValid() )
     {
-        initBaseLines( router, layer, aBoard );
+        initBaseLines( router, pnslayer, aBoard );
     }
     else
     {
-        if( resetToBaseline( aTool, layer, *m_baseLine, true ) )
+        if( resetToBaseline( aTool, pnslayer, *m_baseLine, true ) )
         {
             m_origin = m_baseLine->CPoint( 0 );
             m_end = m_baseLine->CPoint( -1 );
@@ -1341,9 +1348,9 @@ bool PCB_TUNING_PATTERN::Update( GENERATOR_TOOL* aTool, BOARD* aBoard, BOARD_COM
 
         if( m_tuningMode == DIFF_PAIR )
         {
-            if( !resetToBaseline( aTool, layer, *m_baseLineCoupled, false ) )
+            if( !resetToBaseline( aTool, pnslayer, *m_baseLineCoupled, false ) )
             {
-                initBaseLines( router, layer, aBoard );
+                initBaseLines( router, pnslayer, aBoard );
                 return false;
             }
         }
@@ -1355,8 +1362,8 @@ bool PCB_TUNING_PATTERN::Update( GENERATOR_TOOL* aTool, BOARD* aBoard, BOARD_COM
 
     wxCHECK( m_baseLine, false );
 
-    PNS::LINKED_ITEM* startItem = pickSegment( router, m_origin, layer, startSnapPoint, *m_baseLine);
-    PNS::LINKED_ITEM* endItem = pickSegment( router, m_end, layer, endSnapPoint, *m_baseLine );
+    PNS::LINKED_ITEM* startItem = pickSegment( router, m_origin, pnslayer, startSnapPoint, *m_baseLine);
+    PNS::LINKED_ITEM* endItem = pickSegment( router, m_end, pnslayer, endSnapPoint, *m_baseLine );
 
     wxASSERT( startItem );
     wxASSERT( endItem );
@@ -1366,7 +1373,7 @@ bool PCB_TUNING_PATTERN::Update( GENERATOR_TOOL* aTool, BOARD* aBoard, BOARD_COM
 
     router->SetMode( GetPNSMode() );
 
-    if( !router->StartRouting( startSnapPoint, startItem, layer ) )
+    if( !router->StartRouting( startSnapPoint, startItem, pnslayer ) )
     {
         //recoverBaseline( router );
         return false;
@@ -2239,6 +2246,7 @@ int DRAWING_TOOL::PlaceTuningPattern( const TOOL_EVENT& aEvent )
                 }
                 else
                 {
+
                     m_preview.FreeItems();
                     m_view->Update( &m_preview );
                 }