diff --git a/change_log.txt b/change_log.txt
index 27fabc95a3..68b17e01c6 100644
--- a/change_log.txt
+++ b/change_log.txt
@@ -4,6 +4,15 @@ Started 2007-June-11
 Please add newer entries at the top, list the date and your name with 
 email address.
 
+2007-aug-30 UPDATE   Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++ eeschema & pcbnew
+	more about programmable hotkeys.
+	Most existing hotkeys are programmable and displayed in popup menus or tools
+	Work still in progress but most features are ok.
+	some features are not fixed (mainly the configuration files path, which is
+	currently the home directory under unix systems and kicad/template under windows))
+
 
 2007-Aug-29 UPDATE   Dick Hollenbeck <dick@softplc.com>
 ================================================================================
diff --git a/common/hotkeys_basic.cpp b/common/hotkeys_basic.cpp
index 6b856a7ea7..d3ea61c264 100644
--- a/common/hotkeys_basic.cpp
+++ b/common/hotkeys_basic.cpp
@@ -1,9 +1,9 @@
-	/*********************/
-	/* hotkeys_basic.cpp */
-	/*********************/
+/*********************/
+/* hotkeys_basic.cpp */
+/*********************/
 
 /* Some functions to handle hotkeys in kicad
-*/
+ */
 #include "fctsys.h"
 #include "common.h"
 #include "wxstruct.h"
@@ -11,384 +11,477 @@
 #include "macros.h"
 
 /* Class to handle hotkey commnands. hotkeys have a default value
-This class allows (for the future..) the real key code changed by user(from a key code list file, TODO)
-*/
+ *  This class allows (for the future..) the real key code changed by user(from a key code list file, TODO)
+ */
 
-Ki_HotkeyInfo::Ki_HotkeyInfo(const wxChar * infomsg, int idcommand, int keycode)
+Ki_HotkeyInfo::Ki_HotkeyInfo( const wxChar* infomsg, int idcommand, int keycode )
 {
-	m_KeyCode = keycode;		// Key code (ascii value for ascii keys or wxWidgets code for function key
-	m_InfoMsg = infomsg;		// info message.
-	m_Idcommand = idcommand;	// internal id for the corresponding command (see hotkey_id_commnand list)
+    m_KeyCode   = keycode;      // Key code (ascii value for ascii keys or wxWidgets code for function key
+    m_InfoMsg   = infomsg;      // info message.
+    m_Idcommand = idcommand;    // internal id for the corresponding command (see hotkey_id_commnand list)
 }
 
+
 /* class to handle the printable name and the keycode
-*/
-struct hotkey_name_descr {
-	wxChar * m_Name;
-	int m_KeyCode;
+ */
+struct hotkey_name_descr
+{
+    wxChar* m_Name;
+    int     m_KeyCode;
 };
 
-struct hotkey_name_descr s_Notkey_Name_List[] = {
-	{wxT("F1"), WXK_F1},
-	{wxT("F2"), WXK_F2},
-	{wxT("F3"), WXK_F3},
-	{wxT("F4"), WXK_F4},
-	{wxT("F5"), WXK_F5},
-	{wxT("F6"), WXK_F6},
-	{wxT("F7"), WXK_F7},
-	{wxT("F8"), WXK_F8},
-	{wxT("F9"), WXK_F9},
-	{wxT("F10"), WXK_F10},
-	{wxT("F11"), WXK_F11},
-	{wxT("F12"), WXK_F12},
+struct hotkey_name_descr s_Hotkey_Name_List[] =
+{
+    { wxT( "F1" ),        WXK_F1           },
+    { wxT( "F2" ),        WXK_F2           },
+    { wxT( "F3" ),        WXK_F3           },
+    { wxT( "F4" ),        WXK_F4           },
+    { wxT( "F5" ),        WXK_F5           },
+    { wxT( "F6" ),        WXK_F6           },
+    { wxT( "F7" ),        WXK_F7           },
+    { wxT( "F8" ),        WXK_F8           },
+    { wxT( "F9" ),        WXK_F9           },
+    { wxT( "F10" ),       WXK_F10          },
+    { wxT( "F11" ),       WXK_F11          },
+    { wxT( "F12" ),       WXK_F12          },
 
-	{wxT("Esc"), WXK_ESCAPE},
-	{wxT("Delete"), WXK_DELETE},
-	{wxT("Esc"), WXK_ESCAPE},
-	{wxT("Tab"), '\t'},
-	{wxT("Backspace"), WXK_BACK},
-	{wxT("Insert"), WXK_INSERT},
+    { wxT( "Esc" ),       WXK_ESCAPE       },
+    { wxT( "Delete" ),    WXK_DELETE       },
+    { wxT( "Esc" ),       WXK_ESCAPE       },
+    { wxT( "Tab" ),       '\t'             },
+    { wxT( "Backspace" ), WXK_BACK         },
+    { wxT( "Insert" ),    WXK_INSERT       },
 
-	{wxT("End"), WXK_END},
-	{wxT("Page Up"), WXK_PAGEUP},
-	{wxT("Page Down"), WXK_PAGEDOWN},
-	{wxT("+"), WXK_ADD},
-	{wxT("-"), WXK_SUBTRACT},
+    { wxT( "End" ),       WXK_END          },
+    { wxT( "Page Up" ),   WXK_PAGEUP       },
+    { wxT( "Page Down" ), WXK_PAGEDOWN     },
+    { wxT( "+" ),         WXK_ADD          },
+    { wxT( "-" ),         WXK_SUBTRACT     },
 
-	{wxT("space"), ' '},
-	{wxT("?"), '?'},
-	{wxT("A"), 'A'},
-	{wxT("B"), 'B'},
-	{wxT("C"), 'C'},
-	{wxT("D"), 'D'},
-	{wxT("E"), 'E'},
-	{wxT("F"), 'F'},
-	{wxT("G"), 'G'},
-	{wxT("H"), 'H'},
-	{wxT("I"), 'I'},
-	{wxT("J"), 'J'},
-	{wxT("K"), 'K'},
-	{wxT("L"), 'L'},
-	{wxT("M"), 'M'},
-	{wxT("N"), 'N'},
-	{wxT("O"), 'O'},
-	{wxT("P"), 'P'},
-	{wxT("Q"), 'Q'},
-	{wxT("R"), 'R'},
-	{wxT("S"), 'S'},
-	{wxT("T"), 'T'},
-	{wxT("U"), 'U'},
-	{wxT("V"), 'V'},
-	{wxT("W"), 'W'},
-	{wxT("X"), 'X'},
-	{wxT("Y"), 'Y'},
-	{wxT("Z"), 'Z'},
+    { wxT( "Up" ),        WXK_UP           },
+    { wxT( "Down" ),      WXK_DOWN         },
+    { wxT( "Left" ),      WXK_LEFT         },
+    { wxT( "Right" ),     WXK_RIGHT        },
 
-	{wxT("Ctrl A"), GR_KB_CTRL + 'A'},
-	{wxT("Ctrl B"), GR_KB_CTRL + 'B'},
-	{wxT("Ctrl C"), GR_KB_CTRL + 'C'},
-	{wxT("Ctrl D"), GR_KB_CTRL + 'D'},
-	{wxT("Ctrl E"), GR_KB_CTRL + 'E'},
-	{wxT("Ctrl F"), GR_KB_CTRL + 'F'},
-	{wxT("Ctrl G"), GR_KB_CTRL + 'G'},
-	{wxT("Ctrl H"), GR_KB_CTRL + 'H'},
-	{wxT("Ctrl I"), GR_KB_CTRL + 'I'},
-	{wxT("Ctrl J"), GR_KB_CTRL + 'J'},
-	{wxT("Ctrl K"), GR_KB_CTRL + 'K'},
-	{wxT("Ctrl L"), GR_KB_CTRL + 'L'},
-	{wxT("Ctrl M"), GR_KB_CTRL + 'M'},
-	{wxT("Ctrl N"), GR_KB_CTRL + 'N'},
-	{wxT("Ctrl O"), GR_KB_CTRL + 'O'},
-	{wxT("Ctrl P"), GR_KB_CTRL + 'P'},
-	{wxT("Ctrl Q"), GR_KB_CTRL + 'Q'},
-	{wxT("Ctrl R"), GR_KB_CTRL + 'R'},
-	{wxT("Ctrl S"), GR_KB_CTRL + 'S'},
-	{wxT("Ctrl T"), GR_KB_CTRL + 'T'},
-	{wxT("Ctrl U"), GR_KB_CTRL + 'U'},
-	{wxT("Ctrl V"), GR_KB_CTRL + 'V'},
-	{wxT("Ctrl W"), GR_KB_CTRL + 'W'},
-	{wxT("Ctrl X"), GR_KB_CTRL + 'X'},
-	{wxT("Ctrl Y"), GR_KB_CTRL + 'Y'},
-	{wxT("Ctrl Z"), GR_KB_CTRL + 'Z'},
+    { wxT( "space" ),     ' '              },
+    { wxT( "?" ),         '?'              },
+    { wxT( "!" ),         '!'              },
+    { wxT( ":" ),         ':'              },
+    { wxT( "," ),         ','              },
+    { wxT( "*" ),         '*'              },
+    { wxT( "+" ),         '+'              },
+    { wxT( "-" ),         '-'              },
+    { wxT( "\%" ),         '%'              },
+    { wxT( "A" ),         'A'              },
+    { wxT( "B" ),         'B'              },
+    { wxT( "C" ),         'C'              },
+    { wxT( "D" ),         'D'              },
+    { wxT( "E" ),         'E'              },
+    { wxT( "F" ),         'F'              },
+    { wxT( "G" ),         'G'              },
+    { wxT( "H" ),         'H'              },
+    { wxT( "I" ),         'I'              },
+    { wxT( "J" ),         'J'              },
+    { wxT( "K" ),         'K'              },
+    { wxT( "L" ),         'L'              },
+    { wxT( "M" ),         'M'              },
+    { wxT( "N" ),         'N'              },
+    { wxT( "O" ),         'O'              },
+    { wxT( "P" ),         'P'              },
+    { wxT( "Q" ),         'Q'              },
+    { wxT( "R" ),         'R'              },
+    { wxT( "S" ),         'S'              },
+    { wxT( "T" ),         'T'              },
+    { wxT( "U" ),         'U'              },
+    { wxT( "V" ),         'V'              },
+    { wxT( "W" ),         'W'              },
+    { wxT( "X" ),         'X'              },
+    { wxT( "Y" ),         'Y'              },
+    { wxT( "Z" ),         'Z'              },
 
-	{wxT(""), 0}		// Do not change: end of list
+    { wxT( "Ctrl A" ),    GR_KB_CTRL + 'A' },
+    { wxT( "Ctrl B" ),    GR_KB_CTRL + 'B' },
+    { wxT( "Ctrl C" ),    GR_KB_CTRL + 'C' },
+    { wxT( "Ctrl D" ),    GR_KB_CTRL + 'D' },
+    { wxT( "Ctrl E" ),    GR_KB_CTRL + 'E' },
+    { wxT( "Ctrl F" ),    GR_KB_CTRL + 'F' },
+    { wxT( "Ctrl G" ),    GR_KB_CTRL + 'G' },
+    { wxT( "Ctrl H" ),    GR_KB_CTRL + 'H' },
+    { wxT( "Ctrl I" ),    GR_KB_CTRL + 'I' },
+    { wxT( "Ctrl J" ),    GR_KB_CTRL + 'J' },
+    { wxT( "Ctrl K" ),    GR_KB_CTRL + 'K' },
+    { wxT( "Ctrl L" ),    GR_KB_CTRL + 'L' },
+    { wxT( "Ctrl M" ),    GR_KB_CTRL + 'M' },
+    { wxT( "Ctrl N" ),    GR_KB_CTRL + 'N' },
+    { wxT( "Ctrl O" ),    GR_KB_CTRL + 'O' },
+    { wxT( "Ctrl P" ),    GR_KB_CTRL + 'P' },
+    { wxT( "Ctrl Q" ),    GR_KB_CTRL + 'Q' },
+    { wxT( "Ctrl R" ),    GR_KB_CTRL + 'R' },
+    { wxT( "Ctrl S" ),    GR_KB_CTRL + 'S' },
+    { wxT( "Ctrl T" ),    GR_KB_CTRL + 'T' },
+    { wxT( "Ctrl U" ),    GR_KB_CTRL + 'U' },
+    { wxT( "Ctrl V" ),    GR_KB_CTRL + 'V' },
+    { wxT( "Ctrl W" ),    GR_KB_CTRL + 'W' },
+    { wxT( "Ctrl X" ),    GR_KB_CTRL + 'X' },
+    { wxT( "Ctrl Y" ),    GR_KB_CTRL + 'Y' },
+    { wxT( "Ctrl Z" ),    GR_KB_CTRL + 'Z' },
+
+    { wxT( "" ),          0                } // Do not change: end of list
 };
 
 
 /****************************************************/
-wxString ReturnKeyNameFromKeyCode(int keycode)
+wxString ReturnKeyNameFromKeyCode( int keycode )
 /****************************************************/
+
 /*
-	* return the key name from the key code
-	* Only some wxWidgets key values are handled for function key
-	* @param key = key code (ascii value, or wxWidgets value for function keys)
-	* @return the key name in a wxString
-*/
+ * return the key name from the key code
+ * Only some wxWidgets key values are handled for function key
+ * @param key = key code (ascii value, or wxWidgets value for function keys)
+ * @return the key name in a wxString
+ */
 {
-wxString keyname, modifier, fullkeyname;
-int ii;
+    wxString keyname, modifier, fullkeyname;
+    int      ii;
 
-	if ( (keycode & GR_KB_CTRL) != 0 ) modifier << wxT("Ctrl ");
-	if ( (keycode & GR_KB_ALT) != 0 ) modifier << wxT("Alt ");
-	if ( (keycode & GR_KB_SHIFT) != 0 ) modifier << wxT("Shift ");
+    if( (keycode & GR_KB_CTRL) != 0 )
+        modifier << wxT( "Ctrl " );
+    if( (keycode & GR_KB_ALT) != 0 )
+        modifier << wxT( "Alt " );
+    if( (keycode & GR_KB_SHIFT) != 0 )
+        modifier << wxT( "Shift " );
 
-	keycode &= ~(GR_KB_CTRL|GR_KB_ALT|GR_KB_SHIFT);
-	for ( ii = 0; ; ii++)
-	{
-		if ( s_Notkey_Name_List[ii].m_KeyCode == 0 )
-		{
-			keyname = wxT("<unknown>");
-			break;
-		}
-		if ( s_Notkey_Name_List[ii].m_KeyCode == keycode)
-		{
-			keyname = s_Notkey_Name_List[ii].m_Name;
-			break;
-		}
-	}
-	
-	fullkeyname = modifier + keyname;
-	return fullkeyname;
+    keycode &= ~(GR_KB_CTRL | GR_KB_ALT | GR_KB_SHIFT);
+    for( ii = 0; ; ii++ )
+    {
+        if( s_Hotkey_Name_List[ii].m_KeyCode == 0 )
+        {
+            keyname = wxT( "<unknown>" );
+            break;
+        }
+        if( s_Hotkey_Name_List[ii].m_KeyCode == keycode )
+        {
+            keyname = s_Hotkey_Name_List[ii].m_Name;
+            break;
+        }
+    }
+
+    fullkeyname = modifier + keyname;
+    return fullkeyname;
 }
 
-/************************************************************/
-static int ReturnKeyCodeFromKeyName(const wxString & keyname)
-/************************************************************/
-/*
-	* return the key code from its key name
-	* Only some wxWidgets key values are handled for function key
-	* @param keyname = wxString key name to find in s_Notkey_Name_List[]
-	* @return the key code
-*/
-{
-int ii, keycode = 0;
 
-	for ( ii = 0; ; ii++)
-	{
-		if ( s_Notkey_Name_List[ii].m_KeyCode == 0 ) break;
-		if ( s_Notkey_Name_List[ii].m_Name == keyname)
-		{
-			keycode = s_Notkey_Name_List[ii].m_KeyCode;
-			break;
-		}
-	}
-	
-	return keycode;
+/**********************************************************************************/
+wxString AddHotkeyName( const wxString& text, Ki_HotkeyInfo** List, int CommandId )
+/**********************************************************************************/
+
+/*
+ * Add the key name from the Command id value ( m_Idcommand member value)
+ * @param List = pointer to a Ki_HotkeyInfo list of commands
+ * @param CommandId = Command Id value
+ * @return text (key name) in a wxString if found or text without modification
+ */
+{
+    wxString msg     = text;
+    wxString keyname = ReturnKeyNameFromCommandId( List, CommandId );
+
+    if( !keyname.IsEmpty() )
+        msg << wxT( " (" ) << keyname << wxT( ")" );
+    return msg;
 }
 
+
+/***********************************************************************/
+wxString ReturnKeyNameFromCommandId( Ki_HotkeyInfo** List, int CommandId )
+/***********************************************************************/
+
+/*
+ * return the key name from the Command id value ( m_Idcommand member value)
+ * @param List = pointer to a Ki_HotkeyInfo list of commands
+ * @param CommandId = Command Id value
+ * @return the key name in a wxString
+ */
+{
+    wxString keyname;
+
+    for( ; *List != NULL; List++ )
+    {
+        Ki_HotkeyInfo* hk_decr = *List;
+        if( hk_decr->m_Idcommand == CommandId )
+        {
+            keyname = ReturnKeyNameFromKeyCode( hk_decr->m_KeyCode );
+            break;
+        }
+    }
+
+    return keyname;
+}
+
+
+/************************************************************/
+static int ReturnKeyCodeFromKeyName( const wxString& keyname )
+/************************************************************/
+
+/*
+ * return the key code from its key name
+ * Only some wxWidgets key values are handled for function key
+ * @param keyname = wxString key name to find in s_Hotkey_Name_List[]
+ * @return the key code
+ */
+{
+    int ii, keycode = 0;
+
+    for( ii = 0; ; ii++ )
+    {
+        if( s_Hotkey_Name_List[ii].m_KeyCode == 0 )  // End of list reached
+            break;
+        if( keyname.CmpNoCase( s_Hotkey_Name_List[ii].m_Name ) == 0 )
+        {
+            keycode = s_Hotkey_Name_List[ii].m_KeyCode;
+            break;
+        }
+    }
+
+    return keycode;
+}
+
+
 /****************************************************************************/
-void DisplayHotkeyList(WinEDA_DrawFrame * frame, Ki_HotkeyInfo ** List)
+void DisplayHotkeyList( WinEDA_DrawFrame* frame, Ki_HotkeyInfo** List )
 /*****************************************************************************/
+
 /*
-	* Displays the current hotkey list
-	* @param frame = current open frame
-	* @param List = pointer to a Ki_HotkeyInfo list of commands
-	* @return none
-*/
+ * Displays the current hotkey list
+ * @param frame = current open frame
+ * @param List = pointer to a Ki_HotkeyInfo list of commands
+ * @return none
+ */
 {
-wxString keyname;
-	
-	wxString msg = _("Current hotkey list:\n\n");
-	for ( ; * List != NULL; List++ )
-	{
-		Ki_HotkeyInfo * hk_decr = * List;
-		msg += _("key ");
-		keyname = ReturnKeyNameFromKeyCode(hk_decr->m_KeyCode);
-		msg += keyname + wxT(":    ") + hk_decr->m_InfoMsg + wxT("\n");
-	}
-	DisplayInfo(frame, msg);
+    wxString keyname;
+
+    wxString msg = _( "Current hotkey list:\n\n" );
+
+    for( ; *List != NULL; List++ )
+    {
+        Ki_HotkeyInfo* hk_decr = *List;
+        msg    += _( "key " );
+        keyname = ReturnKeyNameFromKeyCode( hk_decr->m_KeyCode );
+        msg += keyname + wxT( ":    " ) + hk_decr->m_InfoMsg + wxT( "\n" );
+    }
+
+    DisplayInfo( frame, msg );
 }
 
+
 /******************************************************************/
-int GetCommandCodeFromHotkey(int key, Ki_HotkeyInfo ** List)
+int GetCommandCodeFromHotkey( int key, Ki_HotkeyInfo** List )
 /******************************************************************/
+
 /*
-	* Return an id identifier fron a key code for OnHotKey() function
-	* @param key = key code (ascii value, or wxWidgets value for function keys
-	* @param List = pointer to a Ki_HotkeyInfo list of commands
-	* @return the corresponding function identifier from the Ki_HotkeyInfo  List
-*/
+ * Return an id identifier fron a key code for OnHotKey() function
+ * @param key = key code (ascii value, or wxWidgets value for function keys
+ * @param List = pointer to a Ki_HotkeyInfo list of commands
+ * @return the corresponding function identifier from the Ki_HotkeyInfo  List
+ */
 {
-	for ( ; * List != NULL; List++ )
-	{
-		Ki_HotkeyInfo * hk_decr = * List;
-		if ( hk_decr->m_KeyCode == key ) return hk_decr->m_Idcommand;
-	}
-	
-	return 0;
+    for( ; *List != NULL; List++ )
+    {
+        Ki_HotkeyInfo* hk_decr = *List;
+        if( hk_decr->m_KeyCode == key )
+            return hk_decr->m_Idcommand;
+    }
+
+    return 0;
 }
 
+
 /*************************************************************************/
-int WinEDA_BasicFrame::WriteHotkeyConfigFile(const wxString & Filename,
-		Ki_HotkeyInfo ** List, bool verbose)
+int WinEDA_BasicFrame::WriteHotkeyConfigFile( const wxString& Filename,
+                                              Ki_HotkeyInfo** List, bool verbose )
 /*************************************************************************/
+
 /*
  * Create a configuration file (*.key) from the current hotkey list
  * @param Filename = default full file name to create. If void, A filename will be asked
  * @param List = pointer to the current hotkey list.
  * the ouput format is: shortcut  "key"  "function"
  * lines starting by # are comments
- * 
-*/
+ *
+ */
 {
-	wxString FullFilename = Filename;
-	FILE * cfgfile;
-	wxString msg;
-	if ( FullFilename.IsEmpty() || verbose)
-	{
-		wxString Mask, Path, Ext;
-		Ext = DEFAULT_HOTKEY_FILENAME_EXT;
-		Mask = wxT("*") + Ext;
-		Path = DEFAULT_HOTKEY_FILENAME_PATH;
-		FullFilename = EDA_FileSelector( _("Hotkey configuration file:"),
-						Path,				/* Chemin par defaut */
-						FullFilename,		/* nom fichier par defaut */
-						Ext,				/* extension par defaut */
-						Mask,				/* Masque d'affichage */
-						this,
-						wxFD_SAVE,
-						TRUE
-						);
-	}
-	if ( FullFilename.IsEmpty() ) return 0;
-	
-	cfgfile = wxFopen(FullFilename, wxT("wt"));
-	
-	if ( cfgfile == NULL )
-	{
-		if ( verbose )
-		{
-			msg = _("Unable to create ") + FullFilename;
-			DisplayError(this, msg);
-		}
-		return 0;
-	}
-	
-wxString keyname, infokey;
-	
-	msg = wxT("$hotkey list\n");
-	fprintf(cfgfile, CONV_TO_UTF8(msg));
-	
-	/* print the allowed keys, for info
-	*/
-	msg = wxT("# "); msg += _("Allowed keys:\n");
-	fprintf(cfgfile, CONV_TO_UTF8(msg));
-	msg.Empty();
-	for ( int ii = 0; ; ii ++ )
-	{
-		if ( s_Notkey_Name_List[ii].m_KeyCode == 0 ) break;;
-		if ( msg.IsEmpty() ) msg = wxT("# ");
-		else msg +=  wxT(", ");
-		msg += s_Notkey_Name_List[ii].m_Name;
-		if ( msg.Len() > 60 )
-		{
-			msg += wxT("\n");
-			fprintf(cfgfile, CONV_TO_UTF8(msg));
-			msg.Empty();
-		}
-	}
-	/* print the last line */
-	if ( ! msg.IsEmpty() ) msg += wxT("\n");
-	msg += wxT("#\n#\n");
-	fprintf(cfgfile, CONV_TO_UTF8(msg));
-	
-	/* Print the current list */
-	for ( ; * List != NULL; List++ )
-	{
-		Ki_HotkeyInfo * hk_decr = * List;
-		msg = wxT("shortcut   ");
-		keyname = ReturnKeyNameFromKeyCode(hk_decr->m_KeyCode);
-		AddDelimiterString( keyname );
-		infokey = hk_decr->m_InfoMsg;
-		AddDelimiterString( infokey );
-		msg += keyname + wxT(":    ") + infokey + wxT("\n");
-		fprintf(cfgfile, CONV_TO_UTF8(msg));
-	}
-	msg = wxT("$Endlist\n");
-	fprintf(cfgfile, CONV_TO_UTF8(msg));
-	fclose(cfgfile);
-	return 1;
+    wxString FullFilename = Filename;
+    FILE*    cfgfile;
+    wxString msg;
+
+    if( FullFilename.IsEmpty() || verbose )
+    {
+        wxString Mask, Path, Ext;
+        Ext  = DEFAULT_HOTKEY_FILENAME_EXT;
+        Mask = wxT( "*" ) + Ext;
+        Path = DEFAULT_HOTKEY_FILENAME_PATH;
+        FullFilename = EDA_FileSelector( _( "Hotkey configuration file:" ),
+                                         Path,          /* Chemin par defaut */
+                                         FullFilename,  /* nom fichier par defaut */
+                                         Ext,           /* extension par defaut */
+                                         Mask,          /* Masque d'affichage */
+                                         this,
+                                         wxFD_SAVE,
+                                         TRUE
+                                         );
+    }
+    if( FullFilename.IsEmpty() )
+        return 0;
+
+    cfgfile = wxFopen( FullFilename, wxT( "wt" ) );
+
+    if( cfgfile == NULL )
+    {
+        if( verbose )
+        {
+            msg = _( "Unable to create " ) + FullFilename;
+            DisplayError( this, msg );
+        }
+        return 0;
+    }
+
+    wxString keyname, infokey;
+
+    msg = wxT( "$hotkey list\n" );
+    fprintf( cfgfile, CONV_TO_UTF8( msg ) );
+
+    /* print the allowed keys, for info
+     */
+    msg = wxT( "# " ); msg += _( "Allowed keys:\n" );
+    fprintf( cfgfile, CONV_TO_UTF8( msg ) );
+    msg.Empty();
+    for( int ii = 0; ; ii++ )
+    {
+        if( s_Hotkey_Name_List[ii].m_KeyCode == 0 )
+            break;;
+        if( msg.IsEmpty() )
+            msg = wxT( "# " );
+        else
+            msg += wxT( ", " );
+        msg += s_Hotkey_Name_List[ii].m_Name;
+        if( msg.Len() > 60 )
+        {
+            msg += wxT( "\n" );
+            fprintf( cfgfile, CONV_TO_UTF8( msg ) );
+            msg.Empty();
+        }
+    }
+
+    /* print the last line */
+    if( !msg.IsEmpty() )
+        msg += wxT( "\n" );
+    msg += wxT( "#\n#\n" );
+    fprintf( cfgfile, CONV_TO_UTF8( msg ) );
+
+    /* Print the current list */
+    for( ; *List != NULL; List++ )
+    {
+        Ki_HotkeyInfo* hk_decr = *List;
+        msg     = wxT( "shortcut   " );
+        keyname = ReturnKeyNameFromKeyCode( hk_decr->m_KeyCode );
+        AddDelimiterString( keyname );
+        infokey = hk_decr->m_InfoMsg;
+        AddDelimiterString( infokey );
+        msg += keyname + wxT( ":    " ) + infokey + wxT( "\n" );
+        fprintf( cfgfile, CONV_TO_UTF8( msg ) );
+    }
+
+    msg = wxT( "$Endlist\n" );
+    fprintf( cfgfile, CONV_TO_UTF8( msg ) );
+    fclose( cfgfile );
+    return 1;
 }
 
 
 /********************************************************************************************/
-int WinEDA_BasicFrame::ReadHotkeyConfigFile(const wxString & Filename,
-	Ki_HotkeyInfo ** CurrentHotkeyList, bool verbose)
+int WinEDA_BasicFrame::ReadHotkeyConfigFile( const wxString& Filename,
+                                             Ki_HotkeyInfo** CurrentHotkeyList, bool verbose )
 /********************************************************************************************/
+
 /*
  * Read a configuration file (<file>.key) and fill the current hotkey list with hotkeys
  * @param Filename = default full file name to create. If void, A filename will be asked
  * @param CurrentHotkeyList = current hotkey list to initialise.
  * the input format is: shortcut  "key"  "function"
  * lines starting by # are ignored (comments)
-* 
-*/
+ *
+ */
 {
-	wxString FullFilename = Filename;
-	FILE * cfgfile;
-	wxString msg;
-	if ( FullFilename.IsEmpty() || verbose )
-	{
-		wxString Mask, Path, Ext;
-		Ext = DEFAULT_HOTKEY_FILENAME_EXT;
-		Mask = wxT("*") + Ext;
-		Path = DEFAULT_HOTKEY_FILENAME_PATH;
-		FullFilename = EDA_FileSelector( _("Hotkey configuration file:"),
-						Path,				/* Chemin par defaut */
-						FullFilename,		/* nom fichier par defaut */
-						Ext,				/* extension par defaut */
-						Mask,				/* Masque d'affichage */
-						this,
-						wxFD_OPEN,
-						TRUE
-						);
-		if ( FullFilename.IsEmpty() ) return 0;
-	}
+    wxString FullFilename = Filename;
+    FILE*    cfgfile;
+    wxString msg;
 
-	cfgfile = wxFopen(FullFilename, wxT("rt"));
-	
-	if ( cfgfile == NULL )
-	{
-		if ( verbose )
-		{
-			msg = _("Unable to read ") + FullFilename;
-			DisplayError(this, msg);
-		}
-		return 0;
-	}
-	
-	wxString keyname;
-    char Line[1024];
-	int LineNum = 0;
-	/* Read the file */
+    if( FullFilename.IsEmpty() || verbose )
+    {
+        wxString Mask, Path, Ext;
+        Ext  = DEFAULT_HOTKEY_FILENAME_EXT;
+        Mask = wxT( "*" ) + Ext;
+        Path = DEFAULT_HOTKEY_FILENAME_PATH;
+        FullFilename = EDA_FileSelector( _( "Hotkey configuration file:" ),
+                                         Path,          /* Chemin par defaut */
+                                         FullFilename,  /* nom fichier par defaut */
+                                         Ext,           /* extension par defaut */
+                                         Mask,          /* Masque d'affichage */
+                                         this,
+                                         wxFD_OPEN,
+                                         TRUE
+                                         );
+        if( FullFilename.IsEmpty() )
+            return 0;
+    }
+
+    cfgfile = wxFopen( FullFilename, wxT( "rt" ) );
+
+    if( cfgfile == NULL )
+    {
+        if( verbose )
+        {
+            msg = _( "Unable to read " ) + FullFilename;
+            DisplayError( this, msg );
+        }
+        return 0;
+    }
+
+    wxString keyname;
+    char     Line[1024];
+    int      LineNum = 0;
+    /* Read the file */
     while(  GetLine( cfgfile, Line, &LineNum ) != NULL )
     {
-		char * line_type, * keyname, *fctname;
-		line_type = strtok(Line, " \t\n\r");
-		msg = CONV_FROM_UTF8(line_type);
-		if( msg != wxT("shortcut") ) continue;
-		if( msg == wxT("$Endlist") ) break;
+        char* line_type, * keyname, * fctname;
+        line_type = strtok( Line, " \t\n\r" );
+        msg = CONV_FROM_UTF8( line_type );
+        if( msg != wxT( "shortcut" ) )
+            continue;
+        if( msg == wxT( "$Endlist" ) )
+            break;
 
-		/* Get the key name */
-		strtok(NULL, "\"\n\r");
-		keyname = strtok(NULL, "\"\n\r");
-		strtok(NULL, "\"\n\r");
-		/* Get the command name */
-		fctname = strtok(NULL, "\"\n\r");
-		msg = CONV_FROM_UTF8(fctname);
-		/* search the hotkey in current hotkey list */
-		for (Ki_HotkeyInfo ** List = CurrentHotkeyList; * List != NULL; List++ )
-		{
-			Ki_HotkeyInfo * hk_decr = * List;
-			if (hk_decr->m_InfoMsg == msg )
-			{
-				msg = CONV_FROM_UTF8(keyname);
-				int code = ReturnKeyCodeFromKeyName(msg);
-				if ( code ) hk_decr->m_KeyCode = code;
-				break;
-			}
-		}
-	}
-	fclose(cfgfile);
-	return 1;
+        /* Get the key name */
+        strtok( NULL, "\"\n\r" );
+        keyname = strtok( NULL, "\"\n\r" );
+        strtok( NULL, "\"\n\r" );
+        /* Get the command name */
+        fctname = strtok( NULL, "\"\n\r" );
+        msg = CONV_FROM_UTF8( fctname );
+        /* search the hotkey in current hotkey list */
+        for( Ki_HotkeyInfo** List = CurrentHotkeyList; *List != NULL; List++ )
+        {
+            Ki_HotkeyInfo* hk_decr = *List;
+            if( hk_decr->m_InfoMsg == msg )
+            {
+                msg = CONV_FROM_UTF8( keyname );
+                int code = ReturnKeyCodeFromKeyName( msg );
+                if( code )
+                    hk_decr->m_KeyCode = code;
+                break;
+            }
+        }
+    }
+
+    fclose( cfgfile );
+    return 1;
 }
diff --git a/eeschema/controle.cpp b/eeschema/controle.cpp
index 04a0de79b8..0e9a7f8e28 100644
--- a/eeschema/controle.cpp
+++ b/eeschema/controle.cpp
@@ -294,6 +294,9 @@ void WinEDA_DrawFrame::GeneralControle( wxDC* DC, wxPoint MousePositionInPixels
 
     switch( g_KeyPressed )
     {
+    case 0:
+        break;
+
     case EDA_PANNING_UP_KEY:
         OnZoom( ID_ZOOM_PANNING_UP );
         curpos = m_CurrentScreen->m_Curseur;
@@ -315,23 +318,16 @@ void WinEDA_DrawFrame::GeneralControle( wxDC* DC, wxPoint MousePositionInPixels
         break;
 
 	case EDA_ZOOM_IN_FROM_MOUSE:
-    case WXK_F1:
         OnZoom( ID_ZOOM_PLUS_KEY );
         curpos = m_CurrentScreen->m_Curseur;
         break;
 
 	case EDA_ZOOM_OUT_FROM_MOUSE:
-    case WXK_F2:
         OnZoom( ID_ZOOM_MOINS_KEY );
         curpos = m_CurrentScreen->m_Curseur;
         break;
 
-    case WXK_F3:
-        OnZoom( ID_ZOOM_REDRAW_KEY );
-        break;
-
 	case EDA_ZOOM_CENTER_FROM_MOUSE:
-    case WXK_F4:
         OnZoom( ID_ZOOM_CENTER_KEY );
         curpos = m_CurrentScreen->m_Curseur;
         break;
diff --git a/eeschema/eeschema.cpp b/eeschema/eeschema.cpp
index 2e63d0808c..f048c91976 100644
--- a/eeschema/eeschema.cpp
+++ b/eeschema/eeschema.cpp
@@ -1,6 +1,6 @@
-		/***********************************/
-		/* eeschema.cpp - module principal */
-		/***********************************/
+/***********************************/
+/* eeschema.cpp - module principal */
+/***********************************/
 
 #ifdef __GNUG__
 #pragma implementation
@@ -26,51 +26,57 @@
 
 
 /* Routines locales */
-static void CreateScreens(void);
+static void CreateScreens( void );
 
 // Global variables
-wxString g_Main_Title( wxT("EESchema") );
+wxString    g_Main_Title( wxT( "EESchema" ) );
 
-	/************************************/
-	/* Called to initialize the program */
-	/************************************/
+/************************************/
+/* Called to initialize the program */
+/************************************/
 
 // Create a new application object: this macro will allow wxWindows to create
 // the application object during program execution (it's better than using a
 // static object for many reasons) and also declares the accessor function
 // wxGetApp() which will return the reference of the right type (i.e. MyApp and
 // not wxApp)
-IMPLEMENT_APP(WinEDA_App)
+IMPLEMENT_APP( WinEDA_App )
 
-bool WinEDA_App::OnInit(void)
+bool WinEDA_App::OnInit( void )
 {
-wxString FFileName;
-	EDA_Appl = this;
+    wxString FFileName;
 
-	g_DebugLevel = 0;	// Debug level */
+    EDA_Appl = this;
 
-	InitEDA_Appl( wxT("eeschema") );
+    g_DebugLevel = 0;   // Debug level */
 
-    if ( m_Checker && m_Checker->IsAnotherRunning() )
+    InitEDA_Appl( wxT( "eeschema" ) );
+
+    if( m_Checker && m_Checker->IsAnotherRunning() )
     {
-        if ( ! IsOK(NULL, _("Eeschema is already running, Continue?") ) )
-			return false;
+        if( !IsOK( NULL, _( "Eeschema is already running, Continue?" ) ) )
+            return false;
     }
 
-	if(argc > 1 ) FFileName = argv[1];
+    if( argc > 1 )
+        FFileName = argv[1];
 
-	CreateScreens();
+    CreateScreens();
 
-	/* init EESCHEMA */
-	GetSettings();			// read current setup
-	SeedLayers();
+    /* init EESCHEMA */
+    GetSettings();                                  // read current setup
+    SeedLayers();
+    Read_Hotkey_Config( SchematicFrame, false );    /* Must be called before creating the main frame
+                                                     *  in order to display the real hotkeys in menus
+                                                     *  or tool tips */
 
-	// Create main frame (schematic frame) :
-	SchematicFrame = new WinEDA_SchematicFrame(NULL, this,
-					 wxT("EESchema"), wxPoint(0,0), wxSize(600,400) );
+    // Create main frame (schematic frame) :
+    SchematicFrame = new WinEDA_SchematicFrame( NULL, this,
+                                               wxT( "EESchema" ),
+                                               wxPoint( 0, 0 ), wxSize( 600, 400 ) );
 
-	SetTopWindow(SchematicFrame);
-	SchematicFrame->Show(TRUE);
+    SetTopWindow( SchematicFrame );
+    SchematicFrame->Show( TRUE );
 
     if( CreateServer( SchematicFrame, KICAD_SCH_PORT_SERVICE_NUMBER ) )
     {
@@ -78,49 +84,47 @@ wxString FFileName;
         // sends EESCHEMA a command
         SetupServerFunction( RemoteCommand );
     }
-   
-	SchematicFrame->Zoom_Automatique(TRUE);
-	Read_Hotkey_Config(SchematicFrame, false);
 
-	/* Load file specified in the command line. */
-	if( ! FFileName.IsEmpty() )
-	{
-		ChangeFileNameExt(FFileName, g_SchExtBuffer);
-		wxSetWorkingDirectory( wxPathOnly(FFileName) );
-		if ( SchematicFrame->DrawPanel )
-			if ( SchematicFrame->LoadOneEEProject(FFileName, FALSE) <= 0 )
-				SchematicFrame->DrawPanel->Refresh(TRUE);	// File not found or error
-	}
+    SchematicFrame->Zoom_Automatique( TRUE );
 
-	else
-	{
-		Read_Config(wxEmptyString, TRUE); // Read config file ici si pas de fichier a charger
-		if ( SchematicFrame->DrawPanel )
-			SchematicFrame->DrawPanel->Refresh(TRUE);
-	}
+    /* Load file specified in the command line. */
+    if( !FFileName.IsEmpty() )
+    {
+        ChangeFileNameExt( FFileName, g_SchExtBuffer );
+        wxSetWorkingDirectory( wxPathOnly( FFileName ) );
+        if( SchematicFrame->DrawPanel )
+            if( SchematicFrame->LoadOneEEProject( FFileName, FALSE ) <= 0 )
+                SchematicFrame->DrawPanel->Refresh( TRUE ); // File not found or error
+    }
+    else
+    {
+        Read_Config( wxEmptyString, TRUE ); // Read config file ici si pas de fichier a charger
+        if( SchematicFrame->DrawPanel )
+            SchematicFrame->DrawPanel->Refresh( TRUE );
+    }
 
-	return TRUE;
+    return TRUE;
 }
 
 
 /******************************/
-static void CreateScreens(void)
+static void CreateScreens( void )
 /******************************/
+
 /*
- Fonction d'init des �crans utilis�s dans EESchema:
-*/
+ *  Fonction d'init des �crans utilis�s dans EESchema:
+ */
 {
-	/* creation des ecrans Sch , Lib  */
+    /* creation des ecrans Sch , Lib  */
 
-	if(ScreenSch == NULL )
-		ScreenSch = new SCH_SCREEN(SCHEMATIC_FRAME);
-	ScreenSch->m_FileName = g_DefaultSchematicFileName;
-	ScreenSch->m_Date = GenDate();
-	ActiveScreen = ScreenSch;
+    if( ScreenSch == NULL )
+        ScreenSch = new SCH_SCREEN( SCHEMATIC_FRAME );
+    ScreenSch->m_FileName = g_DefaultSchematicFileName;
+    ScreenSch->m_Date = GenDate();
+    ActiveScreen = ScreenSch;
 
-	if(ScreenLib == NULL )
-		ScreenLib = new SCH_SCREEN(LIBEDITOR_FRAME);
-	ScreenLib->SetZoom(4);
-	ScreenLib->m_UndoRedoCountMax = 10;
+    if( ScreenLib == NULL )
+        ScreenLib = new SCH_SCREEN( LIBEDITOR_FRAME );
+    ScreenLib->SetZoom( 4 );
+    ScreenLib->m_UndoRedoCountMax = 10;
 }
-
diff --git a/eeschema/hotkeys.cpp b/eeschema/hotkeys.cpp
index da97498587..104da0921c 100644
--- a/eeschema/hotkeys.cpp
+++ b/eeschema/hotkeys.cpp
@@ -1,6 +1,6 @@
-	/***************/
-	/* hotkeys.cpp */
-	/***************/
+/***************/
+/* hotkeys.cpp */
+/***************/
 
 #include "fctsys.h"
 
@@ -13,318 +13,370 @@
 
 #include "id.h"
 
-#include "hotkeys_basic.h"
+#include "hotkeys.h"
 
 #include "protos.h"
 
-enum hotkey_id_commnand {
-	HK_NOT_FOUND = 0,
-	HK_RESET_LOCAL_COORD,
-	HK_HELP,
-	HK_ZOOM_IN,
-	HK_ZOOM_OUT,
-	HK_ZOOM_REDRAW,
-	HK_ZOOM_CENTER,
-	HK_NEXT_SEARCH,
-	HK_DELETE,
-	HK_REPEAT_LAST,
-	HK_MOVEBLOCK_TO_DRAGBLOCK,
-	HK_ROTATE_COMPONENT,
-	HK_MIRROR_X_COMPONENT,
-	HK_MIRROR_Y_COMPONENT,
-	HK_ORIENT_NORMAL_COMPONENT,
-	HK_MOVE_COMPONENT,
-	HK_ADD_NEW_COMPONENT,
-	HK_BEGIN_WIRE
-};
+/* How to add a new hotkey:
+ *  add a new id in the enum hotkey_id_commnand like MY_NEW_ID_FUNCTION (see hotkeys.h).
+ *  add a new Ki_HotkeyInfo entry like:
+ *  static Ki_HotkeyInfo HkMyNewEntry(wxT("Command Label"), MY_NEW_ID_FUNCTION, default key value);
+ *      "Command Label" is the name used in hotkey list display, and the identifier in the hotkey list file
+ *      MY_NEW_ID_FUNCTION is an equivalent id function used in the switch in OnHotKey() function.
+ *      default key value is the default hotkey for this command. Can be overrided by the user hotkey list file
+ *  add the HkMyNewEntry pointer in the s_Schematic_Hotkey_List list ( or/and the s_LibEdit_Hotkey_List list)
+ *  Add the new code in the switch in OnHotKey() function.
+ *  when the variable PopupOn is true, an item is currently edited.
+ *  This can be usefull if the new function cannot be executed while an item is currently being edited
+ *  ( For example, one cannot start a new wire when a component is moving.)
+ *
+ *  Note: If an hotkey is a special key be sure the corresponding wxWidget keycode (WXK_XXXX)
+ *  is handled in the hotkey_name_descr s_Hotkey_Name_List list (see hotkeys_basic.cpp)
+ *  and see this list for some ascii keys (space ...)
+ */
 
 
 /* local variables */
 /* Hotkey list: */
-static Ki_HotkeyInfo HkBeginWire(wxT("begin Wire"), HK_BEGIN_WIRE, 'W');
-static Ki_HotkeyInfo HkAddComponent(wxT("Add Component"), HK_ADD_NEW_COMPONENT, 'A');
-static Ki_HotkeyInfo HkMirrorYComponent(wxT("Mirror Y Component"), HK_MIRROR_Y_COMPONENT, 'Y');
-static Ki_HotkeyInfo HkMirrorXComponent(wxT("Mirror X Component"), HK_MIRROR_X_COMPONENT, 'X');
-static Ki_HotkeyInfo HkOrientNormalComponent(wxT("Orient Normal Component"), HK_ORIENT_NORMAL_COMPONENT, 'N');
-static Ki_HotkeyInfo HkRotateComponent(wxT("Rotate Component"), HK_ROTATE_COMPONENT, 'R');
-static Ki_HotkeyInfo HkMoveComponent(wxT("Move Component"), HK_MOVE_COMPONENT, 'M');
-static Ki_HotkeyInfo HkMove2Drag(wxT("Switch move block to drag block"), HK_MOVEBLOCK_TO_DRAGBLOCK, '\t');
-static Ki_HotkeyInfo HkInsert(wxT("Repeat Last Item"), HK_REPEAT_LAST, WXK_INSERT);
-static Ki_HotkeyInfo HkDelete(wxT("Delete Item"), HK_DELETE, WXK_DELETE);
-static Ki_HotkeyInfo HkResetLocalCoord(wxT("Reset local coord."), HK_RESET_LOCAL_COORD, ' ');
-static Ki_HotkeyInfo HkNextSearch(wxT("Next Search"), HK_NEXT_SEARCH, WXK_F5);
-static Ki_HotkeyInfo HkZoomCenter(wxT("Zoom Center"), HK_ZOOM_CENTER, WXK_F4);
-static Ki_HotkeyInfo HkZoomRedraw(wxT("Zoom Redraw"), HK_ZOOM_REDRAW, WXK_F3);
-static Ki_HotkeyInfo HkZoomOut(wxT("Zoom Out"), HK_ZOOM_OUT, WXK_F2);
-static Ki_HotkeyInfo HkZoomIn(wxT("Zoom In"), HK_ZOOM_IN, WXK_F1);
-static Ki_HotkeyInfo HkHelp(wxT("Help: this message"), HK_HELP, '?');
+static Ki_HotkeyInfo    HkBeginWire( wxT( "begin Wire" ), HK_BEGIN_WIRE, 'W' );
+static Ki_HotkeyInfo    HkAddComponent( wxT( "Add Component" ), HK_ADD_NEW_COMPONENT, 'A' );
+static Ki_HotkeyInfo    HkMirrorYComponent( wxT(
+                                                "Mirror Y Component" ), HK_MIRROR_Y_COMPONENT, 'Y' );
+static Ki_HotkeyInfo    HkMirrorXComponent( wxT(
+                                                "Mirror X Component" ), HK_MIRROR_X_COMPONENT, 'X' );
+static Ki_HotkeyInfo    HkOrientNormalComponent( wxT(
+                                                     "Orient Normal Component" ),
+                                                 HK_ORIENT_NORMAL_COMPONENT, 'N' );
+static Ki_HotkeyInfo    HkRotateComponent( wxT( "Rotate Component" ), HK_ROTATE_COMPONENT, 'R' );
+static Ki_HotkeyInfo    HkMoveComponent( wxT( "Move Component" ), HK_MOVE_COMPONENT, 'M' );
+static Ki_HotkeyInfo    HkMove2Drag( wxT(
+                                         "Switch move block to drag block" ),
+                                     HK_MOVEBLOCK_TO_DRAGBLOCK, '\t' );
+static Ki_HotkeyInfo    HkInsert( wxT( "Repeat Last Item" ), HK_REPEAT_LAST, WXK_INSERT );
+static Ki_HotkeyInfo    HkDelete( wxT( "Delete Item" ), HK_DELETE, WXK_DELETE );
+static Ki_HotkeyInfo    HkResetLocalCoord( wxT( "Reset local coord." ), HK_RESET_LOCAL_COORD, ' ' );
+static Ki_HotkeyInfo    HkNextSearch( wxT( "Next Search" ), HK_NEXT_SEARCH, WXK_F5 );
+static Ki_HotkeyInfo    HkZoomCenter( wxT( "Zoom Center" ), HK_ZOOM_CENTER, WXK_F4 );
+static Ki_HotkeyInfo    HkZoomRedraw( wxT( "Zoom Redraw" ), HK_ZOOM_REDRAW, WXK_F3 );
+static Ki_HotkeyInfo    HkZoomOut( wxT( "Zoom Out" ), HK_ZOOM_OUT, WXK_F2 );
+static Ki_HotkeyInfo    HkZoomIn( wxT( "Zoom In" ), HK_ZOOM_IN, WXK_F1 );
+static Ki_HotkeyInfo    HkHelp( wxT( "Help: this message" ), HK_HELP, '?' );
 
 // List of hotkey descriptors for schematic
-Ki_HotkeyInfo *s_Schematic_Hotkey_List[] = {
-	&HkHelp,
-	&HkZoomIn, &HkZoomOut, &HkZoomRedraw, &HkZoomCenter,
-	&HkNextSearch, &HkResetLocalCoord,
-	&HkDelete, &HkInsert, &HkMove2Drag,
-	&HkMoveComponent, &HkAddComponent,
-	&HkRotateComponent, &HkMirrorXComponent, &HkMirrorYComponent, & HkOrientNormalComponent,
-	&HkBeginWire,
-	NULL
+Ki_HotkeyInfo* s_Schematic_Hotkey_List[] = {
+    &HkHelp,
+    &HkZoomIn,          &HkZoomOut,          &HkZoomRedraw,       &HkZoomCenter,
+    &HkNextSearch,      &HkResetLocalCoord,
+    &HkDelete,          &HkInsert,           &HkMove2Drag,
+    &HkMoveComponent,   &HkAddComponent,
+    &HkRotateComponent, &HkMirrorXComponent, &HkMirrorYComponent, &HkOrientNormalComponent,
+    &HkBeginWire,
+    NULL
 };
 
 // Library editor:
-static Ki_HotkeyInfo HkInsertPin(wxT("Repeat Pin"), HK_REPEAT_LAST, WXK_INSERT);
+static Ki_HotkeyInfo HkInsertPin( wxT( "Repeat Pin" ), HK_REPEAT_LAST, WXK_INSERT );
 
 // List of hotkey descriptors for libray editor
-Ki_HotkeyInfo *s_LibEdit_Hotkey_List[] =
+Ki_HotkeyInfo* s_LibEdit_Hotkey_List[] =
 {
-	&HkHelp,
-	&HkZoomIn, &HkZoomOut, &HkZoomRedraw, &HkZoomCenter,
-	&HkResetLocalCoord,
-	&HkInsertPin,
-	NULL
+    &HkHelp,
+    &HkZoomIn,          &HkZoomOut, &HkZoomRedraw, &HkZoomCenter,
+    &HkResetLocalCoord,
+    &HkInsertPin,
+    NULL
 };
 
 /***********************************************************/
-void WinEDA_SchematicFrame::OnHotKey(wxDC * DC, int hotkey,
-					EDA_BaseStruct * DrawStruct)
+void WinEDA_SchematicFrame::OnHotKey( wxDC* DC, int hotkey,
+                                      EDA_BaseStruct* DrawStruct )
 /***********************************************************/
+
 /* Hot keys. Some commands are relatives to the item under the mouse cursor
-	Commands are case insensitive
-	Zoom commands are not managed here
-*/
+ *  Commands are case insensitive
+ */
 {
-bool PopupOn = m_CurrentScreen->GetCurItem()  &&
-			m_CurrentScreen->GetCurItem()->m_Flags;
-bool RefreshToolBar = FALSE;	// We must refresh tool bar when the undo/redo tool state is modified
-	
-	if ( hotkey == 0 ) return;
+    bool PopupOn = m_CurrentScreen->GetCurItem()
+                   && m_CurrentScreen->GetCurItem()->m_Flags;
+    bool RefreshToolBar = FALSE; // We must refresh tool bar when the undo/redo tool state is modified
 
-wxPoint MousePos = m_CurrentScreen->m_MousePosition; 
+    if( hotkey == 0 )
+        return;
+
+    wxPoint MousePos = m_CurrentScreen->m_MousePosition;
+
+    // Remap the control key Ctrl A (0x01) to GR_KB_CTRL + 'A' (easier to handle...)
+    if( (hotkey & GR_KB_CTRL) != 0 )
+        hotkey += 'A' - 1;
+    /* Convert lower to upper case (the usual toupper function has problem with non ascii codes like function keys */
+    if( (hotkey >= 'a') && (hotkey <= 'z') )
+        hotkey += 'A' - 'a';
+
+    // Search command from key :
+    int CommandCode = GetCommandCodeFromHotkey( hotkey, s_Schematic_Hotkey_List );
 
-	// Remap the control key Ctrl A (0x01) to GR_KB_CTRL + 'A' (easier to handle...)
-	if ( (hotkey & GR_KB_CTRL) != 0 ) hotkey += 'A' - 1;
-	/* Convert lower to upper case (the usual toupper function has problem with non ascii codes like function keys */
-	if( (hotkey >= 'a') && (hotkey <= 'z') ) hotkey += 'A' - 'a';
-	
-	// Search command from key :
-	int CommandCode = GetCommandCodeFromHotkey(hotkey, s_Schematic_Hotkey_List);
     switch( CommandCode )
-	{
-		default:
-		case HK_NOT_FOUND:
-			return;
-			break;
-		
-		case HK_HELP:	// Display Current hotkey list
-			DisplayHotkeyList(this, s_Schematic_Hotkey_List);
-			break;
+    {
+    default:
+    case HK_NOT_FOUND:
+        return;
+        break;
 
-		case HK_RESET_LOCAL_COORD:     /* Reset the relative coord */
-			m_CurrentScreen->m_O_Curseur = m_CurrentScreen->m_Curseur;
-			break;
+    case HK_HELP:       // Display Current hotkey list
+        DisplayHotkeyList( this, s_Schematic_Hotkey_List );
+        break;
 
-		case HK_ZOOM_IN:
-		case HK_ZOOM_OUT:
-		case HK_ZOOM_REDRAW:
-		case HK_ZOOM_CENTER:
-			break;
+    case HK_RESET_LOCAL_COORD:         /* Reset the relative coord */
+        m_CurrentScreen->m_O_Curseur = m_CurrentScreen->m_Curseur;
+        break;
 
-		case HK_MOVEBLOCK_TO_DRAGBLOCK:    // Switch to drag mode, when block moving
-			HandleBlockEndByPopUp(BLOCK_DRAG, DC);
-			break;
+    case HK_ZOOM_IN:
+        OnZoom( ID_ZOOM_PLUS_KEY );
+        break;
 
-		case HK_DELETE:
-			if ( PopupOn ) break;
-			RefreshToolBar = LocateAndDeleteItem(this, DC);
-			m_CurrentScreen->SetModify();
-			m_CurrentScreen->SetCurItem( NULL);
-			TestDanglingEnds(m_CurrentScreen->EEDrawList, DC);
-			break;
+    case HK_ZOOM_OUT:
+        OnZoom( ID_ZOOM_MOINS_KEY );
+        break;
 
-		case HK_REPEAT_LAST:
-			if ( g_ItemToRepeat && (g_ItemToRepeat->m_Flags == 0)  )
-			{
-				RepeatDrawItem(DC);
-			}
-			else wxBell();
-			break;
+    case HK_ZOOM_REDRAW:
+        OnZoom( ID_ZOOM_REDRAW_KEY );
+        break;
 
-		case HK_NEXT_SEARCH :
-			if ( g_LastSearchIsMarker ) WinEDA_SchematicFrame::FindMarker(1);
-			else FindSchematicItem(wxEmptyString, 2);
-			break;
+    case HK_ZOOM_CENTER:
+        OnZoom( ID_ZOOM_CENTER_KEY );
+        break;
 
-        case HK_ADD_NEW_COMPONENT:	// Add component
-			if ( DrawStruct && DrawStruct->m_Flags ) break;
-            // switch to m_ID_current_state = ID_COMPONENT_BUTT;
-            if ( m_ID_current_state != ID_COMPONENT_BUTT ) SetToolID( ID_COMPONENT_BUTT, wxCURSOR_PENCIL, _("Add Component"));
-            OnLeftClick(DC, MousePos);
-			break;
+    case HK_MOVEBLOCK_TO_DRAGBLOCK:        // Switch to drag mode, when block moving
+        HandleBlockEndByPopUp( BLOCK_DRAG, DC );
+        break;
 
-		case HK_BEGIN_WIRE:	// Add wire
- 			if ( DrawStruct )	// An item is selected. If edited and not a wire, a new command is not possible
-			{
-				if ( DrawStruct->m_Flags )	// Item selected and edition in progress
-				{
-					if (DrawStruct->m_StructType == DRAW_SEGMENT_STRUCT_TYPE )
-					{
-						EDA_DrawLineStruct * segment = (EDA_DrawLineStruct *)DrawStruct;
-						if ( segment->m_Layer != LAYER_WIRE ) break;
-					}
-					else break;
-				}
-			}
-           // switch to m_ID_current_state = ID_WIRE_BUTT;
-            if ( m_ID_current_state != ID_WIRE_BUTT ) SetToolID( ID_WIRE_BUTT, wxCURSOR_PENCIL, _("Add Wire"));
-            OnLeftClick(DC, MousePos);
+    case HK_DELETE:
+        if( PopupOn )
+            break;
+        RefreshToolBar = LocateAndDeleteItem( this, DC );
+        m_CurrentScreen->SetModify();
+        m_CurrentScreen->SetCurItem( NULL );
+        TestDanglingEnds( m_CurrentScreen->EEDrawList, DC );
+        break;
+
+    case HK_REPEAT_LAST:
+        if( g_ItemToRepeat && (g_ItemToRepeat->m_Flags == 0) )
+        {
+            RepeatDrawItem( DC );
+        }
+        else
+            wxBell();
+        break;
+
+    case HK_NEXT_SEARCH:
+        if( g_LastSearchIsMarker )
+            WinEDA_SchematicFrame::FindMarker( 1 );
+        else
+            FindSchematicItem( wxEmptyString, 2 );
+        break;
+
+    case HK_ADD_NEW_COMPONENT:      // Add component
+        if( DrawStruct && DrawStruct->m_Flags )
             break;
 
-		case HK_ROTATE_COMPONENT:	// Component Rotation
-			if ( DrawStruct == NULL )
-			{
-				DrawStruct = PickStruct( GetScreen()->m_Curseur,
-					GetScreen()->EEDrawList, LIBITEM|TEXTITEM|LABELITEM );
-				if ( DrawStruct == NULL ) break;
-				if ( DrawStruct->m_StructType == DRAW_LIB_ITEM_STRUCT_TYPE )
-						DrawStruct = LocateSmallestComponent( GetScreen() );
-				if ( DrawStruct == NULL ) break;
-			}
-			switch (DrawStruct->m_StructType)
-			{
-				case DRAW_LIB_ITEM_STRUCT_TYPE:
-					if ( DrawStruct->m_Flags == 0 )
-					{
-						SaveCopyInUndoList(DrawStruct, IS_CHANGED);
-						RefreshToolBar = TRUE;
-					}
-						
-					CmpRotationMiroir(
-						(EDA_SchComponentStruct *) DrawStruct, DC, CMP_ROTATE_COUNTERCLOCKWISE );
-					break;
+        // switch to m_ID_current_state = ID_COMPONENT_BUTT;
+        if( m_ID_current_state != ID_COMPONENT_BUTT )
+            SetToolID( ID_COMPONENT_BUTT, wxCURSOR_PENCIL, _( "Add Component" ) );
+        OnLeftClick( DC, MousePos );
+        break;
 
-				case DRAW_TEXT_STRUCT_TYPE:
-				case DRAW_LABEL_STRUCT_TYPE:
-				case DRAW_GLOBAL_LABEL_STRUCT_TYPE:
-					if ( DrawStruct->m_Flags == 0 )
-					{
-						SaveCopyInUndoList(DrawStruct, IS_CHANGED);
-						RefreshToolBar = TRUE;
-					}
-						ChangeTextOrient( (DrawTextStruct*)DrawStruct, DC);
-						break;
-                        
-                default:;
-			}
-			break;
+    case HK_BEGIN_WIRE:                     // Add wire
+        if( DrawStruct )                    // An item is selected. If edited and not a wire, a new command is not possible
+        {
+            if( DrawStruct->m_Flags )       // Item selected and edition in progress
+            {
+                if( DrawStruct->m_StructType == DRAW_SEGMENT_STRUCT_TYPE )
+                {
+                    EDA_DrawLineStruct* segment = (EDA_DrawLineStruct*) DrawStruct;
+                    if( segment->m_Layer != LAYER_WIRE )
+                        break;
+                }
+                else
+                    break;
+            }
+        }
 
-		case HK_MIRROR_Y_COMPONENT:	// Mirror Y (Component)
-			if ( DrawStruct == NULL )
-				DrawStruct = LocateSmallestComponent( GetScreen() );
-			if ( DrawStruct )
-			{
-				if ( DrawStruct->m_Flags == 0 )
-				{
-					SaveCopyInUndoList(DrawStruct, IS_CHANGED);
-					RefreshToolBar = TRUE;
-				}
-				CmpRotationMiroir(
-					(EDA_SchComponentStruct *) DrawStruct, DC, CMP_MIROIR_Y );
-			}
-			break;
+        // switch to m_ID_current_state = ID_WIRE_BUTT;
+        if( m_ID_current_state != ID_WIRE_BUTT )
+            SetToolID( ID_WIRE_BUTT, wxCURSOR_PENCIL, _( "Add Wire" ) );
+        OnLeftClick( DC, MousePos );
+        break;
 
-		case HK_MIRROR_X_COMPONENT:	// Mirror X (Component)
-			if ( DrawStruct == NULL )
-				DrawStruct = LocateSmallestComponent( GetScreen() );
-			if ( DrawStruct )
-			{
-				if ( DrawStruct->m_Flags == 0 )
-				{
-					SaveCopyInUndoList(DrawStruct, IS_CHANGED);
-					RefreshToolBar = TRUE;
-				}
-				CmpRotationMiroir(
-					(EDA_SchComponentStruct *) DrawStruct, DC, CMP_MIROIR_X );
-			}
-			break;
+    case HK_ROTATE_COMPONENT:       // Component Rotation
+        if( DrawStruct == NULL )
+        {
+            DrawStruct = PickStruct( GetScreen()->m_Curseur,
+                                     GetScreen()->EEDrawList, LIBITEM | TEXTITEM | LABELITEM );
+            if( DrawStruct == NULL )
+                break;
+            if( DrawStruct->m_StructType == DRAW_LIB_ITEM_STRUCT_TYPE )
+                DrawStruct = LocateSmallestComponent( GetScreen() );
+            if( DrawStruct == NULL )
+                break;
+        }
 
- 		case HK_ORIENT_NORMAL_COMPONENT:	// Orient 0, no mirror (Component)
-			if ( DrawStruct == NULL )
-				DrawStruct = LocateSmallestComponent( GetScreen() );
-			if ( DrawStruct )
-			{
-				if ( DrawStruct->m_Flags == 0 )
-				{
-					SaveCopyInUndoList(DrawStruct, IS_CHANGED);
-					RefreshToolBar = TRUE;
-				}
-				CmpRotationMiroir(
-					(EDA_SchComponentStruct *) DrawStruct, DC, CMP_NORMAL );
-				TestDanglingEnds(m_CurrentScreen->EEDrawList, DC);
-			}
-			break;
+        switch( DrawStruct->m_StructType )
+        {
+        case DRAW_LIB_ITEM_STRUCT_TYPE:
+            if( DrawStruct->m_Flags == 0 )
+            {
+                SaveCopyInUndoList( DrawStruct, IS_CHANGED );
+                RefreshToolBar = TRUE;
+            }
 
-		case HK_MOVE_COMPONENT:	// Start move Component
-			if ( PopupOn ) break;
-			if ( DrawStruct == NULL )
-				DrawStruct = LocateSmallestComponent( GetScreen() );
-			if ( DrawStruct && (DrawStruct->m_Flags ==0) )
-			{
-				m_CurrentScreen->SetCurItem(DrawStruct);
-				Process_Move_Item(m_CurrentScreen->GetCurItem(), DC);
-			}
-			break;
-	}
-	
-	if ( RefreshToolBar ) SetToolbars();
+            CmpRotationMiroir(
+                (EDA_SchComponentStruct*) DrawStruct, DC, CMP_ROTATE_COUNTERCLOCKWISE );
+            break;
+
+        case DRAW_TEXT_STRUCT_TYPE:
+        case DRAW_LABEL_STRUCT_TYPE:
+        case DRAW_GLOBAL_LABEL_STRUCT_TYPE:
+            if( DrawStruct->m_Flags == 0 )
+            {
+                SaveCopyInUndoList( DrawStruct, IS_CHANGED );
+                RefreshToolBar = TRUE;
+            }
+            ChangeTextOrient( (DrawTextStruct*) DrawStruct, DC );
+            break;
+
+        default:
+            ;
+        }
+
+        break;
+
+    case HK_MIRROR_Y_COMPONENT:     // Mirror Y (Component)
+        if( DrawStruct == NULL )
+            DrawStruct = LocateSmallestComponent( GetScreen() );
+        if( DrawStruct )
+        {
+            if( DrawStruct->m_Flags == 0 )
+            {
+                SaveCopyInUndoList( DrawStruct, IS_CHANGED );
+                RefreshToolBar = TRUE;
+            }
+            CmpRotationMiroir(
+                (EDA_SchComponentStruct*) DrawStruct, DC, CMP_MIROIR_Y );
+        }
+        break;
+
+    case HK_MIRROR_X_COMPONENT:     // Mirror X (Component)
+        if( DrawStruct == NULL )
+            DrawStruct = LocateSmallestComponent( GetScreen() );
+        if( DrawStruct )
+        {
+            if( DrawStruct->m_Flags == 0 )
+            {
+                SaveCopyInUndoList( DrawStruct, IS_CHANGED );
+                RefreshToolBar = TRUE;
+            }
+            CmpRotationMiroir(
+                (EDA_SchComponentStruct*) DrawStruct, DC, CMP_MIROIR_X );
+        }
+        break;
+
+    case HK_ORIENT_NORMAL_COMPONENT:        // Orient 0, no mirror (Component)
+        if( DrawStruct == NULL )
+            DrawStruct = LocateSmallestComponent( GetScreen() );
+        if( DrawStruct )
+        {
+            if( DrawStruct->m_Flags == 0 )
+            {
+                SaveCopyInUndoList( DrawStruct, IS_CHANGED );
+                RefreshToolBar = TRUE;
+            }
+            CmpRotationMiroir(
+                (EDA_SchComponentStruct*) DrawStruct, DC, CMP_NORMAL );
+            TestDanglingEnds( m_CurrentScreen->EEDrawList, DC );
+        }
+        break;
+
+    case HK_MOVE_COMPONENT:     // Start move Component
+        if( PopupOn )
+            break;
+        if( DrawStruct == NULL )
+            DrawStruct = LocateSmallestComponent( GetScreen() );
+        if( DrawStruct && (DrawStruct->m_Flags ==0) )
+        {
+            m_CurrentScreen->SetCurItem( DrawStruct );
+            Process_Move_Item( m_CurrentScreen->GetCurItem(), DC );
+        }
+        break;
+    }
+
+    if( RefreshToolBar )
+        SetToolbars();
 }
 
 
 /***********************************************************/
-void WinEDA_LibeditFrame::OnHotKey(wxDC * DC, int hotkey,
-					EDA_BaseStruct * DrawStruct)
+void WinEDA_LibeditFrame::OnHotKey( wxDC* DC, int hotkey,
+                                    EDA_BaseStruct* DrawStruct )
 /***********************************************************/
+
 /* Hot keys for the component editot. Some commands are relatives to the item under the mouse cursor
-	Commands are case insensitive
-	Zoom commands are not managed here
-*/
+ *  Commands are case insensitive
+ */
 {
-bool RefreshToolBar = FALSE;	// We must refresh tool bar when the undo/redo tool state is modified
-	
-	if ( hotkey == 0 ) return;
+    bool RefreshToolBar = FALSE; // We must refresh tool bar when the undo/redo tool state is modified
 
-wxPoint MousePos = m_CurrentScreen->m_MousePosition; 
+    if( hotkey == 0 )
+        return;
+
+    wxPoint MousePos = m_CurrentScreen->m_MousePosition;
+
+    /* Convert lower to upper case (the usual toupper function has problem with non ascii codes like function keys */
+    if( (hotkey >= 'a') && (hotkey <= 'z') )
+        hotkey += 'A' - 'a';
+    int CommandCode = GetCommandCodeFromHotkey( hotkey, s_LibEdit_Hotkey_List );
 
-	/* Convert lower to upper case (the usual toupper function has problem with non ascii codes like function keys */
-	if( (hotkey >= 'a') && (hotkey <= 'z') ) hotkey += 'A' - 'a';
-	int CommandCode = GetCommandCodeFromHotkey(hotkey, s_LibEdit_Hotkey_List);
     switch( CommandCode )
-	{
-		default:
-		case HK_NOT_FOUND:
-			return;
-			break;
-		
-		case HK_HELP:	// Display Current hotkey list
-			DisplayHotkeyList(this, s_LibEdit_Hotkey_List);
-			break;
+    {
+    default:
+    case HK_NOT_FOUND:
+        return;
+        break;
 
-		case HK_ZOOM_IN:
-		case HK_ZOOM_OUT:
-		case HK_ZOOM_REDRAW:
-		case HK_ZOOM_CENTER:
-		case HK_RESET_LOCAL_COORD:
-			break;
+    case HK_HELP:       // Display Current hotkey list
+        DisplayHotkeyList( this, s_LibEdit_Hotkey_List );
+        break;
 
-		case HK_REPEAT_LAST:
-			if ( LibItemToRepeat && (LibItemToRepeat->m_Flags == 0) &&
-				 (LibItemToRepeat->m_StructType == COMPONENT_PIN_DRAW_TYPE) )
-			{
-				RepeatPinItem(DC, (LibDrawPin*) LibItemToRepeat);
-			}
-			else wxBell();
-			break;
-	}
+    case HK_RESET_LOCAL_COORD:         /* Reset the relative coord */
+        m_CurrentScreen->m_O_Curseur = m_CurrentScreen->m_Curseur;
+        break;
 
-	if ( RefreshToolBar ) SetToolbars();
+    case HK_ZOOM_IN:
+        OnZoom( ID_ZOOM_PLUS_KEY );
+        break;
+
+    case HK_ZOOM_OUT:
+        OnZoom( ID_ZOOM_MOINS_KEY );
+        break;
+
+    case HK_ZOOM_REDRAW:
+        OnZoom( ID_ZOOM_REDRAW_KEY );
+        break;
+
+    case HK_ZOOM_CENTER:
+        OnZoom( ID_ZOOM_CENTER_KEY );
+        break;
+
+    case HK_REPEAT_LAST:
+        if( LibItemToRepeat && (LibItemToRepeat->m_Flags == 0)
+           && (LibItemToRepeat->m_StructType == COMPONENT_PIN_DRAW_TYPE) )
+        {
+            RepeatPinItem( DC, (LibDrawPin*) LibItemToRepeat );
+        }
+        else
+            wxBell();
+        break;
+    }
+
+    if( RefreshToolBar )
+        SetToolbars();
 }
-
diff --git a/eeschema/hotkeys.h b/eeschema/hotkeys.h
new file mode 100644
index 0000000000..c5c0a30141
--- /dev/null
+++ b/eeschema/hotkeys.h
@@ -0,0 +1,35 @@
+/***************/
+/* hotkeys.h */
+/***************/
+#ifndef KOTKEYS_H
+#define KOTKEYS_H
+
+#include "hotkeys_basic.h"
+
+enum hotkey_id_commnand {
+    HK_NOT_FOUND = 0,
+    HK_RESET_LOCAL_COORD,
+    HK_HELP,
+    HK_ZOOM_IN,
+    HK_ZOOM_OUT,
+    HK_ZOOM_REDRAW,
+    HK_ZOOM_CENTER,
+    HK_NEXT_SEARCH,
+    HK_DELETE,
+    HK_REPEAT_LAST,
+    HK_MOVEBLOCK_TO_DRAGBLOCK,
+    HK_ROTATE_COMPONENT,
+    HK_MIRROR_X_COMPONENT,
+    HK_MIRROR_Y_COMPONENT,
+    HK_ORIENT_NORMAL_COMPONENT,
+    HK_MOVE_COMPONENT,
+    HK_ADD_NEW_COMPONENT,
+    HK_BEGIN_WIRE
+};
+
+// List of hotkey descriptors for schematic
+extern Ki_HotkeyInfo* s_Schematic_Hotkey_List[];
+// List of hotkey descriptors for libray editor
+extern Ki_HotkeyInfo* s_LibEdit_Hotkey_List[];
+
+#endif		// KOTKEYS_H
diff --git a/eeschema/onrightclick.cpp b/eeschema/onrightclick.cpp
index a6bc5551d4..429c3deeee 100644
--- a/eeschema/onrightclick.cpp
+++ b/eeschema/onrightclick.cpp
@@ -16,6 +16,7 @@
 
 #include "protos.h"
 #include "id.h"
+#include "hotkeys.h"
 
 #include "bitmaps.h"
 
@@ -272,24 +273,31 @@ void AddMenusForComponent( wxMenu* PopMenu, EDA_SchComponentStruct* Component )
 /* Add menu commands for a component
  */
 {
+    wxString msg;
+
     EDA_LibComponentStruct* LibEntry;
 
     LibEntry = FindLibPart( Component->m_ChipName.GetData(), wxEmptyString, FIND_ROOT );
 
     if( !Component->m_Flags )
     {
+        msg = AddHotkeyName( _( "Move Component" ), s_Schematic_Hotkey_List, HK_MOVE_COMPONENT );
         ADD_MENUITEM( PopMenu, ID_POPUP_SCH_MOVE_CMP_REQUEST,
-                      _( "Move Component   (M)" ), move_xpm );
+                      msg, move_xpm );
     }
 
     // add menu orient et sous menu:
     wxMenu* orientmenu = new wxMenu;
+    msg = AddHotkeyName( _( "Rotate +" ), s_Schematic_Hotkey_List, HK_ROTATE_COMPONENT );
     ADD_MENUITEM( orientmenu, ID_POPUP_SCH_ROTATE_CMP_COUNTERCLOCKWISE,
-                  _( "Rotate +  (R)" ), rotate_pos_xpm );
+                  msg, rotate_pos_xpm );
     ADD_MENUITEM( orientmenu, ID_POPUP_SCH_ROTATE_CMP_CLOCKWISE, _( "Rotate -" ), rotate_neg_xpm );
-    ADD_MENUITEM( orientmenu, ID_POPUP_SCH_MIROR_X_CMP, _( "Mirror --  (X)" ), mirror_V_xpm );
-    ADD_MENUITEM( orientmenu, ID_POPUP_SCH_MIROR_Y_CMP, _( "Mirror ||  (Y)" ), mirror_H_xpm );
-    ADD_MENUITEM( orientmenu, ID_POPUP_SCH_ORIENT_NORMAL_CMP, _( "Normal  (N)" ), normal_xpm );
+    msg = AddHotkeyName( _( "Mirror --" ), s_Schematic_Hotkey_List, HK_MIRROR_X_COMPONENT );
+    ADD_MENUITEM( orientmenu, ID_POPUP_SCH_MIROR_X_CMP, msg, mirror_V_xpm );
+    msg = AddHotkeyName( _( "Mirror ||" ), s_Schematic_Hotkey_List, HK_MIRROR_Y_COMPONENT );
+    ADD_MENUITEM( orientmenu, ID_POPUP_SCH_MIROR_Y_CMP, msg, mirror_H_xpm );
+    msg = AddHotkeyName( _( "Normal" ), s_Schematic_Hotkey_List, HK_ORIENT_NORMAL_COMPONENT );
+    ADD_MENUITEM( orientmenu, ID_POPUP_SCH_ORIENT_NORMAL_CMP, msg, normal_xpm );
     ADD_MENUITEM_WITH_SUBMENU( PopMenu, orientmenu,
                                ID_POPUP_SCH_GENERIC_ORIENT_CMP, _(
                                    "Orient Component" ), orient_xpm );
diff --git a/eeschema/tool_lib.cpp b/eeschema/tool_lib.cpp
index 001ba070ce..4805824e30 100644
--- a/eeschema/tool_lib.cpp
+++ b/eeschema/tool_lib.cpp
@@ -1,6 +1,6 @@
-	/********************************************/
-	/*	tool_lib.cpp: construction des toolbars */
-	/********************************************/
+/********************************************/
+/*	tool_lib.cpp: construction des toolbars */
+/********************************************/
 
 #include "fctsys.h"
 #include "gr_basic.h"
@@ -11,6 +11,7 @@
 #include "general.h"
 
 #include "protos.h"
+#include "hotkeys.h"
 
 #define BITMAP wxBitmap
 
@@ -34,243 +35,245 @@
 
 
 /****************************************************/
-void WinEDA_LibeditFrame::ReCreateVToolbar(void)
+void WinEDA_LibeditFrame::ReCreateVToolbar( void )
 /****************************************************/
 {
-	if( m_VToolBar == NULL )
-	{
-		m_VToolBar = new WinEDA_Toolbar(TOOLBAR_TOOL, this, ID_V_TOOLBAR, FALSE);
+    if( m_VToolBar == NULL )
+    {
+        m_VToolBar = new WinEDA_Toolbar( TOOLBAR_TOOL, this, ID_V_TOOLBAR, FALSE );
 
-		// Set up toolbar
-		m_VToolBar->AddTool(ID_NO_SELECT_BUTT, wxEmptyString,
-				BITMAP(cursor_xpm),
-				_("deselect current tool"), wxITEM_CHECK );
-		m_VToolBar->ToggleTool(ID_NO_SELECT_BUTT, TRUE);
+        // Set up toolbar
+        m_VToolBar->AddTool( ID_NO_SELECT_BUTT, wxEmptyString,
+                             BITMAP( cursor_xpm ),
+                             _( "deselect current tool" ), wxITEM_CHECK );
+        m_VToolBar->ToggleTool( ID_NO_SELECT_BUTT, TRUE );
 
-		m_VToolBar->AddSeparator();
-		m_VToolBar->AddTool(ID_LIBEDIT_PIN_BUTT, wxEmptyString,
-				BITMAP(pin_xpm),
-					_("Add Pins"), wxITEM_CHECK  );
+        m_VToolBar->AddSeparator();
+        m_VToolBar->AddTool( ID_LIBEDIT_PIN_BUTT, wxEmptyString,
+                             BITMAP( pin_xpm ),
+                             _( "Add Pins" ), wxITEM_CHECK  );
 
-		m_VToolBar->AddTool(ID_LIBEDIT_BODY_TEXT_BUTT, wxEmptyString,
-				BITMAP(add_text_xpm),
-					_("Add graphic text"), wxITEM_CHECK  );
+        m_VToolBar->AddTool( ID_LIBEDIT_BODY_TEXT_BUTT, wxEmptyString,
+                             BITMAP( add_text_xpm ),
+                             _( "Add graphic text" ), wxITEM_CHECK  );
 
-		m_VToolBar->AddTool(ID_LIBEDIT_BODY_RECT_BUTT, wxEmptyString,
-				BITMAP(add_rectangle_xpm),
-					_("Add rectangles"), wxITEM_CHECK );
+        m_VToolBar->AddTool( ID_LIBEDIT_BODY_RECT_BUTT, wxEmptyString,
+                             BITMAP( add_rectangle_xpm ),
+                             _( "Add rectangles" ), wxITEM_CHECK );
 
-		m_VToolBar->AddTool(ID_LIBEDIT_BODY_CIRCLE_BUTT, wxEmptyString,
-				BITMAP(add_circle_xpm),
-					_("Add circles"), wxITEM_CHECK  );
+        m_VToolBar->AddTool( ID_LIBEDIT_BODY_CIRCLE_BUTT, wxEmptyString,
+                             BITMAP( add_circle_xpm ),
+                             _( "Add circles" ), wxITEM_CHECK  );
 
-		m_VToolBar->AddTool(ID_LIBEDIT_BODY_ARC_BUTT, wxEmptyString,
-				BITMAP(add_arc_xpm),
-					_("Add arcs"), wxITEM_CHECK  );
+        m_VToolBar->AddTool( ID_LIBEDIT_BODY_ARC_BUTT, wxEmptyString,
+                             BITMAP( add_arc_xpm ),
+                             _( "Add arcs" ), wxITEM_CHECK  );
 
-		m_VToolBar->AddTool(ID_LIBEDIT_BODY_LINE_BUTT, wxEmptyString,
-				BITMAP(add_polygon_xpm),
-					_( "Add lines and polygons"), wxITEM_CHECK  );
+        m_VToolBar->AddTool( ID_LIBEDIT_BODY_LINE_BUTT, wxEmptyString,
+                             BITMAP( add_polygon_xpm ),
+                             _( "Add lines and polygons" ), wxITEM_CHECK  );
 
-		m_VToolBar->AddSeparator();
-		m_VToolBar->AddTool(ID_LIBEDIT_ANCHOR_ITEM_BUTT, wxEmptyString,
-				BITMAP(anchor_xpm),
-					_("Move part anchor"), wxITEM_CHECK  );
+        m_VToolBar->AddSeparator();
+        m_VToolBar->AddTool( ID_LIBEDIT_ANCHOR_ITEM_BUTT, wxEmptyString,
+                             BITMAP( anchor_xpm ),
+                             _( "Move part anchor" ), wxITEM_CHECK  );
 
-		m_VToolBar->AddSeparator();
-		m_VToolBar->AddTool(ID_LIBEDIT_IMPORT_BODY_BUTT, wxEmptyString,
-				BITMAP(import_xpm),
-					_("Import existing drawings"), wxITEM_CHECK  );
+        m_VToolBar->AddSeparator();
+        m_VToolBar->AddTool( ID_LIBEDIT_IMPORT_BODY_BUTT, wxEmptyString,
+                             BITMAP( import_xpm ),
+                             _( "Import existing drawings" ), wxITEM_CHECK  );
 
-		m_VToolBar->AddTool(ID_LIBEDIT_EXPORT_BODY_BUTT, wxEmptyString,
-				BITMAP(export_xpm),
-					_("Export current drawing"), wxITEM_CHECK  );
+        m_VToolBar->AddTool( ID_LIBEDIT_EXPORT_BODY_BUTT, wxEmptyString,
+                             BITMAP( export_xpm ),
+                             _( "Export current drawing" ), wxITEM_CHECK  );
 
-		m_VToolBar->AddSeparator();
-		m_VToolBar->AddTool(ID_LIBEDIT_DELETE_ITEM_BUTT, wxEmptyString,
-				BITMAP(delete_body_xpm),
-					_("Delete items"), wxITEM_CHECK  );
+        m_VToolBar->AddSeparator();
+        m_VToolBar->AddTool( ID_LIBEDIT_DELETE_ITEM_BUTT, wxEmptyString,
+                             BITMAP( delete_body_xpm ),
+                             _( "Delete items" ), wxITEM_CHECK  );
 
-		m_VToolBar->Realize();
-	}
+        m_VToolBar->Realize();
+    }
 
-	SetToolbars();
+    SetToolbars();
 }
 
 
+/*************************************************/
+void WinEDA_LibeditFrame::ReCreateHToolbar( void )
+/*************************************************/
 
-/*************************************************/
-void WinEDA_LibeditFrame::ReCreateHToolbar(void)
-/*************************************************/
+/* Create or update the main Horizontal Toolbar for the schematic library editor
+ */
 {
-int ii;
+    int      ii;
+    wxString msg;
 
-	// Create the toolbar if not exists
-	if ( m_HToolBar == NULL )
-	{
-		m_HToolBar = new WinEDA_Toolbar(TOOLBAR_MAIN, this, ID_H_TOOLBAR, TRUE);
-		SetToolBar(m_HToolBar);
+    // Create the toolbar if not exists
+    if( m_HToolBar == NULL )
+    {
+        m_HToolBar = new WinEDA_Toolbar( TOOLBAR_MAIN, this, ID_H_TOOLBAR, TRUE );
+        SetToolBar( m_HToolBar );
 
-		// Set up toolbar
-		m_HToolBar->AddTool(ID_LIBEDIT_SAVE_CURRENT_LIB, wxEmptyString, BITMAP(save_library_xpm),
-					_("Save current loaded library on disk (file update)") );
+        // Set up toolbar
+        m_HToolBar->AddTool( ID_LIBEDIT_SAVE_CURRENT_LIB, wxEmptyString, BITMAP( save_library_xpm ),
+                            _( "Save current loaded library on disk (file update)" ) );
 
-		m_HToolBar->AddTool(ID_LIBEDIT_SELECT_CURRENT_LIB, wxEmptyString, BITMAP(library_xpm),
-					_("Select working library") );
+        m_HToolBar->AddTool( ID_LIBEDIT_SELECT_CURRENT_LIB, wxEmptyString, BITMAP( library_xpm ),
+                            _( "Select working library" ) );
 
-		m_HToolBar->AddTool(ID_LIBEDIT_DELETE_PART, wxEmptyString, BITMAP(delete_xpm),
-					_("Delete part in current library") );
+        m_HToolBar->AddTool( ID_LIBEDIT_DELETE_PART, wxEmptyString, BITMAP( delete_xpm ),
+                            _( "Delete part in current library" ) );
 
-		m_HToolBar->AddSeparator();
-		m_HToolBar->AddTool(ID_LIBEDIT_NEW_PART, wxEmptyString, BITMAP(new_component_xpm),
-				_("New part") );
+        m_HToolBar->AddSeparator();
+        m_HToolBar->AddTool( ID_LIBEDIT_NEW_PART, wxEmptyString, BITMAP( new_component_xpm ),
+                            _( "New part" ) );
 
-		m_HToolBar->AddTool(ID_LIBEDIT_SELECT_PART, BITMAP(add_component_xpm),
-					_("Select part to edit") );
+        m_HToolBar->AddTool( ID_LIBEDIT_SELECT_PART, BITMAP( add_component_xpm ),
+                            _( "Select part to edit" ) );
 
-		m_HToolBar->AddTool(ID_LIBEDIT_SAVE_CURRENT_PART, wxEmptyString,
-					BITMAP(save_part_in_mem_xpm),
-					_("Save current part into current loaded library (in memory)") );
+        m_HToolBar->AddTool( ID_LIBEDIT_SAVE_CURRENT_PART, wxEmptyString,
+                            BITMAP( save_part_in_mem_xpm ),
+                            _( "Save current part into current loaded library (in memory)" ) );
 
-		m_HToolBar->AddTool(ID_LIBEDIT_IMPORT_PART, wxEmptyString, BITMAP(import_xpm),
-					_("import part"));
+        m_HToolBar->AddTool( ID_LIBEDIT_IMPORT_PART, wxEmptyString, BITMAP( import_xpm ),
+                            _( "import part" ) );
 
-		m_HToolBar->AddTool(ID_LIBEDIT_EXPORT_PART, wxEmptyString, BITMAP(export_xpm),
-					_("export part"));
+        m_HToolBar->AddTool( ID_LIBEDIT_EXPORT_PART, wxEmptyString, BITMAP( export_xpm ),
+                            _( "export part" ) );
 
-		m_HToolBar->AddTool(ID_LIBEDIT_CREATE_NEW_LIB_AND_SAVE_CURRENT_PART,
-					wxEmptyString, BITMAP(new_library_xpm),
-					_("Create a new library an save current part into"));
+        m_HToolBar->AddTool( ID_LIBEDIT_CREATE_NEW_LIB_AND_SAVE_CURRENT_PART,
+                            wxEmptyString, BITMAP( new_library_xpm ),
+                            _( "Create a new library an save current part into" ) );
 
-		m_HToolBar->AddSeparator();
-		m_HToolBar->AddTool(ID_LIBEDIT_UNDO, wxEmptyString, BITMAP(undo_xpm),
-					_("Undo last edition"));
-		m_HToolBar->AddTool(ID_LIBEDIT_REDO, wxEmptyString, BITMAP(redo_xpm),
-					_("Redo the last undo command"));
+        m_HToolBar->AddSeparator();
+        m_HToolBar->AddTool( ID_LIBEDIT_UNDO, wxEmptyString, BITMAP( undo_xpm ),
+                            _( "Undo last edition" ) );
+        m_HToolBar->AddTool( ID_LIBEDIT_REDO, wxEmptyString, BITMAP( redo_xpm ),
+                            _( "Redo the last undo command" ) );
 
-		m_HToolBar->AddSeparator();
-		m_HToolBar->AddTool(ID_LIBEDIT_GET_FRAME_EDIT_PART, BITMAP(part_properties_xpm),
-					wxNullBitmap,
-					FALSE,
-					-1, -1, (wxObject *) NULL,
-					_("Edit Part Properties"));
+        m_HToolBar->AddSeparator();
+        m_HToolBar->AddTool( ID_LIBEDIT_GET_FRAME_EDIT_PART, BITMAP( part_properties_xpm ),
+                            wxNullBitmap,
+                            FALSE,
+                            -1, -1, (wxObject*) NULL,
+                            _( "Edit Part Properties" ) );
 
-		m_HToolBar->AddSeparator();
-		m_HToolBar->AddTool(ID_LIBEDIT_CHECK_PART, BITMAP(erc_xpm),
-					wxNullBitmap,
-					FALSE,
-					-1, -1, (wxObject *) NULL,
-					_("Test duplicate pins"));
+        m_HToolBar->AddSeparator();
+        m_HToolBar->AddTool( ID_LIBEDIT_CHECK_PART, BITMAP( erc_xpm ),
+                            wxNullBitmap,
+                            FALSE,
+                            -1, -1, (wxObject*) NULL,
+                            _( "Test duplicate pins" ) );
 
-		m_HToolBar->AddSeparator();
-		m_HToolBar->AddTool(ID_ZOOM_PLUS_BUTT, BITMAP(zoom_in_xpm),
-					wxNullBitmap,
-					FALSE,
-					-1, -1, (wxObject *) NULL,
-					_("zoom + (F1)"));
+        m_HToolBar->AddSeparator();
+        msg = AddHotkeyName( _( "zoom +" ), s_LibEdit_Hotkey_List, HK_ZOOM_IN );
+        m_HToolBar->AddTool( ID_ZOOM_PLUS_BUTT, wxEmptyString, BITMAP( zoom_in_xpm ),
+                             msg );
 
-		m_HToolBar->AddTool(ID_ZOOM_MOINS_BUTT, wxEmptyString,
-					BITMAP(zoom_out_xpm),
-					_("zoom - (F2)"));
+        msg = AddHotkeyName( _( "zoom -" ), s_LibEdit_Hotkey_List, HK_ZOOM_OUT );
+        m_HToolBar->AddTool( ID_ZOOM_MOINS_BUTT, wxEmptyString, BITMAP( zoom_out_xpm ),
+                             msg );
 
-		m_HToolBar->AddTool(ID_ZOOM_REDRAW_BUTT, wxEmptyString,
-					BITMAP(repaint_xpm),
-					_("redraw (F3)"));
+        msg = AddHotkeyName( _( "redraw" ), s_LibEdit_Hotkey_List, HK_ZOOM_REDRAW );
+        m_HToolBar->AddTool( ID_ZOOM_REDRAW_BUTT, wxEmptyString, BITMAP( repaint_xpm ),
+                             msg );
 
-		m_HToolBar->AddTool(ID_ZOOM_PAGE_BUTT, wxEmptyString,
-					BITMAP(zoom_optimal_xpm),
-					_("auto zoom") );
+        m_HToolBar->AddTool( ID_ZOOM_PAGE_BUTT, wxEmptyString,
+                            BITMAP( zoom_optimal_xpm ),
+                            _( "auto zoom" ) );
 
-		m_HToolBar->AddSeparator();
-		m_HToolBar->AddTool(ID_DE_MORGAN_NORMAL_BUTT, wxEmptyString,
-					BITMAP(morgan1_xpm),
-					_("show as \"De Morgan\" normal part"), wxITEM_CHECK);
-		m_HToolBar->ToggleTool(ID_DE_MORGAN_NORMAL_BUTT,
-						(CurrentConvert <= 1) ? TRUE : FALSE);
+        m_HToolBar->AddSeparator();
+        m_HToolBar->AddTool( ID_DE_MORGAN_NORMAL_BUTT, wxEmptyString,
+                             BITMAP( morgan1_xpm ),
+                             _( "show as \"De Morgan\" normal part" ), wxITEM_CHECK );
+        m_HToolBar->ToggleTool( ID_DE_MORGAN_NORMAL_BUTT,
+                                (CurrentConvert <= 1) ? TRUE : FALSE );
 
-		m_HToolBar->AddTool(ID_DE_MORGAN_CONVERT_BUTT, wxEmptyString,
-					BITMAP(morgan2_xpm),
-					_("show as \"De Morgan\" convert part"), wxITEM_CHECK);
-		m_HToolBar->ToggleTool(ID_DE_MORGAN_CONVERT_BUTT,
-						(CurrentConvert >= 2) ? TRUE : FALSE );
+        m_HToolBar->AddTool( ID_DE_MORGAN_CONVERT_BUTT, wxEmptyString,
+                             BITMAP( morgan2_xpm ),
+                             _( "show as \"De Morgan\" convert part" ), wxITEM_CHECK );
+        m_HToolBar->ToggleTool( ID_DE_MORGAN_CONVERT_BUTT,
+                                (CurrentConvert >= 2) ? TRUE : FALSE );
 
-		m_HToolBar->AddSeparator();
-		m_HToolBar->AddTool(ID_LIBEDIT_VIEW_DOC, BITMAP(datasheet_xpm),
-					wxNullBitmap,
-					FALSE,
-					-1, -1, (wxObject *) NULL,
-					_("Documents"));
-		m_HToolBar->EnableTool(ID_LIBEDIT_VIEW_DOC, FALSE);
+        m_HToolBar->AddSeparator();
+        m_HToolBar->AddTool( ID_LIBEDIT_VIEW_DOC, BITMAP( datasheet_xpm ),
+                            wxNullBitmap,
+                            FALSE,
+                            -1, -1, (wxObject*) NULL,
+                            _( "Documents" ) );
+        m_HToolBar->EnableTool( ID_LIBEDIT_VIEW_DOC, FALSE );
 
-		m_HToolBar->AddSeparator();
-		m_SelpartBox = new WinEDAChoiceBox(m_HToolBar, ID_LIBEDIT_SELECT_PART_NUMBER,
-					wxDefaultPosition, wxSize(LISTBOX_WIDTH, -1));
-		m_HToolBar->AddControl(m_SelpartBox);
+        m_HToolBar->AddSeparator();
+        m_SelpartBox = new WinEDAChoiceBox( m_HToolBar, ID_LIBEDIT_SELECT_PART_NUMBER,
+                                           wxDefaultPosition, wxSize( LISTBOX_WIDTH, -1 ) );
+        m_HToolBar->AddControl( m_SelpartBox );
 
-		m_SelAliasBox = new WinEDAChoiceBox(m_HToolBar, ID_LIBEDIT_SELECT_ALIAS,
-					wxDefaultPosition, wxSize(LISTBOX_WIDTH, -1));
-		m_HToolBar->AddControl(m_SelAliasBox);
+        m_SelAliasBox = new WinEDAChoiceBox( m_HToolBar, ID_LIBEDIT_SELECT_ALIAS,
+                                            wxDefaultPosition, wxSize( LISTBOX_WIDTH, -1 ) );
+        m_HToolBar->AddControl( m_SelAliasBox );
 
-		m_HToolBar->AddSeparator();
-		m_HToolBar->AddTool(ID_LIBEDIT_EDIT_PIN_BY_PIN, BITMAP(pin2pin_xpm),
-					wxNullBitmap,
-					TRUE,
-					-1, -1, (wxObject *) NULL,
-					_("Edit pins part per part (Carefully use!)"));
-		m_HToolBar->ToggleTool(ID_LIBEDIT_EDIT_PIN_BY_PIN, g_EditPinByPinIsOn);
+        m_HToolBar->AddSeparator();
+        m_HToolBar->AddTool( ID_LIBEDIT_EDIT_PIN_BY_PIN, BITMAP( pin2pin_xpm ),
+                            wxNullBitmap,
+                            TRUE,
+                            -1, -1, (wxObject*) NULL,
+                            _( "Edit pins part per part (Carefully use!)" ) );
+        m_HToolBar->ToggleTool( ID_LIBEDIT_EDIT_PIN_BY_PIN, g_EditPinByPinIsOn );
 
-		// after adding the buttons to the toolbar, must call Realize() to reflect
-		// the changes
-		m_HToolBar->Realize();
-	}
+        // after adding the buttons to the toolbar, must call Realize() to reflect the changes
+        m_HToolBar->Realize();
+    }
+    else    /* Toolbar already created, it only must be updated */
+    {
+        m_SelAliasBox->Clear();
+        m_SelpartBox->Clear();
+    }
 
-	else	/* Toolbar deja cr��, mise a jour des affichages */
-	{
-		m_SelAliasBox->Clear();
-		m_SelpartBox->Clear();
-	}
+    /* Update the part selection box */
+    int jj = 1;
+    if( CurrentLibEntry )
+        jj = CurrentLibEntry->m_UnitCount;
+    if( jj > 1 )
+        for( ii = 0; ii < jj; ii++ )
+        {
+            wxString msg;
+            msg.Printf( _( "Part %c" ), 'A' + ii );
+            m_SelpartBox->Append( msg );
+        }
 
-	/* Update the part selection box */
-	int jj = 1;
-	if( CurrentLibEntry ) jj = CurrentLibEntry->m_UnitCount;
-	if ( jj > 1 )
-		for ( ii = 0; ii < jj ; ii ++ )
-		{
-			wxString msg;
-			msg.Printf(_("Part %c"), 'A' + ii);
-			m_SelpartBox->Append(msg);
-		}
-	else m_SelpartBox->Append( wxEmptyString );
-	m_SelpartBox->SetSelection( ( CurrentUnit > 0 ) ? CurrentUnit-1 : 0);
-		
-	if( CurrentLibEntry)
-	{
-		if ( CurrentLibEntry->m_UnitCount > 1 ) m_SelpartBox->Enable(TRUE);
-		else m_SelpartBox->Enable(FALSE);
-		m_SelAliasBox->Append(CurrentLibEntry->m_Name.m_Text);
-		m_SelAliasBox->SetSelection( 0 );
-		int count = CurrentLibEntry->m_AliasList.GetCount();
-		if ( count > 0 ) /* Update the part selection box */
-		{
-			m_SelAliasBox->Enable(TRUE);
-			for ( ii = 0, jj = 1; ii < count; ii += ALIAS_NEXT, jj++ )
-			{
-				m_SelAliasBox->Append(CurrentLibEntry->m_AliasList[ii]);
-				if ( CurrentAliasName == CurrentLibEntry->m_AliasList[ii])
-					m_SelAliasBox->SetSelection( jj );
-			}
-		}
-		else m_SelAliasBox->Enable(FALSE);
-	}
-	else
-	{
-		m_SelAliasBox->Enable(FALSE);
-		m_SelpartBox->Enable(FALSE);
-	}
+    else
+        m_SelpartBox->Append( wxEmptyString );
+    m_SelpartBox->SetSelection( ( CurrentUnit > 0 ) ? CurrentUnit - 1 : 0 );
 
-	// Doit etre plac� apres Realize():
-	SetToolbars();
+    if( CurrentLibEntry )
+    {
+        if( CurrentLibEntry->m_UnitCount > 1 )
+            m_SelpartBox->Enable( TRUE );
+        else
+            m_SelpartBox->Enable( FALSE );
+        m_SelAliasBox->Append( CurrentLibEntry->m_Name.m_Text );
+        m_SelAliasBox->SetSelection( 0 );
+        int count = CurrentLibEntry->m_AliasList.GetCount();
+        if( count > 0 ) /* Update the part selection box */
+        {
+            m_SelAliasBox->Enable( TRUE );
+            for( ii = 0, jj = 1; ii < count; ii += ALIAS_NEXT, jj++ )
+            {
+                m_SelAliasBox->Append( CurrentLibEntry->m_AliasList[ii] );
+                if( CurrentAliasName == CurrentLibEntry->m_AliasList[ii] )
+                    m_SelAliasBox->SetSelection( jj );
+            }
+        }
+        else
+            m_SelAliasBox->Enable( FALSE );
+    }
+    else
+    {
+        m_SelAliasBox->Enable( FALSE );
+        m_SelpartBox->Enable( FALSE );
+    }
 
+    // Must be called AFTER Realize():
+    SetToolbars();
 }
-
-
diff --git a/eeschema/tool_sch.cpp b/eeschema/tool_sch.cpp
index 17fe42914c..a1d0fda630 100644
--- a/eeschema/tool_sch.cpp
+++ b/eeschema/tool_sch.cpp
@@ -1,6 +1,6 @@
-	/*****************************************************/
-	/*	toolsch.cpp; vreate toolbars for schematic frame */
-	/*****************************************************/
+/*****************************************************/
+/*	toolsch.cpp; vreate toolbars for schematic frame */
+/*****************************************************/
 
 #include "fctsys.h"
 #include "gr_basic.h"
@@ -11,10 +11,11 @@
 #include "general.h"
 
 #include "protos.h"
+#include "hotkeys.h"
 
 #define BITMAP wxBitmap
 
-#include "bitmaps.h"	/* general bitmaps */
+#include "bitmaps.h" /* general bitmaps */
 
 /* Specific bitmaps */
 #include "cvpcb.xpm"
@@ -36,292 +37,300 @@
 
 
 /**************************************************************/
-void WinEDA_SchematicFrame::ReCreateHToolbar(void)
+void WinEDA_SchematicFrame::ReCreateHToolbar( void )
 /**************************************************************/
-/* Create Horizontal (main) Toolbar
-*/
+
+/* Create  the main Horizontal Toolbar for the schematic editor
+ */
 {
-	if ( m_HToolBar != NULL ) return;
+    if( m_HToolBar != NULL )
+        return;
 
-	m_HToolBar = new WinEDA_Toolbar(TOOLBAR_MAIN, this, ID_H_TOOLBAR, TRUE);
-	SetToolBar(m_HToolBar);
+    wxString msg;
+    m_HToolBar = new WinEDA_Toolbar( TOOLBAR_MAIN, this, ID_H_TOOLBAR, TRUE );
+    SetToolBar( m_HToolBar );
 
-	// Set up toolbar
-	m_HToolBar->AddTool(ID_NEW_PROJECT, wxEmptyString, BITMAP(new_xpm),
-					_("New schematic project"));
+    // Set up toolbar
+    m_HToolBar->AddTool( ID_NEW_PROJECT, wxEmptyString, BITMAP( new_xpm ),
+                        _( "New schematic project" ) );
 
-	m_HToolBar->AddTool(ID_LOAD_PROJECT, wxEmptyString, BITMAP(open_xpm),
-					_("Open schematic project"));
+    m_HToolBar->AddTool( ID_LOAD_PROJECT, wxEmptyString, BITMAP( open_xpm ),
+                        _( "Open schematic project" ) );
 
-	m_HToolBar->AddTool(ID_SAVE_PROJECT, wxEmptyString, BITMAP(save_project_xpm),
-					_("Save schematic project"));
+    m_HToolBar->AddTool( ID_SAVE_PROJECT, wxEmptyString, BITMAP( save_project_xpm ),
+                        _( "Save schematic project" ) );
 
-	m_HToolBar->AddSeparator();
-	m_HToolBar->AddTool(ID_SHEET_SET, wxEmptyString, BITMAP(sheetset_xpm),
-					_("page settings (size, texts)") );
+    m_HToolBar->AddSeparator();
+    m_HToolBar->AddTool( ID_SHEET_SET, wxEmptyString, BITMAP( sheetset_xpm ),
+                        _( "page settings (size, texts)" ) );
 
-	m_HToolBar->AddSeparator();
-	m_HToolBar->AddTool(ID_TO_LIBRARY, wxEmptyString, BITMAP(libedit_xpm),
-					_("go to library editor") );
+    m_HToolBar->AddSeparator();
+    m_HToolBar->AddTool( ID_TO_LIBRARY, wxEmptyString, BITMAP( libedit_xpm ),
+                        _( "go to library editor" ) );
 
-	m_HToolBar->AddTool(ID_TO_LIBVIEW, wxEmptyString, BITMAP(library_browse_xpm),
-					_("go to library browse") );
+    m_HToolBar->AddTool( ID_TO_LIBVIEW, wxEmptyString, BITMAP( library_browse_xpm ),
+                        _( "go to library browse" ) );
 
-	m_HToolBar->AddSeparator();
-	m_HToolBar->AddTool(ID_HIERARCHY, wxEmptyString, BITMAP(hierarchy_nav_xpm),
-					_("Schematic Hierarchy Navigator") );
+    m_HToolBar->AddSeparator();
+    m_HToolBar->AddTool( ID_HIERARCHY, wxEmptyString, BITMAP( hierarchy_nav_xpm ),
+                        _( "Schematic Hierarchy Navigator" ) );
 
-	m_HToolBar->AddSeparator();
+    m_HToolBar->AddSeparator();
 
-	m_HToolBar->AddTool(wxID_CUT, wxEmptyString, BITMAP(cut_button),
-					_("Cut selected item") );
+    m_HToolBar->AddTool( wxID_CUT, wxEmptyString, BITMAP( cut_button ),
+                        _( "Cut selected item" ) );
 
-	m_HToolBar->AddTool(wxID_COPY, wxEmptyString, BITMAP(copy_button),
-					_("Copy selected item") );
+    m_HToolBar->AddTool( wxID_COPY, wxEmptyString, BITMAP( copy_button ),
+                        _( "Copy selected item" ) );
 
-	m_HToolBar->AddTool(wxID_PASTE, wxEmptyString, BITMAP(paste_xpm),
-					_("Paste") );
+    m_HToolBar->AddTool( wxID_PASTE, wxEmptyString, BITMAP( paste_xpm ),
+                        _( "Paste" ) );
 
-	m_HToolBar->AddSeparator();
-	m_HToolBar->AddTool(ID_SCHEMATIC_UNDO, wxEmptyString, BITMAP(undo_xpm),
-				_("Undo last edition"));
-	m_HToolBar->AddTool(ID_SCHEMATIC_REDO, wxEmptyString, BITMAP(redo_xpm),
-				_("Redo the last undo command"));
+    m_HToolBar->AddSeparator();
+    m_HToolBar->AddTool( ID_SCHEMATIC_UNDO, wxEmptyString, BITMAP( undo_xpm ),
+                        _( "Undo last edition" ) );
+    m_HToolBar->AddTool( ID_SCHEMATIC_REDO, wxEmptyString, BITMAP( redo_xpm ),
+                        _( "Redo the last undo command" ) );
 
-	m_HToolBar->AddSeparator();
-	m_HToolBar->AddTool(ID_GEN_PRINT, wxEmptyString, BITMAP(print_button),
-					_("Print schematic") );
+    m_HToolBar->AddSeparator();
+    m_HToolBar->AddTool( ID_GEN_PRINT, wxEmptyString, BITMAP( print_button ),
+                        _( "Print schematic" ) );
 
-	m_HToolBar->AddSeparator();
-	m_HToolBar->AddTool(ID_TO_CVPCB, wxEmptyString, BITMAP(cvpcb_xpm),
-					_("Run Cvpcb") );
+    m_HToolBar->AddSeparator();
+    m_HToolBar->AddTool( ID_TO_CVPCB, wxEmptyString, BITMAP( cvpcb_xpm ),
+                        _( "Run Cvpcb" ) );
 
-	m_HToolBar->AddTool(ID_TO_PCB, wxEmptyString, BITMAP(pcbnew_xpm),
-					_("Run Pcbnew") );
+    m_HToolBar->AddTool( ID_TO_PCB, wxEmptyString, BITMAP( pcbnew_xpm ),
+                        _( "Run Pcbnew" ) );
 
-	m_HToolBar->AddSeparator();
-	m_HToolBar->AddTool(ID_ZOOM_PLUS_BUTT, wxEmptyString, BITMAP(zoom_in_xpm),
-					_("zoom + (F1)"));
+    m_HToolBar->AddSeparator();
+    msg = AddHotkeyName( _( "zoom +" ), s_Schematic_Hotkey_List, HK_ZOOM_IN );
+    m_HToolBar->AddTool( ID_ZOOM_PLUS_BUTT, wxEmptyString, BITMAP( zoom_in_xpm ),
+                         msg );
 
-	m_HToolBar->AddTool(ID_ZOOM_MOINS_BUTT, wxEmptyString, BITMAP(zoom_out_xpm),
-					_("zoom - (F2)"));
+    msg = AddHotkeyName( _( "zoom -" ), s_Schematic_Hotkey_List, HK_ZOOM_OUT );
+    m_HToolBar->AddTool( ID_ZOOM_MOINS_BUTT, wxEmptyString, BITMAP( zoom_out_xpm ),
+                         msg );
 
-	m_HToolBar->AddTool(ID_ZOOM_REDRAW_BUTT, wxEmptyString, BITMAP(repaint_xpm),
-					_("redraw (F3)") );
+    msg = AddHotkeyName( _( "redraw" ), s_Schematic_Hotkey_List, HK_ZOOM_REDRAW );
+    m_HToolBar->AddTool( ID_ZOOM_REDRAW_BUTT, wxEmptyString, BITMAP( repaint_xpm ),
+                         msg );
 
-	m_HToolBar->AddTool(ID_ZOOM_PAGE_BUTT, wxEmptyString, BITMAP(zoom_optimal_xpm),
-					_("auto zoom") );
+    m_HToolBar->AddTool( ID_ZOOM_PAGE_BUTT, wxEmptyString, BITMAP( zoom_optimal_xpm ),
+                        _( "auto zoom" ) );
 
-	m_HToolBar->AddSeparator();
-	m_HToolBar->AddTool(ID_FIND_ITEMS, wxEmptyString, BITMAP(find_xpm),
-					_("Find components and texts") );
+    m_HToolBar->AddSeparator();
+    m_HToolBar->AddTool( ID_FIND_ITEMS, wxEmptyString, BITMAP( find_xpm ),
+                        _( "Find components and texts" ) );
 
-	m_HToolBar->AddSeparator();
-	m_HToolBar->AddTool(ID_GET_NETLIST, wxEmptyString, BITMAP(netlist_xpm),
-					_("Netlist generation") );
+    m_HToolBar->AddSeparator();
+    m_HToolBar->AddTool( ID_GET_NETLIST, wxEmptyString, BITMAP( netlist_xpm ),
+                        _( "Netlist generation" ) );
 
-	m_HToolBar->AddTool(ID_GET_ANNOTATE, wxEmptyString, BITMAP(annotate_xpm),
-					_("Schematic Annotation") );
+    m_HToolBar->AddTool( ID_GET_ANNOTATE, wxEmptyString, BITMAP( annotate_xpm ),
+                        _( "Schematic Annotation" ) );
 
-	m_HToolBar->AddTool(ID_GET_ERC, wxEmptyString, BITMAP(erc_xpm),
-					_("Schematic Electric Rules Check") );
+    m_HToolBar->AddTool( ID_GET_ERC, wxEmptyString, BITMAP( erc_xpm ),
+                        _( "Schematic Electric Rules Check" ) );
 
-	m_HToolBar->AddTool(ID_GET_TOOLS, wxEmptyString, BITMAP(tools_xpm),
-					_("Bill of material and/or Crossreferences") );
+    m_HToolBar->AddTool( ID_GET_TOOLS, wxEmptyString, BITMAP( tools_xpm ),
+                        _( "Bill of material and/or Crossreferences" ) );
 
 
-	// after adding the buttons to the toolbar, must call Realize() to reflect
-	// the changes
-	m_HToolBar->Realize();
-	SetToolbars();
+    // after adding the tools to the toolbar, must call Realize() to reflect the changes
+    m_HToolBar->Realize();
+    SetToolbars();
 }
 
+
 /*************************************************/
-void WinEDA_SchematicFrame::ReCreateVToolbar(void)
+void WinEDA_SchematicFrame::ReCreateVToolbar( void )
 /*************************************************/
+
 /* Create Vertical Right Toolbar
-*/
+ */
 {
-	if( m_VToolBar ) return;
-	m_VToolBar = new WinEDA_Toolbar(TOOLBAR_TOOL, this, ID_V_TOOLBAR, FALSE);
+    if( m_VToolBar )
+        return;
+    m_VToolBar = new WinEDA_Toolbar( TOOLBAR_TOOL, this, ID_V_TOOLBAR, FALSE );
 
-	// Set up toolbar
-	m_VToolBar->AddTool(ID_NO_SELECT_BUTT, wxEmptyString,
-				BITMAP(cursor_xpm), wxEmptyString, wxITEM_CHECK );
-	m_VToolBar->ToggleTool(ID_NO_SELECT_BUTT, TRUE);
+    // Set up toolbar
+    m_VToolBar->AddTool( ID_NO_SELECT_BUTT, wxEmptyString,
+                         BITMAP( cursor_xpm ), wxEmptyString, wxITEM_CHECK );
+    m_VToolBar->ToggleTool( ID_NO_SELECT_BUTT, TRUE );
 
-	m_VToolBar->AddTool(ID_HIERARCHY_PUSH_POP_BUTT, wxEmptyString,
-				BITMAP(hierarchy_cursor_xpm),
-				_("Hierarchy Push/Pop"), wxITEM_CHECK );
+    m_VToolBar->AddTool( ID_HIERARCHY_PUSH_POP_BUTT, wxEmptyString,
+                         BITMAP( hierarchy_cursor_xpm ),
+                         _( "Hierarchy Push/Pop" ), wxITEM_CHECK );
 
-	m_VToolBar->AddSeparator();
-	m_VToolBar->AddTool(ID_COMPONENT_BUTT, wxEmptyString,
-				BITMAP(add_component_xpm),
-				_("Add components"), wxITEM_CHECK );
+    m_VToolBar->AddSeparator();
+    m_VToolBar->AddTool( ID_COMPONENT_BUTT, wxEmptyString,
+                         BITMAP( add_component_xpm ),
+                         _( "Add components" ), wxITEM_CHECK );
 
-	m_VToolBar->AddTool(ID_PLACE_POWER_BUTT, wxEmptyString,
-				BITMAP(add_power_xpm),
-				_("Add powers"), wxITEM_CHECK );
+    m_VToolBar->AddTool( ID_PLACE_POWER_BUTT, wxEmptyString,
+                         BITMAP( add_power_xpm ),
+                         _( "Add powers" ), wxITEM_CHECK );
 
-	m_VToolBar->AddSeparator();
-	m_VToolBar->AddTool(ID_WIRE_BUTT, wxEmptyString,
-				BITMAP(add_line_xpm),
-				_("Add wires"), wxITEM_CHECK );
+    m_VToolBar->AddSeparator();
+    m_VToolBar->AddTool( ID_WIRE_BUTT, wxEmptyString,
+                         BITMAP( add_line_xpm ),
+                         _( "Add wires" ), wxITEM_CHECK );
 
-	m_VToolBar->AddTool(ID_BUS_BUTT, wxEmptyString,
-				BITMAP(add_bus_xpm),
-				_("Add bus"), wxITEM_CHECK );
+    m_VToolBar->AddTool( ID_BUS_BUTT, wxEmptyString,
+                         BITMAP( add_bus_xpm ),
+                         _( "Add bus" ), wxITEM_CHECK );
 
-	m_VToolBar->AddTool(ID_WIRETOBUS_ENTRY_BUTT, wxEmptyString,
-				BITMAP(add_line2bus_xpm),
-				_("Add wire to bus entry"), wxITEM_CHECK );
+    m_VToolBar->AddTool( ID_WIRETOBUS_ENTRY_BUTT, wxEmptyString,
+                         BITMAP( add_line2bus_xpm ),
+                         _( "Add wire to bus entry" ), wxITEM_CHECK );
 
-	m_VToolBar->AddTool(ID_BUSTOBUS_ENTRY_BUTT, wxEmptyString,
-				BITMAP(add_bus2bus_xpm),
-				_("Add bus to bus entry"), wxITEM_CHECK );
+    m_VToolBar->AddTool( ID_BUSTOBUS_ENTRY_BUTT, wxEmptyString,
+                         BITMAP( add_bus2bus_xpm ),
+                         _( "Add bus to bus entry" ), wxITEM_CHECK );
 
-	m_VToolBar->AddSeparator();
-	m_VToolBar->AddTool(ID_NOCONN_BUTT, wxEmptyString,
-				BITMAP(noconn_button),
-				_("Add no connect flag"), wxITEM_CHECK );
+    m_VToolBar->AddSeparator();
+    m_VToolBar->AddTool( ID_NOCONN_BUTT, wxEmptyString,
+                         BITMAP( noconn_button ),
+                         _( "Add no connect flag" ), wxITEM_CHECK );
 
-	m_VToolBar->AddTool(ID_LABEL_BUTT, wxEmptyString,
-				BITMAP(add_line_label_xpm),
-				_("Add wire or bus label"), wxITEM_CHECK );
+    m_VToolBar->AddTool( ID_LABEL_BUTT, wxEmptyString,
+                         BITMAP( add_line_label_xpm ),
+                         _( "Add wire or bus label" ), wxITEM_CHECK );
 
-	m_VToolBar->AddTool(ID_GLABEL_BUTT, wxEmptyString,
-				BITMAP(add_glabel_xpm),
-				_("Add global label"), wxITEM_CHECK );
+    m_VToolBar->AddTool( ID_GLABEL_BUTT, wxEmptyString,
+                         BITMAP( add_glabel_xpm ),
+                         _( "Add global label" ), wxITEM_CHECK );
 
-	m_VToolBar->AddTool(ID_JUNCTION_BUTT, wxEmptyString,
-				BITMAP(add_junction_xpm),
-				_("Add junction"), wxITEM_CHECK );
+    m_VToolBar->AddTool( ID_JUNCTION_BUTT, wxEmptyString,
+                         BITMAP( add_junction_xpm ),
+                         _( "Add junction" ), wxITEM_CHECK );
 
-	m_VToolBar->AddSeparator();
-	m_VToolBar->AddTool(ID_SHEET_SYMBOL_BUTT, wxEmptyString,
-				BITMAP(add_hierar_symbol_xpm),
-				_("Add hierarchical symbol (sheet)") , wxITEM_CHECK);
+    m_VToolBar->AddSeparator();
+    m_VToolBar->AddTool( ID_SHEET_SYMBOL_BUTT, wxEmptyString,
+                         BITMAP( add_hierar_symbol_xpm ),
+                         _( "Add hierarchical symbol (sheet)" ), wxITEM_CHECK );
 
-	m_VToolBar->AddTool(ID_IMPORT_GLABEL_BUTT, wxEmptyString,
-				BITMAP(import_glabel_xpm),
-				_("import glabel from sheet & create pinsheet"), wxITEM_CHECK );
+    m_VToolBar->AddTool( ID_IMPORT_GLABEL_BUTT, wxEmptyString,
+                         BITMAP( import_glabel_xpm ),
+                         _( "import glabel from sheet & create pinsheet" ), wxITEM_CHECK );
 
- 	m_VToolBar->AddTool(ID_SHEET_LABEL_BUTT, wxEmptyString,
-				BITMAP(add_hierar_pin_xpm),
-				_("Add hierachical pin to sheet"), wxITEM_CHECK );
+    m_VToolBar->AddTool( ID_SHEET_LABEL_BUTT, wxEmptyString,
+                         BITMAP( add_hierar_pin_xpm ),
+                         _( "Add hierachical pin to sheet" ), wxITEM_CHECK );
 
-	m_VToolBar->AddSeparator();
-	m_VToolBar->AddTool(ID_LINE_COMMENT_BUTT, wxEmptyString,
-				BITMAP(add_dashed_line_xpm),
-				_("Add graphic line or polygon") , wxITEM_CHECK);
+    m_VToolBar->AddSeparator();
+    m_VToolBar->AddTool( ID_LINE_COMMENT_BUTT, wxEmptyString,
+                         BITMAP( add_dashed_line_xpm ),
+                         _( "Add graphic line or polygon" ), wxITEM_CHECK );
 
-	m_VToolBar->AddTool(ID_TEXT_COMMENT_BUTT, wxEmptyString,
-				BITMAP(add_text_xpm),
-				_("Add graphic text (comment)"), wxITEM_CHECK );
+    m_VToolBar->AddTool( ID_TEXT_COMMENT_BUTT, wxEmptyString,
+                         BITMAP( add_text_xpm ),
+                         _( "Add graphic text (comment)" ), wxITEM_CHECK );
 
-	m_VToolBar->AddSeparator();
-	m_VToolBar->AddTool(ID_SCHEMATIC_DELETE_ITEM_BUTT, wxEmptyString,
-				BITMAP(delete_body_xpm),
-				_("Delete items"), wxITEM_CHECK );
+    m_VToolBar->AddSeparator();
+    m_VToolBar->AddTool( ID_SCHEMATIC_DELETE_ITEM_BUTT, wxEmptyString,
+                         BITMAP( delete_body_xpm ),
+                         _( "Delete items" ), wxITEM_CHECK );
 
-	m_VToolBar->Realize();
-	SetToolbars();
+    m_VToolBar->Realize();
+    SetToolbars();
 }
 
 
 /****************************************************************/
-void WinEDA_SchematicFrame::ReCreateOptToolbar(void)
+void WinEDA_SchematicFrame::ReCreateOptToolbar( void )
 /****************************************************************/
+
 /* Create Vertical Left Toolbar (Option Toolbar)
-*/
+ */
 {
+    if( m_OptionsToolBar )
+        return;
 
-	if ( m_OptionsToolBar ) return;
+    // creation du tool bar options
+    m_OptionsToolBar = new WinEDA_Toolbar( TOOLBAR_OPTION, this, ID_OPT_TOOLBAR, FALSE );
 
-	// creation du tool bar options
-	m_OptionsToolBar = new WinEDA_Toolbar(TOOLBAR_OPTION, this, ID_OPT_TOOLBAR, FALSE);
+    m_OptionsToolBar->AddTool( ID_TB_OPTIONS_SHOW_GRID, wxEmptyString,
+                               BITMAP( grid_xpm ),
+                               _( "Display Grid OFF" ), wxITEM_CHECK );
 
-	m_OptionsToolBar->AddTool(ID_TB_OPTIONS_SHOW_GRID, wxEmptyString,
-					BITMAP(grid_xpm),
-					_("Display Grid OFF"), wxITEM_CHECK );
+    m_OptionsToolBar->AddTool( ID_TB_OPTIONS_SELECT_UNIT_INCH, wxEmptyString,
+                               BITMAP( unit_inch_xpm ),
+                               _( "Units = Inch" ), wxITEM_CHECK );
 
-	m_OptionsToolBar->AddTool(ID_TB_OPTIONS_SELECT_UNIT_INCH, wxEmptyString,
-					BITMAP(unit_inch_xpm),
-					_("Units = Inch"), wxITEM_CHECK );
-	
-	m_OptionsToolBar->AddTool(ID_TB_OPTIONS_SELECT_UNIT_MM, wxEmptyString,
-					BITMAP(unit_mm_xpm),
-					_("Units = mm"), wxITEM_CHECK );
+    m_OptionsToolBar->AddTool( ID_TB_OPTIONS_SELECT_UNIT_MM, wxEmptyString,
+                               BITMAP( unit_mm_xpm ),
+                               _( "Units = mm" ), wxITEM_CHECK );
 
-	m_OptionsToolBar->AddTool(ID_TB_OPTIONS_SELECT_CURSOR, wxEmptyString,
-					BITMAP(cursor_shape_xpm),
-					_("Change Cursor Shape"), wxITEM_CHECK );
+    m_OptionsToolBar->AddTool( ID_TB_OPTIONS_SELECT_CURSOR, wxEmptyString,
+                               BITMAP( cursor_shape_xpm ),
+                               _( "Change Cursor Shape" ), wxITEM_CHECK );
 
-	m_OptionsToolBar->AddSeparator();
-	m_OptionsToolBar->AddTool(ID_TB_OPTIONS_HIDDEN_PINS, wxEmptyString,
-					BITMAP(hidden_pin_xpm),
-					_("Show Hidden Pins"), wxITEM_CHECK );
+    m_OptionsToolBar->AddSeparator();
+    m_OptionsToolBar->AddTool( ID_TB_OPTIONS_HIDDEN_PINS, wxEmptyString,
+                               BITMAP( hidden_pin_xpm ),
+                               _( "Show Hidden Pins" ), wxITEM_CHECK );
 
-	m_OptionsToolBar->AddSeparator();
-	m_OptionsToolBar->AddTool(ID_TB_OPTIONS_BUS_WIRES_ORIENT, wxEmptyString,
-					BITMAP(lines90_xpm),
-					_("HV orientation for Wires and Bus"), wxITEM_CHECK );
+    m_OptionsToolBar->AddSeparator();
+    m_OptionsToolBar->AddTool( ID_TB_OPTIONS_BUS_WIRES_ORIENT, wxEmptyString,
+                               BITMAP( lines90_xpm ),
+                               _( "HV orientation for Wires and Bus" ), wxITEM_CHECK );
 
-	m_OptionsToolBar->Realize();
+    m_OptionsToolBar->Realize();
 
-	SetToolbars();
+    SetToolbars();
 }
 
 
 /*******************************************************************************************/
-void WinEDA_SchematicFrame::OnSelectOptionToolbar(wxCommandEvent& event)
+void WinEDA_SchematicFrame::OnSelectOptionToolbar( wxCommandEvent& event )
 /*******************************************************************************************/
 {
-	if ( DrawPanel == NULL ) return;
+    if( DrawPanel == NULL )
+        return;
 
-int id = event.GetId();
-wxClientDC dc(DrawPanel);
+    int        id = event.GetId();
+    wxClientDC dc( DrawPanel );
 
-	DrawPanel->PrepareGraphicContext(&dc);
-	switch ( id )
-		{
-		case ID_TB_OPTIONS_SHOW_GRID:
-			g_ShowGrid = m_Draw_Grid = m_OptionsToolBar->GetToolState(id);
-			ReDrawPanel();
-			break;
+    DrawPanel->PrepareGraphicContext( &dc );
 
-		case ID_TB_OPTIONS_SELECT_UNIT_MM:
-			g_UnitMetric = MILLIMETRE;
-			Affiche_Status_Box();	 /* Reaffichage des coord curseur */
-			break;
+    switch( id )
+    {
+    case ID_TB_OPTIONS_SHOW_GRID:
+        g_ShowGrid = m_Draw_Grid = m_OptionsToolBar->GetToolState( id );
+        ReDrawPanel();
+        break;
 
-		case ID_TB_OPTIONS_SELECT_UNIT_INCH:
-			g_UnitMetric = INCHES;
-			Affiche_Status_Box();	 /* Reaffichage des coord curseur */
-			break;
+    case ID_TB_OPTIONS_SELECT_UNIT_MM:
+        g_UnitMetric = MILLIMETRE;
+        Affiche_Status_Box();        /* Reaffichage des coord curseur */
+        break;
 
-		case ID_TB_OPTIONS_SELECT_CURSOR:
-			DrawPanel->CursorOff(&dc);
-			g_CursorShape = m_OptionsToolBar->GetToolState(id);
-			DrawPanel->CursorOn(&dc);
-			break;
+    case ID_TB_OPTIONS_SELECT_UNIT_INCH:
+        g_UnitMetric = INCHES;
+        Affiche_Status_Box();        /* Reaffichage des coord curseur */
+        break;
 
-		case ID_TB_OPTIONS_HIDDEN_PINS:
-			g_ShowAllPins = m_OptionsToolBar->GetToolState(id);
-			DrawPanel->ReDraw(&dc, TRUE);
-			break;
+    case ID_TB_OPTIONS_SELECT_CURSOR:
+        DrawPanel->CursorOff( &dc );
+        g_CursorShape = m_OptionsToolBar->GetToolState( id );
+        DrawPanel->CursorOn( &dc );
+        break;
 
-		case ID_TB_OPTIONS_BUS_WIRES_ORIENT:
-			g_HVLines = m_OptionsToolBar->GetToolState(id);
-			break;
+    case ID_TB_OPTIONS_HIDDEN_PINS:
+        g_ShowAllPins = m_OptionsToolBar->GetToolState( id );
+        DrawPanel->ReDraw( &dc, TRUE );
+        break;
 
-		default:
-			DisplayError(this, wxT("OnSelectOptionToolbar() error") );
-			break;
-		}
+    case ID_TB_OPTIONS_BUS_WIRES_ORIENT:
+        g_HVLines = m_OptionsToolBar->GetToolState( id );
+        break;
 
-	SetToolbars();
+    default:
+        DisplayError( this, wxT( "OnSelectOptionToolbar() error" ) );
+        break;
+    }
+
+    SetToolbars();
 }
-
-
-
diff --git a/include/build_version.h b/include/build_version.h
index 396abeaae5..05e18d33fc 100644
--- a/include/build_version.h
+++ b/include/build_version.h
@@ -5,7 +5,7 @@
 
 COMMON_GLOBL wxString g_BuildVersion
 #ifdef EDA_BASE
-	(wxT("(2007-08-21)"))
+	(wxT("(2007-08-30)"))
 #endif
 ;
 
diff --git a/include/hotkeys_basic.h b/include/hotkeys_basic.h
index a53dbe5cf3..e14ff52885 100644
--- a/include/hotkeys_basic.h
+++ b/include/hotkeys_basic.h
@@ -1,43 +1,44 @@
-	/*******************/
-	/* hotkeys_basic.h */
-	/*******************/
+/*******************/
+/* hotkeys_basic.h */
+/*******************/
 
 /* Some functions to handle hotkeys in kicad
-*/
+ */
 
 #ifndef  HOTKEYS_BASIC_H
 #define  HOTKEYS_BASIC_H
 
-#define DEFAULT_HOTKEY_FILENAME_EXT wxT(".key")
+#define DEFAULT_HOTKEY_FILENAME_EXT wxT( ".key" )
 
 /* define default path for config key file */
 #ifdef __WINDOWS__
-#define DEFAULT_HOTKEY_FILENAME_PATH EDA_Appl->m_BinDir + wxT("../template/")
+#define DEFAULT_HOTKEY_FILENAME_PATH EDA_Appl->m_BinDir + wxT( "../template/" )
 #else
-#define DEFAULT_HOTKEY_FILENAME_PATH wxGetHomeDir() + wxT("/")
+#define DEFAULT_HOTKEY_FILENAME_PATH wxGetHomeDir() + wxT( "/" )
 #endif
 
 
 /* Class to handle hotkey commnands. hotkeys have a default value
-This class allows (for the future..) the real key code changed by user(from a key code list file, TODO)
-*/
+ *  This class allows (for the future..) the real key code changed by user(from a key code list file, TODO)
+ */
 class Ki_HotkeyInfo
 {
 public:
-	int m_KeyCode;					// Key code (ascii value for ascii keys or wxWidgets code for function key
-	wxString m_InfoMsg;				// info message.
-	int m_Idcommand;	// internal id for the corresponding command (see hotkey_id_commnand list)
+    int      m_KeyCode;             // Key code (ascii value for ascii keys or wxWidgets code for function key
+    wxString m_InfoMsg;             // info message.
+    int      m_Idcommand;           // internal id for the corresponding command (see hotkey_id_commnand list)
 
 public:
-	Ki_HotkeyInfo(const wxChar * infomsg, int idcommand, int keycode);
+    Ki_HotkeyInfo( const wxChar* infomsg, int idcommand, int keycode );
 };
 
 /* Functions:
-*/
-wxString ReturnKeyNameFromKeyCode(int keycode);
-void DisplayHotkeyList(WinEDA_DrawFrame * frame, Ki_HotkeyInfo ** List);
-int GetCommandCodeFromHotkey(int key, Ki_HotkeyInfo ** List);
+ */
+wxString    ReturnKeyNameFromKeyCode( int keycode );
+wxString    ReturnKeyNameFromCommandId( Ki_HotkeyInfo** List, int CommandId );
+wxString    AddHotkeyName( const wxString& text, Ki_HotkeyInfo** List, int CommandId );
+void        DisplayHotkeyList( WinEDA_DrawFrame* frame, Ki_HotkeyInfo** List );
+int         GetCommandCodeFromHotkey( int key, Ki_HotkeyInfo** List );
 
 
 #endif // HOTKEYS_BASIC_H
-
diff --git a/internat/fr/kicad.mo b/internat/fr/kicad.mo
index 21d145e7c3..fab801ffde 100644
Binary files a/internat/fr/kicad.mo and b/internat/fr/kicad.mo differ
diff --git a/internat/fr/kicad.po b/internat/fr/kicad.po
index 0afc36b22c..4ecdc729d2 100644
--- a/internat/fr/kicad.po
+++ b/internat/fr/kicad.po
@@ -2,7 +2,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: kicad\n"
 "POT-Creation-Date: \n"
-"PO-Revision-Date: 2007-08-27 11:02+0100\n"
+"PO-Revision-Date: 2007-08-30 11:16+0100\n"
 "Last-Translator: \n"
 "Language-Team: kicad team <jean-pierre.charras@ujf-grenoble.fr>\n"
 "MIME-Version: 1.0\n"
@@ -132,8 +132,8 @@ msgstr "Ok"
 #: eeschema/libedit_onrightclick.cpp:83
 #: eeschema/sheetlab.cpp:105
 #: eeschema/optionsframe.cpp:155
-#: eeschema/onrightclick.cpp:113
-#: eeschema/onrightclick.cpp:128
+#: eeschema/onrightclick.cpp:114
+#: eeschema/onrightclick.cpp:129
 #: eeschema/options.cpp:114
 #: eeschema/libedpart.cpp:219
 #: gerbview/options.cpp:175
@@ -197,6 +197,7 @@ msgstr "Orientation"
 #: pcbnew/dialog_edit_module.cpp:291
 #: eeschema/dialog_options.cpp:229
 #: eeschema/editpart.cpp:323
+#: eeschema/onrightclick.cpp:299
 #: eeschema/options.cpp:177
 #: eeschema/dialog_edit_component_in_schematic.cpp:182
 msgid "Normal"
@@ -372,7 +373,7 @@ msgid "Do not Show Zones"
 msgstr "Ne pas monter Zones"
 
 #: pcbnew/pcbframe.cpp:420
-#: pcbnew/tool_pcb.cpp:352
+#: pcbnew/tool_pcb.cpp:361
 #: pcbnew/set_color.cpp:387
 msgid "Show Zones"
 msgstr "Monter Zones"
@@ -398,7 +399,7 @@ msgid "Normal Contrast Mode Display"
 msgstr "Mode d'affichage Contraste normal"
 
 #: pcbnew/pcbframe.cpp:441
-#: pcbnew/tool_pcb.cpp:365
+#: pcbnew/tool_pcb.cpp:374
 msgid "Hight Contrast Mode Display"
 msgstr "Mode d'affichage Haut Contraste"
 
@@ -563,7 +564,7 @@ msgid "Import Module:"
 msgstr "Importer Module:"
 
 #: pcbnew/librairi.cpp:62
-#: pcbnew/files.cpp:184
+#: pcbnew/files.cpp:183
 #: cvpcb/readschematicnetlist.cpp:51
 #: cvpcb/rdpcad.cpp:45
 #, c-format
@@ -641,7 +642,7 @@ msgstr "Module [%s] non trouv
 #: eeschema/plothpgl.cpp:560
 #: cvpcb/genequiv.cpp:42
 #: gerbview/export_to_pcbnew.cpp:58
-#: common/hotkeys_basic.cpp:261
+#: common/hotkeys_basic.cpp:341
 msgid "Unable to create "
 msgstr "Impossible de cr�er "
 
@@ -866,7 +867,7 @@ msgstr "Ajouter Pastilles"
 #: pcbnew/globaleditpad.cpp:96
 #: pcbnew/menubarpcb.cpp:215
 #: pcbnew/menubarmodedit.cpp:45
-#: pcbnew/tool_modedit.cpp:125
+#: pcbnew/tool_modedit.cpp:133
 msgid "Pad Settings"
 msgstr "Caract pads"
 
@@ -876,7 +877,7 @@ msgid "Add Drawing"
 msgstr "Ajout d'�l�ments graphiques"
 
 #: pcbnew/modedit.cpp:330
-#: pcbnew/tool_modedit.cpp:175
+#: pcbnew/tool_modedit.cpp:185
 msgid "Place anchor"
 msgstr "Place Ancre"
 
@@ -900,7 +901,7 @@ msgstr "Forme"
 
 #: pcbnew/classpcb.cpp:186
 #: pcbnew/dialog_pad_edit.cpp:176
-#: pcbnew/dialog_pad_edit.cpp:198
+#: pcbnew/dialog_pad_edit.cpp:196
 #: pcbnew/class_track.cpp:680
 msgid "Circle"
 msgstr "Cercle"
@@ -921,7 +922,7 @@ msgstr "Segment"
 #: pcbnew/class_text_mod.cpp:349
 #: pcbnew/class_pcb_text.cpp:167
 #: pcbnew/class_module.cpp:1116
-#: pcbnew/class_pad.cpp:909
+#: pcbnew/class_pad.cpp:907
 #: pcbnew/class_track.cpp:710
 #: gerbview/affiche.cpp:109
 msgid "Layer"
@@ -1112,7 +1113,7 @@ msgid "Add Tracks"
 msgstr "Addition de pistes"
 
 #: pcbnew/edit.cpp:574
-#: pcbnew/tool_pcb.cpp:420
+#: pcbnew/tool_pcb.cpp:429
 msgid "Add Zones"
 msgstr "Addition de Zones"
 
@@ -1133,8 +1134,8 @@ msgid "Add Graphic"
 msgstr "Addition �l�ments graphiques"
 
 #: pcbnew/edit.cpp:597
-#: pcbnew/tool_pcb.cpp:437
-#: pcbnew/tool_modedit.cpp:170
+#: pcbnew/tool_pcb.cpp:446
+#: pcbnew/tool_modedit.cpp:180
 #: eeschema/schedit.cpp:313
 #: eeschema/libframe.cpp:487
 #: gerbview/tool_gerber.cpp:361
@@ -1146,7 +1147,7 @@ msgid "Add Modules"
 msgstr "Addition de Modules"
 
 #: pcbnew/edit.cpp:605
-#: pcbnew/tool_pcb.cpp:442
+#: pcbnew/tool_pcb.cpp:451
 msgid "Add Cotation"
 msgstr "Addition de Cotations"
 
@@ -1320,7 +1321,7 @@ msgstr "Largeur Texte Module"
 #: pcbnew/dialog_initpcb.cpp:161
 #: pcbnew/dialog_display_options.cpp:280
 #: pcbnew/set_grid.cpp:171
-#: pcbnew/dialog_pad_edit.cpp:221
+#: pcbnew/dialog_pad_edit.cpp:217
 #: pcbnew/dialog_track_options.cpp:181
 #: pcbnew/dialog_general_options.cpp:364
 #: eeschema/sheet.cpp:221
@@ -1343,7 +1344,7 @@ msgstr "&OK"
 #: pcbnew/dialog_display_options.cpp:284
 #: pcbnew/zones.cpp:216
 #: pcbnew/set_grid.cpp:176
-#: pcbnew/dialog_pad_edit.cpp:225
+#: pcbnew/dialog_pad_edit.cpp:221
 #: pcbnew/dialog_track_options.cpp:185
 #: pcbnew/dialog_general_options.cpp:368
 #: eeschema/sheet.cpp:216
@@ -1366,7 +1367,7 @@ msgstr "Fenetre 3D d
 msgid "3D Viewer"
 msgstr "Visu 3D"
 
-#: pcbnew/tool_pcb.cpp:50
+#: pcbnew/tool_pcb.cpp:52
 msgid ""
 "Show active layer selections\n"
 "and select layer pair for route and place via"
@@ -1374,182 +1375,171 @@ msgstr ""
 "Affiche selections couche active\n"
 "et selection paire de couches pour routage and placement via"
 
-#: pcbnew/tool_pcb.cpp:236
+#: pcbnew/tool_pcb.cpp:239
 msgid "New Board"
 msgstr "Nouveau Circuit Imprim�"
 
-#: pcbnew/tool_pcb.cpp:238
+#: pcbnew/tool_pcb.cpp:241
 msgid "Open existing Board"
 msgstr "Ouvrir C.I. existant"
 
-#: pcbnew/tool_pcb.cpp:239
+#: pcbnew/tool_pcb.cpp:242
 msgid "Save Board"
 msgstr "Sauver Circuit Imprim�"
 
-#: pcbnew/tool_pcb.cpp:243
-#: eeschema/tool_sch.cpp:61
+#: pcbnew/tool_pcb.cpp:246
+#: eeschema/tool_sch.cpp:65
 #: gerbview/tool_gerber.cpp:217
 msgid "page settings (size, texts)"
 msgstr "Ajustage de la feuille de dessin (dimensions, textes)"
 
-#: pcbnew/tool_pcb.cpp:247
+#: pcbnew/tool_pcb.cpp:250
 msgid "Open Module Editor"
 msgstr "Ouvrir Editeur de modules"
 
-#: pcbnew/tool_pcb.cpp:250
-#: eeschema/tool_sch.cpp:77
+#: pcbnew/tool_pcb.cpp:253
+#: eeschema/tool_sch.cpp:81
 #: gerbview/tool_gerber.cpp:228
 msgid "Cut selected item"
 msgstr "Suppression des �l�ments s�lectionn�s"
 
-#: pcbnew/tool_pcb.cpp:254
-#: eeschema/tool_sch.cpp:80
+#: pcbnew/tool_pcb.cpp:257
+#: eeschema/tool_sch.cpp:84
 #: gerbview/tool_gerber.cpp:233
 msgid "Copy selected item"
 msgstr "Copie des �l�ments s�lectionn�s"
 
-#: pcbnew/tool_pcb.cpp:256
-#: eeschema/tool_sch.cpp:83
+#: pcbnew/tool_pcb.cpp:259
+#: eeschema/tool_sch.cpp:87
 #: gerbview/tool_gerber.cpp:239
 msgid "Paste"
 msgstr "Copie des �l�ments sauvegard�s"
 
-#: pcbnew/tool_pcb.cpp:259
+#: pcbnew/tool_pcb.cpp:262
 #: gerbview/tool_gerber.cpp:246
 msgid "Undelete"
 msgstr "Annulation du dernier effacement"
 
-#: pcbnew/tool_pcb.cpp:262
+#: pcbnew/tool_pcb.cpp:265
 msgid "Print Board"
 msgstr "Imprimer C.I."
 
-#: pcbnew/tool_pcb.cpp:264
+#: pcbnew/tool_pcb.cpp:267
 #: pcbnew/menubarpcb.cpp:93
 msgid "Plot (HPGL, PostScript, or GERBER format)"
 msgstr "Tracer en format HPGL,  POSTSCRIPT ou GERBER"
 
-#: pcbnew/tool_pcb.cpp:268
-#: pcbnew/tool_modedit.cpp:111
-#: eeschema/tool_sch.cpp:104
-#: eeschema/tool_lib.cpp:170
-#: eeschema/tool_viewlib.cpp:70
-#: cvpcb/displayframe.cpp:118
-#: gerbview/tool_gerber.cpp:260
-#: 3d-viewer/3d_toolbar.cpp:43
-msgid "zoom + (F1)"
-msgstr "zoom + (F1)"
-
 #: pcbnew/tool_pcb.cpp:270
-#: pcbnew/tool_modedit.cpp:114
+#: pcbnew/tool_modedit.cpp:115
 #: eeschema/tool_sch.cpp:107
+#: eeschema/tool_lib.cpp:170
+msgid "zoom +"
+msgstr "zoom +"
+
+#: pcbnew/tool_pcb.cpp:274
+#: pcbnew/tool_modedit.cpp:119
+#: eeschema/tool_sch.cpp:111
 #: eeschema/tool_lib.cpp:174
-#: eeschema/tool_viewlib.cpp:74
-#: cvpcb/displayframe.cpp:121
-#: gerbview/tool_gerber.cpp:266
-#: 3d-viewer/3d_toolbar.cpp:46
-msgid "zoom - (F2)"
-msgstr "zoom - (F2)"
+msgid "zoom -"
+msgstr "zoom -"
 
-#: pcbnew/tool_pcb.cpp:272
-#: pcbnew/tool_modedit.cpp:117
-#: eeschema/tool_sch.cpp:110
+#: pcbnew/tool_pcb.cpp:278
+#: pcbnew/tool_modedit.cpp:123
+#: eeschema/tool_sch.cpp:115
 #: eeschema/tool_lib.cpp:178
-#: eeschema/tool_viewlib.cpp:78
-#: cvpcb/displayframe.cpp:124
-#: gerbview/tool_gerber.cpp:272
-#: 3d-viewer/3d_toolbar.cpp:49
-msgid "redraw (F3)"
-msgstr "Redessin (F3)"
+msgid "redraw"
+msgstr "Redessin"
 
-#: pcbnew/tool_pcb.cpp:275
-#: pcbnew/tool_modedit.cpp:120
-#: eeschema/tool_sch.cpp:113
-#: eeschema/tool_lib.cpp:182
+#: pcbnew/tool_pcb.cpp:283
+#: pcbnew/tool_modedit.cpp:128
+#: eeschema/tool_sch.cpp:120
+#: eeschema/tool_lib.cpp:184
 #: gerbview/tool_gerber.cpp:278
 #: 3d-viewer/3d_toolbar.cpp:52
 msgid "auto zoom"
 msgstr "Zoom automatique"
 
-#: pcbnew/tool_pcb.cpp:279
-msgid "Find components and texts (Ctrl-F)"
-msgstr "Recherche de composants et textes (Ctrl F)"
+#: pcbnew/tool_pcb.cpp:286
+#: eeschema/tool_sch.cpp:124
+msgid "Find components and texts"
+msgstr "Recherche de composants et textes"
 
-#: pcbnew/tool_pcb.cpp:283
+#: pcbnew/tool_pcb.cpp:292
 msgid "Read Netlist"
 msgstr "Lire Netliste"
 
-#: pcbnew/tool_pcb.cpp:285
+#: pcbnew/tool_pcb.cpp:294
 msgid "Pcb Design Rules Check"
 msgstr "Controle des r�gles de conception"
 
-#: pcbnew/tool_pcb.cpp:296
+#: pcbnew/tool_pcb.cpp:305
 msgid "Mode Module: Manual and Automatic Move or Place for modules"
 msgstr "Mode Module: D�placements ou Placement Manuel ou Automatique des modules"
 
-#: pcbnew/tool_pcb.cpp:299
+#: pcbnew/tool_pcb.cpp:308
 msgid "Mode Track and Autorouting"
 msgstr "Mode Pistes and Autoroutage"
 
-#: pcbnew/tool_pcb.cpp:323
+#: pcbnew/tool_pcb.cpp:332
 msgid "Drc OFF"
 msgstr "Drc DESACTIVEE"
 
-#: pcbnew/tool_pcb.cpp:325
-#: pcbnew/tool_modedit.cpp:201
-#: eeschema/tool_sch.cpp:246
+#: pcbnew/tool_pcb.cpp:334
+#: pcbnew/tool_modedit.cpp:212
+#: eeschema/tool_sch.cpp:256
 #: gerbview/tool_gerber.cpp:389
 msgid "Display Grid OFF"
 msgstr "Suppression de l'affichage de la grille"
 
-#: pcbnew/tool_pcb.cpp:328
-#: pcbnew/tool_modedit.cpp:205
+#: pcbnew/tool_pcb.cpp:337
+#: pcbnew/tool_modedit.cpp:216
 #: gerbview/tool_gerber.cpp:395
 msgid "Display Polar Coord ON"
 msgstr "Activer affichage coord Polaires"
 
-#: pcbnew/tool_pcb.cpp:330
-#: pcbnew/tool_modedit.cpp:209
-#: eeschema/tool_sch.cpp:250
+#: pcbnew/tool_pcb.cpp:339
+#: pcbnew/tool_modedit.cpp:220
+#: eeschema/tool_sch.cpp:260
 #: gerbview/tool_gerber.cpp:399
 msgid "Units = Inch"
 msgstr "Unit�s = pouce"
 
-#: pcbnew/tool_pcb.cpp:332
-#: pcbnew/tool_modedit.cpp:213
-#: eeschema/tool_sch.cpp:254
+#: pcbnew/tool_pcb.cpp:341
+#: pcbnew/tool_modedit.cpp:224
+#: eeschema/tool_sch.cpp:264
 #: gerbview/tool_gerber.cpp:403
 msgid "Units = mm"
 msgstr "Unit�s = mm"
 
-#: pcbnew/tool_pcb.cpp:335
-#: pcbnew/tool_modedit.cpp:219
-#: eeschema/tool_sch.cpp:258
+#: pcbnew/tool_pcb.cpp:344
+#: pcbnew/tool_modedit.cpp:230
+#: eeschema/tool_sch.cpp:268
 #: gerbview/tool_gerber.cpp:409
 msgid "Change Cursor Shape"
 msgstr "S�lection de la forme du curseur"
 
-#: pcbnew/tool_pcb.cpp:340
+#: pcbnew/tool_pcb.cpp:349
 msgid "Show General Ratsnest"
 msgstr "Monter le chevelu g�n�ral"
 
-#: pcbnew/tool_pcb.cpp:343
+#: pcbnew/tool_pcb.cpp:352
 msgid "Show Module Ratsnest when moving"
 msgstr "Monter le chevelu du module pendant d�placement"
 
-#: pcbnew/tool_pcb.cpp:348
+#: pcbnew/tool_pcb.cpp:357
 msgid "Enable Auto Del Track"
 msgstr "Autoriser l'effacement automatique des pistes"
 
-#: pcbnew/tool_pcb.cpp:357
-#: pcbnew/tool_modedit.cpp:227
+#: pcbnew/tool_pcb.cpp:366
+#: pcbnew/tool_modedit.cpp:238
 msgid "Show Pads Sketch"
 msgstr "Afficher pastilles en contour"
 
-#: pcbnew/tool_pcb.cpp:361
+#: pcbnew/tool_pcb.cpp:370
 msgid "Show Tracks Sketch"
 msgstr "Afficher pistes en contour"
 
-#: pcbnew/tool_pcb.cpp:374
+#: pcbnew/tool_pcb.cpp:383
 msgid ""
 "Display auxiliary vertical toolbar (tools for micro wave applications)\n"
 " This is a very experimental feature (under development)"
@@ -1557,98 +1547,98 @@ msgstr ""
 "Affiche toolbar vertical auxiliaire (outils pour applications micro-ondes)\n"
 "C'est un outil exp�rimental (en cours de d�veloppement)"
 
-#: pcbnew/tool_pcb.cpp:403
+#: pcbnew/tool_pcb.cpp:412
 msgid "Net highlight"
 msgstr "Surbrillance des �quipotentielles"
 
-#: pcbnew/tool_pcb.cpp:407
+#: pcbnew/tool_pcb.cpp:416
 msgid "Display local ratsnest (pad or module)"
 msgstr "Afficher le chevelu local (pastilles ou modules)"
 
-#: pcbnew/tool_pcb.cpp:412
+#: pcbnew/tool_pcb.cpp:421
 msgid "Add modules"
 msgstr "Addition de Modules"
 
-#: pcbnew/tool_pcb.cpp:416
+#: pcbnew/tool_pcb.cpp:425
 msgid "Add Tracks an vias"
 msgstr "Ajouter pistes et vias"
 
-#: pcbnew/tool_pcb.cpp:425
-#: pcbnew/tool_modedit.cpp:158
-#: eeschema/tool_sch.cpp:216
+#: pcbnew/tool_pcb.cpp:434
+#: pcbnew/tool_modedit.cpp:168
+#: eeschema/tool_sch.cpp:225
 msgid "Add graphic line or polygon"
 msgstr "Addition de lignes ou polygones graphiques"
 
-#: pcbnew/tool_pcb.cpp:429
-#: pcbnew/tool_modedit.cpp:162
+#: pcbnew/tool_pcb.cpp:438
+#: pcbnew/tool_modedit.cpp:172
 msgid "Add graphic circle"
 msgstr "Addition de graphiques (Cercle)"
 
-#: pcbnew/tool_pcb.cpp:433
-#: pcbnew/tool_modedit.cpp:166
+#: pcbnew/tool_pcb.cpp:442
+#: pcbnew/tool_modedit.cpp:176
 msgid "Add graphic arc"
 msgstr "Addition de graphiques (Arc de Cercle)"
 
-#: pcbnew/tool_pcb.cpp:446
+#: pcbnew/tool_pcb.cpp:455
 #: gerbview/tool_gerber.cpp:354
 msgid "Add Mires"
 msgstr "Addition de Mires de superposition"
 
-#: pcbnew/tool_pcb.cpp:451
-#: pcbnew/tool_modedit.cpp:180
-#: eeschema/tool_sch.cpp:225
-#: eeschema/tool_lib.cpp:92
+#: pcbnew/tool_pcb.cpp:460
+#: pcbnew/tool_modedit.cpp:190
+#: eeschema/tool_sch.cpp:234
+#: eeschema/tool_lib.cpp:93
 #: gerbview/tool_gerber.cpp:369
 msgid "Delete items"
 msgstr "Suppression d'�l�ments"
 
-#: pcbnew/tool_pcb.cpp:456
+#: pcbnew/tool_pcb.cpp:465
 msgid "Offset adjust for drill and place files"
 msgstr "Ajuste offset pour fichier de per�age et placement"
 
-#: pcbnew/tool_pcb.cpp:481
+#: pcbnew/tool_pcb.cpp:490
 msgid "Create line of specified length for microwave applications"
 msgstr "Creation de lignes de longueur sp�cifi�e (pour applications micro-ondes)"
 
-#: pcbnew/tool_pcb.cpp:487
+#: pcbnew/tool_pcb.cpp:496
 msgid "Create gap of specified length for microwave applications"
 msgstr "Creation de gaps de longueur sp�cifi�e (pour applications micro-ondes)"
 
-#: pcbnew/tool_pcb.cpp:495
+#: pcbnew/tool_pcb.cpp:504
 msgid "Create stub of specified length for microwave applications"
 msgstr "Creation de stub de longueur sp�cifi�e (pour applications micro-ondes)"
 
-#: pcbnew/tool_pcb.cpp:501
+#: pcbnew/tool_pcb.cpp:510
 msgid "Create stub (arc) of specified length for microwave applications"
 msgstr "Creation de stub (arc) de longueur sp�cifi�e (pour applications micro-ondes)"
 
-#: pcbnew/tool_pcb.cpp:508
+#: pcbnew/tool_pcb.cpp:517
 msgid "Create a polynomial shape for microwave applications"
 msgstr "Creation de formes polynomiales (pour applications micro-ondes)"
 
-#: pcbnew/tool_pcb.cpp:558
-#: pcbnew/tool_modedit.cpp:273
+#: pcbnew/tool_pcb.cpp:567
+#: pcbnew/tool_modedit.cpp:285
 #: eeschema/plotps.cpp:169
 #: share/zoom.cpp:368
 msgid "Auto"
 msgstr "Auto"
 
-#: pcbnew/tool_pcb.cpp:562
+#: pcbnew/tool_pcb.cpp:571
 msgid "Zoom "
 msgstr "Zoom "
 
-#: pcbnew/tool_pcb.cpp:576
+#: pcbnew/tool_pcb.cpp:585
 #: pcbnew/set_color.cpp:378
 #: gerbview/set_color.h:246
 msgid "Grid"
 msgstr "Grille"
 
-#: pcbnew/tool_pcb.cpp:592
-#: pcbnew/tool_modedit.cpp:299
+#: pcbnew/tool_pcb.cpp:601
+#: pcbnew/tool_modedit.cpp:314
 msgid "User Grid"
 msgstr "Grille perso"
 
-#: pcbnew/tool_pcb.cpp:645
+#: pcbnew/tool_pcb.cpp:654
 msgid "+/- to switch"
 msgstr "+/- pour commuter"
 
@@ -1661,18 +1651,18 @@ msgstr "Valeur incorrecte pour per
 msgid "Delete Pad (module %s %s) "
 msgstr "Effacer Pad (module %s %s) "
 
-#: pcbnew/hotkeys.cpp:263
+#: pcbnew/hotkeys.cpp:372
 #, c-format
 msgid "Footprint %s found, but locked"
 msgstr "Module %s trouv�, mais verrouill�"
 
-#: pcbnew/hotkeys.cpp:409
+#: pcbnew/hotkeys.cpp:532
 msgid "Delete module?"
 msgstr "Effacer Module?"
 
 #: pcbnew/dialog_netlist.cpp:133
 #: eeschema/editpart.cpp:741
-#: eeschema/onrightclick.cpp:303
+#: eeschema/onrightclick.cpp:311
 #: eeschema/dialog_create_component.cpp:164
 #: eeschema/eelayer.cpp:99
 #: eeschema/edit_component_in_schematic.cpp:744
@@ -1921,7 +1911,7 @@ msgstr "Via %.3f"
 #: pcbnew/onrightclick.cpp:169
 #: pcbnew/modedit_onclick.cpp:205
 #: eeschema/libedit_onrightclick.cpp:73
-#: eeschema/onrightclick.cpp:117
+#: eeschema/onrightclick.cpp:118
 #: gerbview/onrightclick.cpp:42
 msgid "End Tool"
 msgstr "Fin Outil"
@@ -2105,7 +2095,7 @@ msgstr "Lire Donn
 #: pcbnew/onrightclick.cpp:486
 #: pcbnew/modedit_onclick.cpp:215
 #: eeschema/libedit_onrightclick.cpp:251
-#: eeschema/onrightclick.cpp:567
+#: eeschema/onrightclick.cpp:575
 #: gerbview/onrightclick.cpp:51
 msgid "Cancel Block"
 msgstr "Annuler Bloc"
@@ -2119,7 +2109,7 @@ msgstr "Zoom Bloc (drag+bouton milieu)"
 #: pcbnew/onrightclick.cpp:491
 #: pcbnew/modedit_onclick.cpp:220
 #: eeschema/libedit_onrightclick.cpp:259
-#: eeschema/onrightclick.cpp:575
+#: eeschema/onrightclick.cpp:583
 #: gerbview/onrightclick.cpp:54
 msgid "Place Block"
 msgstr "Place Bloc"
@@ -2127,7 +2117,7 @@ msgstr "Place Bloc"
 #: pcbnew/onrightclick.cpp:493
 #: pcbnew/modedit_onclick.cpp:222
 #: eeschema/libedit_onrightclick.cpp:265
-#: eeschema/onrightclick.cpp:584
+#: eeschema/onrightclick.cpp:592
 msgid "Copy Block (shift + drag mouse)"
 msgstr "Copie Bloc (shift + drag mouse)"
 
@@ -2295,7 +2285,7 @@ msgid "Rotate  + (R)"
 msgstr "Rotation +  (R)"
 
 #: pcbnew/onrightclick.cpp:659
-#: eeschema/onrightclick.cpp:289
+#: eeschema/onrightclick.cpp:294
 msgid "Rotate -"
 msgstr "Rotation -"
 
@@ -2307,7 +2297,7 @@ msgstr "Change face (S)"
 #: pcbnew/onrightclick.cpp:712
 #: pcbnew/onrightclick.cpp:785
 #: pcbnew/modedit_onclick.cpp:315
-#: eeschema/onrightclick.cpp:298
+#: eeschema/onrightclick.cpp:306
 msgid "Edit"
 msgstr "Editer"
 
@@ -2395,11 +2385,11 @@ msgstr "Diam per
 msgid "Pad Orient (0.1 deg)"
 msgstr "Orient Pad (0.1 deg)"
 
-#: pcbnew/editpads.cpp:339
+#: pcbnew/editpads.cpp:333
 msgid "Incorrect value for pad drill: pad drill bigger than pad size"
 msgstr "Valeur incorrecte pour diametre de per�age.percage plus grand que la taille du pad"
 
-#: pcbnew/editpads.cpp:345
+#: pcbnew/editpads.cpp:339
 msgid "Incorrect value for pad offset"
 msgstr "Valeur incorrecte pour offset du pad"
 
@@ -2794,7 +2784,7 @@ msgid "Current Value"
 msgstr "Valeur courante"
 
 #: pcbnew/xchgmod.cpp:156
-#: pcbnew/tool_modedit.cpp:65
+#: pcbnew/tool_modedit.cpp:70
 msgid "New Module"
 msgstr "Nouveau Module"
 
@@ -2938,15 +2928,15 @@ msgid "Pad Net Name :"
 msgstr "NetName Pad:"
 
 #: pcbnew/dialog_pad_edit.cpp:177
-#: pcbnew/dialog_pad_edit.cpp:199
+#: pcbnew/dialog_pad_edit.cpp:197
 msgid "Oval"
 msgstr "Ovale"
 
-#: pcbnew/dialog_pad_edit.cpp:179
+#: pcbnew/dialog_pad_edit.cpp:178
 msgid "Drill Shape:"
 msgstr "Forme du per�age:"
 
-#: pcbnew/dialog_pad_edit.cpp:187
+#: pcbnew/dialog_pad_edit.cpp:186
 #: pcbnew/clean.cpp:422
 #: eeschema/dialog_erc.cpp:192
 #: eeschema/dialog_erc.cpp:196
@@ -2954,120 +2944,120 @@ msgstr "Forme du per
 msgid "0"
 msgstr "0"
 
-#: pcbnew/dialog_pad_edit.cpp:188
+#: pcbnew/dialog_pad_edit.cpp:187
 msgid "90"
 msgstr "90"
 
-#: pcbnew/dialog_pad_edit.cpp:189
+#: pcbnew/dialog_pad_edit.cpp:188
 #: eeschema/dialog_edit_component_in_schematic.cpp:175
 msgid "-90"
 msgstr "-90"
 
-#: pcbnew/dialog_pad_edit.cpp:190
+#: pcbnew/dialog_pad_edit.cpp:189
 #: eeschema/dialog_edit_component_in_schematic.cpp:174
 msgid "180"
 msgstr "180"
 
-#: pcbnew/dialog_pad_edit.cpp:191
+#: pcbnew/dialog_pad_edit.cpp:190
 #: pcbnew/dialog_edit_module.cpp:245
 msgid "User"
 msgstr "User"
 
-#: pcbnew/dialog_pad_edit.cpp:193
+#: pcbnew/dialog_pad_edit.cpp:191
 msgid "Pad Orient:"
 msgstr "Orient pad:"
 
-#: pcbnew/dialog_pad_edit.cpp:200
+#: pcbnew/dialog_pad_edit.cpp:198
 msgid "Rect"
 msgstr "Rect"
 
-#: pcbnew/dialog_pad_edit.cpp:201
+#: pcbnew/dialog_pad_edit.cpp:199
 msgid "Trapezoidal"
 msgstr "Trapezoidal"
 
-#: pcbnew/dialog_pad_edit.cpp:203
+#: pcbnew/dialog_pad_edit.cpp:200
 msgid "Pad Shape:"
 msgstr "Forme Pad:"
 
-#: pcbnew/dialog_pad_edit.cpp:208
+#: pcbnew/dialog_pad_edit.cpp:205
 #: pcbnew/class_track.cpp:682
 msgid "Standard"
 msgstr "Standard"
 
-#: pcbnew/dialog_pad_edit.cpp:209
+#: pcbnew/dialog_pad_edit.cpp:206
 msgid "SMD"
 msgstr "CMS"
 
-#: pcbnew/dialog_pad_edit.cpp:210
+#: pcbnew/dialog_pad_edit.cpp:207
 #: eeschema/netlist.cpp:146
 msgid "Conn"
 msgstr "Conn"
 
-#: pcbnew/dialog_pad_edit.cpp:211
+#: pcbnew/dialog_pad_edit.cpp:208
 msgid "Hole"
 msgstr "Hole"
 
-#: pcbnew/dialog_pad_edit.cpp:212
+#: pcbnew/dialog_pad_edit.cpp:209
 msgid "Mechanical"
 msgstr "Mechanical"
 
-#: pcbnew/dialog_pad_edit.cpp:214
+#: pcbnew/dialog_pad_edit.cpp:210
 msgid "Pad Type:"
 msgstr "Type Pad:"
 
-#: pcbnew/dialog_pad_edit.cpp:229
+#: pcbnew/dialog_pad_edit.cpp:225
 msgid "Layers:"
 msgstr "Couches:"
 
-#: pcbnew/dialog_pad_edit.cpp:233
+#: pcbnew/dialog_pad_edit.cpp:229
 msgid "Copper layer"
 msgstr "Couches Cuivre"
 
-#: pcbnew/dialog_pad_edit.cpp:237
+#: pcbnew/dialog_pad_edit.cpp:233
 msgid "Comp layer"
 msgstr "Couche Cmp"
 
-#: pcbnew/dialog_pad_edit.cpp:243
+#: pcbnew/dialog_pad_edit.cpp:239
 msgid "Adhesive Cmp"
 msgstr "Adhesive Cmp"
 
-#: pcbnew/dialog_pad_edit.cpp:247
+#: pcbnew/dialog_pad_edit.cpp:243
 msgid "Adhesive Copper"
 msgstr "Adhesive Cu"
 
-#: pcbnew/dialog_pad_edit.cpp:251
+#: pcbnew/dialog_pad_edit.cpp:247
 msgid "Solder paste Cmp"
 msgstr "Pate � souder Cmp"
 
-#: pcbnew/dialog_pad_edit.cpp:255
+#: pcbnew/dialog_pad_edit.cpp:251
 msgid "Solder paste Copper"
 msgstr "Pate � souder cuivre"
 
-#: pcbnew/dialog_pad_edit.cpp:259
+#: pcbnew/dialog_pad_edit.cpp:255
 msgid "Silkscreen Cmp"
 msgstr "S�rigr Cmp"
 
-#: pcbnew/dialog_pad_edit.cpp:263
+#: pcbnew/dialog_pad_edit.cpp:259
 msgid "Silkscreen Copper"
 msgstr "S�rigr Cu "
 
-#: pcbnew/dialog_pad_edit.cpp:267
+#: pcbnew/dialog_pad_edit.cpp:263
 msgid "Solder mask Cmp"
 msgstr "Masque soudure Cmp"
 
-#: pcbnew/dialog_pad_edit.cpp:271
+#: pcbnew/dialog_pad_edit.cpp:267
 msgid "Solder mask Copper"
 msgstr "Masque soudure cuivre"
 
-#: pcbnew/dialog_pad_edit.cpp:275
+#: pcbnew/dialog_pad_edit.cpp:271
 msgid "E.C.O.1 layer"
 msgstr "couche E.C.O.1"
 
-#: pcbnew/dialog_pad_edit.cpp:279
+#: pcbnew/dialog_pad_edit.cpp:275
 msgid "E.C.O.2 layer"
 msgstr "couche E.C.O.2"
 
-#: pcbnew/dialog_pad_edit.cpp:283
+#: pcbnew/dialog_pad_edit.cpp:279
 msgid "Draft layer"
 msgstr "Couche dessin"
 
@@ -3430,7 +3420,7 @@ msgstr "Ouvrir Editeur de modules"
 
 #: pcbnew/dialog_edit_module.cpp:195
 #: eeschema/fieldedi.cpp:283
-#: eeschema/onrightclick.cpp:334
+#: eeschema/onrightclick.cpp:342
 #: eeschema/dialog_edit_component_in_lib.cpp:203
 #: eeschema/libedpart.cpp:246
 msgid "Doc"
@@ -3449,7 +3439,7 @@ msgid "Add Field"
 msgstr "Ajouter Champ"
 
 #: pcbnew/dialog_edit_module.cpp:224
-#: eeschema/onrightclick.cpp:264
+#: eeschema/onrightclick.cpp:265
 msgid "Edit Field"
 msgstr "Editer Champ"
 
@@ -3470,7 +3460,7 @@ msgstr "Cuivre"
 #: pcbnew/class_text_mod.cpp:359
 #: pcbnew/class_pcb_text.cpp:178
 #: pcbnew/class_module.cpp:1139
-#: pcbnew/class_pad.cpp:955
+#: pcbnew/class_pad.cpp:949
 #: eeschema/affiche.cpp:117
 #: gerbview/affiche.cpp:49
 msgid "Orient"
@@ -3737,7 +3727,7 @@ msgstr "Outils"
 #: pcbnew/gendrill.cpp:400
 #: pcbnew/gendrill.cpp:1009
 #: pcbnew/gendrill.cpp:1522
-#: pcbnew/class_pad.cpp:936
+#: pcbnew/class_pad.cpp:930
 #: pcbnew/class_track.cpp:725
 #: pcbnew/class_track.cpp:730
 msgid "Drill"
@@ -3772,7 +3762,7 @@ msgstr "Ref."
 #: pcbnew/class_edge_mod.cpp:286
 #: eeschema/editpart.cpp:776
 #: eeschema/component_class.cpp:50
-#: eeschema/onrightclick.cpp:302
+#: eeschema/onrightclick.cpp:310
 #: eeschema/eelayer.cpp:105
 #: eeschema/edit_component_in_schematic.cpp:783
 msgid "Value"
@@ -3786,21 +3776,21 @@ msgstr "Texte"
 #: pcbnew/class_text_mod.cpp:326
 #: pcbnew/class_edge_mod.cpp:285
 #: pcbnew/class_module.cpp:1142
-#: pcbnew/class_pad.cpp:820
+#: pcbnew/class_pad.cpp:818
 #: cvpcb/setvisu.cpp:29
 msgid "Module"
 msgstr "Module"
 
 #: pcbnew/class_text_mod.cpp:365
 #: pcbnew/class_pcb_text.cpp:184
-#: pcbnew/class_pad.cpp:926
+#: pcbnew/class_pad.cpp:920
 #: gerbview/affiche.cpp:55
 msgid "H Size"
 msgstr "Taille H"
 
 #: pcbnew/class_text_mod.cpp:368
 #: pcbnew/class_pcb_text.cpp:187
-#: pcbnew/class_pad.cpp:930
+#: pcbnew/class_pad.cpp:924
 #: gerbview/affiche.cpp:58
 msgid "V Size"
 msgstr "Taille V"
@@ -4169,19 +4159,17 @@ msgid "Read options from a selected config file"
 msgstr "Lire options d'un fichier de configuration choisi"
 
 #: pcbnew/menubarpcb.cpp:186
-#: eeschema/menubar.cpp:150
-msgid "Create Eeschema &Hotkey config file"
-msgstr "Cr�er les fichiers configuration des &Hotkeys de Eeschema "
+msgid "Create Pcbnew &Hotkey config file"
+msgstr "Cr�er les fichiers configuration des &Hotkeys de Pcbnew"
 
 #: pcbnew/menubarpcb.cpp:187
 #: eeschema/menubar.cpp:151
 msgid "Create or Recreate the hotkey config file from current hotkey list"
-msgstr "Cr�er ou recr�er les fichiers configuration des Hotkeys de Eeschema "
+msgstr "Cr�er ou recr�er les fichiers configuration des Hotkeys a partir de la liste courante"
 
 #: pcbnew/menubarpcb.cpp:190
-#: eeschema/menubar.cpp:154
-msgid "Reread &Eeschema Hotkey config file"
-msgstr "Relire  les fichiers configuration des Hotkeys de &Eeschema "
+msgid "Reread &Pcbnew Hotkey config file"
+msgstr "Relire  les fichiers configuration des Hotkeys de &Pcbnew"
 
 #: pcbnew/menubarpcb.cpp:191
 #: eeschema/menubar.cpp:155
@@ -4407,27 +4395,27 @@ msgstr "Connect"
 msgid "NoConn"
 msgstr "Non Conn"
 
-#: pcbnew/class_pad.cpp:734
+#: pcbnew/class_pad.cpp:732
 msgid "Unknown Pad shape"
 msgstr "Forme pad inconnue"
 
-#: pcbnew/class_pad.cpp:823
+#: pcbnew/class_pad.cpp:821
 msgid "RefP"
 msgstr "RefP"
 
-#: pcbnew/class_pad.cpp:826
+#: pcbnew/class_pad.cpp:824
 msgid "Net"
 msgstr "Net"
 
-#: pcbnew/class_pad.cpp:944
+#: pcbnew/class_pad.cpp:938
 msgid "Drill X / Y"
 msgstr "Per�age X/Y"
 
-#: pcbnew/class_pad.cpp:959
+#: pcbnew/class_pad.cpp:953
 msgid "X Pos"
 msgstr "X Pos"
 
-#: pcbnew/class_pad.cpp:963
+#: pcbnew/class_pad.cpp:957
 msgid "Y pos"
 msgstr "Y pos"
 
@@ -4727,95 +4715,95 @@ msgstr " Pads magn
 msgid "control the capture of the pcb cursor when the mouse cursor enters a pad area"
 msgstr "Controle la capture du curseur pcb quand le curseuir souris est sur le pad"
 
-#: pcbnew/tool_modedit.cpp:48
-#: eeschema/tool_lib.cpp:119
+#: pcbnew/tool_modedit.cpp:53
+#: eeschema/tool_lib.cpp:123
 msgid "Select working library"
 msgstr "S�lection de la librairie de travail"
 
-#: pcbnew/tool_modedit.cpp:51
+#: pcbnew/tool_modedit.cpp:56
 msgid "Save Module in working library"
 msgstr "Sauver Module en librairie de travail"
 
-#: pcbnew/tool_modedit.cpp:55
+#: pcbnew/tool_modedit.cpp:60
 msgid "Create new library and save current module"
 msgstr "Cr�er une nouvelle librairie et y sauver le composant"
 
-#: pcbnew/tool_modedit.cpp:60
-#: eeschema/tool_lib.cpp:122
+#: pcbnew/tool_modedit.cpp:65
+#: eeschema/tool_lib.cpp:126
 msgid "Delete part in current library"
 msgstr "Supprimer composant en librairie de travail"
 
-#: pcbnew/tool_modedit.cpp:69
+#: pcbnew/tool_modedit.cpp:74
 msgid "Load module from lib"
 msgstr "Charger un module a partir d'une librairie"
 
-#: pcbnew/tool_modedit.cpp:74
+#: pcbnew/tool_modedit.cpp:79
 msgid "Load module from current board"
 msgstr "Charger module a partir du C.I."
 
-#: pcbnew/tool_modedit.cpp:78
+#: pcbnew/tool_modedit.cpp:83
 msgid "Update module in current board"
 msgstr "Remplacer module dans le C.I."
 
-#: pcbnew/tool_modedit.cpp:82
+#: pcbnew/tool_modedit.cpp:87
 msgid "Insert module into current board"
 msgstr "Placer module dans le C.I."
 
-#: pcbnew/tool_modedit.cpp:87
+#: pcbnew/tool_modedit.cpp:92
 msgid "import module"
 msgstr "Importer Module"
 
-#: pcbnew/tool_modedit.cpp:91
+#: pcbnew/tool_modedit.cpp:96
 msgid "export module"
 msgstr "Exporter Module"
 
-#: pcbnew/tool_modedit.cpp:96
-#: eeschema/tool_sch.cpp:87
-#: eeschema/tool_lib.cpp:147
+#: pcbnew/tool_modedit.cpp:101
+#: eeschema/tool_sch.cpp:91
+#: eeschema/tool_lib.cpp:151
 msgid "Undo last edition"
 msgstr "Defait derni�re �dition"
 
-#: pcbnew/tool_modedit.cpp:98
-#: eeschema/tool_sch.cpp:89
-#: eeschema/tool_lib.cpp:149
+#: pcbnew/tool_modedit.cpp:103
+#: eeschema/tool_sch.cpp:93
+#: eeschema/tool_lib.cpp:153
 msgid "Redo the last undo command"
 msgstr "Refait la derni�re commande defaite"
 
-#: pcbnew/tool_modedit.cpp:103
+#: pcbnew/tool_modedit.cpp:108
 msgid "Module Properties"
 msgstr "Propri�t�s du Module"
 
-#: pcbnew/tool_modedit.cpp:107
+#: pcbnew/tool_modedit.cpp:112
 msgid "Print Module"
 msgstr "Imprimer Module"
 
-#: pcbnew/tool_modedit.cpp:129
+#: pcbnew/tool_modedit.cpp:137
 msgid "Module Check"
 msgstr "Test module"
 
-#: pcbnew/tool_modedit.cpp:153
+#: pcbnew/tool_modedit.cpp:163
 msgid "Add Pads"
 msgstr "Addition de \"pins\""
 
-#: pcbnew/tool_modedit.cpp:234
+#: pcbnew/tool_modedit.cpp:245
 msgid "Show Texts Sketch"
 msgstr "Afficher textes en contour"
 
-#: pcbnew/tool_modedit.cpp:241
+#: pcbnew/tool_modedit.cpp:252
 msgid "Show Edges Sketch"
 msgstr "Afficher Modules en contour"
 
-#: pcbnew/tool_modedit.cpp:277
+#: pcbnew/tool_modedit.cpp:289
 #, c-format
 msgid "Zoom %d"
 msgstr "Zoom %d"
 
-#: pcbnew/tool_modedit.cpp:294
+#: pcbnew/tool_modedit.cpp:308
 #, c-format
 msgid "Grid %.1f"
 msgstr "Grille %.1f"
 
-#: pcbnew/tool_modedit.cpp:296
+#: pcbnew/tool_modedit.cpp:310
 #, c-format
 msgid "Grid %.3f"
 msgstr "Grille %.3f"
@@ -5050,7 +5038,7 @@ msgid "Rect Delete"
 msgstr "Supprimer Rect"
 
 #: eeschema/libedit_onrightclick.cpp:148
-#: eeschema/onrightclick.cpp:398
+#: eeschema/onrightclick.cpp:406
 msgid "Move Text"
 msgstr "D�placer Texte"
 
@@ -5087,7 +5075,7 @@ msgid "Segment Delete"
 msgstr "Supprimer segment"
 
 #: eeschema/libedit_onrightclick.cpp:192
-#: eeschema/onrightclick.cpp:262
+#: eeschema/onrightclick.cpp:263
 msgid "Move Field"
 msgstr "D�place Champ"
 
@@ -5140,7 +5128,7 @@ msgid "Pin Num Size to others"
 msgstr "Change taille Num pin autres pins"
 
 #: eeschema/libedit_onrightclick.cpp:255
-#: eeschema/onrightclick.cpp:573
+#: eeschema/onrightclick.cpp:581
 msgid "Win. Zoom (Midd butt drag mouse)"
 msgstr "Win. Zoom (Midd butt drag mouse)"
 
@@ -5153,146 +5141,142 @@ msgid "Mirror Block (ctrl + drag mouse)"
 msgstr "Bloc Miroir (ctrl + drag mouse)"
 
 #: eeschema/libedit_onrightclick.cpp:268
-#: eeschema/onrightclick.cpp:588
+#: eeschema/onrightclick.cpp:596
 msgid "Del. Block (shift+ctrl + drag mouse)"
 msgstr "Effacement Bloc (shift+ctrl + drag mouse)"
 
-#: eeschema/hotkeys.cpp:160
+#: eeschema/hotkeys.cpp:184
 #: eeschema/schedit.cpp:337
 msgid "Add Component"
 msgstr "Ajout Composant"
 
-#: eeschema/hotkeys.cpp:178
+#: eeschema/hotkeys.cpp:206
 #: eeschema/schedit.cpp:289
 msgid "Add Wire"
 msgstr "Ajouter Fils"
 
-#: eeschema/tool_sch.cpp:51
+#: eeschema/tool_sch.cpp:55
 msgid "New schematic project"
 msgstr "Nouveau Projet sch�matique"
 
-#: eeschema/tool_sch.cpp:54
+#: eeschema/tool_sch.cpp:58
 msgid "Open schematic project"
 msgstr "Ouvrir un Projet sch�matique"
 
-#: eeschema/tool_sch.cpp:57
+#: eeschema/tool_sch.cpp:61
 msgid "Save schematic project"
 msgstr "Sauver le Projet sch�matique"
 
-#: eeschema/tool_sch.cpp:65
+#: eeschema/tool_sch.cpp:69
 msgid "go to library editor"
 msgstr "Appel de l'editeur de librairies et de composants"
 
-#: eeschema/tool_sch.cpp:68
+#: eeschema/tool_sch.cpp:72
 msgid "go to library browse"
 msgstr "Appel du visualisateur des contenus de librairies"
 
-#: eeschema/tool_sch.cpp:72
+#: eeschema/tool_sch.cpp:76
 msgid "Schematic Hierarchy Navigator"
 msgstr "Navigation dans la hierarchie"
 
-#: eeschema/tool_sch.cpp:93
+#: eeschema/tool_sch.cpp:97
 msgid "Print schematic"
 msgstr "Impression des feuilles de sch�ma"
 
-#: eeschema/tool_sch.cpp:97
+#: eeschema/tool_sch.cpp:101
 msgid "Run Cvpcb"
 msgstr "Appel de CvPcb (Gestion des associations composants/module)"
 
-#: eeschema/tool_sch.cpp:100
+#: eeschema/tool_sch.cpp:104
 msgid "Run Pcbnew"
 msgstr "Appel de Pcbnew (Editeur de Circuits Imprim�s)"
 
-#: eeschema/tool_sch.cpp:117
-msgid "Find components and texts"
-msgstr "Recherche de composants et textes"
-
-#: eeschema/tool_sch.cpp:121
+#: eeschema/tool_sch.cpp:128
 msgid "Netlist generation"
 msgstr "G�n�ration de la netliste"
 
-#: eeschema/tool_sch.cpp:124
+#: eeschema/tool_sch.cpp:131
 msgid "Schematic Annotation"
 msgstr "Annotation des composants"
 
-#: eeschema/tool_sch.cpp:127
+#: eeschema/tool_sch.cpp:134
 msgid "Schematic Electric Rules Check"
 msgstr "Controle des regles �lectriques"
 
-#: eeschema/tool_sch.cpp:130
+#: eeschema/tool_sch.cpp:137
 msgid "Bill of material and/or Crossreferences"
 msgstr "Liste des composants et r�f�rences crois�es"
 
-#: eeschema/tool_sch.cpp:155
+#: eeschema/tool_sch.cpp:164
 msgid "Hierarchy Push/Pop"
 msgstr "Navigation dans la hierarchie"
 
-#: eeschema/tool_sch.cpp:160
+#: eeschema/tool_sch.cpp:169
 msgid "Add components"
 msgstr "Ajouter composants"
 
-#: eeschema/tool_sch.cpp:164
+#: eeschema/tool_sch.cpp:173
 msgid "Add powers"
 msgstr "Add Alims"
 
-#: eeschema/tool_sch.cpp:169
+#: eeschema/tool_sch.cpp:178
 msgid "Add wires"
 msgstr "Addition de fils de connexion"
 
-#: eeschema/tool_sch.cpp:173
+#: eeschema/tool_sch.cpp:182
 msgid "Add bus"
 msgstr "Addition de Bus"
 
-#: eeschema/tool_sch.cpp:177
+#: eeschema/tool_sch.cpp:186
 msgid "Add wire to bus entry"
 msgstr "Addition d'entr�es de bus (type fil vers bus)"
 
-#: eeschema/tool_sch.cpp:181
+#: eeschema/tool_sch.cpp:190
 msgid "Add bus to bus entry"
 msgstr "Addition d'entr�es de bus (type bus vers bus)"
 
-#: eeschema/tool_sch.cpp:186
+#: eeschema/tool_sch.cpp:195
 msgid "Add no connect flag"
 msgstr "Addition de symboles de non connexion"
 
-#: eeschema/tool_sch.cpp:190
+#: eeschema/tool_sch.cpp:199
 msgid "Add wire or bus label"
 msgstr "Addition de labels sur fils ou bus"
 
-#: eeschema/tool_sch.cpp:194
-#: eeschema/onrightclick.cpp:477
-#: eeschema/onrightclick.cpp:509
+#: eeschema/tool_sch.cpp:203
+#: eeschema/onrightclick.cpp:485
+#: eeschema/onrightclick.cpp:517
 msgid "Add global label"
 msgstr "Addition de labels globaux"
 
-#: eeschema/tool_sch.cpp:198
-#: eeschema/onrightclick.cpp:471
-#: eeschema/onrightclick.cpp:503
+#: eeschema/tool_sch.cpp:207
+#: eeschema/onrightclick.cpp:479
+#: eeschema/onrightclick.cpp:511
 msgid "Add junction"
 msgstr "Addition de jonctions"
 
-#: eeschema/tool_sch.cpp:203
+#: eeschema/tool_sch.cpp:212
 msgid "Add hierarchical symbol (sheet)"
 msgstr "Addition d'un symbole de feuille de hi�rarchie"
 
-#: eeschema/tool_sch.cpp:207
+#: eeschema/tool_sch.cpp:216
 msgid "import glabel from sheet & create pinsheet"
 msgstr "Importation de labels globaux  et cr�ation des pins correspondantes"
 
-#: eeschema/tool_sch.cpp:211
+#: eeschema/tool_sch.cpp:220
 msgid "Add hierachical pin to sheet"
 msgstr "Addition de pins de hierarchie dans les symboles de hierarchie"
 
-#: eeschema/tool_sch.cpp:220
+#: eeschema/tool_sch.cpp:229
 msgid "Add graphic text (comment)"
 msgstr "Addition de textes graphiques (commentaires)"
 
-#: eeschema/tool_sch.cpp:263
+#: eeschema/tool_sch.cpp:273
 #: eeschema/schframe.cpp:275
 msgid "Show Hidden Pins"
 msgstr "Force affichage des pins invisibles"
 
-#: eeschema/tool_sch.cpp:268
+#: eeschema/tool_sch.cpp:278
 msgid "HV orientation for Wires and Bus"
 msgstr "Force direction H, V et X  pour les fils et bus"
 
@@ -5320,99 +5304,99 @@ msgstr "Commun aux Unit
 msgid "Common to convert"
 msgstr "Commun a converti"
 
-#: eeschema/tool_lib.cpp:47
+#: eeschema/tool_lib.cpp:48
 msgid "deselect current tool"
 msgstr "D�s�lection outil courant"
 
-#: eeschema/tool_lib.cpp:53
+#: eeschema/tool_lib.cpp:54
 msgid "Add Pins"
 msgstr "Addition de \"pins\""
 
-#: eeschema/tool_lib.cpp:57
+#: eeschema/tool_lib.cpp:58
 msgid "Add graphic text"
 msgstr "Addition de textes graphiques (commentaires)"
 
-#: eeschema/tool_lib.cpp:61
+#: eeschema/tool_lib.cpp:62
 msgid "Add rectangles"
 msgstr "Addition de rectangles"
 
-#: eeschema/tool_lib.cpp:65
+#: eeschema/tool_lib.cpp:66
 msgid "Add circles"
 msgstr "Addition de cercles"
 
-#: eeschema/tool_lib.cpp:69
+#: eeschema/tool_lib.cpp:70
 msgid "Add arcs"
 msgstr "Addition d'arc"
 
-#: eeschema/tool_lib.cpp:73
+#: eeschema/tool_lib.cpp:74
 msgid "Add lines and polygons"
 msgstr "Addition de lignes ou polygones graphiques"
 
-#: eeschema/tool_lib.cpp:78
+#: eeschema/tool_lib.cpp:79
 msgid "Move part anchor"
 msgstr "Positionner l'ancre du composant"
 
-#: eeschema/tool_lib.cpp:83
+#: eeschema/tool_lib.cpp:84
 msgid "Import existing drawings"
 msgstr "Importer des dessins existants"
 
-#: eeschema/tool_lib.cpp:87
+#: eeschema/tool_lib.cpp:88
 msgid "Export current drawing"
 msgstr "Exporter le dessin en cours"
 
-#: eeschema/tool_lib.cpp:116
+#: eeschema/tool_lib.cpp:120
 msgid "Save current loaded library on disk (file update)"
 msgstr "Sauver librairie charg�e courante sur disque (mise � jour du fichier)"
 
-#: eeschema/tool_lib.cpp:126
+#: eeschema/tool_lib.cpp:130
 msgid "New part"
 msgstr "Nouveau composant"
 
-#: eeschema/tool_lib.cpp:129
+#: eeschema/tool_lib.cpp:133
 msgid "Select part to edit"
 msgstr "S�lectionner le composant a �diter"
 
-#: eeschema/tool_lib.cpp:133
+#: eeschema/tool_lib.cpp:137
 msgid "Save current part into current loaded library (in memory)"
 msgstr "Sauver le composant courant en librairie courante (en m�moire)"
 
-#: eeschema/tool_lib.cpp:136
+#: eeschema/tool_lib.cpp:140
 msgid "import part"
 msgstr "Importer un composant"
 
-#: eeschema/tool_lib.cpp:139
+#: eeschema/tool_lib.cpp:143
 msgid "export part"
 msgstr "Exporter un composant"
 
-#: eeschema/tool_lib.cpp:143
+#: eeschema/tool_lib.cpp:147
 msgid "Create a new library an save current part into"
 msgstr "Cr�er une nouvelle librairie et y sauver le composant"
 
-#: eeschema/tool_lib.cpp:156
+#: eeschema/tool_lib.cpp:160
 msgid "Edit Part Properties"
 msgstr "Editer les propri�t�s du composant"
 
-#: eeschema/tool_lib.cpp:163
+#: eeschema/tool_lib.cpp:167
 msgid "Test duplicate pins"
 msgstr "Test duplicate pins"
 
-#: eeschema/tool_lib.cpp:187
+#: eeschema/tool_lib.cpp:189
 msgid "show as \"De Morgan\" normal part"
 msgstr "Afficher sous repr�sentation normale"
 
-#: eeschema/tool_lib.cpp:193
+#: eeschema/tool_lib.cpp:195
 msgid "show as \"De Morgan\" convert part"
 msgstr "Afficher sous pr�sentation \" De Morgan\""
 
-#: eeschema/tool_lib.cpp:202
+#: eeschema/tool_lib.cpp:204
 msgid "Documents"
 msgstr "Documents"
 
-#: eeschema/tool_lib.cpp:219
+#: eeschema/tool_lib.cpp:221
 msgid "Edit pins part per part (Carefully use!)"
 msgstr "Editer pins unit� par unit� (Utiliser en connaissance de cause)"
 
-#: eeschema/tool_lib.cpp:240
+#: eeschema/tool_lib.cpp:241
 #: eeschema/tool_viewlib.cpp:131
 #, c-format
 msgid "Part %c"
@@ -5853,7 +5837,7 @@ msgstr "Le composant %s existe, Le changer ?"
 msgid "Component %s saved in %s"
 msgstr "Composant %s sauv� en %s"
 
-#: eeschema/eeschema.cpp:56
+#: eeschema/eeschema.cpp:57
 msgid "Eeschema is already running, Continue?"
 msgstr "Eeschema est est cours d'ex�cution. Continuer ?"
 
@@ -5932,7 +5916,7 @@ msgid "Pos"
 msgstr "Pos"
 
 #: eeschema/editpart.cpp:293
-#: eeschema/onrightclick.cpp:319
+#: eeschema/onrightclick.cpp:327
 #: eeschema/affiche.cpp:172
 msgid "Unit"
 msgstr "Unit�"
@@ -5948,6 +5932,7 @@ msgid "Orient:"
 msgstr "Orient:"
 
 #: eeschema/editpart.cpp:323
+#: eeschema/onrightclick.cpp:295
 #: eeschema/dialog_edit_component_in_schematic.cpp:183
 msgid "Mirror --"
 msgstr "Miroir--"
@@ -5962,7 +5947,7 @@ msgid "Mirror:"
 msgstr "Miroir:"
 
 #: eeschema/editpart.cpp:336
-#: eeschema/onrightclick.cpp:306
+#: eeschema/onrightclick.cpp:314
 #: eeschema/affiche.cpp:182
 #: eeschema/dialog_edit_component_in_schematic.cpp:193
 msgid "Convert"
@@ -6093,253 +6078,245 @@ msgstr "  Convert"
 msgid "  Normal"
 msgstr "  Normal"
 
-#: eeschema/onrightclick.cpp:139
+#: eeschema/onrightclick.cpp:140
 msgid "Leave Sheet"
 msgstr "Quitter sous-feuille"
 
-#: eeschema/onrightclick.cpp:155
+#: eeschema/onrightclick.cpp:156
 msgid "delete noconn"
 msgstr "Supprimer non connexion"
 
-#: eeschema/onrightclick.cpp:165
+#: eeschema/onrightclick.cpp:166
 msgid "Move bus entry"
 msgstr "D�placer entr�e de bus"
 
-#: eeschema/onrightclick.cpp:167
+#: eeschema/onrightclick.cpp:168
 msgid "set bus entry /"
 msgstr "Entr�e de bus /"
 
-#: eeschema/onrightclick.cpp:169
+#: eeschema/onrightclick.cpp:170
 msgid "set bus entry \\"
 msgstr "Entr�e de bus \\"
 
-#: eeschema/onrightclick.cpp:171
+#: eeschema/onrightclick.cpp:172
 msgid "delete bus entry"
 msgstr "Supprimer entr�e de bus"
 
-#: eeschema/onrightclick.cpp:175
+#: eeschema/onrightclick.cpp:176
 msgid "delete Marker"
 msgstr "Supprimer Marqueur"
 
-#: eeschema/onrightclick.cpp:225
+#: eeschema/onrightclick.cpp:226
 msgid "End drawing"
 msgstr "Fin trac�"
 
-#: eeschema/onrightclick.cpp:227
+#: eeschema/onrightclick.cpp:228
 msgid "Delete drawing"
 msgstr "Supprimer Trac�"
 
-#: eeschema/onrightclick.cpp:263
+#: eeschema/onrightclick.cpp:264
 msgid "Rotate Field"
 msgstr "Rotation Champ"
 
-#: eeschema/onrightclick.cpp:282
-msgid "Move Component   (M)"
-msgstr "D�place Composant \t(M)"
-
-#: eeschema/onrightclick.cpp:288
-msgid "Rotate +  (R)"
-msgstr "Rotation +  (R)"
-
-#: eeschema/onrightclick.cpp:290
-msgid "Mirror --  (X)"
-msgstr "Miroir--  (X)"
+#: eeschema/onrightclick.cpp:284
+msgid "Move Component"
+msgstr "D�place Composant"
 
 #: eeschema/onrightclick.cpp:291
-msgid "Mirror ||  (Y)"
-msgstr "Miroir ||  (Y)"
+msgid "Rotate +"
+msgstr "Rotation +"
 
-#: eeschema/onrightclick.cpp:292
-msgid "Normal  (N)"
-msgstr "Normal  (N)"
+#: eeschema/onrightclick.cpp:297
+msgid "Mirror ||"
+msgstr "Miroir ||"
 
-#: eeschema/onrightclick.cpp:295
+#: eeschema/onrightclick.cpp:303
 msgid "Orient Component"
 msgstr "Oriente Composant"
 
-#: eeschema/onrightclick.cpp:313
+#: eeschema/onrightclick.cpp:321
 #, c-format
 msgid "Unit %d %c"
 msgstr "Unit� %d %c"
 
-#: eeschema/onrightclick.cpp:324
+#: eeschema/onrightclick.cpp:332
 msgid "Edit Component"
 msgstr "Edite Composant"
 
-#: eeschema/onrightclick.cpp:328
+#: eeschema/onrightclick.cpp:336
 msgid "Copy Component"
 msgstr "Copie composant"
 
-#: eeschema/onrightclick.cpp:329
+#: eeschema/onrightclick.cpp:337
 msgid "Delete Component"
 msgstr "Supprime Composant"
 
-#: eeschema/onrightclick.cpp:348
+#: eeschema/onrightclick.cpp:356
 msgid "Move Glabel"
 msgstr "D�place Label Global"
 
-#: eeschema/onrightclick.cpp:349
+#: eeschema/onrightclick.cpp:357
 msgid "Rotate GLabel  (R)"
 msgstr "Rot. Label Global  (R)"
 
-#: eeschema/onrightclick.cpp:350
+#: eeschema/onrightclick.cpp:358
 msgid "Edit GLabel"
 msgstr "Editer Label Global"
 
-#: eeschema/onrightclick.cpp:351
+#: eeschema/onrightclick.cpp:359
 msgid "Delete Glabel"
 msgstr "Supprimer Label Global"
 
-#: eeschema/onrightclick.cpp:355
-#: eeschema/onrightclick.cpp:405
+#: eeschema/onrightclick.cpp:363
+#: eeschema/onrightclick.cpp:413
 msgid "Change to Label"
 msgstr "Change en Label"
 
-#: eeschema/onrightclick.cpp:357
-#: eeschema/onrightclick.cpp:382
+#: eeschema/onrightclick.cpp:365
+#: eeschema/onrightclick.cpp:390
 msgid "Change to Text"
 msgstr "Change en Texte"
 
-#: eeschema/onrightclick.cpp:359
-#: eeschema/onrightclick.cpp:384
-#: eeschema/onrightclick.cpp:409
+#: eeschema/onrightclick.cpp:367
+#: eeschema/onrightclick.cpp:392
+#: eeschema/onrightclick.cpp:417
 msgid "Change Type"
 msgstr "Change Type"
 
-#: eeschema/onrightclick.cpp:373
+#: eeschema/onrightclick.cpp:381
 msgid "Move Label"
 msgstr "D�place Label"
 
-#: eeschema/onrightclick.cpp:374
+#: eeschema/onrightclick.cpp:382
 msgid "Rotate Label  (R)"
 msgstr "Rot. Label  (R)"
 
-#: eeschema/onrightclick.cpp:375
+#: eeschema/onrightclick.cpp:383
 msgid "Edit Label"
 msgstr "Editer Label"
 
-#: eeschema/onrightclick.cpp:376
+#: eeschema/onrightclick.cpp:384
 msgid "Delete Label"
 msgstr "Supprimer Label:"
 
-#: eeschema/onrightclick.cpp:380
-#: eeschema/onrightclick.cpp:407
+#: eeschema/onrightclick.cpp:388
+#: eeschema/onrightclick.cpp:415
 msgid "Change to Glabel"
 msgstr "Change en Label Global"
 
-#: eeschema/onrightclick.cpp:399
+#: eeschema/onrightclick.cpp:407
 msgid "Rotate Text (R)"
 msgstr "Rot. Texte  (R)"
 
-#: eeschema/onrightclick.cpp:400
+#: eeschema/onrightclick.cpp:408
 msgid "Edit Text"
 msgstr "Editer Texte"
 
-#: eeschema/onrightclick.cpp:401
+#: eeschema/onrightclick.cpp:409
 msgid "Delete Text"
 msgstr "Supprimer Texte"
 
-#: eeschema/onrightclick.cpp:427
-#: eeschema/onrightclick.cpp:467
+#: eeschema/onrightclick.cpp:435
+#: eeschema/onrightclick.cpp:475
 msgid "Break Wire"
 msgstr "Briser fil"
 
-#: eeschema/onrightclick.cpp:430
+#: eeschema/onrightclick.cpp:438
 msgid "delete junction"
 msgstr "Supprimer jonction"
 
-#: eeschema/onrightclick.cpp:435
-#: eeschema/onrightclick.cpp:461
+#: eeschema/onrightclick.cpp:443
+#: eeschema/onrightclick.cpp:469
 msgid "Delete node"
 msgstr "Supprimer Noeud"
 
-#: eeschema/onrightclick.cpp:437
-#: eeschema/onrightclick.cpp:463
+#: eeschema/onrightclick.cpp:445
+#: eeschema/onrightclick.cpp:471
 msgid "Delete connection"
 msgstr "Supprimer connexion"
 
-#: eeschema/onrightclick.cpp:454
+#: eeschema/onrightclick.cpp:462
 msgid "End Wire"
 msgstr "Fin Fil"
 
-#: eeschema/onrightclick.cpp:456
+#: eeschema/onrightclick.cpp:464
 msgid "Delete Wire"
 msgstr "Supprimer Fil"
 
-#: eeschema/onrightclick.cpp:472
-#: eeschema/onrightclick.cpp:504
+#: eeschema/onrightclick.cpp:480
+#: eeschema/onrightclick.cpp:512
 msgid "Add label"
 msgstr "Ajout Label"
 
-#: eeschema/onrightclick.cpp:493
+#: eeschema/onrightclick.cpp:501
 msgid "End Bus"
 msgstr "Fin Bus"
 
-#: eeschema/onrightclick.cpp:496
+#: eeschema/onrightclick.cpp:504
 msgid "Delete Bus"
 msgstr "Supprimer Bus"
 
-#: eeschema/onrightclick.cpp:500
+#: eeschema/onrightclick.cpp:508
 msgid "Break Bus"
 msgstr "Briser Bus"
 
-#: eeschema/onrightclick.cpp:522
+#: eeschema/onrightclick.cpp:530
 msgid "Enter Sheet"
 msgstr "Enter dans Feuille"
 
-#: eeschema/onrightclick.cpp:524
+#: eeschema/onrightclick.cpp:532
 msgid "Move Sheet"
 msgstr "D�place Feuille"
 
-#: eeschema/onrightclick.cpp:529
+#: eeschema/onrightclick.cpp:537
 msgid "Place Sheet"
 msgstr "Place Feuille"
 
-#: eeschema/onrightclick.cpp:533
+#: eeschema/onrightclick.cpp:541
 msgid "Edit Sheet"
 msgstr "Edite Feuille"
 
-#: eeschema/onrightclick.cpp:534
+#: eeschema/onrightclick.cpp:542
 msgid "Resize Sheet"
 msgstr "Redimensionne feuille"
 
-#: eeschema/onrightclick.cpp:537
+#: eeschema/onrightclick.cpp:545
 msgid "Cleanup PinSheets"
 msgstr "Nettoyage de la feuille"
 
-#: eeschema/onrightclick.cpp:538
+#: eeschema/onrightclick.cpp:546
 msgid "Delete Sheet"
 msgstr "Supprimer Feuille"
 
-#: eeschema/onrightclick.cpp:551
+#: eeschema/onrightclick.cpp:559
 msgid "Move PinSheet"
 msgstr "D�place Connecteur de hi�rarchie"
 
-#: eeschema/onrightclick.cpp:553
+#: eeschema/onrightclick.cpp:561
 msgid "Edit PinSheet"
 msgstr "Edit Connecteur de hi�rarchie"
 
-#: eeschema/onrightclick.cpp:556
+#: eeschema/onrightclick.cpp:564
 msgid "Delete PinSheet"
 msgstr "Supprimer Connecteur de hi�rarchie"
 
-#: eeschema/onrightclick.cpp:581
+#: eeschema/onrightclick.cpp:589
 msgid "Other block commands"
 msgstr "Autres commandes de bloc"
 
-#: eeschema/onrightclick.cpp:582
+#: eeschema/onrightclick.cpp:590
 msgid "Save Block"
 msgstr "Sauver Bloc"
 
-#: eeschema/onrightclick.cpp:586
+#: eeschema/onrightclick.cpp:594
 msgid "Drag Block (ctrl + drag mouse)"
 msgstr "Drag Bloc (ctrl + drag mouse)"
 
-#: eeschema/onrightclick.cpp:590
+#: eeschema/onrightclick.cpp:598
 msgid "Mirror Block ||"
 msgstr "Miroir Bloc ||"
 
-#: eeschema/onrightclick.cpp:594
+#: eeschema/onrightclick.cpp:602
 msgid "Copy to Clipboard"
 msgstr "Copie dans Presse papier"
 
@@ -6741,6 +6718,27 @@ msgstr "Afficher composant pr
 msgid "Display next part"
 msgstr "Afficher composant suivant"
 
+#: eeschema/tool_viewlib.cpp:70
+#: cvpcb/displayframe.cpp:118
+#: gerbview/tool_gerber.cpp:260
+#: 3d-viewer/3d_toolbar.cpp:43
+msgid "zoom + (F1)"
+msgstr "zoom + (F1)"
+
+#: eeschema/tool_viewlib.cpp:74
+#: cvpcb/displayframe.cpp:121
+#: gerbview/tool_gerber.cpp:266
+#: 3d-viewer/3d_toolbar.cpp:46
+msgid "zoom - (F2)"
+msgstr "zoom - (F2)"
+
+#: eeschema/tool_viewlib.cpp:78
+#: cvpcb/displayframe.cpp:124
+#: gerbview/tool_gerber.cpp:272
+#: 3d-viewer/3d_toolbar.cpp:49
+msgid "redraw (F3)"
+msgstr "Redessin (F3)"
+
 #: eeschema/tool_viewlib.cpp:82
 #: cvpcb/displayframe.cpp:127
 #: cvpcb/displayframe.cpp:131
@@ -8011,6 +8009,14 @@ msgstr "&Sauver Eeschema Options"
 msgid "Save options in <project>.pro"
 msgstr "Sauver les options en <projet>.pro"
 
+#: eeschema/menubar.cpp:150
+msgid "Create Eeschema &Hotkey config file"
+msgstr "Cr�er les fichiers configuration des &Hotkeys de Eeschema "
+
+#: eeschema/menubar.cpp:154
+msgid "Reread &Eeschema Hotkey config file"
+msgstr "Relire  les fichiers configuration des Hotkeys de &Eeschema "
+
 #: eeschema/menubar.cpp:162
 msgid "Open the eeschema manual"
 msgstr "Ouvrir la documentation de eeschema"
@@ -9411,7 +9417,7 @@ msgstr "Contour Pcb"
 msgid "---      "
 msgstr "---      "
 
-#: common/hotkeys_basic.cpp:191
+#: common/hotkeys_basic.cpp:262
 msgid ""
 "Current hotkey list:\n"
 "\n"
@@ -9419,20 +9425,20 @@ msgstr ""
 "Liste des Hotkeys courantes:\n"
 "\n"
 
-#: common/hotkeys_basic.cpp:195
+#: common/hotkeys_basic.cpp:267
 msgid "key "
 msgstr "touche: "
 
-#: common/hotkeys_basic.cpp:243
-#: common/hotkeys_basic.cpp:336
+#: common/hotkeys_basic.cpp:322
+#: common/hotkeys_basic.cpp:424
 msgid "Hotkey configuration file:"
 msgstr "Fichier configuration des Hotkeys:"
 
-#: common/hotkeys_basic.cpp:274
+#: common/hotkeys_basic.cpp:354
 msgid "Allowed keys:\n"
 msgstr "Touches autoris�es:\n"
 
-#: common/hotkeys_basic.cpp:354
+#: common/hotkeys_basic.cpp:443
 msgid "Unable to read "
 msgstr "Impossible de lire "
 
@@ -9894,7 +9900,7 @@ msgstr "Propri
 msgid "Fill Zones Options"
 msgstr "Options de remplissage de Zone"
 
-#: pcbnew/dialog_pad_edit.h:44
+#: pcbnew/dialog_pad_edit.h:62
 msgid "Pad properties"
 msgstr "Propri�t�s des Pads"
 
diff --git a/pcbnew/class_pad.cpp b/pcbnew/class_pad.cpp
index 2865af2903..217384bef3 100644
--- a/pcbnew/class_pad.cpp
+++ b/pcbnew/class_pad.cpp
@@ -25,16 +25,16 @@
 /* classe D_PAD : constructeur */
 /*******************************/
 
-D_PAD::D_PAD( MODULE* parent ) : 
+D_PAD::D_PAD( MODULE* parent ) :
     BOARD_ITEM( parent, TYPEPAD )
 {
-    m_NumPadName    = 0;
-    m_Masque_Layer  = CUIVRE_LAYER;
-    m_NetCode       = 0;           /* Numero de net pour comparaisons rapides */
-    m_DrillShape    = CIRCLE;      // Drill shape = circle
-    
+    m_NumPadName   = 0;
+    m_Masque_Layer = CUIVRE_LAYER;
+    m_NetCode    = 0;               /* Numero de net pour comparaisons rapides */
+    m_DrillShape = CIRCLE;          // Drill shape = circle
+
     m_Size.x = m_Size.y = 500;
-    
+
     if( m_Parent && (m_Parent->m_StructType  == TYPEMODULE) )
     {
         m_Pos = ( (MODULE*) m_Parent )->m_Pos;
@@ -73,7 +73,6 @@ void D_PAD::ComputeRayon( void )
         break;
 
     case RECT:
-    case SPECIAL_PAD:
     case TRAPEZE:
         m_Rayon = (int) (sqrt( (float) m_Size.y * m_Size.y
                               + (float) m_Size.x * m_Size.x ) / 2);
@@ -90,16 +89,16 @@ const wxPoint D_PAD::ReturnShapePos( void )
 {
     if( (m_Offset.x == 0) && (m_Offset.y == 0) )
         return m_Pos;
-    
+
     wxPoint shape_pos;
     int     dX, dY;
-    
-    dX = m_Offset.x; 
+
+    dX = m_Offset.x;
     dY = m_Offset.y;
-    
+
     RotatePoint( &dX, &dY, m_Orient );
-    
-    shape_pos.x = m_Pos.x + dX; 
+
+    shape_pos.x = m_Pos.x + dX;
     shape_pos.y = m_Pos.y + dY;
 
     return shape_pos;
@@ -410,7 +409,6 @@ void D_PAD::Draw( WinEDA_DrawPanel* panel, wxDC* DC, const wxPoint& offset, int
         break;
 
     case RECT:
-    case SPECIAL_PAD:
     case TRAPEZE:
     {
         int ddx, ddy;
@@ -464,7 +462,7 @@ void D_PAD::Draw( WinEDA_DrawPanel* panel, wxDC* DC, const wxPoint& offset, int
         }
     }
         break;
-        
+
 
     default:
         break;
@@ -486,7 +484,7 @@ void D_PAD::Draw( WinEDA_DrawPanel* panel, wxDC* DC, const wxPoint& offset, int
         switch( m_DrillShape )
         {
         case CIRCLE:
-            if( (hole / zoom) > 1 )     /* draw hole if its size is enought */
+            if( (hole / zoom) > 1 ) /* draw hole if its size is enought */
                 GRFilledCircle( &panel->m_ClipBox, DC, cx0, cy0, hole, 0, color, color );
             break;
 
@@ -517,7 +515,7 @@ void D_PAD::Draw( WinEDA_DrawPanel* panel, wxDC* DC, const wxPoint& offset, int
     }
 
     GRSetDrawMode( DC, draw_mode );
-    
+
     /* Trace du symbole "No connect" ( / ou \ ou croix en X) si necessaire : */
     if( m_Netname.IsEmpty() && DisplayOpt.DisplayPadNoConn )
     {
@@ -531,26 +529,26 @@ void D_PAD::Draw( WinEDA_DrawPanel* panel, wxDC* DC, const wxPoint& offset, int
             GRLine( &panel->m_ClipBox, DC, cx0 + dx0, cy0 - dx0,
                     cx0 - dx0, cy0 + dx0, 0, nc_color );
     }
-    
+
     /* Trace de la reference */
     if( !frame->m_DisplayPadNum )
         return;
-    
+
     dx = MIN( m_Size.x, m_Size.y );     /* dx = text size */
     if( (dx / zoom) > 12 )              /* size must be enought to draw 2 chars */
     {
         wxString buffer;
-        
+
         ReturnStringPadName( buffer );
         dy = buffer.Len();
-        
+
         /* Draw text with an angle between -90 deg and + 90 deg */
         NORMALIZE_ANGLE_90( angle );
         if( dy < 2 )
             dy = 2;                     /* text min size is 2 char */
-        
+
         dx = (dx * 9 ) / (dy * 13 );    /* Text size ajusted to pad size */
-        
+
         DrawGraphicText( panel, DC, wxPoint( ux0, uy0 ),
                          WHITE, buffer, angle, wxSize( dx, dx ),
                          GR_TEXT_HJUSTIFY_CENTER, GR_TEXT_VJUSTIFY_CENTER );
@@ -795,7 +793,7 @@ void D_PAD::Display_Infos( WinEDA_DrawFrame* frame )
     MODULE*  Module;
     wxString Line;
     int      pos = 1;
-    
+
     /* Pad messages */
     static const wxString Msg_Pad_Shape[6] =
     { wxT( "??? " ), wxT( "Circ" ), wxT( "Rect" ), wxT( "Oval" ), wxT( "trap" ), wxT( "spec" ) };
@@ -805,7 +803,7 @@ void D_PAD::Display_Infos( WinEDA_DrawFrame* frame )
         wxT( "??? " ),     wxT( "cmp   " ),  wxT( "cu    " ),  wxT( "cmp+cu " ), wxT( "int    " ),
         wxT( "cmp+int " ), wxT( "cu+int " ), wxT( "all    " ), wxT( "No copp" )
     };
-    
+
     static const wxString Msg_Pad_Attribut[5] =
     { wxT( "norm" ), wxT( "smd " ), wxT( "conn" ), wxT( "hole" ), wxT( "????" ) };
 
@@ -910,16 +908,12 @@ void D_PAD::Display_Infos( WinEDA_DrawFrame* frame )
 
     pos += 6;
     Affiche_1_Parametre( frame, pos, Msg_Pad_Shape[m_PadShape], wxEmptyString, DARKGREEN );
-    /* Affichage en couleur diff si pad stack ou non */
 
-    if( m_Attribut & PAD_STACK )
-        Affiche_1_Parametre( frame, -1, wxEmptyString, Msg_Pad_Attribut[m_Attribut & 15], RED );
-    else
-        Affiche_1_Parametre( frame,
-                             -1,
-                             wxEmptyString,
-                             Msg_Pad_Attribut[m_Attribut & 15],
-                             DARKGREEN );
+    Affiche_1_Parametre( frame,
+                         -1,
+                         wxEmptyString,
+                         Msg_Pad_Attribut[m_Attribut & 15],
+                         DARKGREEN );
 
     valeur_param( m_Size.x, Line );
     pos += 6;
@@ -978,12 +972,12 @@ bool D_PAD::HitTest( const wxPoint& ref_pos )
 
     wxPoint shape_pos = ReturnShapePos();
 
-    deltaX = ref_pos.x - shape_pos.x; 
+    deltaX = ref_pos.x - shape_pos.x;
     deltaY = ref_pos.y - shape_pos.y;
 
     /* Test rapide: le point a tester doit etre a l'interieur du cercle exinscrit ... */
     if( (abs( deltaX ) > m_Rayon )
-     || (abs( deltaY ) > m_Rayon) )
+       || (abs( deltaY ) > m_Rayon) )
         return false;
 
     /* calcul des demi dim  dx et dy */
@@ -1006,35 +1000,38 @@ bool D_PAD::HitTest( const wxPoint& ref_pos )
             return true;
         break;
     }
-    
+
     return false;
 }
 
 
-#if defined(DEBUG)
+#if defined (DEBUG)
+
 /**
  * Function Show
  * is used to output the object tree, currently for debugging only.
- * @param nestLevel An aid to prettier tree indenting, and is the level 
+ * @param nestLevel An aid to prettier tree indenting, and is the level
  *          of nesting of this object within the overall tree.
  * @param os The ostream& to output to.
  */
 void D_PAD::Show( int nestLevel, std::ostream& os )
 {
     char padname[5] = { m_Padname[0], m_Padname[1], m_Padname[2], m_Padname[3], 0 };
-    
+
     char layerMask[16];
+
     sprintf( layerMask, "0x%08X", m_Masque_Layer );
-    
+
     // for now, make it look like XML:
     NestedSpace( nestLevel, os ) << '<' << GetClass().Lower().mb_str() <<
-        " num=\""   << padname << '"' <<
-        " net=\""   << m_Netname.mb_str() << '"' << 
-        " layerMask=\"" << layerMask << '"' << m_Pos << "/>\n";
-    
+    " num=\"" << padname << '"' <<
+    " net=\"" << m_Netname.mb_str() << '"' <<
+    " layerMask=\"" << layerMask << '"' << m_Pos << "/>\n";
+
 //    NestedSpace( nestLevel+1, os ) << m_Text.mb_str() << '\n';
-    
+
 //    NestedSpace( nestLevel, os ) << "</" << GetClass().Lower().mb_str() << ">\n";
 }
 
+
 #endif
diff --git a/pcbnew/class_pad.h b/pcbnew/class_pad.h
index 1c5f45c3ed..b8ca8336a5 100644
--- a/pcbnew/class_pad.h
+++ b/pcbnew/class_pad.h
@@ -4,20 +4,19 @@
 
 class Pcb3D_GLCanvas;
 
-/* forme des pastilles : (parametre .forme) */
+/* Pad shape id : ( .m_PadShape member) */
 #define CIRCLE      1
 #define RECT        2
 #define OVALE       3
-#define TRAPEZE     4       // trapeze: traversante ou surfacique
-#define SPECIAL_PAD 5       // description libre
+#define TRAPEZE     4       // trapezoid
 
-/* Attributs des PADS */
-#define STANDARD    0       // pad classique
-#define SMD         1       // surfacique, generation d'un masque d'empatement
-#define CONN        2       // surfacique, peut etre dore
+/* PADS attributes */
+#define STANDARD    0       // Usual pad
+#define SMD         1       // Smd pad, appears on the layer paste (default)
+#define CONN        2       // Like smd, does not appear on the layer paste (default)
+// reserved, but not yet really used:
 #define P_HOLE      3       // trou simple, utile sur pad stack
 #define MECA        4       // PAD "mecanique" (fixation, zone cuivre...)
-#define PAD_STACK   0x80    // bit 7 de .attrib  (flag)
 
 /* Definition type Structure d'un pad */
 class D_PAD : public BOARD_ITEM
@@ -26,41 +25,41 @@ public:
     union
     {
         unsigned long m_NumPadName;
-        char          m_Padname[4]; /* nom (numero) de la pastille (assimilable a un long)*/
+        char          m_Padname[4]; /* Pad name (4 char) or a long identifier
+                                     *  (used in pad name comparisons because  this is faster than string comparison)
+                                     */
     };
-    
-    wxString m_Netname;             /* Net Name */
-    
-    int      m_Masque_Layer;        // (Bit a Bit :1= cuivre, 15= cmp,
-                                    // 2..14 = interne
-                                    // 16 .. 31 = couches non cuivre
-                                
-    int      m_PadShape;            // forme CERCLE, RECT, OVALE, TRAPEZE ou libre
-    int      m_DrillShape;          // forme CERCLE, OVAL
-    
-    wxPoint  m_Pos;                 // Position de reference du pad
-    
-    wxSize   m_Drill;               // Drill diam (drill shape = CIRCLE) or drill size(shape = OVAL)
-                                    // for drill shape = CIRCLE, drill diam = m_Drill.x
-                                    
-    wxSize   m_Offset;              // Offset de la forme (pastilles excentrees)
-    wxSize   m_Size;                // Dimensions X et Y ( si orient 0 x = axe X
-                                    // y = axe Y
-                                    
-    wxSize   m_DeltaSize;           // delta sur formes rectangle -> trapezes
-    
-    wxPoint  m_Pos0;                // Coord relatives a l'ancre du pad en orientation 0
-    
-    int      m_Rayon;               // rayon du cercle exinscrit du pad
-    int      m_Attribut;            // NORMAL, SMD, CONN, Bit 7 = STACK
-    int      m_Orient;              // en 1/10 degres
 
-    int      m_NetCode;             /* Numero de net pour comparaisons rapides */
-    int      m_logical_connexion;   // variable utilisee lors du calcul du chevelu:
-                                    // contient de numero de block pour une connexion type ratsnet
-                                    
-    int      m_physical_connexion;  // variable utilisee lors du calcul de la connexit�
-                                    // contient de numero de block pour une connexion type piste
+    wxString m_Netname;             /* Net Name */
+
+    int      m_Masque_Layer;        // Bitwise layer :1= copper layer, 15= cmp,
+                                    // 2..14 = internal layers
+                                    // 16 .. 31 = technical layers
+
+    int     m_PadShape;             // Shape: CIRCLE, RECT, OVAL, TRAPEZOID
+    int     m_DrillShape;           // Shape CIRCLE, OVAL
+
+    wxPoint m_Pos;                  // pad Position on board
+    wxSize  m_Drill;                // Drill diam (drill shape = CIRCLE) or drill size(shape = OVAL)
+                                    // for drill shape = CIRCLE, drill diam = m_Drill.x
+
+    wxSize  m_Offset;               // Offset de la forme (pastilles excentrees)
+    wxSize  m_Size;                 // X and Y size ( relative to orient 0)
+
+    wxSize  m_DeltaSize;            // delta sur formes rectangle -> trapezes
+
+    wxPoint m_Pos0;                 // Initial Pad position (i.e. pas position relative to the module anchor, orientation 0
+
+    int     m_Rayon;                // rayon du cercle exinscrit du pad
+    int     m_Attribut;             // NORMAL, SMD, CONN
+    int     m_Orient;               // in 1/10 degrees
+
+    int     m_NetCode;              // Net number for fast comparisons
+    int     m_logical_connexion;    // variable used in rastnest computations
+                                    // handle block number in ratsnet connection
+
+    int     m_physical_connexion;   // variable used in rastnest computations
+                                    // handle block number in track connection
 
 public:
     D_PAD( MODULE* parent );
@@ -69,9 +68,9 @@ public:
 
     void            Copy( D_PAD* source );
 
-    D_PAD*          Next( void ) { return (D_PAD*) Pnext; }
+    D_PAD* Next( void ) { return (D_PAD*) Pnext; }
 
-    /* supprime du chainage la structure Struct */
+    /* remove from linked list */
     void            UnLink( void );
 
     /* Reading and writing data on files */
@@ -82,11 +81,11 @@ public:
     void            Draw( WinEDA_DrawPanel* panel, wxDC* DC, const wxPoint& offset, int draw_mode );
     void            Draw3D( Pcb3D_GLCanvas* glcanvas );
 
-    // autres
+    // others
     void            SetPadName( const wxString& name );     // Change pad name
     wxString        ReturnStringPadName( void );            // Return pad name as string in a wxString
     void            ReturnStringPadName( wxString& text );  // Return pad name as string in a buffer
-    void            ComputeRayon( void );                   // met a jour m_Rayon, rayon du cercle exinscrit
+    void            ComputeRayon( void );                   // compute m_Rayon, rayon du cercle exinscrit
     const wxPoint   ReturnShapePos( void );                 // retourne la position
 
     /**
@@ -95,9 +94,9 @@ public:
      * about this object into the frame's message panel.
      * Is virtual from EDA_BaseStruct.
      * @param frame A WinEDA_BasePcbFrame in which to print status information.
-     */ 
+     */
     void            Display_Infos( WinEDA_DrawFrame* frame );
-    
+
     /**
      * Function HitTest
      * tests if the given wxPoint is within the bounds of this object.
@@ -105,8 +104,9 @@ public:
      * @return bool - true if a hit, else false
      */
     bool            HitTest( const wxPoint& refPos );
-    
-#if defined(DEBUG)
+
+#if defined (DEBUG)
+
     /**
      * Function GetClass
      * returns the class name.
@@ -117,16 +117,17 @@ public:
         return wxT( "PAD" );
     }
 
+
     /**
      * Function Show
      * is used to output the object tree, currently for debugging only.
-     * @param nestLevel An aid to prettier tree indenting, and is the level 
+     * @param nestLevel An aid to prettier tree indenting, and is the level
      *          of nesting of this object within the overall tree.
      * @param os The ostream& to output to.
      */
     virtual void Show( int nestLevel, std::ostream& os );
+
 #endif
-    
 };
 
 typedef class D_PAD * LISTE_PAD;
diff --git a/pcbnew/controle.cpp b/pcbnew/controle.cpp
index 02651976a7..5af4772b64 100644
--- a/pcbnew/controle.cpp
+++ b/pcbnew/controle.cpp
@@ -215,51 +215,6 @@ void WinEDA_BasePcbFrame::GeneralControle( wxDC* DC, wxPoint Mouse )
 
     switch( g_KeyPressed )
     {
-    case WXK_NUMPAD_SUBTRACT:
-    case WXK_SUBTRACT:
-    case '-':
-        ll = GetScreen()->m_Active_Layer;
-        if( ll > CMP_N )
-            break;
-        if( ll <= CUIVRE_N )
-            break;
-        if( m_Pcb->m_BoardSettings->m_CopperLayerCount <= 1 )       // Single layer
-            ll = CUIVRE_N;
-        if( ll == CMP_N )
-            ll = MAX( CUIVRE_N, m_Pcb->m_BoardSettings->m_CopperLayerCount - 2 );
-        else if( ll > CUIVRE_N )
-            ll--;
-        GetScreen()->m_Active_Layer = ll;
-        if( DisplayOpt.ContrastModeDisplay )
-            DrawPanel->Refresh( TRUE );
-        break;
-
-    case WXK_NUMPAD_ADD:
-    case WXK_ADD:
-    case '+':
-        ll = GetScreen()->m_Active_Layer;
-        if( ll >= CMP_N )
-            break;
-        ll++;
-        if( ll >= m_Pcb->m_BoardSettings->m_CopperLayerCount - 1 )
-            ll = CMP_N;
-        if( m_Pcb->m_BoardSettings->m_CopperLayerCount <= 1 )       // Single layer
-            ll = CUIVRE_N;
-        GetScreen()->m_Active_Layer = ll;
-        if( DisplayOpt.ContrastModeDisplay )
-            DrawPanel->Refresh( TRUE );
-        break;
-
-    case WXK_NUMPAD0:
-    case WXK_PAGEUP:
-        SwitchLayer( DC, CMP_N );
-        break;
-
-    case WXK_NUMPAD9:
-    case WXK_PAGEDOWN:
-        SwitchLayer( DC, CUIVRE_N );
-        break;
-
     case EDA_PANNING_UP_KEY:
         OnZoom( ID_ZOOM_PANNING_UP );
         curpos = m_CurrentScreen->m_Curseur;
@@ -281,51 +236,20 @@ void WinEDA_BasePcbFrame::GeneralControle( wxDC* DC, wxPoint Mouse )
         break;
 
 	case EDA_ZOOM_IN_FROM_MOUSE:
-    case WXK_F1:
         OnZoom( ID_ZOOM_PLUS_KEY );
         oldpos = curpos = GetScreen()->m_Curseur;
         break;
 
 	case EDA_ZOOM_OUT_FROM_MOUSE:
-    case WXK_F2:
         OnZoom( ID_ZOOM_MOINS_KEY );
         oldpos = curpos = GetScreen()->m_Curseur;
         break;
 
-    case WXK_F3:
-        OnZoom( ID_ZOOM_REDRAW_KEY );
-        break;
-
 	case EDA_ZOOM_CENTER_FROM_MOUSE:
-    case WXK_F4:
         OnZoom( ID_ZOOM_CENTER_KEY );
         oldpos = curpos = GetScreen()->m_Curseur;
         break;
 
-    case WXK_F5:
-        SwitchLayer( DC, LAYER_N_2 );
-        break;
-
-    case WXK_F6:
-        SwitchLayer( DC, LAYER_N_3 );
-        break;
-
-    case WXK_F7:
-        SwitchLayer( DC, LAYER_N_4 );
-        break;
-
-    case WXK_F8:
-        SwitchLayer( DC, LAYER_N_5 );
-        break;
-
-    case WXK_F9:
-        SwitchLayer( DC, LAYER_N_6 );
-        break;
-
-    case WXK_F10:
-        SwitchLayer( DC, LAYER_N_7 );
-        break;
-
     case WXK_NUMPAD8:       /* Deplacement curseur vers le haut */
     case WXK_UP:
         Mouse.y -= delta.y;
diff --git a/pcbnew/dialog_pad_edit.cpp b/pcbnew/dialog_pad_edit.cpp
index 1b327f253b..81a37aece4 100644
--- a/pcbnew/dialog_pad_edit.cpp
+++ b/pcbnew/dialog_pad_edit.cpp
@@ -123,7 +123,7 @@ bool WinEDA_PadPropertiesFrame::Create( wxWindow* parent, wxWindowID id, const w
 ////@end WinEDA_PadPropertiesFrame member initialisation
 
 ////@begin WinEDA_PadPropertiesFrame creation
-    SetExtraStyle(GetExtraStyle()|wxWS_EX_BLOCK_EVENTS);
+    SetExtraStyle(wxWS_EX_BLOCK_EVENTS);
     wxDialog::Create( parent, id, caption, pos, size, style );
 
     CreateControls();
@@ -144,7 +144,7 @@ void WinEDA_PadPropertiesFrame::CreateControls()
 {    
 	SetFont(*g_DialogFont);
 ////@begin WinEDA_PadPropertiesFrame content construction
-    // Generated by DialogBlocks, 03/08/2006 10:35:29 (unregistered)
+    // Generated by DialogBlocks, 27/08/2007 21:03:59 (unregistered)
 
     WinEDA_PadPropertiesFrame* itemDialog1 = this;
 
@@ -172,46 +172,42 @@ void WinEDA_PadPropertiesFrame::CreateControls()
     m_DrillShapeBoxSizer = new wxBoxSizer(wxVERTICAL);
     itemBoxSizer2->Add(m_DrillShapeBoxSizer, 0, wxGROW|wxTOP, 5);
 
-    wxString m_DrillShapeCtrlStrings[] = {
-        _("Circle"),
-        _("Oval")
-    };
-    m_DrillShapeCtrl = new wxRadioBox( itemDialog1, ID_RADIOBOX_DRILL_SHAPE, _("Drill Shape:"), wxDefaultPosition, wxDefaultSize, 2, m_DrillShapeCtrlStrings, 1, wxRA_SPECIFY_COLS );
+    wxArrayString m_DrillShapeCtrlStrings;
+    m_DrillShapeCtrlStrings.Add(_("Circle"));
+    m_DrillShapeCtrlStrings.Add(_("Oval"));
+    m_DrillShapeCtrl = new wxRadioBox( itemDialog1, ID_RADIOBOX_DRILL_SHAPE, _("Drill Shape:"), wxDefaultPosition, wxDefaultSize, m_DrillShapeCtrlStrings, 1, wxRA_SPECIFY_COLS );
     m_DrillShapeCtrl->SetSelection(0);
     m_DrillShapeBoxSizer->Add(m_DrillShapeCtrl, 0, wxGROW|wxALL, 5);
 
     m_PadOptSizer = new wxBoxSizer(wxVERTICAL);
     itemBoxSizer2->Add(m_PadOptSizer, 0, wxGROW|wxALL, 5);
 
-    wxString m_PadOrientStrings[] = {
-        _("0"),
-        _("90"),
-        _("-90"),
-        _("180"),
-        _("User")
-    };
-    m_PadOrient = new wxRadioBox( itemDialog1, ID_LISTBOX_ORIENT_PAD, _("Pad Orient:"), wxDefaultPosition, wxDefaultSize, 5, m_PadOrientStrings, 1, wxRA_SPECIFY_COLS );
+    wxArrayString m_PadOrientStrings;
+    m_PadOrientStrings.Add(_("0"));
+    m_PadOrientStrings.Add(_("90"));
+    m_PadOrientStrings.Add(_("-90"));
+    m_PadOrientStrings.Add(_("180"));
+    m_PadOrientStrings.Add(_("User"));
+    m_PadOrient = new wxRadioBox( itemDialog1, ID_LISTBOX_ORIENT_PAD, _("Pad Orient:"), wxDefaultPosition, wxDefaultSize, m_PadOrientStrings, 1, wxRA_SPECIFY_COLS );
     m_PadOrient->SetSelection(0);
     m_PadOptSizer->Add(m_PadOrient, 0, wxGROW|wxALL, 5);
 
-    wxString m_PadShapeStrings[] = {
-        _("Circle"),
-        _("Oval"),
-        _("Rect"),
-        _("Trapezoidal")
-    };
-    m_PadShape = new wxRadioBox( itemDialog1, ID_LISTBOX_SHAPE_PAD, _("Pad Shape:"), wxDefaultPosition, wxDefaultSize, 4, m_PadShapeStrings, 1, wxRA_SPECIFY_COLS );
+    wxArrayString m_PadShapeStrings;
+    m_PadShapeStrings.Add(_("Circle"));
+    m_PadShapeStrings.Add(_("Oval"));
+    m_PadShapeStrings.Add(_("Rect"));
+    m_PadShapeStrings.Add(_("Trapezoidal"));
+    m_PadShape = new wxRadioBox( itemDialog1, ID_LISTBOX_SHAPE_PAD, _("Pad Shape:"), wxDefaultPosition, wxDefaultSize, m_PadShapeStrings, 1, wxRA_SPECIFY_COLS );
     m_PadShape->SetSelection(0);
     m_PadOptSizer->Add(m_PadShape, 0, wxGROW|wxALL, 5);
 
-    wxString m_PadTypeStrings[] = {
-        _("Standard"),
-        _("SMD"),
-        _("Conn"),
-        _("Hole"),
-        _("Mechanical")
-    };
-    m_PadType = new wxRadioBox( itemDialog1, ID_LISTBOX_TYPE_PAD, _("Pad Type:"), wxDefaultPosition, wxDefaultSize, 5, m_PadTypeStrings, 1, wxRA_SPECIFY_COLS );
+    wxArrayString m_PadTypeStrings;
+    m_PadTypeStrings.Add(_("Standard"));
+    m_PadTypeStrings.Add(_("SMD"));
+    m_PadTypeStrings.Add(_("Conn"));
+    m_PadTypeStrings.Add(_("Hole"));
+    m_PadTypeStrings.Add(_("Mechanical"));
+    m_PadType = new wxRadioBox( itemDialog1, ID_LISTBOX_TYPE_PAD, _("Pad Type:"), wxDefaultPosition, wxDefaultSize, m_PadTypeStrings, 1, wxRA_SPECIFY_COLS );
     m_PadType->SetSelection(0);
     m_PadOptSizer->Add(m_PadType, 0, wxGROW|wxALL, 5);
 
@@ -228,61 +224,61 @@ void WinEDA_PadPropertiesFrame::CreateControls()
 
     wxStaticBox* itemStaticBoxSizer18Static = new wxStaticBox(itemDialog1, wxID_ANY, _("Layers:"));
     wxStaticBoxSizer* itemStaticBoxSizer18 = new wxStaticBoxSizer(itemStaticBoxSizer18Static, wxVERTICAL);
-    itemBoxSizer15->Add(itemStaticBoxSizer18, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 5);
+    itemBoxSizer15->Add(itemStaticBoxSizer18, 0, wxALIGN_CENTER_HORIZONTAL|wxLEFT|wxRIGHT, 5);
 
     m_PadLayerCu = new wxCheckBox( itemDialog1, ID_CHECKBOX, _("Copper layer"), wxDefaultPosition, wxDefaultSize, wxCHK_2STATE );
     m_PadLayerCu->SetValue(false);
-    itemStaticBoxSizer18->Add(m_PadLayerCu, 0, wxGROW|wxALL, 5);
+    itemStaticBoxSizer18->Add(m_PadLayerCu, 0, wxGROW|wxLEFT|wxRIGHT|wxTOP, 5);
 
     m_PadLayerCmp = new wxCheckBox( itemDialog1, ID_CHECKBOX1, _("Comp layer"), wxDefaultPosition, wxDefaultSize, wxCHK_2STATE );
     m_PadLayerCmp->SetValue(false);
-    itemStaticBoxSizer18->Add(m_PadLayerCmp, 0, wxGROW|wxALL, 5);
+    itemStaticBoxSizer18->Add(m_PadLayerCmp, 0, wxGROW|wxLEFT|wxRIGHT|wxBOTTOM, 5);
 
     itemStaticBoxSizer18->Add(5, 5, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 5);
 
     m_PadLayerAdhCmp = new wxCheckBox( itemDialog1, ID_CHECKBOX2, _("Adhesive Cmp"), wxDefaultPosition, wxDefaultSize, wxCHK_2STATE );
     m_PadLayerAdhCmp->SetValue(false);
-    itemStaticBoxSizer18->Add(m_PadLayerAdhCmp, 0, wxGROW|wxALL, 5);
+    itemStaticBoxSizer18->Add(m_PadLayerAdhCmp, 0, wxGROW|wxLEFT|wxRIGHT|wxTOP, 5);
 
     m_PadLayerAdhCu = new wxCheckBox( itemDialog1, ID_CHECKBOX3, _("Adhesive Copper"), wxDefaultPosition, wxDefaultSize, wxCHK_2STATE );
     m_PadLayerAdhCu->SetValue(false);
-    itemStaticBoxSizer18->Add(m_PadLayerAdhCu, 0, wxGROW|wxALL, 5);
+    itemStaticBoxSizer18->Add(m_PadLayerAdhCu, 0, wxGROW|wxLEFT|wxRIGHT, 5);
 
     m_PadLayerPateCmp = new wxCheckBox( itemDialog1, ID_CHECKBOX4, _("Solder paste Cmp"), wxDefaultPosition, wxDefaultSize, wxCHK_2STATE );
     m_PadLayerPateCmp->SetValue(false);
-    itemStaticBoxSizer18->Add(m_PadLayerPateCmp, 0, wxGROW|wxALL, 5);
+    itemStaticBoxSizer18->Add(m_PadLayerPateCmp, 0, wxGROW|wxLEFT|wxRIGHT, 5);
 
     m_PadLayerPateCu = new wxCheckBox( itemDialog1, ID_CHECKBOX5, _("Solder paste Copper"), wxDefaultPosition, wxDefaultSize, wxCHK_2STATE );
     m_PadLayerPateCu->SetValue(false);
-    itemStaticBoxSizer18->Add(m_PadLayerPateCu, 0, wxGROW|wxALL, 5);
+    itemStaticBoxSizer18->Add(m_PadLayerPateCu, 0, wxGROW|wxLEFT|wxRIGHT, 5);
 
     m_PadLayerSilkCmp = new wxCheckBox( itemDialog1, ID_CHECKBOX6, _("Silkscreen Cmp"), wxDefaultPosition, wxDefaultSize, wxCHK_2STATE );
     m_PadLayerSilkCmp->SetValue(false);
-    itemStaticBoxSizer18->Add(m_PadLayerSilkCmp, 0, wxGROW|wxALL, 5);
+    itemStaticBoxSizer18->Add(m_PadLayerSilkCmp, 0, wxGROW|wxLEFT|wxRIGHT, 5);
 
     m_PadLayerSilkCu = new wxCheckBox( itemDialog1, ID_CHECKBOX7, _("Silkscreen Copper"), wxDefaultPosition, wxDefaultSize, wxCHK_2STATE );
     m_PadLayerSilkCu->SetValue(false);
-    itemStaticBoxSizer18->Add(m_PadLayerSilkCu, 0, wxGROW|wxALL, 5);
+    itemStaticBoxSizer18->Add(m_PadLayerSilkCu, 0, wxGROW|wxLEFT|wxRIGHT, 5);
 
     m_PadLayerMaskCmp = new wxCheckBox( itemDialog1, ID_CHECKBOX8, _("Solder mask Cmp"), wxDefaultPosition, wxDefaultSize, wxCHK_2STATE );
     m_PadLayerMaskCmp->SetValue(false);
-    itemStaticBoxSizer18->Add(m_PadLayerMaskCmp, 0, wxGROW|wxALL, 5);
+    itemStaticBoxSizer18->Add(m_PadLayerMaskCmp, 0, wxGROW|wxLEFT|wxRIGHT, 5);
 
     m_PadLayerMaskCu = new wxCheckBox( itemDialog1, ID_CHECKBOX9, _("Solder mask Copper"), wxDefaultPosition, wxDefaultSize, wxCHK_2STATE );
     m_PadLayerMaskCu->SetValue(false);
-    itemStaticBoxSizer18->Add(m_PadLayerMaskCu, 0, wxGROW|wxALL, 5);
+    itemStaticBoxSizer18->Add(m_PadLayerMaskCu, 0, wxGROW|wxLEFT|wxRIGHT, 5);
 
     m_PadLayerECO1 = new wxCheckBox( itemDialog1, ID_CHECKBOX10, _("E.C.O.1 layer"), wxDefaultPosition, wxDefaultSize, wxCHK_2STATE );
     m_PadLayerECO1->SetValue(false);
-    itemStaticBoxSizer18->Add(m_PadLayerECO1, 0, wxGROW|wxALL, 5);
+    itemStaticBoxSizer18->Add(m_PadLayerECO1, 0, wxGROW|wxLEFT|wxRIGHT, 5);
 
     m_PadLayerECO2 = new wxCheckBox( itemDialog1, ID_CHECKBOX11, _("E.C.O.2 layer"), wxDefaultPosition, wxDefaultSize, wxCHK_2STATE );
     m_PadLayerECO2->SetValue(false);
-    itemStaticBoxSizer18->Add(m_PadLayerECO2, 0, wxGROW|wxALL, 5);
+    itemStaticBoxSizer18->Add(m_PadLayerECO2, 0, wxGROW|wxLEFT|wxRIGHT, 5);
 
     m_PadLayerDraft = new wxCheckBox( itemDialog1, ID_CHECKBOX12, _("Draft layer"), wxDefaultPosition, wxDefaultSize, wxCHK_2STATE );
     m_PadLayerDraft->SetValue(false);
-    itemStaticBoxSizer18->Add(m_PadLayerDraft, 0, wxGROW|wxALL, 5);
+    itemStaticBoxSizer18->Add(m_PadLayerDraft, 0, wxGROW|wxLEFT|wxRIGHT|wxBOTTOM, 5);
 
 ////@end WinEDA_PadPropertiesFrame content construction
 
@@ -381,11 +377,6 @@ void WinEDA_PadPropertiesFrame::OnListboxShapePadSelected( wxCommandEvent& event
 			m_PadDeltaSizeCtrl->Enable(TRUE, TRUE);
 			m_PadSizeCtrl->Enable(TRUE, TRUE);
 			break;
-
-		case 4: //SPECIAL_PAD:
-			m_PadDeltaSizeCtrl->Enable(FALSE, FALSE);
-			m_PadSizeCtrl->Enable(TRUE, TRUE);
-			break;
 	}
 }
 
diff --git a/pcbnew/dialog_pad_edit.h b/pcbnew/dialog_pad_edit.h
index 8fe44b3932..fa205366e7 100644
--- a/pcbnew/dialog_pad_edit.h
+++ b/pcbnew/dialog_pad_edit.h
@@ -39,12 +39,6 @@ class wxBoxSizer;
 
 ////@begin control identifiers
 #define ID_DIALOG 10000
-// #define SYMBOL_WINEDA_PADPROPERTIESFRAME_STYLE wxCAPTION|wxRESIZE_BORDER|wxSYSTEM_MENU|wxCLOSE_BOX
-#define SYMBOL_WINEDA_PADPROPERTIESFRAME_STYLE wxCAPTION|wxSYSTEM_MENU|wxCLOSE_BOX
-#define SYMBOL_WINEDA_PADPROPERTIESFRAME_TITLE _("Pad properties")
-#define SYMBOL_WINEDA_PADPROPERTIESFRAME_IDNAME ID_DIALOG
-#define SYMBOL_WINEDA_PADPROPERTIESFRAME_SIZE wxSize(400, 300)
-#define SYMBOL_WINEDA_PADPROPERTIESFRAME_POSITION wxDefaultPosition
 #define ID_TEXTCTRL_PADNUM 10001
 #define ID_TEXTCTRL_NETNAME 10002
 #define ID_RADIOBOX_DRILL_SHAPE 10019
@@ -64,6 +58,11 @@ class wxBoxSizer;
 #define ID_CHECKBOX10 10016
 #define ID_CHECKBOX11 10017
 #define ID_CHECKBOX12 10018
+#define SYMBOL_WINEDA_PADPROPERTIESFRAME_STYLE wxCAPTION|wxSYSTEM_MENU|wxCLOSE_BOX
+#define SYMBOL_WINEDA_PADPROPERTIESFRAME_TITLE _("Pad properties")
+#define SYMBOL_WINEDA_PADPROPERTIESFRAME_IDNAME ID_DIALOG
+#define SYMBOL_WINEDA_PADPROPERTIESFRAME_SIZE wxSize(400, 300)
+#define SYMBOL_WINEDA_PADPROPERTIESFRAME_POSITION wxDefaultPosition
 ////@end control identifiers
 
 /*!
diff --git a/pcbnew/dialog_pad_edit.pjd b/pcbnew/dialog_pad_edit.pjd
index 2e178b8ad8..4698377c9f 100644
--- a/pcbnew/dialog_pad_edit.pjd
+++ b/pcbnew/dialog_pad_edit.pjd
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="windows-1252"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <anthemion-project version="1.0.0.0" xmlns="http://www.anthemion.co.uk">
   <header>
     <long name="name_counter">0</long>
@@ -6,7 +6,6 @@
     <string name="title">""</string>
     <string name="author">""</string>
     <string name="description">""</string>
-    <long name="doc_count">39</long>
     <string name="xrc_filename">""</string>
     <bool name="convert_images_to_xpm">0</bool>
     <bool name="inline_images">0</bool>
@@ -18,6 +17,7 @@
     <string name="copyright_string">"License GNU"</string>
     <string name="resource_prefix">""</string>
     <bool name="use_two_step_construction">0</bool>
+    <bool name="use_enums">0</bool>
     <string name="current_platform">"&lt;All platforms&gt;"</string>
     <string name="target_wx_version">"&lt;Any&gt;"</string>
     <string name="cpp_header_comment">"/////////////////////////////////////////////////////////////////////////////
@@ -43,12 +43,6 @@
 // Licence:     
 /////////////////////////////////////////////////////////////////////////////
 
-"</string>
-    <string name="cpp_function_comment">"
-/*!
- * %BODY%
- */
-
 "</string>
     <string name="cpp_symbols_file_comment">"/////////////////////////////////////////////////////////////////////////////
 // Name:        %SYMBOLS-FILENAME%
@@ -82,6 +76,14 @@
 #include &quot;wx/wx.h&quot;
 #endif
 
+"</string>
+    <string name="cpp_function_declaration_comment">"	/// %BODY%
+"</string>
+    <string name="cpp_function_implementation_comment">"
+/*!
+ * %BODY%
+ */
+
 "</string>
     <string name="resource_file_header">"app_resources.h"</string>
     <string name="resource_file_implementation">"app_resources.cpp"</string>
@@ -93,17 +95,20 @@
     <string name="external_symbol_filenames">""</string>
     <string name="configuration">"&lt;None&gt;"</string>
     <string name="source_encoding">"&lt;System&gt;"</string>
+    <string name="xrc_encoding">"utf-8"</string>
     <string name="project_encoding">"&lt;System&gt;"</string>
     <string name="resource_archive">""</string>
     <long name="text_file_type">0</long>
     <bool name="use_tabs">0</bool>
     <long name="indent_size">4</long>
+    <string name="whitespace_after_return_type">" "</string>
     <string name="resource_xrc_cpp">""</string>
     <bool name="use_resource_archive">0</bool>
     <bool name="use_generated_xrc_cpp">0</bool>
     <bool name="always_generate_xrc">1</bool>
     <bool name="archive_xrc_files">1</bool>
     <bool name="archive_image_files">1</bool>
+    <bool name="archive_all_image_files">0</bool>
     <bool name="xrc_retain_relative_paths">1</bool>
   </header>
   <data>
@@ -181,7 +186,7 @@
       <long name="is-transient">1</long>
       <long name="owns-file">1</long>
       <long name="title-mode">0</long>
-      <long name="locked">0</long>
+      <long name="locked">1</long>
       <document>
         <string name="title">"Windows"</string>
         <string name="type">"html-document"</string>
@@ -205,6 +210,8 @@
           <long name="base-id">10000</long>
           <bool name="use-id-prefix">0</bool>
           <string name="id-prefix">""</string>
+          <bool name="use-id-suffix">0</bool>
+          <string name="id-suffix">""</string>
           <long name="use-xrc">0</long>
           <string name="proxy-Id name">"ID_DIALOG"</string>
           <long name="proxy-Id value">10000</long>
@@ -258,6 +265,7 @@
           <long name="proxy-Y">-1</long>
           <long name="proxy-Width">400</long>
           <long name="proxy-Height">300</long>
+          <bool name="proxy-AUI manager">0</bool>
           <string name="proxy-Event sources">""</string>
           <document>
             <string name="title">"wxBoxSizer H"</string>
@@ -314,6 +322,11 @@
                 <string name="proxy-Id name">"wxID_STATIC"</string>
                 <long name="proxy-Id value">5105</long>
                 <string name="proxy-Class">"wxStaticText"</string>
+                <string name="proxy-Base class">"wxStaticText"</string>
+                <bool name="proxy-External implementation">1</bool>
+                <bool name="proxy-Separate files">0</bool>
+                <string name="proxy-Implementation filename">""</string>
+                <string name="proxy-Header filename">""</string>
                 <string name="proxy-Member variable name">""</string>
                 <string name="proxy-Label">"Pad Num :"</string>
                 <long name="proxy-Wrapping width">-1</long>
@@ -373,6 +386,11 @@
                 <string name="proxy-Id name">"ID_TEXTCTRL_PADNUM"</string>
                 <long name="proxy-Id value">10001</long>
                 <string name="proxy-Class">"wxTextCtrl"</string>
+                <string name="proxy-Base class">"wxTextCtrl"</string>
+                <bool name="proxy-External implementation">1</bool>
+                <bool name="proxy-Separate files">0</bool>
+                <string name="proxy-Implementation filename">""</string>
+                <string name="proxy-Header filename">""</string>
                 <string name="proxy-Member variable name">"m_PadNumCtrl"</string>
                 <string name="proxy-Initial value">""</string>
                 <long name="proxy-Max length">0</long>
@@ -399,7 +417,7 @@
                 <bool name="proxy-wxTE_CENTRE">0</bool>
                 <bool name="proxy-wxTE_RIGHT">0</bool>
                 <bool name="proxy-wxHSCROLL">0</bool>
-                <bool name="proxy-wxTE_LINEWRAP">0</bool>
+                <bool name="proxy-wxTE_CHARWRAP">0</bool>
                 <bool name="proxy-wxTE_WORDWRAP">0</bool>
                 <bool name="proxy-wxNO_BORDER">0</bool>
                 <bool name="proxy-wxSIMPLE_BORDER">0</bool>
@@ -428,6 +446,7 @@
                 <bool name="proxy-wxFIXED_MINSIZE">0</bool>
                 <string name="proxy-Custom arguments">""</string>
                 <string name="proxy-Custom ctor arguments">""</string>
+                <bool name="proxy-wxTE_LINEWRAP">0</bool>
               </document>
               <document>
                 <string name="title">"wxStaticText: wxID_STATIC"</string>
@@ -443,6 +462,11 @@
                 <string name="proxy-Id name">"wxID_STATIC"</string>
                 <long name="proxy-Id value">5105</long>
                 <string name="proxy-Class">"wxStaticText"</string>
+                <string name="proxy-Base class">"wxStaticText"</string>
+                <bool name="proxy-External implementation">1</bool>
+                <bool name="proxy-Separate files">0</bool>
+                <string name="proxy-Implementation filename">""</string>
+                <string name="proxy-Header filename">""</string>
                 <string name="proxy-Member variable name">""</string>
                 <string name="proxy-Label">"Pad Net Name :"</string>
                 <long name="proxy-Wrapping width">-1</long>
@@ -502,6 +526,11 @@
                 <string name="proxy-Id name">"ID_TEXTCTRL_NETNAME"</string>
                 <long name="proxy-Id value">10002</long>
                 <string name="proxy-Class">"wxTextCtrl"</string>
+                <string name="proxy-Base class">"wxTextCtrl"</string>
+                <bool name="proxy-External implementation">1</bool>
+                <bool name="proxy-Separate files">0</bool>
+                <string name="proxy-Implementation filename">""</string>
+                <string name="proxy-Header filename">""</string>
                 <string name="proxy-Member variable name">"m_PadNetNameCtrl"</string>
                 <string name="proxy-Initial value">""</string>
                 <long name="proxy-Max length">0</long>
@@ -528,7 +557,7 @@
                 <bool name="proxy-wxTE_CENTRE">0</bool>
                 <bool name="proxy-wxTE_RIGHT">0</bool>
                 <bool name="proxy-wxHSCROLL">0</bool>
-                <bool name="proxy-wxTE_LINEWRAP">0</bool>
+                <bool name="proxy-wxTE_CHARWRAP">0</bool>
                 <bool name="proxy-wxTE_WORDWRAP">0</bool>
                 <bool name="proxy-wxNO_BORDER">0</bool>
                 <bool name="proxy-wxSIMPLE_BORDER">0</bool>
@@ -557,6 +586,7 @@
                 <bool name="proxy-wxFIXED_MINSIZE">0</bool>
                 <string name="proxy-Custom arguments">""</string>
                 <string name="proxy-Custom ctor arguments">""</string>
+                <bool name="proxy-wxTE_LINEWRAP">0</bool>
               </document>
               <document>
                 <string name="title">"wxBoxSizer V"</string>
@@ -625,6 +655,11 @@
                 <string name="proxy-Id name">"ID_RADIOBOX_DRILL_SHAPE"</string>
                 <long name="proxy-Id value">10019</long>
                 <string name="proxy-Class">"wxRadioBox"</string>
+                <string name="proxy-Base class">"wxRadioBox"</string>
+                <bool name="proxy-External implementation">1</bool>
+                <bool name="proxy-Separate files">0</bool>
+                <string name="proxy-Implementation filename">""</string>
+                <string name="proxy-Header filename">""</string>
                 <string name="proxy-Member variable name">"m_DrillShapeCtrl"</string>
                 <string name="proxy-Label">"Drill Shape:"</string>
                 <long name="proxy-Major dimension count">1</long>
@@ -705,6 +740,11 @@
                 <string name="proxy-Id name">"ID_LISTBOX_ORIENT_PAD"</string>
                 <long name="proxy-Id value">10003</long>
                 <string name="proxy-Class">"wxRadioBox"</string>
+                <string name="proxy-Base class">"wxRadioBox"</string>
+                <bool name="proxy-External implementation">1</bool>
+                <bool name="proxy-Separate files">0</bool>
+                <string name="proxy-Implementation filename">""</string>
+                <string name="proxy-Header filename">""</string>
                 <string name="proxy-Member variable name">"m_PadOrient"</string>
                 <string name="proxy-Label">"Pad Orient:"</string>
                 <long name="proxy-Major dimension count">1</long>
@@ -759,6 +799,11 @@
                 <string name="proxy-Id name">"ID_LISTBOX_SHAPE_PAD"</string>
                 <long name="proxy-Id value">10004</long>
                 <string name="proxy-Class">"wxRadioBox"</string>
+                <string name="proxy-Base class">"wxRadioBox"</string>
+                <bool name="proxy-External implementation">1</bool>
+                <bool name="proxy-Separate files">0</bool>
+                <string name="proxy-Implementation filename">""</string>
+                <string name="proxy-Header filename">""</string>
                 <string name="proxy-Member variable name">"m_PadShape"</string>
                 <string name="proxy-Label">"Pad Shape:"</string>
                 <long name="proxy-Major dimension count">1</long>
@@ -813,6 +858,11 @@
                 <string name="proxy-Id name">"ID_LISTBOX_TYPE_PAD"</string>
                 <long name="proxy-Id value">10005</long>
                 <string name="proxy-Class">"wxRadioBox"</string>
+                <string name="proxy-Base class">"wxRadioBox"</string>
+                <bool name="proxy-External implementation">1</bool>
+                <bool name="proxy-Separate files">0</bool>
+                <string name="proxy-Implementation filename">""</string>
+                <string name="proxy-Header filename">""</string>
                 <string name="proxy-Member variable name">"m_PadType"</string>
                 <string name="proxy-Label">"Pad Type:"</string>
                 <long name="proxy-Major dimension count">1</long>
@@ -893,6 +943,11 @@
                 <string name="proxy-Id name">"wxID_OK"</string>
                 <long name="proxy-Id value">5100</long>
                 <string name="proxy-Class">"wxButton"</string>
+                <string name="proxy-Base class">"wxButton"</string>
+                <bool name="proxy-External implementation">1</bool>
+                <bool name="proxy-Separate files">0</bool>
+                <string name="proxy-Implementation filename">""</string>
+                <string name="proxy-Header filename">""</string>
                 <string name="proxy-Member variable name">""</string>
                 <string name="proxy-Label">"&amp;OK"</string>
                 <bool name="proxy-Default">0</bool>
@@ -947,6 +1002,11 @@
                 <string name="proxy-Id name">"wxID_CANCEL"</string>
                 <long name="proxy-Id value">5101</long>
                 <string name="proxy-Class">"wxButton"</string>
+                <string name="proxy-Base class">"wxButton"</string>
+                <bool name="proxy-External implementation">1</bool>
+                <bool name="proxy-Separate files">0</bool>
+                <string name="proxy-Implementation filename">""</string>
+                <string name="proxy-Header filename">""</string>
                 <string name="proxy-Member variable name">""</string>
                 <string name="proxy-Label">"&amp;Cancel"</string>
                 <bool name="proxy-Default">0</bool>
@@ -1000,21 +1060,22 @@
                 <string name="proxy-Id name">"wxID_ANY"</string>
                 <string name="proxy-Id value">"-1"</string>
                 <string name="proxy-Label">"Layers:"</string>
+                <string name="proxy-Member variable name">""</string>
                 <string name="proxy-Sizer member variable name">""</string>
                 <string name="proxy-Foreground colour">""</string>
                 <string name="proxy-Font">""</string>
                 <bool name="proxy-Hidden">0</bool>
                 <bool name="proxy-Enabled">1</bool>
+                <string name="proxy-Static box class">"wxStaticBox"</string>
                 <string name="proxy-Orientation">"Vertical"</string>
-                <string name="proxy-Member variable name">""</string>
                 <string name="proxy-AlignH">"Centre"</string>
                 <string name="proxy-AlignV">"Centre"</string>
                 <long name="proxy-Stretch factor">0</long>
                 <long name="proxy-Border">5</long>
                 <bool name="proxy-wxLEFT">1</bool>
                 <bool name="proxy-wxRIGHT">1</bool>
-                <bool name="proxy-wxTOP">1</bool>
-                <bool name="proxy-wxBOTTOM">1</bool>
+                <bool name="proxy-wxTOP">0</bool>
+                <bool name="proxy-wxBOTTOM">0</bool>
                 <bool name="proxy-wxSHAPED">0</bool>
                 <bool name="proxy-wxADJUST_MINSIZE">0</bool>
                 <bool name="proxy-wxFIXED_MINSIZE">0</bool>
@@ -1033,6 +1094,11 @@
                   <string name="proxy-Id name">"ID_CHECKBOX"</string>
                   <long name="proxy-Id value">10006</long>
                   <string name="proxy-Class">"wxCheckBox"</string>
+                  <string name="proxy-Base class">"wxCheckBox"</string>
+                  <bool name="proxy-External implementation">1</bool>
+                  <bool name="proxy-Separate files">0</bool>
+                  <string name="proxy-Implementation filename">""</string>
+                  <string name="proxy-Header filename">""</string>
                   <string name="proxy-Member variable name">"m_PadLayerCu"</string>
                   <string name="proxy-Label">"Copper layer"</string>
                   <bool name="proxy-Initial value">0</bool>
@@ -1065,7 +1131,7 @@
                   <bool name="proxy-wxLEFT">1</bool>
                   <bool name="proxy-wxRIGHT">1</bool>
                   <bool name="proxy-wxTOP">1</bool>
-                  <bool name="proxy-wxBOTTOM">1</bool>
+                  <bool name="proxy-wxBOTTOM">0</bool>
                   <bool name="proxy-wxSHAPED">0</bool>
                   <bool name="proxy-wxADJUST_MINSIZE">0</bool>
                   <bool name="proxy-wxFIXED_MINSIZE">0</bool>
@@ -1086,6 +1152,11 @@
                   <string name="proxy-Id name">"ID_CHECKBOX1"</string>
                   <long name="proxy-Id value">10007</long>
                   <string name="proxy-Class">"wxCheckBox"</string>
+                  <string name="proxy-Base class">"wxCheckBox"</string>
+                  <bool name="proxy-External implementation">1</bool>
+                  <bool name="proxy-Separate files">0</bool>
+                  <string name="proxy-Implementation filename">""</string>
+                  <string name="proxy-Header filename">""</string>
                   <string name="proxy-Member variable name">"m_PadLayerCmp"</string>
                   <string name="proxy-Label">"Comp layer"</string>
                   <bool name="proxy-Initial value">0</bool>
@@ -1117,7 +1188,7 @@
                   <long name="proxy-Border">5</long>
                   <bool name="proxy-wxLEFT">1</bool>
                   <bool name="proxy-wxRIGHT">1</bool>
-                  <bool name="proxy-wxTOP">1</bool>
+                  <bool name="proxy-wxTOP">0</bool>
                   <bool name="proxy-wxBOTTOM">1</bool>
                   <bool name="proxy-wxSHAPED">0</bool>
                   <bool name="proxy-wxADJUST_MINSIZE">0</bool>
@@ -1165,6 +1236,11 @@
                   <string name="proxy-Id name">"ID_CHECKBOX2"</string>
                   <long name="proxy-Id value">10008</long>
                   <string name="proxy-Class">"wxCheckBox"</string>
+                  <string name="proxy-Base class">"wxCheckBox"</string>
+                  <bool name="proxy-External implementation">1</bool>
+                  <bool name="proxy-Separate files">0</bool>
+                  <string name="proxy-Implementation filename">""</string>
+                  <string name="proxy-Header filename">""</string>
                   <string name="proxy-Member variable name">"m_PadLayerAdhCmp"</string>
                   <string name="proxy-Label">"Adhesive Cmp"</string>
                   <bool name="proxy-Initial value">0</bool>
@@ -1197,7 +1273,7 @@
                   <bool name="proxy-wxLEFT">1</bool>
                   <bool name="proxy-wxRIGHT">1</bool>
                   <bool name="proxy-wxTOP">1</bool>
-                  <bool name="proxy-wxBOTTOM">1</bool>
+                  <bool name="proxy-wxBOTTOM">0</bool>
                   <bool name="proxy-wxSHAPED">0</bool>
                   <bool name="proxy-wxADJUST_MINSIZE">0</bool>
                   <bool name="proxy-wxFIXED_MINSIZE">0</bool>
@@ -1218,6 +1294,11 @@
                   <string name="proxy-Id name">"ID_CHECKBOX3"</string>
                   <long name="proxy-Id value">10009</long>
                   <string name="proxy-Class">"wxCheckBox"</string>
+                  <string name="proxy-Base class">"wxCheckBox"</string>
+                  <bool name="proxy-External implementation">1</bool>
+                  <bool name="proxy-Separate files">0</bool>
+                  <string name="proxy-Implementation filename">""</string>
+                  <string name="proxy-Header filename">""</string>
                   <string name="proxy-Member variable name">"m_PadLayerAdhCu"</string>
                   <string name="proxy-Label">"Adhesive Copper"</string>
                   <bool name="proxy-Initial value">0</bool>
@@ -1249,8 +1330,8 @@
                   <long name="proxy-Border">5</long>
                   <bool name="proxy-wxLEFT">1</bool>
                   <bool name="proxy-wxRIGHT">1</bool>
-                  <bool name="proxy-wxTOP">1</bool>
-                  <bool name="proxy-wxBOTTOM">1</bool>
+                  <bool name="proxy-wxTOP">0</bool>
+                  <bool name="proxy-wxBOTTOM">0</bool>
                   <bool name="proxy-wxSHAPED">0</bool>
                   <bool name="proxy-wxADJUST_MINSIZE">0</bool>
                   <bool name="proxy-wxFIXED_MINSIZE">0</bool>
@@ -1271,6 +1352,11 @@
                   <string name="proxy-Id name">"ID_CHECKBOX4"</string>
                   <long name="proxy-Id value">10010</long>
                   <string name="proxy-Class">"wxCheckBox"</string>
+                  <string name="proxy-Base class">"wxCheckBox"</string>
+                  <bool name="proxy-External implementation">1</bool>
+                  <bool name="proxy-Separate files">0</bool>
+                  <string name="proxy-Implementation filename">""</string>
+                  <string name="proxy-Header filename">""</string>
                   <string name="proxy-Member variable name">"m_PadLayerPateCmp"</string>
                   <string name="proxy-Label">"Solder paste Cmp"</string>
                   <bool name="proxy-Initial value">0</bool>
@@ -1302,8 +1388,8 @@
                   <long name="proxy-Border">5</long>
                   <bool name="proxy-wxLEFT">1</bool>
                   <bool name="proxy-wxRIGHT">1</bool>
-                  <bool name="proxy-wxTOP">1</bool>
-                  <bool name="proxy-wxBOTTOM">1</bool>
+                  <bool name="proxy-wxTOP">0</bool>
+                  <bool name="proxy-wxBOTTOM">0</bool>
                   <bool name="proxy-wxSHAPED">0</bool>
                   <bool name="proxy-wxADJUST_MINSIZE">0</bool>
                   <bool name="proxy-wxFIXED_MINSIZE">0</bool>
@@ -1324,6 +1410,11 @@
                   <string name="proxy-Id name">"ID_CHECKBOX5"</string>
                   <long name="proxy-Id value">10011</long>
                   <string name="proxy-Class">"wxCheckBox"</string>
+                  <string name="proxy-Base class">"wxCheckBox"</string>
+                  <bool name="proxy-External implementation">1</bool>
+                  <bool name="proxy-Separate files">0</bool>
+                  <string name="proxy-Implementation filename">""</string>
+                  <string name="proxy-Header filename">""</string>
                   <string name="proxy-Member variable name">"m_PadLayerPateCu"</string>
                   <string name="proxy-Label">"Solder paste Copper"</string>
                   <bool name="proxy-Initial value">0</bool>
@@ -1355,8 +1446,8 @@
                   <long name="proxy-Border">5</long>
                   <bool name="proxy-wxLEFT">1</bool>
                   <bool name="proxy-wxRIGHT">1</bool>
-                  <bool name="proxy-wxTOP">1</bool>
-                  <bool name="proxy-wxBOTTOM">1</bool>
+                  <bool name="proxy-wxTOP">0</bool>
+                  <bool name="proxy-wxBOTTOM">0</bool>
                   <bool name="proxy-wxSHAPED">0</bool>
                   <bool name="proxy-wxADJUST_MINSIZE">0</bool>
                   <bool name="proxy-wxFIXED_MINSIZE">0</bool>
@@ -1377,6 +1468,11 @@
                   <string name="proxy-Id name">"ID_CHECKBOX6"</string>
                   <long name="proxy-Id value">10012</long>
                   <string name="proxy-Class">"wxCheckBox"</string>
+                  <string name="proxy-Base class">"wxCheckBox"</string>
+                  <bool name="proxy-External implementation">1</bool>
+                  <bool name="proxy-Separate files">0</bool>
+                  <string name="proxy-Implementation filename">""</string>
+                  <string name="proxy-Header filename">""</string>
                   <string name="proxy-Member variable name">"m_PadLayerSilkCmp"</string>
                   <string name="proxy-Label">"Silkscreen Cmp"</string>
                   <bool name="proxy-Initial value">0</bool>
@@ -1408,8 +1504,8 @@
                   <long name="proxy-Border">5</long>
                   <bool name="proxy-wxLEFT">1</bool>
                   <bool name="proxy-wxRIGHT">1</bool>
-                  <bool name="proxy-wxTOP">1</bool>
-                  <bool name="proxy-wxBOTTOM">1</bool>
+                  <bool name="proxy-wxTOP">0</bool>
+                  <bool name="proxy-wxBOTTOM">0</bool>
                   <bool name="proxy-wxSHAPED">0</bool>
                   <bool name="proxy-wxADJUST_MINSIZE">0</bool>
                   <bool name="proxy-wxFIXED_MINSIZE">0</bool>
@@ -1430,6 +1526,11 @@
                   <string name="proxy-Id name">"ID_CHECKBOX7"</string>
                   <long name="proxy-Id value">10013</long>
                   <string name="proxy-Class">"wxCheckBox"</string>
+                  <string name="proxy-Base class">"wxCheckBox"</string>
+                  <bool name="proxy-External implementation">1</bool>
+                  <bool name="proxy-Separate files">0</bool>
+                  <string name="proxy-Implementation filename">""</string>
+                  <string name="proxy-Header filename">""</string>
                   <string name="proxy-Member variable name">"m_PadLayerSilkCu"</string>
                   <string name="proxy-Label">"Silkscreen Copper"</string>
                   <bool name="proxy-Initial value">0</bool>
@@ -1461,8 +1562,8 @@
                   <long name="proxy-Border">5</long>
                   <bool name="proxy-wxLEFT">1</bool>
                   <bool name="proxy-wxRIGHT">1</bool>
-                  <bool name="proxy-wxTOP">1</bool>
-                  <bool name="proxy-wxBOTTOM">1</bool>
+                  <bool name="proxy-wxTOP">0</bool>
+                  <bool name="proxy-wxBOTTOM">0</bool>
                   <bool name="proxy-wxSHAPED">0</bool>
                   <bool name="proxy-wxADJUST_MINSIZE">0</bool>
                   <bool name="proxy-wxFIXED_MINSIZE">0</bool>
@@ -1483,6 +1584,11 @@
                   <string name="proxy-Id name">"ID_CHECKBOX8"</string>
                   <long name="proxy-Id value">10014</long>
                   <string name="proxy-Class">"wxCheckBox"</string>
+                  <string name="proxy-Base class">"wxCheckBox"</string>
+                  <bool name="proxy-External implementation">1</bool>
+                  <bool name="proxy-Separate files">0</bool>
+                  <string name="proxy-Implementation filename">""</string>
+                  <string name="proxy-Header filename">""</string>
                   <string name="proxy-Member variable name">"m_PadLayerMaskCmp"</string>
                   <string name="proxy-Label">"Solder mask Cmp"</string>
                   <bool name="proxy-Initial value">0</bool>
@@ -1514,8 +1620,8 @@
                   <long name="proxy-Border">5</long>
                   <bool name="proxy-wxLEFT">1</bool>
                   <bool name="proxy-wxRIGHT">1</bool>
-                  <bool name="proxy-wxTOP">1</bool>
-                  <bool name="proxy-wxBOTTOM">1</bool>
+                  <bool name="proxy-wxTOP">0</bool>
+                  <bool name="proxy-wxBOTTOM">0</bool>
                   <bool name="proxy-wxSHAPED">0</bool>
                   <bool name="proxy-wxADJUST_MINSIZE">0</bool>
                   <bool name="proxy-wxFIXED_MINSIZE">0</bool>
@@ -1536,6 +1642,11 @@
                   <string name="proxy-Id name">"ID_CHECKBOX9"</string>
                   <long name="proxy-Id value">10015</long>
                   <string name="proxy-Class">"wxCheckBox"</string>
+                  <string name="proxy-Base class">"wxCheckBox"</string>
+                  <bool name="proxy-External implementation">1</bool>
+                  <bool name="proxy-Separate files">0</bool>
+                  <string name="proxy-Implementation filename">""</string>
+                  <string name="proxy-Header filename">""</string>
                   <string name="proxy-Member variable name">"m_PadLayerMaskCu"</string>
                   <string name="proxy-Label">"Solder mask Copper"</string>
                   <bool name="proxy-Initial value">0</bool>
@@ -1567,8 +1678,8 @@
                   <long name="proxy-Border">5</long>
                   <bool name="proxy-wxLEFT">1</bool>
                   <bool name="proxy-wxRIGHT">1</bool>
-                  <bool name="proxy-wxTOP">1</bool>
-                  <bool name="proxy-wxBOTTOM">1</bool>
+                  <bool name="proxy-wxTOP">0</bool>
+                  <bool name="proxy-wxBOTTOM">0</bool>
                   <bool name="proxy-wxSHAPED">0</bool>
                   <bool name="proxy-wxADJUST_MINSIZE">0</bool>
                   <bool name="proxy-wxFIXED_MINSIZE">0</bool>
@@ -1589,6 +1700,11 @@
                   <string name="proxy-Id name">"ID_CHECKBOX10"</string>
                   <long name="proxy-Id value">10016</long>
                   <string name="proxy-Class">"wxCheckBox"</string>
+                  <string name="proxy-Base class">"wxCheckBox"</string>
+                  <bool name="proxy-External implementation">1</bool>
+                  <bool name="proxy-Separate files">0</bool>
+                  <string name="proxy-Implementation filename">""</string>
+                  <string name="proxy-Header filename">""</string>
                   <string name="proxy-Member variable name">"m_PadLayerECO1"</string>
                   <string name="proxy-Label">"E.C.O.1 layer"</string>
                   <bool name="proxy-Initial value">0</bool>
@@ -1620,8 +1736,8 @@
                   <long name="proxy-Border">5</long>
                   <bool name="proxy-wxLEFT">1</bool>
                   <bool name="proxy-wxRIGHT">1</bool>
-                  <bool name="proxy-wxTOP">1</bool>
-                  <bool name="proxy-wxBOTTOM">1</bool>
+                  <bool name="proxy-wxTOP">0</bool>
+                  <bool name="proxy-wxBOTTOM">0</bool>
                   <bool name="proxy-wxSHAPED">0</bool>
                   <bool name="proxy-wxADJUST_MINSIZE">0</bool>
                   <bool name="proxy-wxFIXED_MINSIZE">0</bool>
@@ -1642,6 +1758,11 @@
                   <string name="proxy-Id name">"ID_CHECKBOX11"</string>
                   <long name="proxy-Id value">10017</long>
                   <string name="proxy-Class">"wxCheckBox"</string>
+                  <string name="proxy-Base class">"wxCheckBox"</string>
+                  <bool name="proxy-External implementation">1</bool>
+                  <bool name="proxy-Separate files">0</bool>
+                  <string name="proxy-Implementation filename">""</string>
+                  <string name="proxy-Header filename">""</string>
                   <string name="proxy-Member variable name">"m_PadLayerECO2"</string>
                   <string name="proxy-Label">"E.C.O.2 layer"</string>
                   <bool name="proxy-Initial value">0</bool>
@@ -1673,8 +1794,8 @@
                   <long name="proxy-Border">5</long>
                   <bool name="proxy-wxLEFT">1</bool>
                   <bool name="proxy-wxRIGHT">1</bool>
-                  <bool name="proxy-wxTOP">1</bool>
-                  <bool name="proxy-wxBOTTOM">1</bool>
+                  <bool name="proxy-wxTOP">0</bool>
+                  <bool name="proxy-wxBOTTOM">0</bool>
                   <bool name="proxy-wxSHAPED">0</bool>
                   <bool name="proxy-wxADJUST_MINSIZE">0</bool>
                   <bool name="proxy-wxFIXED_MINSIZE">0</bool>
@@ -1695,6 +1816,11 @@
                   <string name="proxy-Id name">"ID_CHECKBOX12"</string>
                   <long name="proxy-Id value">10018</long>
                   <string name="proxy-Class">"wxCheckBox"</string>
+                  <string name="proxy-Base class">"wxCheckBox"</string>
+                  <bool name="proxy-External implementation">1</bool>
+                  <bool name="proxy-Separate files">0</bool>
+                  <string name="proxy-Implementation filename">""</string>
+                  <string name="proxy-Header filename">""</string>
                   <string name="proxy-Member variable name">"m_PadLayerDraft"</string>
                   <string name="proxy-Label">"Draft layer"</string>
                   <bool name="proxy-Initial value">0</bool>
@@ -1726,7 +1852,7 @@
                   <long name="proxy-Border">5</long>
                   <bool name="proxy-wxLEFT">1</bool>
                   <bool name="proxy-wxRIGHT">1</bool>
-                  <bool name="proxy-wxTOP">1</bool>
+                  <bool name="proxy-wxTOP">0</bool>
                   <bool name="proxy-wxBOTTOM">1</bool>
                   <bool name="proxy-wxSHAPED">0</bool>
                   <bool name="proxy-wxADJUST_MINSIZE">0</bool>
diff --git a/pcbnew/editpads.cpp b/pcbnew/editpads.cpp
index d2fbb12541..69c5c22c14 100644
--- a/pcbnew/editpads.cpp
+++ b/pcbnew/editpads.cpp
@@ -160,12 +160,6 @@ int tmp;
 			m_PadSizeCtrl->Enable(TRUE, TRUE);
 			m_PadShape->SetSelection(3);
 			break;
-
-		case SPECIAL_PAD:
-			m_PadDeltaSizeCtrl->Enable(FALSE, FALSE);
-			m_PadSizeCtrl->Enable(TRUE, TRUE);
-			m_PadShape->SetSelection(4);
-			break;
 		}
 
 	// Selection du type
@@ -416,9 +410,6 @@ bool error = FALSE;
 
 			case TRAPEZE:
 				break;
-
-			case SPECIAL_PAD:
-				break;
 		}
 
 		switch ( CurrentPad->m_Attribut )
diff --git a/pcbnew/files.cpp b/pcbnew/files.cpp
index 98e6304d0a..be5c056108 100644
--- a/pcbnew/files.cpp
+++ b/pcbnew/files.cpp
@@ -174,9 +174,8 @@ int WinEDA_PcbFrame::LoadOnePcbFile( const wxString& FullFileName, wxDC* DC, boo
     else
         GetScreen()->m_FileName = FullFileName;
 
-    /////////////////////////
-    /* Lecture Fichier PCB */
-    /////////////////////////
+    /* Start read PCB file
+	*/
 
     source = wxFopen( GetScreen()->m_FileName, wxT( "rt" ) );
     if( source == NULL )
@@ -187,7 +186,7 @@ int WinEDA_PcbFrame::LoadOnePcbFile( const wxString& FullFileName, wxDC* DC, boo
     }
 
 
-    /* Lecture de l'entete et TEST si PCB format ASCII */
+    /* Read header and TEST if it is a PCB file format */
     GetLine( source, cbuf, &ii );
     if( strncmp( cbuf, "PCBNEW-BOARD", 12 ) != 0 )
     {
@@ -199,7 +198,7 @@ int WinEDA_PcbFrame::LoadOnePcbFile( const wxString& FullFileName, wxDC* DC, boo
     SetTitle( GetScreen()->m_FileName );
     SetLastProject( GetScreen()->m_FileName );
 
-    // Rechargement de la configuration:
+    // Reload the corresponding configuration file:
     wxSetWorkingDirectory( wxPathOnly( GetScreen()->m_FileName ) );
     if( Append )
         ReadPcbFile( DC, source, TRUE );
@@ -207,7 +206,7 @@ int WinEDA_PcbFrame::LoadOnePcbFile( const wxString& FullFileName, wxDC* DC, boo
     {
         Read_Config( GetScreen()->m_FileName );
 
-        // Mise a jour du toolbar d'options
+        // Update the option toolbar
         m_DisplayPcbTrackFill = DisplayOpt.DisplayPcbTrackFill;
         m_DisplayModText = DisplayOpt.DisplayModText;
         m_DisplayModEdge = DisplayOpt.DisplayModEdge;
@@ -227,11 +226,12 @@ int WinEDA_PcbFrame::LoadOnePcbFile( const wxString& FullFileName, wxDC* DC, boo
                   wxGetCwd().GetData(), DIR_SEP, PcbExtBuffer.GetData() );
     }
 
-    /* liste des pads recalculee avec Affichage des messages d'erreur */
+    /* Rebuild the new pad list (for drc and ratsnet control ...) */
     build_liste_pads();
 
     m_Pcb->Display_Infos( this );
 
+	/* reset the auto save timer */
     g_SaveTime = time( NULL );
 
     
diff --git a/pcbnew/hotkeys.cpp b/pcbnew/hotkeys.cpp
index 3426e8c9c6..269a7342bd 100644
--- a/pcbnew/hotkeys.cpp
+++ b/pcbnew/hotkeys.cpp
@@ -9,78 +9,110 @@
 #include "common.h"
 #include "pcbnew.h"
 #include "id.h"
-#include "hotkeys_basic.h"
+#include "hotkeys.h"
 
 #include "protos.h"
 
-/* Routines locales */
-
-enum hotkey_id_commnand {
-	HK_NOT_FOUND = 0,
-	HK_RESET_LOCAL_COORD,
-	HK_HELP,
-	HK_ZOOM_IN,
-	HK_ZOOM_OUT,
-	HK_ZOOM_REDRAW,
-	HK_ZOOM_CENTER,
-	HK_DELETE,
-	HK_BACK_SPACE,
-	HK_ROTATE_FOOTPRINT,
-	HK_MOVE_FOOTPRINT,
-	HK_DRAG_FOOTPRINT,
-	HK_FLIP_FOOTPRINT,
-	HK_LOCK_UNLOCK_FOOTPRINT,
-	HK_ADD_VIA, HK_END_TRACK,
-	HK_SAVE_BOARD, HK_LOAD_BOARD,
-	HK_SWITCH_UNITS, HK_SWITCH_TRACK_DISPLAY_MODE,
-	HK_FIND_ITEM
-};
-
+/* How to add a new hotkey:
+ *  add a new id in the enum hotkey_id_commnand like MY_NEW_ID_FUNCTION.
+ *  add a new Ki_HotkeyInfo entry like:
+ *  static Ki_HotkeyInfo HkMyNewEntry(wxT("Command Label"), MY_NEW_ID_FUNCTION, default key value);
+ *      "Command Label" is the name used in hotkey list display, and the identifier in the hotkey list file
+ *      MY_NEW_ID_FUNCTION is an equivalent id function used in the switch in OnHotKey() function.
+ *      default key value is the default hotkey for this command. Can be overrided by the user hotkey list file
+ *  add the HkMyNewEntry pointer in the s_board_edit_Hotkey_List list ( or/and the s_module_edit_Hotkey_List list)
+ *  Add the new code in the switch in OnHotKey() function.
+ *  when the variable PopupOn is true, an item is currently edited.
+ *  This can be usefull if the new function cannot be executed while an item is currently being edited
+ *  ( For example, one cannot start a new wire when a component is moving.)
+ *
+ *  Note: If an hotkey is a special key be sure the corresponding wxWidget keycode (WXK_XXXX)
+ *  is handled in the hotkey_name_descr s_Hotkey_Name_List list (see hotkeys_basic.cpp)
+ *  and see this list for some ascii keys (space ...)
+ */
 
 /* local variables */
 /* Hotkey list: */
-static Ki_HotkeyInfo HkSavefile(wxT("Save board"), HK_SAVE_BOARD, 'S' + GR_KB_CTRL);
-static Ki_HotkeyInfo HkLoadfile(wxT("Load board"), HK_LOAD_BOARD, 'L' + GR_KB_CTRL);
-static Ki_HotkeyInfo HkFindItem(wxT("Find Item"), HK_FIND_ITEM, 'F' + GR_KB_CTRL);
-static Ki_HotkeyInfo HkBackspace(wxT("Delete track segment"), HK_BACK_SPACE, WXK_BACK);
-static Ki_HotkeyInfo HkAddVia(wxT("Add Via"), HK_ADD_VIA, 'V');
-static Ki_HotkeyInfo HkEndTrack(wxT("End Track"), HK_END_TRACK, WXK_END);
-static Ki_HotkeyInfo HkFlipFootprint(wxT("Flip Footprint"), HK_FLIP_FOOTPRINT, 'F');
-static Ki_HotkeyInfo HkRotateFootprint(wxT("Rotate Footprint"), HK_ROTATE_FOOTPRINT, 'R');
-static Ki_HotkeyInfo HkMoveFootprint(wxT("Move Footprint"), HK_MOVE_FOOTPRINT, 'M');
-static Ki_HotkeyInfo HkDragFootprint(wxT("Drag Footprint"), HK_DRAG_FOOTPRINT, 'G');
-static Ki_HotkeyInfo HkLock_Unlock_Footprint(wxT("Lock/Unlock Footprint"), HK_LOCK_UNLOCK_FOOTPRINT, 'L');
-static Ki_HotkeyInfo HkDelete(wxT("Delete Track or Footprint"), HK_DELETE, WXK_DELETE);
-static Ki_HotkeyInfo HkResetLocalCoord(wxT("Reset local coord."), HK_RESET_LOCAL_COORD, ' ');
-static Ki_HotkeyInfo HkZoomCenter(wxT("Zoom Center"), HK_ZOOM_CENTER, WXK_F4);
-static Ki_HotkeyInfo HkZoomRedraw(wxT("Zoom Redraw"), HK_ZOOM_REDRAW, WXK_F3);
-static Ki_HotkeyInfo HkZoomOut(wxT("Zoom Out"), HK_ZOOM_OUT, WXK_F2);
-static Ki_HotkeyInfo HkZoomIn(wxT("Zoom In"), HK_ZOOM_IN, WXK_F1);
-static Ki_HotkeyInfo HkHelp(wxT("Help: this message"), HK_HELP, '?');
-static Ki_HotkeyInfo HkSwitchUnits(wxT("Switch Units"), HK_SWITCH_UNITS, 'U');
-static Ki_HotkeyInfo HkTrackDisplayMode(wxT("Track Display Mode"), HK_SWITCH_TRACK_DISPLAY_MODE, 'F');
+static Ki_HotkeyInfo    HkSwitch2CopperLayer( wxT(
+                                                  "Switch to Copper layer" ),
+                                              HK_SWITCH_LAYER_TO_COPPER, '-' );
+static Ki_HotkeyInfo    HkSwitch2ComponentLayer( wxT(
+                                                     "Switch to Component layer" ),
+                                                 HK_SWITCH_LAYER_TO_COMPONENT, '+' );
+static Ki_HotkeyInfo    HkSwitch2InnerLayer1( wxT(
+                                                  "Switch to Inner layer 1" ),
+                                              HK_SWITCH_LAYER_TO_INNER1, WXK_F5 );
+static Ki_HotkeyInfo    HkSwitch2InnerLayer2( wxT(
+                                                  "Switch to Inner layer 2" ),
+                                              HK_SWITCH_LAYER_TO_INNER2, WXK_F6 );
+static Ki_HotkeyInfo    HkSwitch2InnerLayer3( wxT(
+                                                  "Switch to Inner layer 3" ),
+                                              HK_SWITCH_LAYER_TO_INNER3, WXK_F7 );
+static Ki_HotkeyInfo    HkSwitch2InnerLayer4( wxT(
+                                                  "Switch to Inner layer 4" ),
+                                              HK_SWITCH_LAYER_TO_INNER4, WXK_F8 );
+static Ki_HotkeyInfo    HkSwitch2InnerLayer5( wxT(
+                                                  "Switch to Inner layer 5" ),
+                                              HK_SWITCH_LAYER_TO_INNER5, WXK_F9 );
+static Ki_HotkeyInfo    HkSwitch2InnerLayer6( wxT(
+                                                  "Switch to Inner layer 6" ),
+                                              HK_SWITCH_LAYER_TO_INNER6, WXK_F10 );
+
+static Ki_HotkeyInfo    HkSavefile( wxT( "Save board" ), HK_SAVE_BOARD, 'S' + GR_KB_CTRL );
+static Ki_HotkeyInfo    HkLoadfile( wxT( "Load board" ), HK_LOAD_BOARD, 'L' + GR_KB_CTRL );
+static Ki_HotkeyInfo    HkFindItem( wxT( "Find Item" ), HK_FIND_ITEM, 'F' + GR_KB_CTRL );
+static Ki_HotkeyInfo    HkBackspace( wxT( "Delete track segment" ), HK_BACK_SPACE, WXK_BACK );
+static Ki_HotkeyInfo    HkAddVia( wxT( "Add Via" ), HK_ADD_VIA, 'V' );
+static Ki_HotkeyInfo    HkEndTrack( wxT( "End Track" ), HK_END_TRACK, WXK_END );
+static Ki_HotkeyInfo    HkFlipFootprint( wxT( "Flip Footprint" ), HK_FLIP_FOOTPRINT, 'F' );
+static Ki_HotkeyInfo    HkRotateFootprint( wxT( "Rotate Footprint" ), HK_ROTATE_FOOTPRINT, 'R' );
+static Ki_HotkeyInfo    HkMoveFootprint( wxT( "Move Footprint" ), HK_MOVE_FOOTPRINT, 'M' );
+static Ki_HotkeyInfo    HkDragFootprint( wxT( "Drag Footprint" ), HK_DRAG_FOOTPRINT, 'G' );
+static Ki_HotkeyInfo    HkLock_Unlock_Footprint( wxT(
+                                                     "Lock/Unlock Footprint" ),
+                                                 HK_LOCK_UNLOCK_FOOTPRINT, 'L' );
+static Ki_HotkeyInfo    HkDelete( wxT( "Delete Track or Footprint" ), HK_DELETE, WXK_DELETE );
+static Ki_HotkeyInfo    HkResetLocalCoord( wxT( "Reset local coord." ), HK_RESET_LOCAL_COORD, ' ' );
+static Ki_HotkeyInfo    HkZoomCenter( wxT( "Zoom Center" ), HK_ZOOM_CENTER, WXK_F4 );
+static Ki_HotkeyInfo    HkZoomRedraw( wxT( "Zoom Redraw" ), HK_ZOOM_REDRAW, WXK_F3 );
+static Ki_HotkeyInfo    HkZoomOut( wxT( "Zoom Out" ), HK_ZOOM_OUT, WXK_F2 );
+static Ki_HotkeyInfo    HkZoomIn( wxT( "Zoom In" ), HK_ZOOM_IN, WXK_F1 );
+static Ki_HotkeyInfo    HkHelp( wxT( "Help: this message" ), HK_HELP, '?' );
+static Ki_HotkeyInfo    HkSwitchUnits( wxT( "Switch Units" ), HK_SWITCH_UNITS, 'U' );
+static Ki_HotkeyInfo    HkTrackDisplayMode( wxT(
+                                                "Track Display Mode" ),
+                                            HK_SWITCH_TRACK_DISPLAY_MODE, 'F' );
 
 
 // List of hotkey descriptors for pcbnew
-Ki_HotkeyInfo *s_board_edit_Hotkey_List[] = {
-	&HkHelp,
-	&HkZoomIn, &HkZoomOut, &HkZoomRedraw, &HkZoomCenter,
-	&HkResetLocalCoord, &HkSwitchUnits, &HkTrackDisplayMode,
-	&HkDelete, &HkBackspace,
-	&HkAddVia, &HkEndTrack,
-	&HkMoveFootprint, &HkFlipFootprint,
-	&HkRotateFootprint, &HkDragFootprint,
-	&HkLock_Unlock_Footprint,
-	&HkSavefile, &HkLoadfile, &HkFindItem,
-	NULL
+Ki_HotkeyInfo* s_board_edit_Hotkey_List[] = {
+    &HkHelp,
+    &HkZoomIn,                &HkZoomOut,       &HkZoomRedraw,       &HkZoomCenter,
+    &HkResetLocalCoord,       &HkSwitchUnits,   &HkTrackDisplayMode,
+    &HkDelete,                &HkBackspace,
+    &HkAddVia,                &HkEndTrack,
+    &HkMoveFootprint,         &HkFlipFootprint,
+    &HkRotateFootprint,       &HkDragFootprint,
+    &HkLock_Unlock_Footprint,
+    &HkSavefile,              &HkLoadfile,      &HkFindItem,
+    &HkSwitch2CopperLayer,
+    &HkSwitch2InnerLayer1,
+    &HkSwitch2InnerLayer2,
+    &HkSwitch2InnerLayer3,
+    &HkSwitch2InnerLayer4,
+    &HkSwitch2InnerLayer5,
+    &HkSwitch2InnerLayer6,
+    &HkSwitch2ComponentLayer,
+    NULL
 };
 
-Ki_HotkeyInfo *s_module_edit_Hotkey_List[] = {
-	&HkHelp,
-	&HkZoomIn, &HkZoomOut, &HkZoomRedraw, &HkZoomCenter,
-	&HkSwitchUnits, &HkResetLocalCoord,
-	&HkDelete, &HkBackspace,
-	NULL
+// List of hotkey descriptors for the module editor
+Ki_HotkeyInfo* s_module_edit_Hotkey_List[] = {
+    &HkHelp,
+    &HkZoomIn,                &HkZoomOut,         &HkZoomRedraw, &HkZoomCenter,
+    &HkSwitchUnits,           &HkResetLocalCoord,
+    &HkDelete,                &HkBackspace,
+    NULL
 };
 
 
@@ -88,16 +120,19 @@ Ki_HotkeyInfo *s_module_edit_Hotkey_List[] = {
 void WinEDA_PcbFrame::OnHotKey( wxDC* DC, int hotkey,
                                 EDA_BaseStruct* DrawStruct )
 /***********************************************************/
+
 /* Hot keys. Some commands are relatives to the item under the mouse cursor
-	Commands are case insensitive
-	Zoom commands are not managed here
-*/
+ *  Commands are case insensitive
+ *  Zoom commands are not managed here
+ *  @param DC = current device context
+ *  @param hotkey = hothey code (ascii or wxWidget code for special keys)
+ *  @param DrawStruct = NULL or pointer on a EDA_BaseStruct under the mouse cursor
+ */
 
 {
-	
     bool PopupOn = GetScreen()->GetCurItem()
                    && GetScreen()->GetCurItem()->m_Flags;
-                   
+
     bool ItemFree = (GetScreen()->GetCurItem() == 0 )
                     || (GetScreen()->GetCurItem()->m_Flags == 0);
 
@@ -106,214 +141,290 @@ void WinEDA_PcbFrame::OnHotKey( wxDC* DC, int hotkey,
 
     MODULE* module = NULL;
 
-	// Remap the control key Ctrl A (0x01) to GR_KB_CTRL + 'A' (easier to handle...)
-	if ( (hotkey & GR_KB_CTRL) != 0 ) hotkey += 'A' - 1;
-	/* Convert lower to upper case (the usual toupper function has problem with non ascii codes like function keys */
-	if( (hotkey >= 'a') && (hotkey <= 'z') ) hotkey += 'A' - 'a';
-	
-	int CommandCode = GetCommandCodeFromHotkey(hotkey, s_board_edit_Hotkey_List);
+    // Remap the control key Ctrl A (0x01) to GR_KB_CTRL + 'A' (easier to handle...)
+    if( (hotkey & GR_KB_CTRL) != 0 )
+        hotkey += 'A' - 1;
+    /* Convert lower to upper case (the usual toupper function has problem with non ascii codes like function keys */
+    if( (hotkey >= 'a') && (hotkey <= 'z') )
+        hotkey += 'A' - 'a';
+
+    int CommandCode = GetCommandCodeFromHotkey( hotkey, s_board_edit_Hotkey_List );
+    int ll;
+
     switch( CommandCode )
     {
-		default:
-		case HK_NOT_FOUND:
-			return;
-			break;
-		
-		case HK_HELP:	// Display Current hotkey list
-			DisplayHotkeyList(this, s_board_edit_Hotkey_List);
-			break;
+    default:
+    case HK_NOT_FOUND:
+        return;
+        break;
 
-		case HK_ZOOM_IN:
-		case HK_ZOOM_OUT:
-		case HK_ZOOM_REDRAW:
-		case HK_ZOOM_CENTER:
-			break;
+    case HK_SWITCH_LAYER_TO_PREVIOUS:
+        ll = GetScreen()->m_Active_Layer;
+        if( ll > CMP_N )
+            break;
+        if( ll <= CUIVRE_N )
+            break;
+        if( m_Pcb->m_BoardSettings->m_CopperLayerCount <= 1 )  // Single layer
+            ll = CUIVRE_N;
+        if( ll == CMP_N )
+            ll = MAX( CUIVRE_N, m_Pcb->m_BoardSettings->m_CopperLayerCount - 2 );
+        else if( ll > CUIVRE_N )
+            ll--;
+        SwitchLayer( DC, ll );
+        break;
 
-		case HK_RESET_LOCAL_COORD:     /*Reset the relative coord  */
-			GetScreen()->m_O_Curseur = GetScreen()->m_Curseur;
-			break;
+    case HK_SWITCH_LAYER_TO_NEXT:
+        ll = GetScreen()->m_Active_Layer;
+        if( ll >= CMP_N )
+            break;
+        ll++;
+        if( ll >= m_Pcb->m_BoardSettings->m_CopperLayerCount - 1 )
+            ll = CMP_N;
+        if( m_Pcb->m_BoardSettings->m_CopperLayerCount <= 1 )  // Single layer
+            ll = CUIVRE_N;
+        SwitchLayer( DC, ll );
+        break;
+
+    case HK_SWITCH_LAYER_TO_COMPONENT:
+        SwitchLayer( DC, CMP_N );
+        break;
+
+    case HK_SWITCH_LAYER_TO_COPPER:
+        SwitchLayer( DC, CUIVRE_N );
+        break;
+
+    case HK_SWITCH_LAYER_TO_INNER1:
+        SwitchLayer( DC, LAYER_N_2 );
+        break;
+
+    case HK_SWITCH_LAYER_TO_INNER2:
+        SwitchLayer( DC, LAYER_N_3 );
+        break;
+
+    case HK_SWITCH_LAYER_TO_INNER3:
+        SwitchLayer( DC, LAYER_N_4 );
+        break;
+
+    case HK_SWITCH_LAYER_TO_INNER4:
+        SwitchLayer( DC, LAYER_N_5 );
+        break;
+
+    case HK_SWITCH_LAYER_TO_INNER5:
+        SwitchLayer( DC, LAYER_N_6 );
+        break;
+
+    case HK_SWITCH_LAYER_TO_INNER6:
+        SwitchLayer( DC, LAYER_N_7 );
+        break;
+
+    case HK_HELP:       // Display Current hotkey list
+        DisplayHotkeyList( this, s_board_edit_Hotkey_List );
+        break;
+
+    case HK_ZOOM_IN:
+        OnZoom( ID_ZOOM_PLUS_KEY );
+        break;
+
+    case HK_ZOOM_OUT:
+        OnZoom( ID_ZOOM_MOINS_KEY );
+        break;
+
+    case HK_ZOOM_REDRAW:
+        OnZoom( ID_ZOOM_REDRAW_KEY );
+        break;
+
+    case HK_ZOOM_CENTER:
+        OnZoom( ID_ZOOM_CENTER_KEY );
+        break;
 
 
-		case HK_SWITCH_UNITS:
-			g_UnitMetric = (g_UnitMetric == INCHES ) ? MILLIMETRE : INCHES;
-			break;
+    case HK_RESET_LOCAL_COORD:         /*Reset the relative coord  */
+        GetScreen()->m_O_Curseur = GetScreen()->m_Curseur;
+        break;
 
-		case HK_SWITCH_TRACK_DISPLAY_MODE:
-			DisplayOpt.DisplayPcbTrackFill ^= 1; DisplayOpt.DisplayPcbTrackFill &= 1;
-			GetScreen()->SetRefreshReq();
-			break;
 
-		case HK_DELETE:
-			OnHotkeyDeleteItem( DC, DrawStruct );
-			break;
+    case HK_SWITCH_UNITS:
+        g_UnitMetric = (g_UnitMetric == INCHES ) ? MILLIMETRE : INCHES;
+        break;
 
-		case HK_BACK_SPACE:
-			if( m_ID_current_state == ID_TRACK_BUTT && GetScreen()->m_Active_Layer <= CMP_N )
-			{
-				bool ItemFree = (GetScreen()->GetCurItem() == NULL )
-								|| (GetScreen()->GetCurItem()->m_Flags == 0);
-				if( ItemFree )
-				{
-					// no track is currently being edited - select a segment and remove it.
-					DrawStruct = PcbGeneralLocateAndDisplay();
+    case HK_SWITCH_TRACK_DISPLAY_MODE:
+        DisplayOpt.DisplayPcbTrackFill ^= 1; DisplayOpt.DisplayPcbTrackFill &= 1;
+        GetScreen()->SetRefreshReq();
+        break;
 
-					// don't let backspace delete modules!!
-					if( DrawStruct && (DrawStruct->m_StructType == TYPETRACK
-									   || DrawStruct->m_StructType == TYPEVIA) )
-						Delete_Segment( DC, (TRACK*) DrawStruct );
-					GetScreen()->SetModify();
-				}
-				else if( GetScreen()->GetCurItem()->m_StructType == TYPETRACK  )
-				{
-					// then an element is being edited - remove the last segment.
-					GetScreen()->SetCurItem(Delete_Segment( DC, (TRACK*) GetScreen()->GetCurItem() ) );
-					GetScreen()->SetModify();
-				}
-			}
-			break;
+    case HK_DELETE:
+        OnHotkeyDeleteItem( DC, DrawStruct );
+        break;
 
-		case HK_END_TRACK:
-			DrawPanel->MouseToCursorSchema();
-			End_Route( (TRACK*) (GetScreen()->GetCurItem()), DC );
-			break;
+    case HK_BACK_SPACE:
+        if( m_ID_current_state == ID_TRACK_BUTT && GetScreen()->m_Active_Layer <= CMP_N )
+        {
+            bool ItemFree = (GetScreen()->GetCurItem() == NULL )
+                            || (GetScreen()->GetCurItem()->m_Flags == 0);
+            if( ItemFree )
+            {
+                // no track is currently being edited - select a segment and remove it.
+                DrawStruct = PcbGeneralLocateAndDisplay();
 
-		case HK_FIND_ITEM:
-		{
-			wxCommandEvent evt;
-			evt.SetId( ID_FIND_ITEMS );
-			Process_Special_Functions( evt );
-		}
-			break;
+                // don't let backspace delete modules!!
+                if( DrawStruct && (DrawStruct->m_StructType == TYPETRACK
+                                   || DrawStruct->m_StructType == TYPEVIA) )
+                    Delete_Segment( DC, (TRACK*) DrawStruct );
+                GetScreen()->SetModify();
+            }
+            else if( GetScreen()->GetCurItem()->m_StructType == TYPETRACK  )
+            {
+                // then an element is being edited - remove the last segment.
+                GetScreen()->SetCurItem( Delete_Segment( DC, (TRACK*) GetScreen()->GetCurItem() ) );
+                GetScreen()->SetModify();
+            }
+        }
+        break;
 
-		case HK_LOAD_BOARD:
-		{
-			// try not to duplicate save, load code etc.
-			wxCommandEvent evt;
-			evt.SetId( ID_LOAD_FILE );
-			Files_io( evt );
-		}
-			break;
+    case HK_END_TRACK:
+        DrawPanel->MouseToCursorSchema();
+        End_Route( (TRACK*) ( GetScreen()->GetCurItem() ), DC );
+        break;
 
-		case HK_SAVE_BOARD:
-		{
-			// try not to duplicate save, load code etc.
-			wxCommandEvent evt;
-			evt.SetId( ID_SAVE_BOARD );
-			Files_io( evt );
-		}
-			break;
+    case HK_FIND_ITEM:
+    {
+        wxCommandEvent evt;
+        evt.SetId( ID_FIND_ITEMS );
+        Process_Special_Functions( evt );
+    }
+        break;
 
-		case HK_ADD_VIA:      // Switch to alternate layer and Place a via if a track is in progress
-			if( m_ID_current_state != ID_TRACK_BUTT )
-				return;
-			if( ItemFree )
-			{
-				Other_Layer_Route( NULL, DC );
-				break;
-			}
-			if( GetScreen()->GetCurItem()->m_StructType != TYPETRACK )
-				return;
-			if( (GetScreen()->GetCurItem()->m_Flags & IS_NEW) == 0 )
-				return;
-			Other_Layer_Route( (TRACK*) GetScreen()->GetCurItem(), DC );
-			if( DisplayOpt.ContrastModeDisplay )
-				GetScreen()->SetRefreshReq();
-			break;
+    case HK_LOAD_BOARD:
+    {
+        // try not to duplicate save, load code etc.
+        wxCommandEvent evt;
+        evt.SetId( ID_LOAD_FILE );
+        Files_io( evt );
+    }
+        break;
 
-			// Footprint edition:
-		case HK_LOCK_UNLOCK_FOOTPRINT:      // toggle module "MODULE_is_LOCKED" status:
-			// get any module, locked or not locked and toggle its locked status
-			if( ItemFree )
-				module = Locate_Prefered_Module( m_Pcb, CURSEUR_OFF_GRILLE | VISIBLE_ONLY );
-			else if( GetScreen()->GetCurItem()->m_StructType == TYPEMODULE )
-				module = (MODULE*) GetScreen()->GetCurItem();
-			if( module )
-			{
-				GetScreen()->SetCurItem(module);
-				module->SetLocked( !module->IsLocked() );
-				module->Display_Infos( this );
-			}
-			break;
+    case HK_SAVE_BOARD:
+    {
+        // try not to duplicate save, load code etc.
+        wxCommandEvent evt;
+        evt.SetId( ID_SAVE_BOARD );
+        Files_io( evt );
+    }
+        break;
 
-		case HK_DRAG_FOOTPRINT:       // Start move (and drag) module
-		case HK_MOVE_FOOTPRINT:       // Start move module
-			if( PopupOn )
-				break;
+    case HK_ADD_VIA:          // Switch to alternate layer and Place a via if a track is in progress
+        if( m_ID_current_state != ID_TRACK_BUTT )
+            return;
+        if( ItemFree )
+        {
+            Other_Layer_Route( NULL, DC );
+            break;
+        }
+        if( GetScreen()->GetCurItem()->m_StructType != TYPETRACK )
+            return;
+        if( (GetScreen()->GetCurItem()->m_Flags & IS_NEW) == 0 )
+            return;
+        Other_Layer_Route( (TRACK*) GetScreen()->GetCurItem(), DC );
+        if( DisplayOpt.ContrastModeDisplay )
+            GetScreen()->SetRefreshReq();
+        break;
 
-		case HK_ROTATE_FOOTPRINT:       // Rotation
-		case HK_FLIP_FOOTPRINT:       // move to other side
-			if( ItemFree )
-			{
-				module = Locate_Prefered_Module( m_Pcb,
-												 CURSEUR_OFF_GRILLE | IGNORE_LOCKED | VISIBLE_ONLY
-	#if defined (USE_MATCH_LAYER)
-												 | MATCH_LAYER
-	#endif
-						 );
-				if( module == NULL )      // no footprint found
-				{
-					module = Locate_Prefered_Module( m_Pcb, CURSEUR_OFF_GRILLE );
-					if( module )      
-					{
-						// a footprint is found, but locked or on an other layer
-						if( module->IsLocked() )
-						{
-							wxString msg;
-							
-							msg.Printf( _("Footprint %s found, but locked"),
-								module->m_Reference->m_Text.GetData() );
-							
-							DisplayInfo( this, msg );
-						}
-						module = NULL;
-					}
-				}
-			}
-			else if( GetScreen()->GetCurItem()->m_StructType == TYPEMODULE )
-			{
-				module = (MODULE*) GetScreen()->GetCurItem();
+        // Footprint edition:
+    case HK_LOCK_UNLOCK_FOOTPRINT:          // toggle module "MODULE_is_LOCKED" status:
+        // get any module, locked or not locked and toggle its locked status
+        if( ItemFree )
+            module = Locate_Prefered_Module( m_Pcb, CURSEUR_OFF_GRILLE | VISIBLE_ONLY );
+        else if( GetScreen()->GetCurItem()->m_StructType == TYPEMODULE )
+            module = (MODULE*) GetScreen()->GetCurItem();
+        if( module )
+        {
+            GetScreen()->SetCurItem( module );
+            module->SetLocked( !module->IsLocked() );
+            module->Display_Infos( this );
+        }
+        break;
 
-				// @todo: might need to add a layer check in if() below
-				if( (GetScreen()->GetCurItem()->m_Flags == 0)
-				   && module->IsLocked() )
-					module = NULL; // do not move, rotate ... it.
-			}
-			if( module == NULL )
-				break;
+    case HK_DRAG_FOOTPRINT:             // Start move (and drag) module
+    case HK_MOVE_FOOTPRINT:             // Start move module
+        if( PopupOn )
+            break;
 
-			/*  I'd like to make sending to EESCHEMA edge triggered, but the
-				simple mouse click on a module when the arrow icon is in play
-				does not set GetCurItem() at this time, nor does a mouse click
-				when the local ratsnest icon is in play set GetCurItem(), and these
-				actions also call SendMessageToEESCHEMA().
-			if( GetScreen()->GetCurItem() != module )
-				*/
-			{
-				// Send the module via socket to EESCHEMA's search facility.
-				SendMessageToEESCHEMA( module );
-				
-				GetScreen()->SetCurItem(module);
-			}
+    case HK_ROTATE_FOOTPRINT:           // Rotation
+    case HK_FLIP_FOOTPRINT:             // move to other side
+        if( ItemFree )
+        {
+            module = Locate_Prefered_Module( m_Pcb,
+                                             CURSEUR_OFF_GRILLE | IGNORE_LOCKED | VISIBLE_ONLY
+    #if defined (USE_MATCH_LAYER)
+                                             | MATCH_LAYER
+    #endif
+                                             );
+            if( module == NULL )          // no footprint found
+            {
+                module = Locate_Prefered_Module( m_Pcb, CURSEUR_OFF_GRILLE );
+                if( module )
+                {
+                    // a footprint is found, but locked or on an other layer
+                    if( module->IsLocked() )
+                    {
+                        wxString msg;
 
-			switch( CommandCode )
-			{
-				case HK_ROTATE_FOOTPRINT:          // Rotation
-					Rotate_Module( DC, module, 900, TRUE );
-					break;
+                        msg.Printf( _( "Footprint %s found, but locked" ),
+                                   module->m_Reference->m_Text.GetData() );
 
-				case HK_FLIP_FOOTPRINT:          // move to other side
-					Change_Side_Module( module, DC );
-					break;
+                        DisplayInfo( this, msg );
+                    }
+                    module = NULL;
+                }
+            }
+        }
+        else if( GetScreen()->GetCurItem()->m_StructType == TYPEMODULE )
+        {
+            module = (MODULE*) GetScreen()->GetCurItem();
 
-				case HK_DRAG_FOOTPRINT:          // Start move (and drag) module
-					g_Drag_Pistes_On = TRUE;
-					// fall through
-				case HK_MOVE_FOOTPRINT:          // Start move module
-					StartMove_Module( module, DC );
-					break;
-			}
-			module->Display_Infos( this );
-			break;
+            // @todo: might need to add a layer check in if() below
+            if( (GetScreen()->GetCurItem()->m_Flags == 0)
+               && module->IsLocked() )
+                module = NULL; // do not move, rotate ... it.
+        }
+        if( module == NULL )
+            break;
+
+        /*  I'd like to make sending to EESCHEMA edge triggered, but the
+         *  simple mouse click on a module when the arrow icon is in play
+         *  does not set GetCurItem() at this time, nor does a mouse click
+         *  when the local ratsnest icon is in play set GetCurItem(), and these
+         *  actions also call SendMessageToEESCHEMA().
+         *  if( GetScreen()->GetCurItem() != module )
+         */
+        {
+            // Send the module via socket to EESCHEMA's search facility.
+            SendMessageToEESCHEMA( module );
+
+            GetScreen()->SetCurItem( module );
+        }
+
+        switch( CommandCode )
+        {
+        case HK_ROTATE_FOOTPRINT:                  // Rotation
+            Rotate_Module( DC, module, 900, TRUE );
+            break;
+
+        case HK_FLIP_FOOTPRINT:                  // move to other side
+            Change_Side_Module( module, DC );
+            break;
+
+        case HK_DRAG_FOOTPRINT:                  // Start move (and drag) module
+            g_Drag_Pistes_On = TRUE;
+
+            // fall through
+        case HK_MOVE_FOOTPRINT:                  // Start move module
+            StartMove_Module( module, DC );
+            break;
+        }
+
+        module->Display_Infos( this );
+        break;
     }
 }
 
@@ -331,35 +442,47 @@ void WinEDA_ModuleEditFrame::OnHotKey( wxDC* DC, int hotkey,
     if( hotkey == 0 )
         return;
 
-	/* Convert lower to upper case (the usual toupper function has problem with non ascii codes like function keys */
-	if( (hotkey >= 'a') && (hotkey <= 'z') ) hotkey += 'A' - 'a';
+    /* Convert lower to upper case (the usual toupper function has problem with non ascii codes like function keys */
+    if( (hotkey >= 'a') && (hotkey <= 'z') )
+        hotkey += 'A' - 'a';
+
+    int CommandCode = GetCommandCodeFromHotkey( hotkey, s_module_edit_Hotkey_List );
 
-	int CommandCode = GetCommandCodeFromHotkey(hotkey, s_module_edit_Hotkey_List);
     switch( CommandCode )
     {
-		default:
-		case HK_NOT_FOUND:
-			return;
-			break;
-		
-		case HK_HELP:	// Display Current hotkey list
-			DisplayHotkeyList(this, s_module_edit_Hotkey_List);
-			break;
+    default:
+    case HK_NOT_FOUND:
+        return;
+        break;
 
-		case HK_RESET_LOCAL_COORD:     /*Reset the relative coord  */
-			GetScreen()->m_O_Curseur = GetScreen()->m_Curseur;
-			break;
+    case HK_HELP:       // Display Current hotkey list
+        DisplayHotkeyList( this, s_module_edit_Hotkey_List );
+        break;
+
+    case HK_RESET_LOCAL_COORD:         /*Reset the relative coord  */
+        GetScreen()->m_O_Curseur = GetScreen()->m_Curseur;
+        break;
 
 
-		case HK_SWITCH_UNITS:
-			g_UnitMetric = (g_UnitMetric == INCHES ) ? MILLIMETRE : INCHES;
-			break;
+    case HK_SWITCH_UNITS:
+        g_UnitMetric = (g_UnitMetric == INCHES ) ? MILLIMETRE : INCHES;
+        break;
 
-		case HK_ZOOM_IN:
-		case HK_ZOOM_OUT:
-		case HK_ZOOM_REDRAW:
-		case HK_ZOOM_CENTER:
-			break;
+    case HK_ZOOM_IN:
+        OnZoom( ID_ZOOM_PLUS_KEY );
+        break;
+
+    case HK_ZOOM_OUT:
+        OnZoom( ID_ZOOM_MOINS_KEY );
+        break;
+
+    case HK_ZOOM_REDRAW:
+        OnZoom( ID_ZOOM_REDRAW_KEY );
+        break;
+
+    case HK_ZOOM_CENTER:
+        OnZoom( ID_ZOOM_CENTER_KEY );
+        break;
     }
 }
 
@@ -419,6 +542,6 @@ bool WinEDA_PcbFrame::OnHotkeyDeleteItem( wxDC* DC, EDA_BaseStruct* DrawStruct )
     }
 
     GetScreen()->SetModify();
-    GetScreen()->SetCurItem(NULL);
+    GetScreen()->SetCurItem( NULL );
     return TRUE;
 }
diff --git a/pcbnew/hotkeys.h b/pcbnew/hotkeys.h
new file mode 100644
index 0000000000..973617affa
--- /dev/null
+++ b/pcbnew/hotkeys.h
@@ -0,0 +1,45 @@
+/***************/
+/* hotkeys.h */
+/***************/
+#ifndef KOTKEYS_H
+#define KOTKEYS_H
+
+#include "hotkeys_basic.h"
+
+enum hotkey_id_commnand {
+    HK_NOT_FOUND = 0,
+    HK_RESET_LOCAL_COORD,
+    HK_HELP,
+    HK_ZOOM_IN,
+    HK_ZOOM_OUT,
+    HK_ZOOM_REDRAW,
+    HK_ZOOM_CENTER,
+    HK_DELETE,
+    HK_BACK_SPACE,
+    HK_ROTATE_FOOTPRINT,
+    HK_MOVE_FOOTPRINT,
+    HK_DRAG_FOOTPRINT,
+    HK_FLIP_FOOTPRINT,
+    HK_LOCK_UNLOCK_FOOTPRINT,
+    HK_ADD_VIA, HK_END_TRACK,
+    HK_SAVE_BOARD, HK_LOAD_BOARD,
+    HK_SWITCH_UNITS, HK_SWITCH_TRACK_DISPLAY_MODE,
+    HK_FIND_ITEM,
+    HK_SWITCH_LAYER_TO_COPPER,
+    HK_SWITCH_LAYER_TO_COMPONENT,
+    HK_SWITCH_LAYER_TO_NEXT,
+    HK_SWITCH_LAYER_TO_PREVIOUS,
+    HK_SWITCH_LAYER_TO_INNER1,
+    HK_SWITCH_LAYER_TO_INNER2,
+    HK_SWITCH_LAYER_TO_INNER3,
+    HK_SWITCH_LAYER_TO_INNER4,
+    HK_SWITCH_LAYER_TO_INNER5,
+    HK_SWITCH_LAYER_TO_INNER6
+};
+
+// List of hotkey descriptors for pcbnew
+extern Ki_HotkeyInfo* s_board_edit_Hotkey_List[];
+// List of hotkey descriptors for the module editor
+extern Ki_HotkeyInfo* s_module_edit_Hotkey_List[];
+
+#endif		// KOTKEYS_H
diff --git a/pcbnew/menubarpcb.cpp b/pcbnew/menubarpcb.cpp
index a65bbc9aeb..75863007a0 100644
--- a/pcbnew/menubarpcb.cpp
+++ b/pcbnew/menubarpcb.cpp
@@ -183,11 +183,11 @@ wxMenuBar * menuBar = GetMenuBar();
 		configmenu->Append(item);
 
 		configmenu->AppendSeparator();
-		item = new wxMenuItem(configmenu, ID_PREFERENCES_CREATE_CONFIG_HOTKEYS, _("Create Eeschema &Hotkey config file"),
+		item = new wxMenuItem(configmenu, ID_PREFERENCES_CREATE_CONFIG_HOTKEYS, _("Create Pcbnew &Hotkey config file"),
 			_("Create or Recreate the hotkey config file from current hotkey list") );
 	    item->SetBitmap(save_setup_xpm);
 		configmenu->Append(item);
-		item = new wxMenuItem(configmenu, ID_PREFERENCES_READ_CONFIG_HOTKEYS, _("Reread &Eeschema Hotkey config file"),
+		item = new wxMenuItem(configmenu, ID_PREFERENCES_READ_CONFIG_HOTKEYS, _("Reread &Pcbnew Hotkey config file"),
 			_("Reread the hotkey config file") );
 	    item->SetBitmap( reload_xpm);
 		configmenu->Append(item);
diff --git a/pcbnew/pcbnew.cpp b/pcbnew/pcbnew.cpp
index c924e596cd..2a200a03fb 100644
--- a/pcbnew/pcbnew.cpp
+++ b/pcbnew/pcbnew.cpp
@@ -58,6 +58,10 @@ bool WinEDA_App::OnInit( void )
 
     Read_Config( FFileName );
     g_DrawBgColor = BLACK;
+    Read_Hotkey_Config( m_PcbFrame, false );  /* Must be called before creating the main frame
+                                               *  in order to display the real hotkeys
+                                               *  in menus or tool tips */
+
 
     /* allocation de la memoire pour le fichier et autres buffers: */
     /* On reserve BUFMEMSIZE octets de ram pour calcul */
@@ -79,7 +83,6 @@ bool WinEDA_App::OnInit( void )
 
     SetTopWindow( m_PcbFrame );
     m_PcbFrame->Show( TRUE );
-	Read_Hotkey_Config(m_PcbFrame, false);
 
     if( CreateServer( m_PcbFrame, KICAD_PCB_PORT_SERVICE_NUMBER ) )
     {
diff --git a/pcbnew/tool_modedit.cpp b/pcbnew/tool_modedit.cpp
index 14cdcb24f4..d3b87753e8 100644
--- a/pcbnew/tool_modedit.cpp
+++ b/pcbnew/tool_modedit.cpp
@@ -1,6 +1,6 @@
-	/*****************************************************************/
-	/*	too_modeit.cpp: construction du menu de l'editeur de modules */
-	/*****************************************************************/
+/*****************************************************************/
+/*	too_modeit.cpp: construction du menu de l'editeur de modules */
+/*****************************************************************/
 
 #include "fctsys.h"
 #include "gr_basic.h"
@@ -16,6 +16,8 @@
 
 #include "id.h"
 
+#include "hotkeys.h"
+
 #include "Module_Check.xpm"
 #include "Import_Module.xpm"
 #include "Export_Module.xpm"
@@ -32,277 +34,284 @@
 #endif
 
 /***************************************************/
-void WinEDA_ModuleEditFrame::ReCreateHToolbar(void)
+void WinEDA_ModuleEditFrame::ReCreateHToolbar( void )
 /***************************************************/
+/* Create the main horizontal toolbar for the footprint editor */
 {
-	// Cecreate the toolbar
-	if ( m_HToolBar  != NULL ) return;
+    if( m_HToolBar  != NULL )
+        return;
 
-	m_HToolBar = new WinEDA_Toolbar(TOOLBAR_MAIN, this, ID_H_TOOLBAR, TRUE);
+    wxString msg;
 
-	SetToolBar(m_HToolBar);
+    m_HToolBar = new WinEDA_Toolbar( TOOLBAR_MAIN, this, ID_H_TOOLBAR, TRUE );
 
-	// Set up toolbar
-	m_HToolBar->AddTool(ID_LIBEDIT_SELECT_CURRENT_LIB, wxEmptyString,
-					BITMAP(open_library_xpm),
-					_("Select working library"));
+    SetToolBar( m_HToolBar );
 
-	m_HToolBar->AddTool(ID_MODEDIT_SAVE_LIBMODULE, wxEmptyString, BITMAP(save_library_xpm),
-					_("Save Module in working library"));
+    // Set up toolbar
+    m_HToolBar->AddTool( ID_LIBEDIT_SELECT_CURRENT_LIB, wxEmptyString,
+                        BITMAP( open_library_xpm ),
+                        _( "Select working library" ) );
 
-	m_HToolBar->AddTool(ID_LIBEDIT_CREATE_NEW_LIB_AND_SAVE_CURRENT_PART, wxEmptyString,
-					BITMAP(new_library_xpm),
-					_("Create new library and save current module"));
+    m_HToolBar->AddTool( ID_MODEDIT_SAVE_LIBMODULE, wxEmptyString, BITMAP( save_library_xpm ),
+                        _( "Save Module in working library" ) );
 
-	m_HToolBar->AddSeparator();
-	m_HToolBar->AddTool(ID_LIBEDIT_DELETE_PART,  wxEmptyString,
-					BITMAP(delete_xpm),
-					_("Delete part in current library"));
+    m_HToolBar->AddTool( ID_LIBEDIT_CREATE_NEW_LIB_AND_SAVE_CURRENT_PART, wxEmptyString,
+                        BITMAP( new_library_xpm ),
+                        _( "Create new library and save current module" ) );
 
-	m_HToolBar->AddSeparator();
-	m_HToolBar->AddTool(ID_MODEDIT_NEW_MODULE,  wxEmptyString,
-				BITMAP(new_footprint_xpm),
-				_("New Module"));
+    m_HToolBar->AddSeparator();
+    m_HToolBar->AddTool( ID_LIBEDIT_DELETE_PART, wxEmptyString,
+                        BITMAP( delete_xpm ),
+                        _( "Delete part in current library" ) );
 
-	m_HToolBar->AddTool(ID_MODEDIT_LOAD_MODULE,  wxEmptyString,
-					BITMAP(module_xpm),
-					_("Load module from lib"));
+    m_HToolBar->AddSeparator();
+    m_HToolBar->AddTool( ID_MODEDIT_NEW_MODULE, wxEmptyString,
+                        BITMAP( new_footprint_xpm ),
+                        _( "New Module" ) );
 
-	m_HToolBar->AddSeparator();
-	m_HToolBar->AddTool(ID_MODEDIT_LOAD_MODULE_FROM_BOARD, wxEmptyString,
-					BITMAP(load_module_board_xpm),
-					_("Load module from current board"));
+    m_HToolBar->AddTool( ID_MODEDIT_LOAD_MODULE, wxEmptyString,
+                        BITMAP( module_xpm ),
+                        _( "Load module from lib" ) );
 
-	m_HToolBar->AddTool(ID_MODEDIT_UPDATE_MODULE_IN_BOARD, wxEmptyString,
-					BITMAP(update_module_board_xpm),
-					_("Update module in current board"));
-	
-	m_HToolBar->AddTool(ID_MODEDIT_INSERT_MODULE_IN_BOARD, wxEmptyString,
-						BITMAP(insert_module_board_xpm),
-						_("Insert module into current board"));
+    m_HToolBar->AddSeparator();
+    m_HToolBar->AddTool( ID_MODEDIT_LOAD_MODULE_FROM_BOARD, wxEmptyString,
+                        BITMAP( load_module_board_xpm ),
+                        _( "Load module from current board" ) );
 
-	m_HToolBar->AddSeparator();
-	m_HToolBar->AddTool(ID_LIBEDIT_IMPORT_PART,  wxEmptyString,
-					BITMAP(import_module_xpm),
-					_("import module"));
+    m_HToolBar->AddTool( ID_MODEDIT_UPDATE_MODULE_IN_BOARD, wxEmptyString,
+                        BITMAP( update_module_board_xpm ),
+                        _( "Update module in current board" ) );
 
-	m_HToolBar->AddTool(ID_LIBEDIT_EXPORT_PART, wxEmptyString,
-					BITMAP(export_module_xpm),
-					_("export module"));
+    m_HToolBar->AddTool( ID_MODEDIT_INSERT_MODULE_IN_BOARD, wxEmptyString,
+                        BITMAP( insert_module_board_xpm ),
+                        _( "Insert module into current board" ) );
+
+    m_HToolBar->AddSeparator();
+    m_HToolBar->AddTool( ID_LIBEDIT_IMPORT_PART, wxEmptyString,
+                        BITMAP( import_module_xpm ),
+                        _( "import module" ) );
+
+    m_HToolBar->AddTool( ID_LIBEDIT_EXPORT_PART, wxEmptyString,
+                        BITMAP( export_module_xpm ),
+                        _( "export module" ) );
 
 
-	m_HToolBar->AddSeparator();
-	m_HToolBar->AddTool(ID_MODEDIT_UNDO, wxEmptyString, BITMAP(undo_xpm),
-				_("Undo last edition"));
-	m_HToolBar->AddTool(ID_MODEDIT_REDO, wxEmptyString, BITMAP(redo_xpm),
-				_("Redo the last undo command"));
+    m_HToolBar->AddSeparator();
+    m_HToolBar->AddTool( ID_MODEDIT_UNDO, wxEmptyString, BITMAP( undo_xpm ),
+                        _( "Undo last edition" ) );
+    m_HToolBar->AddTool( ID_MODEDIT_REDO, wxEmptyString, BITMAP( redo_xpm ),
+                        _( "Redo the last undo command" ) );
 
-	m_HToolBar->AddSeparator();
-	m_HToolBar->AddTool(ID_MODEDIT_EDIT_MODULE_PROPERTIES,  wxEmptyString,
-					BITMAP(module_options_xpm),
-					_("Module Properties"));
+    m_HToolBar->AddSeparator();
+    m_HToolBar->AddTool( ID_MODEDIT_EDIT_MODULE_PROPERTIES, wxEmptyString,
+                        BITMAP( module_options_xpm ),
+                        _( "Module Properties" ) );
 
-	m_HToolBar->AddSeparator();
-	m_HToolBar->AddTool(ID_GEN_PRINT,  wxEmptyString, BITMAP(print_button),
-					_("Print Module"));
+    m_HToolBar->AddSeparator();
+    m_HToolBar->AddTool( ID_GEN_PRINT, wxEmptyString, BITMAP( print_button ),
+                        _( "Print Module" ) );
 
-	m_HToolBar->AddSeparator();
-	m_HToolBar->AddTool(ID_ZOOM_PLUS_BUTT,  wxEmptyString, BITMAP(zoom_in_xpm),
-					_("zoom + (F1)"));
+    m_HToolBar->AddSeparator();
+    msg = AddHotkeyName( _( "zoom +" ), s_module_edit_Hotkey_List, HK_ZOOM_IN );
+    m_HToolBar->AddTool( ID_ZOOM_PLUS_BUTT, wxEmptyString, BITMAP( zoom_in_xpm ),
+                         msg );
 
-	m_HToolBar->AddTool(ID_ZOOM_MOINS_BUTT,  wxEmptyString,BITMAP(zoom_out_xpm),
-					_("zoom - (F2)"));
+    msg = AddHotkeyName( _( "zoom -" ), s_module_edit_Hotkey_List, HK_ZOOM_OUT );
+    m_HToolBar->AddTool( ID_ZOOM_MOINS_BUTT, wxEmptyString, BITMAP( zoom_out_xpm ),
+                         msg );
 
-	m_HToolBar->AddTool(ID_ZOOM_REDRAW_BUTT,  wxEmptyString,BITMAP(repaint_xpm),
-					_("redraw (F3)"));
+    msg = AddHotkeyName( _( "redraw" ), s_module_edit_Hotkey_List, HK_ZOOM_REDRAW );
+    m_HToolBar->AddTool( ID_ZOOM_REDRAW_BUTT, wxEmptyString, BITMAP( repaint_xpm ),
+                         msg );
 
-	m_HToolBar->AddTool(ID_ZOOM_PAGE_BUTT,  wxEmptyString,BITMAP(zoom_optimal_xpm),
-					_("auto zoom"));
+    m_HToolBar->AddTool( ID_ZOOM_PAGE_BUTT, wxEmptyString, BITMAP( zoom_optimal_xpm ),
+                        _( "auto zoom" ) );
 
-		m_HToolBar->AddSeparator();
-	m_HToolBar->AddTool(ID_MODEDIT_PAD_SETTINGS, wxEmptyString,
-				BITMAP(options_pad_xpm),
-				_("Pad Settings"));
+    m_HToolBar->AddSeparator();
+    m_HToolBar->AddTool( ID_MODEDIT_PAD_SETTINGS, wxEmptyString,
+                        BITMAP( options_pad_xpm ),
+                        _( "Pad Settings" ) );
 
-	m_HToolBar->AddSeparator();
-	m_HToolBar->AddTool(ID_MODEDIT_CHECK,  wxEmptyString, BITMAP(module_check_xpm),
-					_("Module Check"));
+    m_HToolBar->AddSeparator();
+    m_HToolBar->AddTool( ID_MODEDIT_CHECK, wxEmptyString, BITMAP( module_check_xpm ),
+                        _( "Module Check" ) );
 
-	// after adding the buttons to the toolbar, must call Realize() to reflect
-	// the changes
-	m_HToolBar->Realize();
-	SetToolbars();
+    // after adding the buttons to the toolbar, must call Realize() to reflect
+    // the changes
+    m_HToolBar->Realize();
+    SetToolbars();
 }
 
+
 /********************************************************/
-void WinEDA_ModuleEditFrame::ReCreateVToolbar(void)
+void WinEDA_ModuleEditFrame::ReCreateVToolbar( void )
 /********************************************************/
 {
-	if( m_VToolBar ) return;
+    if( m_VToolBar )
+        return;
 
-	m_VToolBar = new WinEDA_Toolbar(TOOLBAR_TOOL, this, ID_V_TOOLBAR, FALSE);
+    m_VToolBar = new WinEDA_Toolbar( TOOLBAR_TOOL, this, ID_V_TOOLBAR, FALSE );
 
-	// Set up toolbar
-	m_VToolBar->AddTool(ID_NO_SELECT_BUTT, wxEmptyString,
-				BITMAP(cursor_xpm), wxEmptyString, wxITEM_CHECK );
-	m_VToolBar->ToggleTool(ID_NO_SELECT_BUTT, TRUE);
+    // Set up toolbar
+    m_VToolBar->AddTool( ID_NO_SELECT_BUTT, wxEmptyString,
+                         BITMAP( cursor_xpm ), wxEmptyString, wxITEM_CHECK );
+    m_VToolBar->ToggleTool( ID_NO_SELECT_BUTT, TRUE );
 
-	m_VToolBar->AddSeparator();
-	m_VToolBar->AddTool(ID_MODEDIT_ADD_PAD, wxEmptyString,
-				BITMAP(pad_xpm),
-				_("Add Pads"), wxITEM_CHECK);
+    m_VToolBar->AddSeparator();
+    m_VToolBar->AddTool( ID_MODEDIT_ADD_PAD, wxEmptyString,
+                         BITMAP( pad_xpm ),
+                         _( "Add Pads" ), wxITEM_CHECK );
 
-	m_VToolBar->AddSeparator();
-	m_VToolBar->AddTool(ID_LINE_COMMENT_BUTT, wxEmptyString,
-				BITMAP(add_polygon_xpm),
-					_("Add graphic line or polygon"), wxITEM_CHECK);
+    m_VToolBar->AddSeparator();
+    m_VToolBar->AddTool( ID_LINE_COMMENT_BUTT, wxEmptyString,
+                         BITMAP( add_polygon_xpm ),
+                         _( "Add graphic line or polygon" ), wxITEM_CHECK );
 
-	m_VToolBar->AddTool(ID_PCB_CIRCLE_BUTT, wxEmptyString,
-				BITMAP(add_circle_xpm),
-					_("Add graphic circle"), wxITEM_CHECK);
+    m_VToolBar->AddTool( ID_PCB_CIRCLE_BUTT, wxEmptyString,
+                         BITMAP( add_circle_xpm ),
+                         _( "Add graphic circle" ), wxITEM_CHECK );
 
-	m_VToolBar->AddTool(ID_PCB_ARC_BUTT, wxEmptyString,
-				BITMAP(add_arc_xpm),
-					_("Add graphic arc"), wxITEM_CHECK);
+    m_VToolBar->AddTool( ID_PCB_ARC_BUTT, wxEmptyString,
+                         BITMAP( add_arc_xpm ),
+                         _( "Add graphic arc" ), wxITEM_CHECK );
 
-	m_VToolBar->AddTool(ID_TEXT_COMMENT_BUTT, wxEmptyString,
-				BITMAP(add_text_xpm),
-					_("Add Text"), wxITEM_CHECK);
+    m_VToolBar->AddTool( ID_TEXT_COMMENT_BUTT, wxEmptyString,
+                         BITMAP( add_text_xpm ),
+                         _( "Add Text" ), wxITEM_CHECK );
 
-	m_VToolBar->AddSeparator();
-	m_VToolBar->AddTool(ID_MODEDIT_PLACE_ANCHOR, wxEmptyString,
-				BITMAP(anchor_xpm),
-					_("Place anchor"), wxITEM_CHECK);
+    m_VToolBar->AddSeparator();
+    m_VToolBar->AddTool( ID_MODEDIT_PLACE_ANCHOR, wxEmptyString,
+                         BITMAP( anchor_xpm ),
+                         _( "Place anchor" ), wxITEM_CHECK );
 
-	m_VToolBar->AddSeparator();
-	m_VToolBar->AddTool(ID_MODEDIT_DELETE_ITEM_BUTT, wxEmptyString,
-				BITMAP(delete_body_xpm),
-					_("Delete items"), wxITEM_CHECK);
+    m_VToolBar->AddSeparator();
+    m_VToolBar->AddTool( ID_MODEDIT_DELETE_ITEM_BUTT, wxEmptyString,
+                         BITMAP( delete_body_xpm ),
+                         _( "Delete items" ), wxITEM_CHECK );
 
-	m_VToolBar->Realize();
+    m_VToolBar->Realize();
 
-	SetToolbars();
+    SetToolbars();
 }
 
+
 /*********************************************************/
-void WinEDA_ModuleEditFrame::ReCreateOptToolbar(void)
+void WinEDA_ModuleEditFrame::ReCreateOptToolbar( void )
 /*********************************************************/
 {
+    if( m_OptionsToolBar )
+        return;
 
-	if ( m_OptionsToolBar ) return;
+    // creation du tool bar options
+    m_OptionsToolBar = new WinEDA_Toolbar( TOOLBAR_OPTION, this, ID_OPT_TOOLBAR, FALSE );
 
-	// creation du tool bar options
-	m_OptionsToolBar = new WinEDA_Toolbar(TOOLBAR_OPTION, this, ID_OPT_TOOLBAR, FALSE);
+    m_OptionsToolBar->AddTool( ID_TB_OPTIONS_SHOW_GRID, BITMAP( grid_xpm ),
+                              wxNullBitmap,
+                              TRUE,
+                              -1, -1, (wxObject*) NULL,
+                              _( "Display Grid OFF" ) );
 
-	m_OptionsToolBar->AddTool(ID_TB_OPTIONS_SHOW_GRID, BITMAP(grid_xpm),
-					wxNullBitmap,
-					TRUE,
-					-1, -1, (wxObject *) NULL,
-					_("Display Grid OFF"));
+    m_OptionsToolBar->AddTool( ID_TB_OPTIONS_SHOW_POLAR_COORD, wxEmptyString,
+                               BITMAP( polar_coord_xpm ),
+                               _( "Display Polar Coord ON" ), wxITEM_CHECK );
 
-	m_OptionsToolBar->AddTool(ID_TB_OPTIONS_SHOW_POLAR_COORD, wxEmptyString,
-					BITMAP(polar_coord_xpm),
-					_("Display Polar Coord ON"), wxITEM_CHECK);
+    m_OptionsToolBar->AddTool( ID_TB_OPTIONS_SELECT_UNIT_INCH, wxEmptyString,
+                               BITMAP( unit_inch_xpm ),
+                               _( "Units = Inch" ), wxITEM_CHECK );
 
-	m_OptionsToolBar->AddTool(ID_TB_OPTIONS_SELECT_UNIT_INCH, wxEmptyString,
-					BITMAP(unit_inch_xpm),
-					_("Units = Inch"), wxITEM_CHECK );
-	
-	m_OptionsToolBar->AddTool(ID_TB_OPTIONS_SELECT_UNIT_MM, wxEmptyString,
-					BITMAP(unit_mm_xpm),
-					_("Units = mm"), wxITEM_CHECK );
+    m_OptionsToolBar->AddTool( ID_TB_OPTIONS_SELECT_UNIT_MM, wxEmptyString,
+                               BITMAP( unit_mm_xpm ),
+                               _( "Units = mm" ), wxITEM_CHECK );
 
-	m_OptionsToolBar->AddTool(ID_TB_OPTIONS_SELECT_CURSOR, BITMAP(cursor_shape_xpm),
-					wxNullBitmap,
-					TRUE,
-					-1, -1, (wxObject *) NULL,
-					_("Change Cursor Shape"));
+    m_OptionsToolBar->AddTool( ID_TB_OPTIONS_SELECT_CURSOR, BITMAP( cursor_shape_xpm ),
+                              wxNullBitmap,
+                              TRUE,
+                              -1, -1, (wxObject*) NULL,
+                              _( "Change Cursor Shape" ) );
 
-	m_OptionsToolBar->AddSeparator();
-	m_OptionsToolBar->AddTool(ID_TB_OPTIONS_SHOW_PADS_SKETCH,
-					BITMAP(pad_sketch_xpm),
-					wxNullBitmap,
-					TRUE,
-					-1, -1, (wxObject *) NULL,
-					_("Show Pads Sketch"));
+    m_OptionsToolBar->AddSeparator();
+    m_OptionsToolBar->AddTool( ID_TB_OPTIONS_SHOW_PADS_SKETCH,
+                              BITMAP( pad_sketch_xpm ),
+                              wxNullBitmap,
+                              TRUE,
+                              -1, -1, (wxObject*) NULL,
+                              _( "Show Pads Sketch" ) );
 
-	m_OptionsToolBar->AddTool(ID_TB_OPTIONS_SHOW_MODULE_TEXT_SKETCH,
-					BITMAP(text_sketch_xpm),
-					wxNullBitmap,
-					TRUE,
-					-1, -1, (wxObject *) NULL,
-					_("Show Texts Sketch"));
+    m_OptionsToolBar->AddTool( ID_TB_OPTIONS_SHOW_MODULE_TEXT_SKETCH,
+                              BITMAP( text_sketch_xpm ),
+                              wxNullBitmap,
+                              TRUE,
+                              -1, -1, (wxObject*) NULL,
+                              _( "Show Texts Sketch" ) );
 
-	m_OptionsToolBar->AddTool(ID_TB_OPTIONS_SHOW_MODULE_EDGE_SKETCH,
-					BITMAP(show_mod_edge_xpm),
-					wxNullBitmap,
-					TRUE,
-					-1, -1, (wxObject *) NULL,
-					_("Show Edges Sketch"));
+    m_OptionsToolBar->AddTool( ID_TB_OPTIONS_SHOW_MODULE_EDGE_SKETCH,
+                              BITMAP( show_mod_edge_xpm ),
+                              wxNullBitmap,
+                              TRUE,
+                              -1, -1, (wxObject*) NULL,
+                              _( "Show Edges Sketch" ) );
 
-	m_OptionsToolBar->Realize();
+    m_OptionsToolBar->Realize();
 
-	SetToolbars();
+    SetToolbars();
 }
 
+
 /*********************************************************/
-void WinEDA_ModuleEditFrame::ReCreateAuxiliaryToolbar(void)
+void WinEDA_ModuleEditFrame::ReCreateAuxiliaryToolbar( void )
 /*********************************************************/
 {
-int ii;
-wxString msg;
+    int      ii;
+    wxString msg;
 
-	if ( m_AuxiliaryToolBar == NULL )
-	{
-		m_AuxiliaryToolBar = new WinEDA_Toolbar(TOOLBAR_AUX, this, ID_AUX_TOOLBAR, TRUE);
+    if( m_AuxiliaryToolBar == NULL )
+    {
+        m_AuxiliaryToolBar = new WinEDA_Toolbar( TOOLBAR_AUX, this, ID_AUX_TOOLBAR, TRUE );
 
-		// Set up toolbar
-		m_AuxiliaryToolBar->AddSeparator();
+        // Set up toolbar
+        m_AuxiliaryToolBar->AddSeparator();
 
-		// Boite de selection du pas de grille
-		m_SelGridBox = new WinEDAChoiceBox(m_AuxiliaryToolBar,
-					ID_ON_GRID_SELECT,
-					wxPoint(-1,-1), wxSize(LISTBOX_WIDTH , -1));
-		m_AuxiliaryToolBar->AddControl( m_SelGridBox);
+        // Boite de selection du pas de grille
+        m_SelGridBox = new WinEDAChoiceBox( m_AuxiliaryToolBar,
+                                           ID_ON_GRID_SELECT,
+                                           wxPoint( -1, -1 ), wxSize( LISTBOX_WIDTH, -1 ) );
+        m_AuxiliaryToolBar->AddControl( m_SelGridBox );
 
-		// Boite de selection du Zoom
-		m_AuxiliaryToolBar->AddSeparator();
-		m_SelZoomBox = new WinEDAChoiceBox(m_AuxiliaryToolBar,
-					ID_ON_ZOOM_SELECT,
-					wxPoint(-1,-1), wxSize(LISTBOX_WIDTH , -1));
-		msg = _("Auto");
-		m_SelZoomBox->Append(msg);
-		for ( int jj = 0, ii = 1; ii <= m_ZoomMaxValue; ii <<= 1, jj++ )
-		{
-			msg.Printf(_("Zoom %d"), ii);
-			m_SelZoomBox->Append(msg);
-		}
-		m_SelZoomBox->Append(wxT(""));
+        // Boite de selection du Zoom
+        m_AuxiliaryToolBar->AddSeparator();
+        m_SelZoomBox = new WinEDAChoiceBox( m_AuxiliaryToolBar,
+                                           ID_ON_ZOOM_SELECT,
+                                           wxPoint( -1, -1 ), wxSize( LISTBOX_WIDTH, -1 ) );
+        msg = _( "Auto" );
+        m_SelZoomBox->Append( msg );
+        for( int jj = 0, ii = 1; ii <= m_ZoomMaxValue; ii <<= 1, jj++ )
+        {
+            msg.Printf( _( "Zoom %d" ), ii );
+            m_SelZoomBox->Append( msg );
+        }
 
-		m_AuxiliaryToolBar->AddControl( m_SelZoomBox);
-		// after adding the buttons to the toolbar, must call Realize() to reflect
-		// the changes
-		m_AuxiliaryToolBar->Realize();
-	}
+        m_SelZoomBox->Append( wxT( "" ) );
 
-	// mise a jour des affichages
-	m_SelGridBox->Clear();
-	for ( ii = 0; g_GridList[ii].x > 0; ii++ )
-	{
-		double value = To_User_Unit(g_UnitMetric, g_GridList[ii].x, PCB_INTERNAL_UNIT);
-				if ( g_UnitMetric == INCHES )
-					msg.Printf(_("Grid %.1f"), value * 1000);
-				else
-					msg.Printf(_("Grid %.3f"), value);
-		m_SelGridBox->Append(msg);
-	}
-	m_SelGridBox->Append( _("User Grid") );
+        m_AuxiliaryToolBar->AddControl( m_SelZoomBox );
 
-	SetToolbars();
+        // after adding the buttons to the toolbar, must call Realize() to reflect
+        // the changes
+        m_AuxiliaryToolBar->Realize();
+    }
+
+    // mise a jour des affichages
+    m_SelGridBox->Clear();
+    for( ii = 0; g_GridList[ii].x > 0; ii++ )
+    {
+        double value = To_User_Unit( g_UnitMetric, g_GridList[ii].x, PCB_INTERNAL_UNIT );
+        if( g_UnitMetric == INCHES )
+            msg.Printf( _( "Grid %.1f" ), value * 1000 );
+        else
+            msg.Printf( _( "Grid %.3f" ), value );
+        m_SelGridBox->Append( msg );
+    }
+
+    m_SelGridBox->Append( _( "User Grid" ) );
+
+    SetToolbars();
 }
-
-
-
-
-
-
diff --git a/pcbnew/tool_pcb.cpp b/pcbnew/tool_pcb.cpp
index fd3c49d564..2f97a5743b 100644
--- a/pcbnew/tool_pcb.cpp
+++ b/pcbnew/tool_pcb.cpp
@@ -25,6 +25,8 @@
 #include  "wx/ownerdrw.h"
 #include  "wx/menuitem.h"
 
+#include "hotkeys.h"
+
 #define MUWAVE_ENBL
 
 #include "mw_Add_Stub.xpm"
@@ -50,7 +52,7 @@
         "Show active layer selections\nand select layer pair for route and place via" )
 
 /* Data to build the layer pair indicator button */
-static wxBitmap* LayerPairBitmap = NULL;
+static wxBitmap*  LayerPairBitmap = NULL;
 static const char s_BitmapLayerIcon[16][16] = {
     // 0 = draw pixel with active layer color
     // 1 = draw pixel with top layer color (top/bottom layer used in autoroute and place via)
@@ -166,7 +168,7 @@ void WinEDA_PcbFrame::PrepareLayerIndicator( void )
                     ColorRefs[color].m_Red,
                     ColorRefs[color].m_Green,
                     ColorRefs[color].m_Blue
-                );
+                    );
                 iconDC.SetPen( pen );
             }
             iconDC.DrawPoint( jj, ii );
@@ -199,9 +201,10 @@ void WinEDA_PcbFrame::PrepareLayerIndicator( void )
 void WinEDA_PcbFrame::ReCreateHToolbar( void )
 /******************************************/
 
-// Create the main horizontal toolbar
+/* Create the main horizontal toolbar for the board editor */
 {
-    int ii;
+    int      ii;
+    wxString msg;
 
     if( m_HToolBar != NULL )
     {           // simple mise a jour de la liste des fichiers anciens
@@ -264,19 +267,25 @@ void WinEDA_PcbFrame::ReCreateHToolbar( void )
                         _( "Plot (HPGL, PostScript, or GERBER format)" ) );
 
     m_HToolBar->AddSeparator();
+    msg = AddHotkeyName( _( "zoom +" ), s_board_edit_Hotkey_List, HK_ZOOM_IN );
     m_HToolBar->AddTool( ID_ZOOM_PLUS_BUTT, wxEmptyString, BITMAP( zoom_in_xpm ),
-                        _( "zoom + (F1)" ) );
+                         msg );
+
+    msg = AddHotkeyName( _( "zoom -" ), s_board_edit_Hotkey_List, HK_ZOOM_OUT );
     m_HToolBar->AddTool( ID_ZOOM_MOINS_BUTT, wxEmptyString, BITMAP( zoom_out_xpm ),
-                        _( "zoom - (F2)" ) );
+                         msg );
+
+    msg = AddHotkeyName( _( "redraw" ), s_board_edit_Hotkey_List, HK_ZOOM_REDRAW );
     m_HToolBar->AddTool( ID_ZOOM_REDRAW_BUTT, wxEmptyString, BITMAP( repaint_xpm ),
-                        _( "redraw (F3)" ) );
+                         msg );
 
     m_HToolBar->AddTool( ID_ZOOM_PAGE_BUTT, wxEmptyString, BITMAP( zoom_optimal_xpm ),
                         _( "auto zoom" ) );
 
     m_HToolBar->AddSeparator();
+    msg = AddHotkeyName( _( "Find components and texts" ), s_board_edit_Hotkey_List, HK_FIND_ITEM );
     m_HToolBar->AddTool( ID_FIND_ITEMS, wxEmptyString, BITMAP( find_xpm ),
-                        _( "Find components and texts (Ctrl-F)" ) );
+                         msg );
 
     m_HToolBar->AddSeparator();
     m_HToolBar->AddTool( ID_GET_NETLIST, wxEmptyString, BITMAP( netlist_xpm ),
@@ -499,7 +508,7 @@ void WinEDA_PcbFrame::ReCreateAuxVToolbar( void )
                             wxNullBitmap, TRUE,
                             -1, -1, (wxObject*) NULL,
                             _( "Create stub (arc) of specified length for microwave applications" )
-    );
+                            );
 
     m_AuxVToolBar->AddTool( ID_PCB_MUWAVE_TOOL_FUNCTION_SHAPE_CMD,
                            BITMAP( mw_Add_Shape_xpm ),