diff --git a/pcbnew/edit_track_width.cpp b/pcbnew/edit_track_width.cpp
index 35ed23a520..244a5e86cd 100644
--- a/pcbnew/edit_track_width.cpp
+++ b/pcbnew/edit_track_width.cpp
@@ -28,7 +28,8 @@ bool WinEDA_PcbFrame::SetTrackSegmentWidth( TRACK*             aTrackItem,
                                             PICKED_ITEMS_LIST* aItemsListPicker,
                                             bool               aUseNetclassValue )
 {
-    int           initial_width, new_width, new_drill = -1;
+    int           initial_width, new_width;
+    int           initial_drill = -1,new_drill = -1;
     bool          change_ok = false;
     NETINFO_ITEM* net = NULL;
 
@@ -36,12 +37,15 @@ bool WinEDA_PcbFrame::SetTrackSegmentWidth( TRACK*             aTrackItem,
         net = GetBoard()->FindNet( aTrackItem->GetNet() );
 
     initial_width = aTrackItem->m_Width;
+
     if( net )
         new_width = net->GetTrackWidth();
     else
         new_width = GetBoard()->GetCurrentTrackWidth();
     if( aTrackItem->Type() == TYPE_VIA )
     {
+        if( !aTrackItem->IsDrillDefault() )
+            initial_drill = aTrackItem->GetDrillValue();
         if( net )
             new_width = net->GetViaSize();
         else
@@ -57,11 +61,6 @@ bool WinEDA_PcbFrame::SetTrackSegmentWidth( TRACK*             aTrackItem,
                 new_width = net->GetMicroViaSize();
         }
 
-        // Set drill value. Note: currently microvias have only a default drill value
-        if( new_drill > 0 )
-            aTrackItem->SetDrillValue(new_drill);
-        else
-            aTrackItem->SetDrillDefault( );
     }
 
     aTrackItem->m_Width = new_width;
@@ -76,7 +75,10 @@ bool WinEDA_PcbFrame::SetTrackSegmentWidth( TRACK*             aTrackItem,
     else if( initial_width > new_width )
         change_ok = true;
 
-    // if new width == initial_width: do nothing
+    // if new width == initial_width: do nothing,
+    // unless a via has its drill value changed
+    else if( (aTrackItem->Type() == TYPE_VIA) && (initial_drill != new_drill) )
+        change_ok = true;
 
     if( change_ok )
     {
@@ -88,6 +90,14 @@ bool WinEDA_PcbFrame::SetTrackSegmentWidth( TRACK*             aTrackItem,
             picker.m_Link = aTrackItem->Copy();
             aItemsListPicker->PushItem( picker );
             aTrackItem->m_Width = new_width;
+            if( aTrackItem->Type() == TYPE_VIA )
+            {
+                // Set new drill value. Note: currently microvias have only a default drill value
+                if( new_drill > 0 )
+                    aTrackItem->SetDrillValue(new_drill);
+                else
+                    aTrackItem->SetDrillDefault( );
+            }
         }
     }
     else
diff --git a/pcbnew/onrightclick.cpp b/pcbnew/onrightclick.cpp
index 135fa51a6d..123d75996f 100644
--- a/pcbnew/onrightclick.cpp
+++ b/pcbnew/onrightclick.cpp
@@ -471,28 +471,22 @@ void WinEDA_PcbFrame::createPopupMenuForTracks( TRACK* Track, wxMenu* PopMenu )
     {
         if( Track->Type() == TYPE_VIA )
         {
-            ADD_MENUITEM( PopMenu, ID_POPUP_PCB_EDIT_TRACKSEG, _(
-                              "Change Via Size and Drill" ), width_segment_xpm );
+            msg = AddHotkeyName( _( "Change Via Size and Drill" ), g_Board_Editor_Hokeys_Descr, HK_EDIT_ITEM );
+            ADD_MENUITEM( PopMenu, ID_POPUP_PCB_EDIT_TRACKSEG, msg, width_segment_xpm );
         }
         else
         {
             msg = AddHotkeyName( _( "Change Segment Width" ), g_Board_Editor_Hokeys_Descr, HK_EDIT_ITEM );
-            ADD_MENUITEM( PopMenu, ID_POPUP_PCB_EDIT_TRACKSEG,
-                              msg, width_segment_xpm );
+            ADD_MENUITEM( PopMenu, ID_POPUP_PCB_EDIT_TRACKSEG, msg, width_segment_xpm );
             ADD_MENUITEM( PopMenu, ID_POPUP_PCB_EDIT_TRACK,
                           _( "Change Track Width" ), width_track_xpm );
         }
-        ADD_MENUITEM_WITH_SUBMENU( PopMenu, Append_Track_Width_List( GetBoard() ),
-                                   ID_POPUP_PCB_SELECT_WIDTH,
-                                   _( "Select Track Width" ), width_track_xpm );
     }
 
-    else    // Allows switching to an other track/via size when routing
-    {
-        ADD_MENUITEM_WITH_SUBMENU( PopMenu, Append_Track_Width_List( GetBoard() ),
-                                   ID_POPUP_PCB_SELECT_WIDTH,
-                                   _( "Select Track Width" ), width_track_xpm );
-    }
+    // Allows switching to an other track/via size when routing
+    ADD_MENUITEM_WITH_SUBMENU( PopMenu, Append_Track_Width_List( GetBoard() ),
+                               ID_POPUP_PCB_SELECT_WIDTH,
+                               _( "Select Track Width" ), width_track_xpm );
 
     // Delete control:
     PopMenu->AppendSeparator();
diff --git a/version.txt b/version.txt
index 3f2a8545a2..7feec47dfd 100644
--- a/version.txt
+++ b/version.txt
@@ -1,4 +1,4 @@
 release version:
-2010 dec 03 (BZR R2365)
+2010 dec 03 (BZR R2639)
 files (.zip,.tgz):
 kicad-2010-12-03-testing