← Back to team overview

kicad-developers team mailing list archive

[PATCH 5/5] Add virtual keyword to implicitly virtual functions

 

This marks all functions that are implicitly virtual because they override
a base class function explicitly.
---
 3d-viewer/3d_material.h                            |   2 +-
 3d-viewer/3d_struct.h                              |   4 +-
 3d-viewer/3d_viewer.h                              |   4 +-
 3d-viewer/dialogs/dialog_3D_view_option.cpp        |   6 +-
 3d-viewer/modelparsers.h                           |   8 +-
 bitmap2component/bitmap2cmp_gui.cpp                |  22 ++--
 common/confirm.cpp                                 |   6 +-
 common/dialogs/dialog_image_editor.h               |  19 ++--
 common/dialogs/dialog_page_settings.h              |  32 +++---
 common/single_top.cpp                              |  12 +--
 cvpcb/class_DisplayFootprintsFrame.h               |  18 ++--
 cvpcb/cvpcb.cpp                                    |   8 +-
 cvpcb/cvpcb_mainframe.h                            |   6 +-
 cvpcb/cvstruct.h                                   |   6 +-
 cvpcb/dialogs/dialog_config_equfiles.h             |  16 +--
 cvpcb/dialogs/dialog_display_options.h             |   8 +-
 cvpcb/dialogs/fp_conflict_assignment_selector.h    |  10 +-
 eeschema/class_libentry.h                          |   4 +-
 eeschema/class_netlist_object.h                    |   2 +-
 eeschema/dialog_erc_listbox.h                      |   4 +-
 eeschema/dialogs/dialog_annotate.cpp               |   6 +-
 eeschema/dialogs/dialog_bom.cpp                    |  18 ++--
 eeschema/dialogs/dialog_edit_component_in_lib.h    |  22 ++--
 .../dialogs/dialog_edit_component_in_schematic.cpp |  24 ++---
 eeschema/dialogs/dialog_edit_label.cpp             |   2 +-
 .../dialogs/dialog_edit_libentry_fields_in_lib.cpp |  20 ++--
 eeschema/dialogs/dialog_edit_one_field.h           |  12 +--
 eeschema/dialogs/dialog_eeschema_config.cpp        |  20 ++--
 eeschema/dialogs/dialog_eeschema_options.h         |  12 +--
 eeschema/dialogs/dialog_erc.h                      |  14 +--
 eeschema/dialogs/dialog_lib_edit_pin.h             |  10 +-
 eeschema/dialogs/dialog_lib_edit_text.h            |   4 +-
 eeschema/dialogs/dialog_lib_new_component.h        |   4 +-
 eeschema/dialogs/dialog_netlist.cpp                |  16 +--
 eeschema/dialogs/dialog_plot_schematic.h           |  10 +-
 eeschema/dialogs/dialog_print_using_printer.cpp    |  22 ++--
 eeschema/dialogs/dialog_schematic_find.h           |  18 ++--
 eeschema/eeschema.cpp                              |   8 +-
 eeschema/lib_arc.h                                 |  56 +++++-----
 eeschema/lib_bezier.h                              |  42 ++++----
 eeschema/lib_circle.h                              |  54 +++++-----
 eeschema/lib_collectors.h                          |   2 +-
 eeschema/lib_draw_item.h                           |   2 +-
 eeschema/lib_field.h                               |  60 +++++------
 eeschema/lib_pin.h                                 |  52 ++++-----
 eeschema/lib_polyline.h                            |  54 +++++-----
 eeschema/lib_rectangle.h                           |  54 +++++-----
 eeschema/lib_text.h                                |  58 +++++-----
 eeschema/libeditframe.h                            |  24 ++---
 eeschema/sch_base_frame.h                          |  28 ++---
 eeschema/sch_bitmap.h                              |  40 +++----
 eeschema/sch_bus_entry.h                           |  58 +++++-----
 eeschema/sch_collectors.h                          |   6 +-
 eeschema/sch_component.h                           |  62 +++++------
 eeschema/sch_field.h                               |  44 ++++----
 eeschema/sch_junction.h                            |  50 ++++-----
 eeschema/sch_line.h                                |  56 +++++-----
 eeschema/sch_marker.h                              |  36 +++----
 eeschema/sch_no_connect.h                          |  52 ++++-----
 eeschema/sch_sheet.h                               | 112 +++++++++----------
 eeschema/sch_text.h                                |  98 ++++++++---------
 eeschema/schframe.h                                |  34 +++---
 eeschema/viewlib_frame.h                           |  24 ++---
 gerbview/class_gbr_layer_box_selector.h            |  11 +-
 gerbview/class_gbr_layout.h                        |   2 +-
 gerbview/class_gbr_screen.h                        |   2 +-
 gerbview/class_gerber_draw_item.h                  |  10 +-
 gerbview/class_gerbview_layer_widget.h             |  10 +-
 gerbview/dialogs/dialog_print_using_printer.cpp    |  12 +--
 gerbview/dialogs/dialog_show_page_borders.h        |   4 +-
 .../gerbview_dialog_display_options_frame.cpp      |   6 +-
 gerbview/gerbview.cpp                              |   8 +-
 gerbview/gerbview_frame.h                          |  52 ++++-----
 gerbview/select_layers_to_pcb.h                    |  12 +--
 include/class_base_screen.h                        |   2 +-
 include/class_draw_panel_gal.h                     |   2 +-
 include/class_pcb_screen.h                         |   2 +-
 include/class_sch_screen.h                         |   2 +-
 include/class_worksheet_dataitem.h                 |   2 +-
 include/dialog_get_component.h                     |   7 +-
 include/dialog_helpers.h                           |  12 +--
 include/dialog_hotkeys_editor.h                    |   8 +-
 include/dialog_shim.h                              |   6 +-
 include/draw_frame.h                               |   4 +-
 include/filter_reader.h                            |  12 +--
 include/gal/opengl/noncached_container.h           |   2 +-
 include/geometry/shape_circle.h                    |  10 +-
 include/geometry/shape_line_chain.h                |  12 +--
 include/geometry/shape_rect.h                      |  10 +-
 include/geometry/shape_segment.h                   |  12 +--
 include/html_messagebox.h                          |   2 +-
 include/kiway.h                                    |   2 +-
 include/kiway_express.h                            |   2 +-
 include/kiway_player.h                             |   2 +-
 include/reporter.h                                 |   4 +-
 include/richio.h                                   |  12 +--
 include/tool/context_menu.h                        |   2 +-
 include/view/view_group.h                          |  10 +-
 include/view/wx_view_controls.h                    |   8 +-
 include/worksheet_viewitem.h                       |   8 +-
 include/wxBasePcbFrame.h                           |  28 ++---
 include/wxPcbStruct.h                              |  46 ++++----
 include/wxstruct.h                                 |   6 +-
 kicad/class_treeprojectfiles.h                     |   2 +-
 kicad/dialogs/dialog_template_selector.h           |   2 +-
 kicad/kicad.cpp                                    |   6 +-
 kicad/kicad.h                                      |  14 +--
 kicad/pgm_kicad.h                                  |   6 +-
 pagelayout_editor/class_pl_editor_layout.h         |   2 +-
 pagelayout_editor/class_pl_editor_screen.h         |   2 +-
 pagelayout_editor/design_tree_frame.h              |   2 +-
 pagelayout_editor/dialogs/dialog_new_dataitem.cpp  |   4 +-
 pagelayout_editor/dialogs/dialogs_for_printing.cpp |   8 +-
 pagelayout_editor/pl_editor.cpp                    |   8 +-
 pagelayout_editor/pl_editor_frame.h                |  50 ++++-----
 pagelayout_editor/properties_frame.h               |   6 +-
 pcb_calculator/pcb_calculator.cpp                  |   8 +-
 pcb_calculator/pcb_calculator.h                    |  48 ++++-----
 pcb_calculator/regulators_funct.cpp                |   4 +-
 pcb_calculator/transline/c_microstrip.h            |   4 +-
 pcb_calculator/transline/coax.h                    |   4 +-
 pcb_calculator/transline/coplanar.h                |   4 +-
 pcb_calculator/transline/microstrip.h              |   4 +-
 pcb_calculator/transline/rectwaveguide.h           |   4 +-
 pcb_calculator/transline/stripline.h               |   4 +-
 pcb_calculator/transline/twistedpair.h             |   4 +-
 pcbnew/block.cpp                                   |   6 +-
 pcbnew/class_board.cpp                             |   4 +-
 pcbnew/class_board.h                               |  14 +--
 pcbnew/class_board_connected_item.h                |   2 +-
 pcbnew/class_dimension.h                           |  30 +++---
 pcbnew/class_drawsegment.h                         |  14 +--
 pcbnew/class_edge_mod.h                            |  20 ++--
 pcbnew/class_marker_pcb.h                          |  12 +--
 pcbnew/class_mire.h                                |  28 ++---
 pcbnew/class_module.h                              |  34 +++---
 pcbnew/class_netclass.h                            |   2 +-
 pcbnew/class_pad.h                                 |  31 +++---
 pcbnew/class_pcb_layer_box_selector.h              |  10 +-
 pcbnew/class_pcb_layer_widget.h                    |  10 +-
 pcbnew/class_pcb_text.h                            |  25 +++--
 pcbnew/class_text_mod.h                            |  22 ++--
 pcbnew/class_track.h                               |  42 ++++----
 pcbnew/class_zone.h                                |  20 ++--
 pcbnew/collectors.h                                |  38 +++----
 pcbnew/dialogs/dialog_SVG_print.cpp                |   8 +-
 pcbnew/dialogs/dialog_cleaning_options.h           |   4 +-
 pcbnew/dialogs/dialog_copper_zones.cpp             |  16 +--
 pcbnew/dialogs/dialog_create_array.h               |  18 ++--
 pcbnew/dialogs/dialog_design_rules.h               |  26 ++---
 pcbnew/dialogs/dialog_display_options.h            |   4 +-
 pcbnew/dialogs/dialog_drc.h                        |  30 +++---
 pcbnew/dialogs/dialog_drclistbox.h                 |  20 ++--
 .../dialogs/dialog_edit_module_for_BoardEditor.h   |  22 ++--
 pcbnew/dialogs/dialog_edit_module_for_Modedit.h    |  16 +--
 pcbnew/dialogs/dialog_edit_module_text.h           |   2 +-
 pcbnew/dialogs/dialog_find.h                       |   8 +-
 pcbnew/dialogs/dialog_footprint_wizard_list.h      |   6 +-
 pcbnew/dialogs/dialog_fp_lib_table.cpp             |  42 ++++----
 pcbnew/dialogs/dialog_fp_plugin_options.cpp        |  20 ++--
 pcbnew/dialogs/dialog_freeroute_exchange.h         |  12 +--
 pcbnew/dialogs/dialog_gendrill.h                   |  14 +--
 pcbnew/dialogs/dialog_general_options.h            |   6 +-
 pcbnew/dialogs/dialog_global_deletion.h            |   8 +-
 .../dialogs/dialog_global_edit_tracks_and_vias.h   |   6 +-
 .../dialog_global_modules_fields_edition.cpp       |   4 +-
 pcbnew/dialogs/dialog_graphic_item_properties.cpp  |   4 +-
 .../dialog_graphic_item_properties_for_Modedit.cpp |   4 +-
 pcbnew/dialogs/dialog_graphic_items_options.h      |   4 +-
 pcbnew/dialogs/dialog_keepout_area_properties.cpp  |   4 +-
 pcbnew/dialogs/dialog_layers_setup.cpp             |  14 +--
 pcbnew/dialogs/dialog_modedit_options.cpp          |   4 +-
 pcbnew/dialogs/dialog_move_exact.h                 |  10 +-
 pcbnew/dialogs/dialog_netlist.h                    |  20 ++--
 .../dialogs/dialog_non_copper_zones_properties.cpp |   4 +-
 pcbnew/dialogs/dialog_orient_footprints.cpp        |   4 +-
 pcbnew/dialogs/dialog_pad_properties.cpp           |  18 ++--
 pcbnew/dialogs/dialog_pcb_text_properties.cpp      |   6 +-
 pcbnew/dialogs/dialog_plot.h                       |  18 ++--
 pcbnew/dialogs/dialog_print_for_modedit.cpp        |  10 +-
 pcbnew/dialogs/dialog_print_using_printer.cpp      |  12 +--
 pcbnew/dialogs/dialog_set_grid.cpp                 |   6 +-
 pcbnew/dialogs/dialog_track_via_size.h             |   6 +-
 pcbnew/dialogs/wizard_add_fplib.h                  |  22 ++--
 pcbnew/dimension.cpp                               |   4 +-
 pcbnew/eagle_plugin.h                              |  14 +--
 pcbnew/exporters/gen_modules_placefile.cpp         |   8 +-
 pcbnew/footprint_wizard_frame.h                    |  28 ++---
 pcbnew/github/github_plugin.h                      |  20 ++--
 pcbnew/globaleditpad.cpp                           |   6 +-
 pcbnew/gpcb_plugin.h                               |  14 +--
 pcbnew/import_dxf/dialog_dxf_import.h              |   6 +-
 pcbnew/import_dxf/dxf2brd_items.h                  |   6 +-
 pcbnew/kicad_plugin.h                              |  24 ++---
 pcbnew/legacy_plugin.h                             |  14 +--
 pcbnew/module_editor_frame.h                       |  46 ++++----
 pcbnew/modview_frame.h                             |  32 +++---
 pcbnew/pcad2kicadpcb_plugin/pcad_plugin.h          |   6 +-
 pcbnew/pcad2kicadpcb_plugin/pcb.h                  |  12 +--
 pcbnew/pcad2kicadpcb_plugin/pcb_arc.h              |   4 +-
 pcbnew/pcad2kicadpcb_plugin/pcb_line.h             |   4 +-
 pcbnew/pcad2kicadpcb_plugin/pcb_module.h           |   2 +-
 pcbnew/pcad2kicadpcb_plugin/pcb_pad.h              |   2 +-
 pcbnew/pcad2kicadpcb_plugin/pcb_pad_shape.h        |   2 +-
 pcbnew/pcad2kicadpcb_plugin/pcb_polygon.h          |   4 +-
 pcbnew/pcad2kicadpcb_plugin/pcb_text.h             |   4 +-
 pcbnew/pcb_painter.h                               |   4 +-
 pcbnew/pcbnew.cpp                                  |   8 +-
 pcbnew/printout_controler.h                        |   6 +-
 pcbnew/ratsnest.cpp                                |   2 +-
 pcbnew/ratsnest_data.h                             |   2 +-
 pcbnew/ratsnest_viewitem.h                         |   8 +-
 pcbnew/router/length_tuner_tool.h                  |   2 +-
 pcbnew/router/pns_diff_pair.h                      |   2 +-
 pcbnew/router/pns_diff_pair_placer.h               |  30 +++---
 pcbnew/router/pns_dp_meander_placer.h              |  22 ++--
 pcbnew/router/pns_joint.h                          |   2 +-
 pcbnew/router/pns_line.h                           |   6 +-
 pcbnew/router/pns_line_placer.h                    |  30 +++---
 pcbnew/router/pns_meander_placer.h                 |  12 +--
 pcbnew/router/pns_meander_skew_placer.h            |   8 +-
 pcbnew/router/pns_segment.h                        |   8 +-
 pcbnew/router/pns_solid.h                          |   6 +-
 pcbnew/router/pns_via.h                            |   6 +-
 pcbnew/router/router_preview_item.h                |   4 +-
 pcbnew/router/router_tool.cpp                      |   2 +-
 pcbnew/router/router_tool.h                        |   2 +-
 pcbnew/sel_layer.cpp                               |  16 +--
 pcbnew/specctra.h                                  | 120 ++++++++++-----------
 pcbnew/target_edit.cpp                             |   4 +-
 pcbnew/tools/bright_box.h                          |   8 +-
 pcbnew/tools/drawing_tool.h                        |   2 +-
 pcbnew/tools/edit_points.h                         |   2 +-
 pcbnew/tools/edit_tool.h                           |   4 +-
 pcbnew/tools/module_tools.h                        |   4 +-
 pcbnew/tools/pcb_editor_control.h                  |   4 +-
 pcbnew/tools/pcbnew_control.h                      |   4 +-
 pcbnew/tools/placement_tool.h                      |   4 +-
 pcbnew/tools/point_editor.h                        |   4 +-
 pcbnew/tools/selection_area.h                      |   6 +-
 pcbnew/tools/selection_tool.h                      |   2 +-
 pcbnew/xchgmod.cpp                                 |  10 +-
 polygon/clipper.hpp                                |   2 +-
 utils/idftools/dxf2idf.h                           |  90 ++++++++--------
 244 files changed, 1851 insertions(+), 1858 deletions(-)

diff --git a/3d-viewer/3d_material.h b/3d-viewer/3d_material.h
index 7b86970..3f4bd69 100644
--- a/3d-viewer/3d_material.h
+++ b/3d-viewer/3d_material.h
@@ -63,7 +63,7 @@ public:
     void SetOpenGLMaterial(unsigned int aMaterialIndex, bool aUseMaterial);
 
 #if defined(DEBUG)
-    void Show( int nestLevel, std::ostream& os ) const { ShowDummy( os ); } // override
+    virtual void Show( int nestLevel, std::ostream& os ) const { ShowDummy( os ); } // override
 #endif
 
     /** Get class name
diff --git a/3d-viewer/3d_struct.h b/3d-viewer/3d_struct.h
index 51154ec..42d26a2 100644
--- a/3d-viewer/3d_struct.h
+++ b/3d-viewer/3d_struct.h
@@ -161,7 +161,7 @@ public:
     void ObjectCoordsTo3DUnits( std::vector< S3D_VERTEX >& aVertices );
 
 #if defined(DEBUG)
-    void Show( int nestLevel, std::ostream& os ) const { ShowDummy( os ); } // override
+    virtual void Show( int nestLevel, std::ostream& os ) const { ShowDummy( os ); } // override
 #endif
 
     /**
@@ -219,7 +219,7 @@ public:
     STRUCT_3D_SHAPE* Back() const { return (STRUCT_3D_SHAPE*) Pback; }
 
 #if defined(DEBUG)
-    void Show( int nestLevel, std::ostream& os ) const { ShowDummy( os ); } // override
+    virtual void Show( int nestLevel, std::ostream& os ) const { ShowDummy( os ); } // override
 #endif
 };
 
diff --git a/3d-viewer/3d_viewer.h b/3d-viewer/3d_viewer.h
index bf19745..351a55a 100644
--- a/3d-viewer/3d_viewer.h
+++ b/3d-viewer/3d_viewer.h
@@ -135,8 +135,8 @@ private:
     void ReCreateMainToolbar();
     void SetToolbars();
 
-    void LoadSettings( wxConfigBase* aCfg );    // overload virtual
-    void SaveSettings( wxConfigBase* aCfg );    // overload virtual
+    virtual void LoadSettings( wxConfigBase* aCfg );    // overload
+    virtual void SaveSettings( wxConfigBase* aCfg );    // overload
 
     // Other functions
     void OnLeftClick( wxDC* DC, const wxPoint& MousePos );
diff --git a/3d-viewer/dialogs/dialog_3D_view_option.cpp b/3d-viewer/dialogs/dialog_3D_view_option.cpp
index ea45f05..370d058 100644
--- a/3d-viewer/dialogs/dialog_3D_view_option.cpp
+++ b/3d-viewer/dialogs/dialog_3D_view_option.cpp
@@ -38,9 +38,9 @@ private:
     void initDialog();
 
     // Event functions:
-    void OnShowAllClick( wxCommandEvent& event );
-    void OnShowNoneClick( wxCommandEvent& event );
-    void OnOKClick( wxCommandEvent& event );
+    virtual void OnShowAllClick( wxCommandEvent& event );
+    virtual void OnShowNoneClick( wxCommandEvent& event );
+    virtual void OnOKClick( wxCommandEvent& event );
 };
 
 void EDA_3D_FRAME::Install_3D_ViewOptionDialog( wxCommandEvent& event )
diff --git a/3d-viewer/modelparsers.h b/3d-viewer/modelparsers.h
index 7801950..331af0d 100644
--- a/3d-viewer/modelparsers.h
+++ b/3d-viewer/modelparsers.h
@@ -93,7 +93,7 @@ public:
     X3D_MODEL_PARSER( S3D_MASTER* aMaster );
     ~X3D_MODEL_PARSER();
 
-    void Load( const wxString& aFilename, double aVrmlunits_to_3Dunits );
+    virtual void Load( const wxString& aFilename, double aVrmlunits_to_3Dunits );
 
     typedef std::map< wxString, wxString > PROPERTY_MAP;
     typedef std::vector< wxXmlNode* >      NODE_LIST;
@@ -154,7 +154,7 @@ public:
     VRML2_MODEL_PARSER( S3D_MASTER* aMaster );
     ~VRML2_MODEL_PARSER();
 
-    void Load( const wxString& aFilename, double aVrmlunits_to_3Dunits );
+    virtual void Load( const wxString& aFilename, double aVrmlunits_to_3Dunits );
 
     /**
      * Return string representing VRML2 file in vrml2 format
@@ -203,7 +203,7 @@ public:
     VRML1_MODEL_PARSER( S3D_MASTER* aMaster );
     ~VRML1_MODEL_PARSER();
 
-    void Load( const wxString& aFilename, double aVrmlunits_to_3Dunits );
+    virtual void Load( const wxString& aFilename, double aVrmlunits_to_3Dunits );
 
     /**
      * Return string representing VRML2 file in vrml2 format
@@ -249,7 +249,7 @@ public:
     VRML_MODEL_PARSER( S3D_MASTER* aMaster );
     ~VRML_MODEL_PARSER();
 
-    void Load( const wxString& aFilename, double aVrmlunits_to_3Dunits );
+    virtual void Load( const wxString& aFilename, double aVrmlunits_to_3Dunits );
 
 private:
     VRML1_MODEL_PARSER* vrml1_parser;
diff --git a/bitmap2component/bitmap2cmp_gui.cpp b/bitmap2component/bitmap2cmp_gui.cpp
index 0a1a29c..7302885 100644
--- a/bitmap2component/bitmap2cmp_gui.cpp
+++ b/bitmap2component/bitmap2cmp_gui.cpp
@@ -86,14 +86,14 @@ public:
     ~BM2CMP_FRAME();
 
     // overload KIWAY_PLAYER virtual
-    bool OpenProjectFiles( const std::vector<wxString>& aFilenames, int aCtl=0 );
+    virtual bool OpenProjectFiles( const std::vector<wxString>& aFilenames, int aCtl=0 );
 
 private:
 
     // Event handlers
-    void OnPaint( wxPaintEvent& event );
-    void OnLoadFile( wxCommandEvent& event );
-    void OnExport( wxCommandEvent& event );
+    virtual void OnPaint( wxPaintEvent& event );
+    virtual void OnLoadFile( wxCommandEvent& event );
+    virtual void OnExport( wxCommandEvent& event );
 
     /**
      * Generate a schematic library which comtains one component:
@@ -118,9 +118,9 @@ private:
     void OnExportLogo();
 
     void Binarize( double aThreshold );     // aThreshold = 0.0 (black level) to 1.0 (white level)
-    void OnOptionsSelection( wxCommandEvent& event );
-    void OnThresholdChange( wxScrollEvent& event );
-    void OnResolutionChange( wxCommandEvent& event );
+    virtual void OnOptionsSelection( wxCommandEvent& event );
+    virtual void OnThresholdChange( wxScrollEvent& event );
+    virtual void OnResolutionChange( wxCommandEvent& event );
 
     // called when texts controls which handle the image resolution
     // lose the focus, to ensure the rigyht vaules are displayed
@@ -140,7 +140,7 @@ private:
     void NegateGreyscaleImage( );
     void ExportFile( FILE* aOutfile, OUTPUT_FMT_ID aFormat );
     void updateImageInfo();
-    void OnFormatChange( wxCommandEvent& event );
+    virtual void OnFormatChange( wxCommandEvent& event );
 };
 
 
@@ -663,9 +663,9 @@ namespace BMP2CMP {
 
 static struct IFACE : public KIFACE_I
 {
-    bool OnKifaceStart( PGM_BASE* aProgram, int aCtlBits );
+    virtual bool OnKifaceStart( PGM_BASE* aProgram, int aCtlBits );
 
-    wxWindow* CreateWindow( wxWindow* aParent, int aClassId, KIWAY* aKiway, int aCtlBits = 0 )
+    virtual wxWindow* CreateWindow( wxWindow* aParent, int aClassId, KIWAY* aKiway, int aCtlBits = 0 )
     {
         switch( aClassId )
         {
@@ -689,7 +689,7 @@ static struct IFACE : public KIFACE_I
      *
      * @return void* - and must be cast into the know type.
      */
-    void* IfaceOrAddress( int aDataId )
+    virtual void* IfaceOrAddress( int aDataId )
     {
         return NULL;
     }
diff --git a/common/confirm.cpp b/common/confirm.cpp
index d14109c..2baf95c 100644
--- a/common/confirm.cpp
+++ b/common/confirm.cpp
@@ -52,9 +52,9 @@ public:
     };
 
 private:
-    void OnSaveAndExit( wxCommandEvent& event ) { EndModal( wxID_YES ); }
-    void OnCancel( wxCommandEvent& event ) { EndModal( wxID_CANCEL ); }
-    void OnExitNoSave( wxCommandEvent& event ) { EndModal( wxID_NO ); }
+    virtual void OnSaveAndExit( wxCommandEvent& event ) { EndModal( wxID_YES ); }
+    virtual void OnCancel( wxCommandEvent& event ) { EndModal( wxID_CANCEL ); }
+    virtual void OnExitNoSave( wxCommandEvent& event ) { EndModal( wxID_NO ); }
 };
 
 
diff --git a/common/dialogs/dialog_image_editor.h b/common/dialogs/dialog_image_editor.h
index 226221c..0afd153 100644
--- a/common/dialogs/dialog_image_editor.h
+++ b/common/dialogs/dialog_image_editor.h
@@ -53,15 +53,16 @@ public:
     void TransfertToImage( BITMAP_BASE* aItem );
 
 private:
-    void OnUndoLastChange( wxCommandEvent& event );
-    void OnGreyScaleConvert( wxCommandEvent& event );
-    void OnHalfSize( wxCommandEvent& event );
-    void OnMirrorX_click( wxCommandEvent& event );
-    void OnMirrorY_click( wxCommandEvent& event );
-    void OnRotateClick( wxCommandEvent& event );
-    void OnOK_Button( wxCommandEvent& aEvent );
-    void OnCancel_Button( wxCommandEvent& aEvent );
-    void OnRedrawPanel( wxPaintEvent& event );
+    virtual void OnUndoLastChange( wxCommandEvent& event );
+    virtual void OnGreyScaleConvert( wxCommandEvent& event );
+    virtual void OnHalfSize( wxCommandEvent& event );
+    virtual void OnMirrorX_click( wxCommandEvent& event );
+    virtual void OnMirrorY_click( wxCommandEvent& event );
+    virtual void OnRotateClick( wxCommandEvent& event );
+    virtual void OnOK_Button( wxCommandEvent& aEvent );
+    virtual void OnCancel_Button( wxCommandEvent& aEvent );
+    virtual void OnRedrawPanel( wxPaintEvent& event );
+
     bool CheckValues();
 };
 
diff --git a/common/dialogs/dialog_page_settings.h b/common/dialogs/dialog_page_settings.h
index 5bd62ba..c80eee6 100644
--- a/common/dialogs/dialog_page_settings.h
+++ b/common/dialogs/dialog_page_settings.h
@@ -73,32 +73,32 @@ private:
     void initDialog();  // Initialisation of member variables
 
     // event handler for wxID_OK
-    void OnOkClick( wxCommandEvent& event );
+    virtual void OnOkClick( wxCommandEvent& event );
 
     // event handler for wxID_CANCEL
-    void OnCancelClick( wxCommandEvent& event );
+    virtual void OnCancelClick( wxCommandEvent& event );
 
     // event handlers for page size choice
-    void OnPaperSizeChoice( wxCommandEvent& event );
-    void OnUserPageSizeXTextUpdated( wxCommandEvent& event );
-    void OnUserPageSizeYTextUpdated( wxCommandEvent& event );
-    void OnPageOrientationChoice( wxCommandEvent& event );
+    virtual void OnPaperSizeChoice( wxCommandEvent& event );
+    virtual void OnUserPageSizeXTextUpdated( wxCommandEvent& event );
+    virtual void OnUserPageSizeYTextUpdated( wxCommandEvent& event );
+    virtual void OnPageOrientationChoice( wxCommandEvent& event );
 
     // event handler for texts in title block
-    void OnRevisionTextUpdated( wxCommandEvent& event );
-    void OnDateTextUpdated( wxCommandEvent& event );
-    void OnTitleTextUpdated( wxCommandEvent& event );
-    void OnCompanyTextUpdated( wxCommandEvent& event );
-    void OnComment1TextUpdated( wxCommandEvent& event );
-    void OnComment2TextUpdated( wxCommandEvent& event );
-    void OnComment3TextUpdated( wxCommandEvent& event );
-    void OnComment4TextUpdated( wxCommandEvent& event );
+    virtual void OnRevisionTextUpdated( wxCommandEvent& event );
+    virtual void OnDateTextUpdated( wxCommandEvent& event );
+    virtual void OnTitleTextUpdated( wxCommandEvent& event );
+    virtual void OnCompanyTextUpdated( wxCommandEvent& event );
+    virtual void OnComment1TextUpdated( wxCommandEvent& event );
+    virtual void OnComment2TextUpdated( wxCommandEvent& event );
+    virtual void OnComment3TextUpdated( wxCommandEvent& event );
+    virtual void OnComment4TextUpdated( wxCommandEvent& event );
 
     // Handle button click for setting the date from the picker
-    void OnDateApplyClick( wxCommandEvent& event );
+    virtual void OnDateApplyClick( wxCommandEvent& event );
 
     // .kicad_wks file description selection
-    void OnWksFileSelection( wxCommandEvent& event );
+    virtual void OnWksFileSelection( wxCommandEvent& event );
 
     // Save in the current title block the new page settings
     // return true if changes are made, or false if not
diff --git a/common/single_top.cpp b/common/single_top.cpp
index 8addf58..1f5c7ee 100644
--- a/common/single_top.cpp
+++ b/common/single_top.cpp
@@ -96,9 +96,9 @@ KIWAY    Kiway( &Pgm(), KFCTL_STANDALONE );
  */
 static struct PGM_SINGLE_TOP : public PGM_BASE
 {
-    bool OnPgmInit( wxApp* aWxApp );                    // overload PGM_BASE virtual
-    void OnPgmExit();                                   // overload PGM_BASE virtual
-    void MacOpenFile( const wxString& aFileName );      // overload PGM_BASE virtual
+    virtual bool OnPgmInit( wxApp* aWxApp );
+    virtual void OnPgmExit();
+    virtual void MacOpenFile( const wxString& aFileName );
 } program;
 
 
@@ -115,7 +115,7 @@ PGM_BASE& Pgm()
  */
 struct APP_SINGLE_TOP : public wxApp
 {
-    bool OnInit()           // overload wxApp virtual
+    virtual bool OnInit()
     {
         try
         {
@@ -141,12 +141,12 @@ struct APP_SINGLE_TOP : public wxApp
         return false;
     }
 
-    int  OnExit()           // overload wxApp virtual
+    virtual int  OnExit()
     {
         return wxApp::OnExit();
     }
 
-    int OnRun()             // overload wxApp virtual
+    virtual int OnRun()
     {
         int ret = -1;
 
diff --git a/cvpcb/class_DisplayFootprintsFrame.h b/cvpcb/class_DisplayFootprintsFrame.h
index 608081c..54355c3 100644
--- a/cvpcb/class_DisplayFootprintsFrame.h
+++ b/cvpcb/class_DisplayFootprintsFrame.h
@@ -45,15 +45,15 @@ public:
     DISPLAY_FOOTPRINTS_FRAME( KIWAY* aKiway, CVPCB_MAINFRAME* aParent );
     ~DISPLAY_FOOTPRINTS_FRAME();
 
-    void    OnCloseWindow( wxCloseEvent& Event );
+    virtual void    OnCloseWindow( wxCloseEvent& Event );
 
     /*
      * Draws the current highlighted footprint.
      */
-    void    RedrawActiveWindow( wxDC* DC, bool EraseBg );
+    virtual void    RedrawActiveWindow( wxDC* DC, bool EraseBg );
 
-    void    ReCreateHToolbar();
-    void    ReCreateVToolbar();
+    virtual void    ReCreateHToolbar();
+    virtual void    ReCreateVToolbar();
     void    ReCreateOptToolbar();
     void    RecreateMenuBar();
 
@@ -89,10 +89,10 @@ public:
      */
     virtual EDA_COLOR_T GetGridColor() const;
 
-    void    OnLeftClick( wxDC* DC, const wxPoint& MousePos );
-    void    OnLeftDClick( wxDC* DC, const wxPoint& MousePos );
-    bool    OnRightClick( const wxPoint& MousePos, wxMenu* PopMenu );
-    bool    GeneralControl( wxDC* DC, const wxPoint& aPosition, int aHotKey = 0 );
+    virtual void    OnLeftClick( wxDC* DC, const wxPoint& MousePos );
+    virtual void    OnLeftDClick( wxDC* DC, const wxPoint& MousePos );
+    virtual bool    OnRightClick( const wxPoint& MousePos, wxMenu* PopMenu );
+    virtual bool    GeneralControl( wxDC* DC, const wxPoint& aPosition, int aHotKey = 0 );
     void    InstallOptionsDisplay( wxCommandEvent& event );
     MODULE* Get_Module( const wxString& CmpName );
 
@@ -101,7 +101,7 @@ public:
     /**
      * Display 3D frame of current footprint selection.
      */
-    void    Show3D_Frame( wxCommandEvent& event );
+    virtual void    Show3D_Frame( wxCommandEvent& event );
 
     /* SaveCopyInUndoList() virtual
      * currently: do nothing in CvPcb.
diff --git a/cvpcb/cvpcb.cpp b/cvpcb/cvpcb.cpp
index 617dd4c..50da9e4 100644
--- a/cvpcb/cvpcb.cpp
+++ b/cvpcb/cvpcb.cpp
@@ -97,11 +97,11 @@ static struct IFACE : public KIFACE_I
         KIFACE_I( aName, aType )
     {}
 
-    bool OnKifaceStart( PGM_BASE* aProgram, int aCtlBits );
+    virtual bool OnKifaceStart( PGM_BASE* aProgram, int aCtlBits );
 
-    void OnKifaceEnd();
+    virtual void OnKifaceEnd();
 
-    wxWindow* CreateWindow( wxWindow* aParent, int aClassId, KIWAY* aKiway, int aCtlBits = 0 )
+    virtual wxWindow* CreateWindow( wxWindow* aParent, int aClassId, KIWAY* aKiway, int aCtlBits = 0 )
     {
         switch( aClassId )
         {
@@ -130,7 +130,7 @@ static struct IFACE : public KIFACE_I
      *
      * @return void* - and must be cast into the know type.
      */
-    void* IfaceOrAddress( int aDataId )
+    virtual void* IfaceOrAddress( int aDataId )
     {
         return NULL;
     }
diff --git a/cvpcb/cvpcb_mainframe.h b/cvpcb/cvpcb_mainframe.h
index 8f83042..1166eee 100644
--- a/cvpcb/cvpcb_mainframe.h
+++ b/cvpcb/cvpcb_mainframe.h
@@ -86,7 +86,7 @@ protected:
 public:
     ~CVPCB_MAINFRAME();
 
-    bool OpenProjectFiles( const std::vector<wxString>& aFileSet, int aCtl=0 );   // overload KIWAY_PLAYER
+    virtual bool OpenProjectFiles( const std::vector<wxString>& aFileSet, int aCtl=0 );
 
     /**
      * @return a pointer on the Footprint Viewer frame, if exists, or NULL
@@ -227,9 +227,9 @@ public:
      */
     void LoadProjectFile();
 
-    void LoadSettings( wxConfigBase* aCfg );    // override virtual
+    virtual void LoadSettings( wxConfigBase* aCfg );
 
-    void SaveSettings( wxConfigBase* aCfg );    // override virtual
+    virtual void SaveSettings( wxConfigBase* aCfg );
 
     /**
      * Function DisplayStatus
diff --git a/cvpcb/cvstruct.h b/cvpcb/cvstruct.h
index d262d0b..588d2b9 100644
--- a/cvpcb/cvstruct.h
+++ b/cvpcb/cvstruct.h
@@ -117,7 +117,7 @@ public:
      * this overloaded function MUST be provided for the wxLC_VIRTUAL mode
      * because real data is not handled by ITEMS_LISTBOX_BASE
      */
-    wxString OnGetItemText( long item, long column ) const;
+    virtual wxString OnGetItemText( long item, long column ) const;
 
     // Events functions:
     void     OnLeftClick( wxListEvent& event );
@@ -147,7 +147,7 @@ public:
     void     SetLibraryList( const wxArrayString& aList );
 
     wxString GetSelectedLibrary();
-    wxString OnGetItemText( long item, long column ) const;
+    virtual wxString OnGetItemText( long item, long column ) const;
 
     // Events functions:
     void     OnLeftClick( wxListEvent& event );
@@ -195,7 +195,7 @@ public:
      * this overloaded function MUST be provided for the wxLC_VIRTUAL mode
      * because real data is not handled by ITEMS_LISTBOX_BASE
      */
-    wxString OnGetItemText( long item, long column ) const;
+    virtual wxString OnGetItemText( long item, long column ) const;
 
     /*
      * Enable or disable an item
diff --git a/cvpcb/dialogs/dialog_config_equfiles.h b/cvpcb/dialogs/dialog_config_equfiles.h
index aeb4868..5aba8a8 100644
--- a/cvpcb/dialogs/dialog_config_equfiles.h
+++ b/cvpcb/dialogs/dialog_config_equfiles.h
@@ -44,14 +44,14 @@ private:
     void Init();
 
     // Virtual event handlers
-    void OnCloseWindow( wxCloseEvent& event );
-    void OnOkClick( wxCommandEvent& event );
-    void OnCancelClick( wxCommandEvent& event );
-    void OnAddFiles( wxCommandEvent& event );
-    void OnEditEquFile( wxCommandEvent& event );
-    void OnRemoveFiles( wxCommandEvent& event );
-    void OnButtonMoveUp( wxCommandEvent& event );
-    void OnButtonMoveDown( wxCommandEvent& event );
+    virtual void OnCloseWindow( wxCloseEvent& event );
+    virtual void OnOkClick( wxCommandEvent& event );
+    virtual void OnCancelClick( wxCommandEvent& event );
+    virtual void OnAddFiles( wxCommandEvent& event );
+    virtual void OnEditEquFile( wxCommandEvent& event );
+    virtual void OnRemoveFiles( wxCommandEvent& event );
+    virtual void OnButtonMoveUp( wxCommandEvent& event );
+    virtual void OnButtonMoveDown( wxCommandEvent& event );
 
     int getEnvVarCount()                // Get the number of rows in env var table
     {
diff --git a/cvpcb/dialogs/dialog_display_options.h b/cvpcb/dialogs/dialog_display_options.h
index fada3f0..3157e1d 100644
--- a/cvpcb/dialogs/dialog_display_options.h
+++ b/cvpcb/dialogs/dialog_display_options.h
@@ -49,10 +49,10 @@ public:
 private:
     void initDialog( );
     void UpdateObjectSettings( void );
-    void OnApplyClick( wxCommandEvent& event );
-    void OnCancelClick( wxCommandEvent& event );
-    void OnOkClick( wxCommandEvent& event );
-    void OnMiddleBtnPanEnbl( wxCommandEvent& event )
+    virtual void OnApplyClick( wxCommandEvent& event );
+    virtual void OnCancelClick( wxCommandEvent& event );
+    virtual void OnOkClick( wxCommandEvent& event );
+    virtual void OnMiddleBtnPanEnbl( wxCommandEvent& event )
     {
         m_IsMiddleButtonPanLimited->Enable( m_IsMiddleButtonPan->GetValue() );
     }
diff --git a/cvpcb/dialogs/fp_conflict_assignment_selector.h b/cvpcb/dialogs/fp_conflict_assignment_selector.h
index 9beeb3f..f4c73ae 100644
--- a/cvpcb/dialogs/fp_conflict_assignment_selector.h
+++ b/cvpcb/dialogs/fp_conflict_assignment_selector.h
@@ -63,16 +63,16 @@ class DIALOG_FP_CONFLICT_ASSIGNMENT_SELECTOR : public DIALOG_FP_CONFLICT_ASSIGNM
         int GetSelection( const wxString& aReference );
 
     private:
-        void OnSize( wxSizeEvent& event );
+        virtual void OnSize( wxSizeEvent& event );
 
         // Virtual: called when clicking on the column title:
         // when it is a column choice, set all item choices.
-        void OnColumnClick( wxListEvent& event );
+        virtual void OnColumnClick( wxListEvent& event );
 
-        void OnItemClicked( wxMouseEvent& event );
+        virtual void OnItemClicked( wxMouseEvent& event );
 
-        void OnCancelClick( wxCommandEvent& event ) { EndModal( wxID_CANCEL ); }
-        void OnOKClick( wxCommandEvent& event ) { EndModal( wxID_OK ); }
+        virtual void OnCancelClick( wxCommandEvent& event ) { EndModal( wxID_CANCEL ); }
+        virtual void OnOKClick( wxCommandEvent& event ) { EndModal( wxID_OK ); }
 
         void recalculateColumns();
 
diff --git a/eeschema/class_libentry.h b/eeschema/class_libentry.h
index 7c6d086..80ca584 100644
--- a/eeschema/class_libentry.h
+++ b/eeschema/class_libentry.h
@@ -177,7 +177,7 @@ public:
     bool operator==( const LIB_ALIAS* aAlias ) const { return this == aAlias; }
 
 #if defined(DEBUG)
-    void Show( int nestLevel, std::ostream& os ) const { ShowDummy( os ); } // override
+    virtual void Show( int nestLevel, std::ostream& os ) const { ShowDummy( os ); } // override
 #endif
 };
 
@@ -744,7 +744,7 @@ public:
     bool operator==( const LIB_PART*  aPart ) const { return this == aPart; }
 
 #if defined(DEBUG)
-    void Show( int nestLevel, std::ostream& os ) const { ShowDummy( os ); } // override
+    virtual void Show( int nestLevel, std::ostream& os ) const { ShowDummy( os ); } // override
 #endif
 };
 
diff --git a/eeschema/class_netlist_object.h b/eeschema/class_netlist_object.h
index dba9243..e41a91e 100644
--- a/eeschema/class_netlist_object.h
+++ b/eeschema/class_netlist_object.h
@@ -129,7 +129,7 @@ private:
 public:
 
 #if defined(DEBUG)
-    void Show( std::ostream& out, int ndx ) const;      // override
+    virtual void Show( std::ostream& out, int ndx ) const;      // override
 
 #endif
 
diff --git a/eeschema/dialog_erc_listbox.h b/eeschema/dialog_erc_listbox.h
index 3e8e250..f74da6c 100644
--- a/eeschema/dialog_erc_listbox.h
+++ b/eeschema/dialog_erc_listbox.h
@@ -91,7 +91,7 @@ public:
      * @param n An index into the list.
      * @return wxString - the simple html text to show in the listbox.
      */
-    wxString OnGetItem( size_t n ) const
+    virtual wxString OnGetItem( size_t n ) const
     {
         if( m_MarkerList.size() > n )
         {
@@ -109,7 +109,7 @@ public:
      * @param n An index into the list.
      * @return wxString - the simple html text to show in the listbox.
      */
-    wxString OnGetItemMarkup( size_t n ) const
+    virtual wxString OnGetItemMarkup( size_t n ) const
     {
         return OnGetItem( n );
     }
diff --git a/eeschema/dialogs/dialog_annotate.cpp b/eeschema/dialogs/dialog_annotate.cpp
index 8cf2c1d..c14e833 100644
--- a/eeschema/dialogs/dialog_annotate.cpp
+++ b/eeschema/dialogs/dialog_annotate.cpp
@@ -60,9 +60,9 @@ private:
 
     /// Initialises member variables
     void InitValues();
-    void OnCancelClick( wxCommandEvent& event );
-    void OnClearAnnotationCmpClick( wxCommandEvent& event );
-    void OnApplyClick( wxCommandEvent& event );
+    virtual void OnCancelClick( wxCommandEvent& event );
+    virtual void OnClearAnnotationCmpClick( wxCommandEvent& event );
+    virtual void OnApplyClick( wxCommandEvent& event );
 
     // User functions:
     bool GetLevel();
diff --git a/eeschema/dialogs/dialog_bom.cpp b/eeschema/dialogs/dialog_bom.cpp
index 2de179f..df8b0be 100644
--- a/eeschema/dialogs/dialog_bom.cpp
+++ b/eeschema/dialogs/dialog_bom.cpp
@@ -169,15 +169,15 @@ public:
     ~DIALOG_BOM();
 
 private:
-    void OnPluginSelected( wxCommandEvent& event );
-    void OnRunPlugin( wxCommandEvent& event );
-    void OnCancelClick( wxCommandEvent& event );
-    void OnHelp( wxCommandEvent& event );
-    void OnAddPlugin( wxCommandEvent& event );
-    void OnRemovePlugin( wxCommandEvent& event );
-    void OnEditPlugin( wxCommandEvent& event );
-    void OnCommandLineEdited( wxCommandEvent& event );
-    void OnNameEdited( wxCommandEvent& event );
+    virtual void OnPluginSelected( wxCommandEvent& event );
+    virtual void OnRunPlugin( wxCommandEvent& event );
+    virtual void OnCancelClick( wxCommandEvent& event );
+    virtual void OnHelp( wxCommandEvent& event );
+    virtual void OnAddPlugin( wxCommandEvent& event );
+    virtual void OnRemovePlugin( wxCommandEvent& event );
+    virtual void OnEditPlugin( wxCommandEvent& event );
+    virtual void OnCommandLineEdited( wxCommandEvent& event );
+    virtual void OnNameEdited( wxCommandEvent& event );
 
     void pluginInit();
     void installPluginsList();
diff --git a/eeschema/dialogs/dialog_edit_component_in_lib.h b/eeschema/dialogs/dialog_edit_component_in_lib.h
index 829a8cc..1622ba9 100644
--- a/eeschema/dialogs/dialog_edit_component_in_lib.h
+++ b/eeschema/dialogs/dialog_edit_component_in_lib.h
@@ -50,20 +50,20 @@ private:
     void initDlg();
     void InitPanelDoc();
     void InitBasicPanel();
-    void OnCancelClick( wxCommandEvent& event );
-    void OnOkClick(wxCommandEvent& event);
-    void DeleteAllAliasOfPart(wxCommandEvent& event);
-    void DeleteAliasOfPart(wxCommandEvent& event);
-    void AddAliasOfPart(wxCommandEvent& event);
+    virtual void OnCancelClick( wxCommandEvent& event );
+    virtual void OnOkClick(wxCommandEvent& event);
+    virtual void DeleteAllAliasOfPart(wxCommandEvent& event);
+    virtual void DeleteAliasOfPart(wxCommandEvent& event);
+    virtual void AddAliasOfPart(wxCommandEvent& event);
     bool ChangeNbUnitsPerPackage(int newUnit);
     bool SetUnsetConvert();
-    void CopyDocFromRootToAlias(wxCommandEvent& event);
-    void BrowseAndSelectDocFile(wxCommandEvent& event);
+    virtual void CopyDocFromRootToAlias(wxCommandEvent& event);
+    virtual void BrowseAndSelectDocFile(wxCommandEvent& event);
 
-    void DeleteAllFootprintFilter(wxCommandEvent& event);
-    void DeleteOneFootprintFilter(wxCommandEvent& event);
-    void AddFootprintFilter(wxCommandEvent& event);
-    void EditOneFootprintFilter( wxCommandEvent& event );
+    virtual void DeleteAllFootprintFilter(wxCommandEvent& event);
+    virtual void DeleteOneFootprintFilter(wxCommandEvent& event);
+    virtual void AddFootprintFilter(wxCommandEvent& event);
+    virtual void EditOneFootprintFilter( wxCommandEvent& event );
 };
 
 #endif
diff --git a/eeschema/dialogs/dialog_edit_component_in_schematic.cpp b/eeschema/dialogs/dialog_edit_component_in_schematic.cpp
index fa281a2..87c0d9a 100644
--- a/eeschema/dialogs/dialog_edit_component_in_schematic.cpp
+++ b/eeschema/dialogs/dialog_edit_component_in_schematic.cpp
@@ -107,18 +107,18 @@ private:
     void setRowItem( int aFieldNdx, const SCH_FIELD& aField );
 
     // event handlers
-    void OnCloseDialog( wxCloseEvent& event );
-    void OnListItemDeselected( wxListEvent& event );
-    void OnListItemSelected( wxListEvent& event );
-    void OnCancelButtonClick( wxCommandEvent& event );
-    void OnOKButtonClick( wxCommandEvent& event );
-    void SetInitCmp( wxCommandEvent& event );
-    void addFieldButtonHandler( wxCommandEvent& event );
-    void deleteFieldButtonHandler( wxCommandEvent& event );
-    void moveUpButtonHandler( wxCommandEvent& event );
-    void showButtonHandler( wxCommandEvent& event );
-    void OnTestChipName( wxCommandEvent& event );
-    void OnSelectChipName( wxCommandEvent& event );
+    virtual void OnCloseDialog( wxCloseEvent& event );
+    virtual void OnListItemDeselected( wxListEvent& event );
+    virtual void OnListItemSelected( wxListEvent& event );
+    virtual void OnCancelButtonClick( wxCommandEvent& event );
+    virtual void OnOKButtonClick( wxCommandEvent& event );
+    virtual void SetInitCmp( wxCommandEvent& event );
+    virtual void addFieldButtonHandler( wxCommandEvent& event );
+    virtual void deleteFieldButtonHandler( wxCommandEvent& event );
+    virtual void moveUpButtonHandler( wxCommandEvent& event );
+    virtual void showButtonHandler( wxCommandEvent& event );
+    virtual void OnTestChipName( wxCommandEvent& event );
+    virtual void OnSelectChipName( wxCommandEvent& event );
 
     SCH_FIELD* findField( const wxString& aFieldName );
 
diff --git a/eeschema/dialogs/dialog_edit_label.cpp b/eeschema/dialogs/dialog_edit_label.cpp
index 7d12c68..99bcd96 100644
--- a/eeschema/dialogs/dialog_edit_label.cpp
+++ b/eeschema/dialogs/dialog_edit_label.cpp
@@ -51,7 +51,7 @@ public:
     DIALOG_LABEL_EDITOR( SCH_EDIT_FRAME* parent, SCH_TEXT* aTextItem );
 
 private:
-    void InitDialog( );
+    virtual void InitDialog( );
     virtual void OnEnterKey( wxCommandEvent& aEvent );
     virtual void OnOkClick( wxCommandEvent& aEvent );
     virtual void OnCancelClick( wxCommandEvent& aEvent );
diff --git a/eeschema/dialogs/dialog_edit_libentry_fields_in_lib.cpp b/eeschema/dialogs/dialog_edit_libentry_fields_in_lib.cpp
index 6195982..79140d1 100644
--- a/eeschema/dialogs/dialog_edit_libentry_fields_in_lib.cpp
+++ b/eeschema/dialogs/dialog_edit_libentry_fields_in_lib.cpp
@@ -59,12 +59,12 @@ public:
 
 private:
     // Events handlers:
-    void OnInitDialog( wxInitDialogEvent& event );
-    void OnCloseDialog( wxCloseEvent& event );
+    virtual void OnInitDialog( wxInitDialogEvent& event );
+    virtual void OnCloseDialog( wxCloseEvent& event );
 
-    void OnListItemDeselected( wxListEvent& event );
-    void OnListItemSelected( wxListEvent& event );
-    void addFieldButtonHandler( wxCommandEvent& event );
+    virtual void OnListItemDeselected( wxListEvent& event );
+    virtual void OnListItemSelected( wxListEvent& event );
+    virtual void addFieldButtonHandler( wxCommandEvent& event );
 
     /**
      * Function deleteFieldButtonHandler
@@ -73,12 +73,12 @@ private:
      * If a field is empty, it is removed.
      * if not empty, the text is removed.
      */
-    void deleteFieldButtonHandler( wxCommandEvent& event );
+    virtual void deleteFieldButtonHandler( wxCommandEvent& event );
 
-    void moveUpButtonHandler( wxCommandEvent& event );
-    void OnCancelButtonClick( wxCommandEvent& event );
-    void OnOKButtonClick( wxCommandEvent& event );
-    void showButtonHandler( wxCommandEvent& event );
+    virtual void moveUpButtonHandler( wxCommandEvent& event );
+    virtual void OnCancelButtonClick( wxCommandEvent& event );
+    virtual void OnOKButtonClick( wxCommandEvent& event );
+    virtual void showButtonHandler( wxCommandEvent& event );
 
     // internal functions:
     void setSelectedFieldNdx( int aFieldNdx );
diff --git a/eeschema/dialogs/dialog_edit_one_field.h b/eeschema/dialogs/dialog_edit_one_field.h
index 9ea079a..ca67965 100644
--- a/eeschema/dialogs/dialog_edit_one_field.h
+++ b/eeschema/dialogs/dialog_edit_one_field.h
@@ -91,19 +91,19 @@ protected:
      *
      * @param aEvent is the the wX event thrown when the button is clicked, this isn't used
      */
-    void OnTextValueSelectButtonClick( wxCommandEvent& aEvent );
+    virtual void OnTextValueSelectButtonClick( wxCommandEvent& aEvent );
 
-    void OnOkClick( wxCommandEvent& aEvent )
+    virtual void OnOkClick( wxCommandEvent& aEvent )
     {
         EndQuasiModal( wxID_OK );
     }
 
-    void OnCancelClick( wxCommandEvent& event )
+    virtual void OnCancelClick( wxCommandEvent& event )
     {
         EndQuasiModal( wxID_CANCEL );
     }
 
-    void OnCloseDialog( wxCloseEvent& aEvent )
+    virtual void OnCloseDialog( wxCloseEvent& aEvent )
     {
         EndQuasiModal( wxID_CANCEL );
     }
@@ -135,7 +135,7 @@ public:
 
     ~DIALOG_LIB_EDIT_ONE_FIELD() {};
 
-    void TransfertDataToField();
+    virtual void TransfertDataToField();
 
     /**
      * Function GetTextField
@@ -178,7 +178,7 @@ public:
 
     // ~DIALOG_SCH_EDIT_ONE_FIELD() {};
 
-    void TransfertDataToField();
+    virtual void TransfertDataToField();
 
     /**
      * Function GetTextField
diff --git a/eeschema/dialogs/dialog_eeschema_config.cpp b/eeschema/dialogs/dialog_eeschema_config.cpp
index 3293118..b0dbbf1 100644
--- a/eeschema/dialogs/dialog_eeschema_config.cpp
+++ b/eeschema/dialogs/dialog_eeschema_config.cpp
@@ -62,12 +62,12 @@ private:
 
     //------ event handlers, overiding the fbp handlers --------------
 
-    void OnCloseWindow( wxCloseEvent& event );
+    virtual void OnCloseWindow( wxCloseEvent& event );
 
     /* Remove a library to the library list.
      * The real list (m_Parent->m_ComponentLibFiles) is not changed, so the change can be canceled
      */
-    void OnRemoveLibClick( wxCommandEvent& event );
+    virtual void OnRemoveLibClick( wxCommandEvent& event );
 
     /* Insert or add a library to the library list:
      *   The new library is put in list before (insert button) the selection,
@@ -75,14 +75,14 @@ private:
      * The real list (m_Parent->m_ComponentLibFiles) is not changed, so the change
      * can be canceled
      */
-    void OnAddOrInsertLibClick( wxCommandEvent& event );
-
-    void OnAddOrInsertPath( wxCommandEvent& event );
-    void OnOkClick( wxCommandEvent& event );
-    void OnCancelClick( wxCommandEvent& event );
-    void OnRemoveUserPath( wxCommandEvent& event );
-    void OnButtonUpClick( wxCommandEvent& event );
-    void OnButtonDownClick( wxCommandEvent& event );
+    virtual void OnAddOrInsertLibClick( wxCommandEvent& event );
+
+    virtual void OnAddOrInsertPath( wxCommandEvent& event );
+    virtual void OnOkClick( wxCommandEvent& event );
+    virtual void OnCancelClick( wxCommandEvent& event );
+    virtual void OnRemoveUserPath( wxCommandEvent& event );
+    virtual void OnButtonUpClick( wxCommandEvent& event );
+    virtual void OnButtonDownClick( wxCommandEvent& event );
 };
 
 
diff --git a/eeschema/dialogs/dialog_eeschema_options.h b/eeschema/dialogs/dialog_eeschema_options.h
index 4c08fe3..6a7b317 100644
--- a/eeschema/dialogs/dialog_eeschema_options.h
+++ b/eeschema/dialogs/dialog_eeschema_options.h
@@ -58,14 +58,14 @@ protected:
      * Process the wxWidgets @a event produced when the user presses enter key
      * in template fieldname text control or template fieldvalue text control
      */
-    void OnEnterKey( wxCommandEvent& event );
+    virtual void OnEnterKey( wxCommandEvent& event );
 
     /**
      * Function OnVisibleFieldClick (virtual)
      * Process the wxWidgets @a event produced when the user click on
      * the check box which controls the field visibility
      */
-    void OnVisibleFieldClick( wxCommandEvent& event );
+    virtual void OnVisibleFieldClick( wxCommandEvent& event );
 
     /**
      * Function OnAddButtonClick
@@ -76,7 +76,7 @@ protected:
      *
      * Adds a new template fieldname (with default values) to the template fieldnames data
      */
-    void OnAddButtonClick( wxCommandEvent& event );
+    virtual void OnAddButtonClick( wxCommandEvent& event );
 
     /**
      * Function OnDeleteButtonClick
@@ -87,7 +87,7 @@ protected:
      *
      * Deletes the selected template fieldname from the template fieldnames data
      */
-    void OnDeleteButtonClick( wxCommandEvent& event );
+    virtual void OnDeleteButtonClick( wxCommandEvent& event );
 
     /**
      * Function OnEditControlKillFocus
@@ -121,7 +121,7 @@ protected:
      *
      * Processes data exchange between the edit panel and the selected template fieldname
      */
-    void OnTemplateFieldSelected( wxListEvent& event );
+    virtual void OnTemplateFieldSelected( wxListEvent& event );
 
     /**
      * Function RefreshTemplateFieldView
@@ -443,7 +443,7 @@ public:
     TEMPLATE_FIELDNAMES GetTemplateFields( void );
 
 private:
-    void OnMiddleBtnPanEnbl( wxCommandEvent& event )
+    virtual void OnMiddleBtnPanEnbl( wxCommandEvent& event )
     {
         m_checkMiddleButtonPanLimited->Enable( GetEnableMiddleButtonPan() );
     }
diff --git a/eeschema/dialogs/dialog_erc.h b/eeschema/dialogs/dialog_erc.h
index 13955f1..f254e10 100644
--- a/eeschema/dialogs/dialog_erc.h
+++ b/eeschema/dialogs/dialog_erc.h
@@ -62,15 +62,15 @@ private:
     void Init();
 
     // from DIALOG_ERC_BASE:
-    void OnCloseErcDialog( wxCloseEvent& event );
-    void OnErcCmpClick( wxCommandEvent& event );
-    void OnEraseDrcMarkersClick( wxCommandEvent& event );
-    void OnButtonCloseClick( wxCommandEvent& event );
-    void OnResetMatrixClick( wxCommandEvent& event );
-    void OnLeftClickMarkersList( wxCommandEvent& event );
+    virtual void OnCloseErcDialog( wxCloseEvent& event );
+    virtual void OnErcCmpClick( wxCommandEvent& event );
+    virtual void OnEraseDrcMarkersClick( wxCommandEvent& event );
+    virtual void OnButtonCloseClick( wxCommandEvent& event );
+    virtual void OnResetMatrixClick( wxCommandEvent& event );
+    virtual void OnLeftClickMarkersList( wxCommandEvent& event );
 
     // Double click on a marker info:
-    void OnLeftDblClickMarkersList( wxCommandEvent& event );
+    virtual void OnLeftDblClickMarkersList( wxCommandEvent& event );
 
     void TestErc( wxArrayString* aMessagesList );
     void DisplayERC_MarkersList();
diff --git a/eeschema/dialogs/dialog_lib_edit_pin.h b/eeschema/dialogs/dialog_lib_edit_pin.h
index 948a32a..3cc2327 100644
--- a/eeschema/dialogs/dialog_lib_edit_pin.h
+++ b/eeschema/dialogs/dialog_lib_edit_pin.h
@@ -44,11 +44,11 @@ public:
     DIALOG_LIB_EDIT_PIN( EDA_DRAW_FRAME* parent, LIB_PIN* aPin );
     ~DIALOG_LIB_EDIT_PIN();
 
-    void OnCloseDialog( wxCloseEvent& event );
-    void OnCancelButtonClick( wxCommandEvent& event );
-    void OnOKButtonClick( wxCommandEvent& event );
-    void OnPaintShowPanel( wxPaintEvent& event );
-    void OnPropertiesChange( wxCommandEvent& event );
+    virtual void OnCloseDialog( wxCloseEvent& event );
+    virtual void OnCancelButtonClick( wxCommandEvent& event );
+    virtual void OnOKButtonClick( wxCommandEvent& event );
+    virtual void OnPaintShowPanel( wxPaintEvent& event );
+    virtual void OnPropertiesChange( wxCommandEvent& event );
 
     void SetOrientationList( const wxArrayString& list, const BITMAP_DEF* aBitmaps );
     void SetOrientation( int orientation )
diff --git a/eeschema/dialogs/dialog_lib_edit_text.h b/eeschema/dialogs/dialog_lib_edit_text.h
index 24ad589..a3d2ba6 100644
--- a/eeschema/dialogs/dialog_lib_edit_text.h
+++ b/eeschema/dialogs/dialog_lib_edit_text.h
@@ -46,8 +46,8 @@ public:
 
 private:
     void initDlg( );
-    void OnOkClick( wxCommandEvent& aEvent );
-    void OnCancelClick( wxCommandEvent& aEvent );
+    virtual void OnOkClick( wxCommandEvent& aEvent );
+    virtual void OnCancelClick( wxCommandEvent& aEvent );
 };
 
 
diff --git a/eeschema/dialogs/dialog_lib_new_component.h b/eeschema/dialogs/dialog_lib_new_component.h
index b8b9619..a4fe426 100644
--- a/eeschema/dialogs/dialog_lib_new_component.h
+++ b/eeschema/dialogs/dialog_lib_new_component.h
@@ -39,8 +39,8 @@ public:
     /** Constructor */
     DIALOG_LIB_NEW_COMPONENT( wxWindow* parent );
 
-    void SetName( const wxString& name ) { m_textName->SetValue( name ); }
-    wxString GetName( void ) const { return m_textName->GetValue(); }
+    virtual void SetName( const wxString& name ) { m_textName->SetValue( name ); }
+    virtual wxString GetName( void ) const { return m_textName->GetValue(); }
 
     void SetReference( const wxString& reference )
     {
diff --git a/eeschema/dialogs/dialog_netlist.cpp b/eeschema/dialogs/dialog_netlist.cpp
index 7fc937f..c432fc3 100644
--- a/eeschema/dialogs/dialog_netlist.cpp
+++ b/eeschema/dialogs/dialog_netlist.cpp
@@ -136,24 +136,24 @@ private:
                                            const wxString & aCommandString,
                                            NETLIST_TYPE_ID aNetTypeId );
     void    InstallPageSpice();
-    void    GenNetlist( wxCommandEvent& event );
+    virtual void    GenNetlist( wxCommandEvent& event );
     void    RunSimulator( wxCommandEvent& event );
     void    NetlistUpdateOpt();
-    void    OnCancelClick( wxCommandEvent& event );
-    void    OnNetlistTypeSelection( wxNotebookEvent& event );
+    virtual void    OnCancelClick( wxCommandEvent& event );
+    virtual void    OnNetlistTypeSelection( wxNotebookEvent& event );
     void    SelectDefaultNetlistType( wxCommandEvent& event );
 
     /**
      * Function OnAddPlugin
      * Add a new panel for a new netlist plugin
      */
-    void    OnAddPlugin( wxCommandEvent& event );
+    virtual void    OnAddPlugin( wxCommandEvent& event );
 
     /**
      * Function OnDelPlugin
      * Remove a panel relative to a netlist plugin
      */
-    void    OnDelPlugin( wxCommandEvent& event );
+    virtual void    OnDelPlugin( wxCommandEvent& event );
 
     /**
      * Function WriteCurrentNetlistSetup
@@ -214,13 +214,13 @@ private:
      * Function OnOKClick
      * Validate info relative to a new netlist plugin
      */
-    void OnOKClick( wxCommandEvent& event );
-    void OnCancelClick( wxCommandEvent& event );
+    virtual void OnOKClick( wxCommandEvent& event );
+    virtual void OnCancelClick( wxCommandEvent& event );
 
     /*
      * Browse plugin files, and set m_CommandStringCtrl field
      */
-    void OnBrowsePlugins( wxCommandEvent& event );
+    virtual void OnBrowsePlugins( wxCommandEvent& event );
 };
 
 
diff --git a/eeschema/dialogs/dialog_plot_schematic.h b/eeschema/dialogs/dialog_plot_schematic.h
index 86298b2..7c1d139 100644
--- a/eeschema/dialogs/dialog_plot_schematic.h
+++ b/eeschema/dialogs/dialog_plot_schematic.h
@@ -63,10 +63,10 @@ public:
                                                         // and therefore should be saved
 
 private:
-    void OnPlotFormatSelection( wxCommandEvent& event );
-    void OnButtonPlotCurrentClick( wxCommandEvent& event );
-    void OnButtonPlotAllClick( wxCommandEvent& event );
-    void OnButtonCancelClick( wxCommandEvent& event );
+    virtual void OnPlotFormatSelection( wxCommandEvent& event );
+    virtual void OnButtonPlotCurrentClick( wxCommandEvent& event );
+    virtual void OnButtonPlotAllClick( wxCommandEvent& event );
+    virtual void OnButtonCancelClick( wxCommandEvent& event );
 
     void    initDlg();
 
@@ -82,7 +82,7 @@ private:
     /**
      * Set the m_outputDirectoryName variable to the selected directory from directory dialog.
      */
-    void OnOutputDirectoryBrowseClicked( wxCommandEvent& event );
+    virtual void OnOutputDirectoryBrowseClicked( wxCommandEvent& event );
 
     PlotFormat GetPlotFileFormat();
 
diff --git a/eeschema/dialogs/dialog_print_using_printer.cpp b/eeschema/dialogs/dialog_print_using_printer.cpp
index eb7e1c5..265df75 100644
--- a/eeschema/dialogs/dialog_print_using_printer.cpp
+++ b/eeschema/dialogs/dialog_print_using_printer.cpp
@@ -55,12 +55,12 @@ public:
     SCH_EDIT_FRAME* GetParent() const;
 
 private:
-    void OnCloseWindow( wxCloseEvent& event );
-    void OnInitDialog( wxInitDialogEvent& event );
-    void OnPageSetup( wxCommandEvent& event );
-    void OnPrintPreview( wxCommandEvent& event );
-    void OnPrintButtonClick( wxCommandEvent& event );
-    void OnButtonCancelClick( wxCommandEvent& event ) { Close(); }
+    virtual void OnCloseWindow( wxCloseEvent& event );
+    virtual void OnInitDialog( wxInitDialogEvent& event );
+    virtual void OnPageSetup( wxCommandEvent& event );
+    virtual void OnPrintPreview( wxCommandEvent& event );
+    virtual void OnPrintButtonClick( wxCommandEvent& event );
+    virtual void OnButtonCancelClick( wxCommandEvent& event ) { Close(); }
 
     void GetPrintOptions();
 };
@@ -84,10 +84,10 @@ public:
         m_Parent = aParent;
     }
     SCH_EDIT_FRAME* GetSchFrameParent() { return m_Parent->GetParent(); }
-    bool OnPrintPage( int page );
-    bool HasPage( int page );
-    bool OnBeginDocument( int startPage, int endPage );
-    void GetPageInfo( int* minPage, int* maxPage, int* selPageFrom, int* selPageTo );
+    virtual bool OnPrintPage( int page );
+    virtual bool HasPage( int page );
+    virtual bool OnBeginDocument( int startPage, int endPage );
+    virtual void GetPageInfo( int* minPage, int* maxPage, int* selPageFrom, int* selPageTo );
     void DrawPage( SCH_SCREEN* aScreen );
 };
 
@@ -110,7 +110,7 @@ public:
         return ( DIALOG_PRINT_USING_PRINTER* )wxWindow::GetParent();
     }
 
-    bool Show( bool show )      // overload
+    virtual bool Show( bool show )
     {
         bool        ret;
 
diff --git a/eeschema/dialogs/dialog_schematic_find.h b/eeschema/dialogs/dialog_schematic_find.h
index 287d347..94e2af9 100644
--- a/eeschema/dialogs/dialog_schematic_find.h
+++ b/eeschema/dialogs/dialog_schematic_find.h
@@ -154,15 +154,15 @@ class DIALOG_SCH_FIND : public DIALOG_SCH_FIND_BASE
 {
 protected:
     // Handlers for DIALOG_SCH_FIND_BASE events.
-    void OnClose( wxCloseEvent& aEvent );
-    void OnUpdateFindUI( wxUpdateUIEvent& aEvent );
-    void OnUpdateReplaceUI( wxUpdateUIEvent& aEvent );
-    void OnUpdateWholeWordUI( wxUpdateUIEvent& aEvent );
-    void OnUpdateWildcardUI( wxUpdateUIEvent& aEvent );
-
-    void OnFind( wxCommandEvent& aEvent );
-    void OnReplace( wxCommandEvent& aEvent );
-    void OnCancel( wxCommandEvent& aEvent );
+    virtual void OnClose( wxCloseEvent& aEvent );
+    virtual void OnUpdateFindUI( wxUpdateUIEvent& aEvent );
+    virtual void OnUpdateReplaceUI( wxUpdateUIEvent& aEvent );
+    virtual void OnUpdateWholeWordUI( wxUpdateUIEvent& aEvent );
+    virtual void OnUpdateWildcardUI( wxUpdateUIEvent& aEvent );
+
+    virtual void OnFind( wxCommandEvent& aEvent );
+    virtual void OnReplace( wxCommandEvent& aEvent );
+    virtual void OnCancel( wxCommandEvent& aEvent );
 
     void SendEvent( const wxEventType& aEventType );
 
diff --git a/eeschema/eeschema.cpp b/eeschema/eeschema.cpp
index 5f32e56..cc60966 100644
--- a/eeschema/eeschema.cpp
+++ b/eeschema/eeschema.cpp
@@ -68,11 +68,11 @@ static struct IFACE : public KIFACE_I
         KIFACE_I( aName, aType )
     {}
 
-    bool OnKifaceStart( PGM_BASE* aProgram, int aCtlBits );
+    virtual bool OnKifaceStart( PGM_BASE* aProgram, int aCtlBits );
 
-    void OnKifaceEnd();
+    virtual void OnKifaceEnd();
 
-    wxWindow* CreateWindow( wxWindow* aParent, int aClassId, KIWAY* aKiway, int aCtlBits = 0 )
+    virtual wxWindow* CreateWindow( wxWindow* aParent, int aClassId, KIWAY* aKiway, int aCtlBits = 0 )
     {
         switch( aClassId )
         {
@@ -121,7 +121,7 @@ static struct IFACE : public KIFACE_I
      *
      * @return void* - and must be cast into the know type.
      */
-    void* IfaceOrAddress( int aDataId )
+    virtual void* IfaceOrAddress( int aDataId )
     {
         return NULL;
     }
diff --git a/eeschema/lib_arc.h b/eeschema/lib_arc.h
index dcebbdf..7ef5dfe 100644
--- a/eeschema/lib_arc.h
+++ b/eeschema/lib_arc.h
@@ -60,14 +60,14 @@ class LIB_ARC : public LIB_ITEM
     /**
      * Draws the arc.
      */
-    void drawGraphic( EDA_DRAW_PANEL* aPanel, wxDC* aDC, const wxPoint& aOffset,
+    virtual void drawGraphic( EDA_DRAW_PANEL* aPanel, wxDC* aDC, const wxPoint& aOffset,
                       EDA_COLOR_T aColor, GR_DRAWMODE aDrawMode, void* aData,
                       const TRANSFORM& aTransform );
 
     /**
      * Draw the graphics when the arc is being edited.
      */
-    void drawEditGraphics( EDA_RECT* aClipBox, wxDC* aDC, EDA_COLOR_T aColor );
+    virtual void drawEditGraphics( EDA_RECT* aClipBox, wxDC* aDC, EDA_COLOR_T aColor );
 
     /**
      * Calculates the center, radius, and angles at \a aPosition when the arc is being edited.
@@ -76,7 +76,7 @@ class LIB_ARC : public LIB_ITEM
      *
      * @param aPosition - The current mouse position in drawing coordinates.
      */
-    void calcEdit( const wxPoint& aPosition );
+    virtual void calcEdit( const wxPoint& aPosition );
 
     /**
      * Calculate the radius and angle of an arc using the start, end, and center points.
@@ -90,58 +90,58 @@ public:
 
     ~LIB_ARC() { }
 
-    wxString GetClass() const
+    virtual wxString GetClass() const
     {
         return wxT( "LIB_ARC" );
     }
 
 
-    bool Save( OUTPUTFORMATTER& aFormatter );
+    virtual bool Save( OUTPUTFORMATTER& aFormatter );
 
-    bool Load( LINE_READER& aLineReader, wxString& aErrorMsg );
+    virtual bool Load( LINE_READER& aLineReader, wxString& aErrorMsg );
 
-    bool HitTest( const wxPoint& aPosition ) const;
+    virtual bool HitTest( const wxPoint& aPosition ) const;
 
-    bool HitTest( const wxPoint& aPosition, int aThreshold, const TRANSFORM& aTransform ) const;
+    virtual bool HitTest( const wxPoint& aPosition, int aThreshold, const TRANSFORM& aTransform ) const;
 
-    const EDA_RECT GetBoundingBox() const;  // Virtual
+    virtual const EDA_RECT GetBoundingBox() const;
 
-    void GetMsgPanelInfo( std::vector< MSG_PANEL_ITEM >& aList );
+    virtual void GetMsgPanelInfo( std::vector< MSG_PANEL_ITEM >& aList );
 
-    int GetPenSize() const;
+    virtual int GetPenSize() const;
 
-    void BeginEdit( STATUS_FLAGS aEditMode, const wxPoint aStartPoint = wxPoint( 0, 0 ) );
+    virtual void BeginEdit( STATUS_FLAGS aEditMode, const wxPoint aStartPoint = wxPoint( 0, 0 ) );
 
-    bool ContinueEdit( const wxPoint aNextPoint );
+    virtual bool ContinueEdit( const wxPoint aNextPoint );
 
-    void EndEdit( const wxPoint& aPosition, bool aAbort = false );
+    virtual void EndEdit( const wxPoint& aPosition, bool aAbort = false );
 
-    void SetOffset( const wxPoint& aOffset );
+    virtual void SetOffset( const wxPoint& aOffset );
 
-    bool Inside( EDA_RECT& aRect ) const;
+    virtual bool Inside( EDA_RECT& aRect ) const;
 
-    void Move( const wxPoint& aPosition );
+    virtual void Move( const wxPoint& aPosition );
 
-    wxPoint GetPosition() const { return m_Pos; }
+    virtual wxPoint GetPosition() const { return m_Pos; }
 
-    void MirrorHorizontal( const wxPoint& aCenter );
+    virtual void MirrorHorizontal( const wxPoint& aCenter );
 
-    void MirrorVertical( const wxPoint& aCenter );
+    virtual void MirrorVertical( const wxPoint& aCenter );
 
-    void Rotate( const wxPoint& aCenter, bool aRotateCCW = true );
+    virtual void Rotate( const wxPoint& aCenter, bool aRotateCCW = true );
 
-    void Plot( PLOTTER* aPlotter, const wxPoint& aOffset, bool aFill,
+    virtual void Plot( PLOTTER* aPlotter, const wxPoint& aOffset, bool aFill,
                const TRANSFORM& aTransform );
 
-    int GetWidth() const { return m_Width; }
+    virtual int GetWidth() const { return m_Width; }
 
-    void SetWidth( int aWidth ) { m_Width = aWidth; }
+    virtual void SetWidth( int aWidth ) { m_Width = aWidth; }
 
-    wxString GetSelectMenuText() const;
+    virtual wxString GetSelectMenuText() const;
 
-    BITMAP_DEF GetMenuImage() const { return  add_arc_xpm; }
+    virtual BITMAP_DEF GetMenuImage() const { return  add_arc_xpm; }
 
-    EDA_ITEM* Clone() const;
+    virtual EDA_ITEM* Clone() const;
 
 private:
 
@@ -154,7 +154,7 @@ private:
      *      - Arc start angle.
      *      - Arc end angle.
      */
-    int compare( const LIB_ITEM& aOther ) const;
+    virtual int compare( const LIB_ITEM& aOther ) const;
 };
 
 
diff --git a/eeschema/lib_bezier.h b/eeschema/lib_bezier.h
index 940b054..22c8c10 100644
--- a/eeschema/lib_bezier.h
+++ b/eeschema/lib_bezier.h
@@ -42,7 +42,7 @@ class LIB_BEZIER : public LIB_ITEM
     std::vector<wxPoint> m_BezierPoints;   // list of parameter (3|4)
     std::vector<wxPoint> m_PolyPoints;     // list of points (>= 2)
 
-    void drawGraphic( EDA_DRAW_PANEL* aPanel, wxDC* aDC, const wxPoint& aOffset,
+    virtual void drawGraphic( EDA_DRAW_PANEL* aPanel, wxDC* aDC, const wxPoint& aOffset,
                       EDA_COLOR_T aColor, GR_DRAWMODE aDrawMode, void* aData,
                       const TRANSFORM& aTransform );
 
@@ -53,55 +53,55 @@ public:
 
     ~LIB_BEZIER() { }
 
-    wxString GetClass() const
+    virtual wxString GetClass() const
     {
         return wxT( "LIB_BEZIER" );
     }
 
 
-    bool Save( OUTPUTFORMATTER& aFormatter );
+    virtual bool Save( OUTPUTFORMATTER& aFormatter );
 
-    bool Load( LINE_READER& aLineReader, wxString& aErrorMsg );
+    virtual bool Load( LINE_READER& aLineReader, wxString& aErrorMsg );
 
     void AddPoint( const wxPoint& aPoint );
 
-    void SetOffset( const wxPoint& aOffset );
+    virtual void SetOffset( const wxPoint& aOffset );
 
     /**
      * @return the number of corners
      */
     unsigned GetCornerCount() const { return m_PolyPoints.size(); }
 
-    bool HitTest( const wxPoint& aPosition ) const;
+    virtual bool HitTest( const wxPoint& aPosition ) const;
 
-    bool HitTest( const wxPoint& aPosRef, int aThreshold, const TRANSFORM& aTransform ) const;
+    virtual bool HitTest( const wxPoint& aPosRef, int aThreshold, const TRANSFORM& aTransform ) const;
 
-    const EDA_RECT GetBoundingBox() const;  // Virtual
+    virtual const EDA_RECT GetBoundingBox() const;
 
-    bool Inside( EDA_RECT& aRect ) const;
+    virtual bool Inside( EDA_RECT& aRect ) const;
 
-    void Move( const wxPoint& aPosition );
+    virtual void Move( const wxPoint& aPosition );
 
-    wxPoint GetPosition() const { return m_PolyPoints[0]; }
+    virtual wxPoint GetPosition() const { return m_PolyPoints[0]; }
 
-    void MirrorHorizontal( const wxPoint& aCenter );
+    virtual void MirrorHorizontal( const wxPoint& aCenter );
 
-    void MirrorVertical( const wxPoint& aCenter );
+    virtual void MirrorVertical( const wxPoint& aCenter );
 
-    void Rotate( const wxPoint& aCenter, bool aRotateCCW = true );
+    virtual void Rotate( const wxPoint& aCenter, bool aRotateCCW = true );
 
-    void Plot( PLOTTER* aPlotter, const wxPoint& aOffset, bool aFill,
+    virtual void Plot( PLOTTER* aPlotter, const wxPoint& aOffset, bool aFill,
                const TRANSFORM& aTransform );
 
-    int GetWidth() const { return m_Width; }
+    virtual int GetWidth() const { return m_Width; }
 
-    void SetWidth( int aWidth ) { m_Width = aWidth; }
+    virtual void SetWidth( int aWidth ) { m_Width = aWidth; }
 
-    int GetPenSize( ) const;
+    virtual int GetPenSize( ) const;
 
-    void GetMsgPanelInfo( std::vector< MSG_PANEL_ITEM >& aList );
+    virtual void GetMsgPanelInfo( std::vector< MSG_PANEL_ITEM >& aList );
 
-    EDA_ITEM* Clone() const;
+    virtual EDA_ITEM* Clone() const;
 
 private:
 
@@ -112,7 +112,7 @@ private:
      *      - Bezier horizontal (X) point position.
      *      - Bezier vertical (Y) point position.
      */
-    int compare( const LIB_ITEM& aOther ) const;
+    virtual int compare( const LIB_ITEM& aOther ) const;
 };
 
 
diff --git a/eeschema/lib_circle.h b/eeschema/lib_circle.h
index fe6ee3c..cf2fada 100644
--- a/eeschema/lib_circle.h
+++ b/eeschema/lib_circle.h
@@ -38,11 +38,11 @@ class LIB_CIRCLE : public LIB_ITEM
     wxPoint m_Pos;            // Position or centre (Arc and Circle) or start point (segments).
     int     m_Width;          // Line width.
 
-    void drawGraphic( EDA_DRAW_PANEL* aPanel, wxDC* aDC, const wxPoint& aOffset,
+    virtual void drawGraphic( EDA_DRAW_PANEL* aPanel, wxDC* aDC, const wxPoint& aOffset,
                       EDA_COLOR_T aColor, GR_DRAWMODE aDrawMode, void* aData,
                       const TRANSFORM& aTransform );
 
-    void calcEdit( const wxPoint& aPosition );
+    virtual void calcEdit( const wxPoint& aPosition );
 
 public:
     LIB_CIRCLE( LIB_PART * aParent );
@@ -51,58 +51,58 @@ public:
 
     ~LIB_CIRCLE() { }
 
-    wxString GetClass() const
+    virtual wxString GetClass() const
     {
         return wxT( "LIB_CIRCLE" );
     }
 
 
-    bool Save( OUTPUTFORMATTER& aFormatter );
+    virtual bool Save( OUTPUTFORMATTER& aFormatter );
 
-    bool Load( LINE_READER& aLineReader, wxString& aErrorMsg );
+    virtual bool Load( LINE_READER& aLineReader, wxString& aErrorMsg );
 
-    bool HitTest( const wxPoint& aPosition ) const;
+    virtual bool HitTest( const wxPoint& aPosition ) const;
 
-    bool HitTest( const wxPoint& aPosRef, int aThreshold, const TRANSFORM& aTransform ) const;
+    virtual bool HitTest( const wxPoint& aPosRef, int aThreshold, const TRANSFORM& aTransform ) const;
 
-    int GetPenSize( ) const;
+    virtual int GetPenSize( ) const;
 
-    const EDA_RECT GetBoundingBox() const;  // Virtual
+    virtual const EDA_RECT GetBoundingBox() const;
 
-    void GetMsgPanelInfo( std::vector< MSG_PANEL_ITEM >& aList );
+    virtual void GetMsgPanelInfo( std::vector< MSG_PANEL_ITEM >& aList );
 
-    void BeginEdit( STATUS_FLAGS aEditMode, const wxPoint aStartPoint = wxPoint( 0, 0 ) );
+    virtual void BeginEdit( STATUS_FLAGS aEditMode, const wxPoint aStartPoint = wxPoint( 0, 0 ) );
 
-    bool ContinueEdit( const wxPoint aNextPoint );
+    virtual bool ContinueEdit( const wxPoint aNextPoint );
 
-    void EndEdit( const wxPoint& aPosition, bool aAbort = false );
+    virtual void EndEdit( const wxPoint& aPosition, bool aAbort = false );
 
-    void SetOffset( const wxPoint& aOffset );
+    virtual void SetOffset( const wxPoint& aOffset );
 
-    bool Inside( EDA_RECT& aRect ) const;
+    virtual bool Inside( EDA_RECT& aRect ) const;
 
-    void Move( const wxPoint& aPosition );
+    virtual void Move( const wxPoint& aPosition );
 
-    wxPoint GetPosition() const { return m_Pos; }
+    virtual wxPoint GetPosition() const { return m_Pos; }
 
-    void MirrorHorizontal( const wxPoint& aCenter );
+    virtual void MirrorHorizontal( const wxPoint& aCenter );
 
-    void MirrorVertical( const wxPoint& aCenter );
+    virtual void MirrorVertical( const wxPoint& aCenter );
 
-    void Rotate( const wxPoint& aCenter, bool aRotateCCW = true );
+    virtual void Rotate( const wxPoint& aCenter, bool aRotateCCW = true );
 
-    void Plot( PLOTTER* aPlotter, const wxPoint& aOffset, bool aFill,
+    virtual void Plot( PLOTTER* aPlotter, const wxPoint& aOffset, bool aFill,
                const TRANSFORM& aTransform );
 
-    int GetWidth() const { return m_Width; }
+    virtual int GetWidth() const { return m_Width; }
 
-    void SetWidth( int aWidth ) { m_Width = aWidth; }
+    virtual void SetWidth( int aWidth ) { m_Width = aWidth; }
 
-    wxString GetSelectMenuText() const;
+    virtual wxString GetSelectMenuText() const;
 
-    BITMAP_DEF GetMenuImage() const { return  add_circle_xpm; }
+    virtual BITMAP_DEF GetMenuImage() const { return  add_circle_xpm; }
 
-    EDA_ITEM* Clone() const;
+    virtual EDA_ITEM* Clone() const;
 
 private:
 
@@ -114,7 +114,7 @@ private:
      *      - Circle vertical (Y) position.
      *      - Circle radius.
      */
-    int compare( const LIB_ITEM& aOther ) const;
+    virtual int compare( const LIB_ITEM& aOther ) const;
 };
 
 
diff --git a/eeschema/lib_collectors.h b/eeschema/lib_collectors.h
index 293c33f..20a9312 100644
--- a/eeschema/lib_collectors.h
+++ b/eeschema/lib_collectors.h
@@ -114,7 +114,7 @@ public:
      * @return SEARCH_RESULT #SEARCH_QUIT if the iterator is to stop the scan,
      *                       else #SEARCH_CONTINUE;
      */
-    SEARCH_RESULT Inspect( EDA_ITEM* aItem, const void* aTestData = NULL );
+    virtual SEARCH_RESULT Inspect( EDA_ITEM* aItem, const void* aTestData = NULL );
 
     /**
      * Function Collect
diff --git a/eeschema/lib_draw_item.h b/eeschema/lib_draw_item.h
index 47ca7a4..cb6a460 100644
--- a/eeschema/lib_draw_item.h
+++ b/eeschema/lib_draw_item.h
@@ -420,7 +420,7 @@ public:
     FILL_T GetFillMode() const { return m_Fill; }
 
 #if defined(DEBUG)
-    void Show( int nestLevel, std::ostream& os ) const { ShowDummy( os ); } // override
+    virtual void Show( int nestLevel, std::ostream& os ) const { ShowDummy( os ); } // override
 #endif
 
 private:
diff --git a/eeschema/lib_field.h b/eeschema/lib_field.h
index d768b56..2ad7374 100644
--- a/eeschema/lib_field.h
+++ b/eeschema/lib_field.h
@@ -70,7 +70,7 @@ class LIB_FIELD : public LIB_ITEM, public EDA_TEXT
      * the m_Text
      * </p>
      */
-    void drawGraphic( EDA_DRAW_PANEL* aPanel, wxDC* aDC, const wxPoint& aOffset,
+    virtual void drawGraphic( EDA_DRAW_PANEL* aPanel, wxDC* aDC, const wxPoint& aOffset,
                       EDA_COLOR_T aColor, GR_DRAWMODE aDrawMode, void* aData,
                       const TRANSFORM& aTransform );
 
@@ -79,7 +79,7 @@ class LIB_FIELD : public LIB_ITEM, public EDA_TEXT
      *
      * @param aPosition - The position to edit the circle in drawing coordinates.
      */
-    void calcEdit( const wxPoint& aPosition );
+    virtual void calcEdit( const wxPoint& aPosition );
 
 public:
 
@@ -91,7 +91,7 @@ public:
 
     ~LIB_FIELD();
 
-    wxString GetClass() const
+    virtual wxString GetClass() const
     {
         return wxT( "LIB_FIELD" );
     }
@@ -132,11 +132,11 @@ public:
 
     void SetId( int aId ) { m_id = aId; }
 
-    int GetPenSize( ) const;
+    virtual int GetPenSize( ) const;
 
-    bool Save( OUTPUTFORMATTER& aFormatter );
+    virtual bool Save( OUTPUTFORMATTER& aFormatter );
 
-    bool Load( LINE_READER& aLineReader, wxString& errorMsg );
+    virtual bool Load( LINE_READER& aLineReader, wxString& errorMsg );
 
     /**
      * Copy parameters of this field to another field. Pointers are not copied.
@@ -165,13 +165,13 @@ public:
         return (m_Attributs & TEXT_NO_VISIBLE) == 0 ? true : false;
     }
 
-    const EDA_RECT GetBoundingBox() const;    // Virtual
+    virtual const EDA_RECT GetBoundingBox() const;
 
-    void GetMsgPanelInfo( std::vector< MSG_PANEL_ITEM >& aList );
+    virtual void GetMsgPanelInfo( std::vector< MSG_PANEL_ITEM >& aList );
 
-    bool HitTest( const wxPoint& aPosition ) const;
+    virtual bool HitTest( const wxPoint& aPosition ) const;
 
-    bool HitTest( const wxPoint &aPosition, int aThreshold, const TRANSFORM& aTransform ) const;
+    virtual bool HitTest( const wxPoint &aPosition, int aThreshold, const TRANSFORM& aTransform ) const;
 
     void operator=( const LIB_FIELD& field )
     {
@@ -205,15 +205,15 @@ public:
      */
     wxString GetFullText( int unit = 1 );
 
-    EDA_COLOR_T GetDefaultColor();
+    virtual EDA_COLOR_T GetDefaultColor();
 
-    void BeginEdit( STATUS_FLAGS aEditMode, const wxPoint aStartPoint = wxPoint( 0, 0 ) );
+    virtual void BeginEdit( STATUS_FLAGS aEditMode, const wxPoint aStartPoint = wxPoint( 0, 0 ) );
 
-    bool ContinueEdit( const wxPoint aNextPoint );
+    virtual bool ContinueEdit( const wxPoint aNextPoint );
 
-    void EndEdit( const wxPoint& aPosition, bool aAbort = false );
+    virtual void EndEdit( const wxPoint& aPosition, bool aAbort = false );
 
-    void Rotate();
+    virtual void Rotate();
 
     /**
      * Sets the field text to \a aText.
@@ -226,34 +226,34 @@ public:
      *
      * @param aText - New text value.
      */
-    void SetText( const wxString& aText );
+    virtual void SetText( const wxString& aText );
 
-    void SetOffset( const wxPoint& aOffset );
+    virtual void SetOffset( const wxPoint& aOffset );
 
-    bool Inside( EDA_RECT& aRect ) const;
+    virtual bool Inside( EDA_RECT& aRect ) const;
 
-    void Move( const wxPoint& aPosition );
+    virtual void Move( const wxPoint& aPosition );
 
-    wxPoint GetPosition() const { return m_Pos; }
+    virtual wxPoint GetPosition() const { return m_Pos; }
 
-    void MirrorHorizontal( const wxPoint& aCenter );
+    virtual void MirrorHorizontal( const wxPoint& aCenter );
 
-    void MirrorVertical( const wxPoint& aCenter );
+    virtual void MirrorVertical( const wxPoint& aCenter );
 
-    void Rotate( const wxPoint& aCenter, bool aRotateCCW = true );
+    virtual void Rotate( const wxPoint& aCenter, bool aRotateCCW = true );
 
-    void Plot( PLOTTER* aPlotter, const wxPoint& aOffset, bool aFill,
+    virtual void Plot( PLOTTER* aPlotter, const wxPoint& aOffset, bool aFill,
                const TRANSFORM& aTransform );
 
-    int GetWidth() const { return m_Thickness; }
+    virtual int GetWidth() const { return m_Thickness; }
 
-    void SetWidth( int aWidth ) { m_Thickness = aWidth; }
+    virtual void SetWidth( int aWidth ) { m_Thickness = aWidth; }
 
-    wxString GetSelectMenuText() const;
+    virtual wxString GetSelectMenuText() const;
 
-    BITMAP_DEF GetMenuImage() const { return  move_field_xpm; }
+    virtual BITMAP_DEF GetMenuImage() const { return  move_field_xpm; }
 
-    EDA_ITEM* Clone() const;
+    virtual EDA_ITEM* Clone() const;
 
 private:
 
@@ -269,7 +269,7 @@ private:
      *      - Field width.
      *      - Field height.
      */
-    int compare( const LIB_ITEM& aOther ) const;
+    virtual int compare( const LIB_ITEM& aOther ) const;
 };
 
 typedef std::vector< LIB_FIELD > LIB_FIELDS;
diff --git a/eeschema/lib_pin.h b/eeschema/lib_pin.h
index 72a84a1..f65aa19 100644
--- a/eeschema/lib_pin.h
+++ b/eeschema/lib_pin.h
@@ -115,7 +115,7 @@ class LIB_PIN : public LIB_ITEM
      *    is useful to draw moving component in fast mode)
      * @param aTransform Transform Matrix (rotation, mirror ..)
      */
-    void drawGraphic( EDA_DRAW_PANEL* aPanel, wxDC* aDC, const wxPoint& aOffset,
+    virtual void drawGraphic( EDA_DRAW_PANEL* aPanel, wxDC* aDC, const wxPoint& aOffset,
                       EDA_COLOR_T aColor, GR_DRAWMODE aDrawMode, void* aData,
                       const TRANSFORM& aTransform );
 
@@ -126,28 +126,28 @@ public:
 
     ~LIB_PIN() { }
 
-    wxString GetClass() const
+    virtual wxString GetClass() const
     {
         return wxT( "LIB_PIN" );
     }
 
 #if defined(DEBUG)
-    void Show( int nestLevel, std::ostream& os ) const;   // virtual override
+    virtual void Show( int nestLevel, std::ostream& os ) const;   // override
 #endif
 
-    bool Save( OUTPUTFORMATTER& aFormatter );
+    virtual bool Save( OUTPUTFORMATTER& aFormatter );
 
-    bool Load( LINE_READER& aLineReader, wxString& aErrorMsg );
+    virtual bool Load( LINE_READER& aLineReader, wxString& aErrorMsg );
 
-    bool HitTest( const wxPoint& aPosition ) const;
+    virtual bool HitTest( const wxPoint& aPosition ) const;
 
-    bool HitTest( const wxPoint &aPosRef, int aThreshold, const TRANSFORM& aTransform ) const;
+    virtual bool HitTest( const wxPoint &aPosRef, int aThreshold, const TRANSFORM& aTransform ) const;
 
-    void GetMsgPanelInfo( std::vector< MSG_PANEL_ITEM >& aList );
+    virtual void GetMsgPanelInfo( std::vector< MSG_PANEL_ITEM >& aList );
 
-    bool Matches( wxFindReplaceData& aSearchData, void* aAuxData, wxPoint* aFindLocation );
+    virtual bool Matches( wxFindReplaceData& aSearchData, void* aAuxData, wxPoint* aFindLocation );
 
-    const EDA_RECT GetBoundingBox() const;    // Virtual
+    virtual const EDA_RECT GetBoundingBox() const;
 
     /**
      * Function PinEndPoint
@@ -249,7 +249,7 @@ public:
      */
     void SetOrientation( int aOrientation );
 
-    void Rotate();
+    virtual void Rotate();
 
     int GetShape() const { return m_shape; }
 
@@ -353,7 +353,7 @@ public:
      */
     bool IsVisible() { return ( m_attributes & PIN_INVISIBLE ) == 0; }
 
-    int GetPenSize() const;
+    virtual int GetPenSize() const;
 
     /**
      * Function DrawPinSymbol
@@ -474,32 +474,32 @@ public:
      */
     static const BITMAP_DEF* GetElectricalTypeSymbols();
 
-    void SetOffset( const wxPoint& aOffset );
+    virtual void SetOffset( const wxPoint& aOffset );
 
-    bool Inside( EDA_RECT& aRect ) const;
+    virtual bool Inside( EDA_RECT& aRect ) const;
 
-    void Move( const wxPoint& aPosition );
+    virtual void Move( const wxPoint& aPosition );
 
-    wxPoint GetPosition() const { return m_position; }
+    virtual wxPoint GetPosition() const { return m_position; }
 
-    void MirrorHorizontal( const wxPoint& aCenter );
+    virtual void MirrorHorizontal( const wxPoint& aCenter );
 
-    void MirrorVertical( const wxPoint& aCenter );
+    virtual void MirrorVertical( const wxPoint& aCenter );
 
-    void Rotate( const wxPoint& aCenter, bool aRotateCCW = true );
+    virtual void Rotate( const wxPoint& aCenter, bool aRotateCCW = true );
 
-    void Plot( PLOTTER* aPlotter, const wxPoint& aOffset, bool aFill,
+    virtual void Plot( PLOTTER* aPlotter, const wxPoint& aOffset, bool aFill,
                const TRANSFORM& aTransform );
 
-    int GetWidth() const { return m_width; }
+    virtual int GetWidth() const { return m_width; }
 
-    void SetWidth( int aWidth );
+    virtual void SetWidth( int aWidth );
 
-    BITMAP_DEF GetMenuImage() const;
+    virtual BITMAP_DEF GetMenuImage() const;
 
-    wxString GetSelectMenuText() const;
+    virtual wxString GetSelectMenuText() const;
 
-    EDA_ITEM* Clone() const;
+    virtual EDA_ITEM* Clone() const;
 
 private:
 
@@ -512,7 +512,7 @@ private:
      *      - Pin horizontal (X) position.
      *      - Pin vertical (Y) position.
      */
-    int compare( const LIB_ITEM& aOther ) const;
+    virtual int compare( const LIB_ITEM& aOther ) const;
 };
 
 
diff --git a/eeschema/lib_polyline.h b/eeschema/lib_polyline.h
index 88e397f..1eb5b9b 100644
--- a/eeschema/lib_polyline.h
+++ b/eeschema/lib_polyline.h
@@ -39,11 +39,11 @@ class LIB_POLYLINE : public LIB_ITEM
 
     int m_ModifyIndex;                        // Index of the polyline point to modify
 
-    void drawGraphic( EDA_DRAW_PANEL* aPanel, wxDC* aDC, const wxPoint& aOffset,
+    virtual void drawGraphic( EDA_DRAW_PANEL* aPanel, wxDC* aDC, const wxPoint& aOffset,
                       EDA_COLOR_T aColor, GR_DRAWMODE aDrawMode, void* aData,
                       const TRANSFORM& aTransform );
 
-    void calcEdit( const wxPoint& aPosition );
+    virtual void calcEdit( const wxPoint& aPosition );
 
 public:
     LIB_POLYLINE( LIB_PART * aParent );
@@ -52,15 +52,15 @@ public:
 
     ~LIB_POLYLINE() { }
 
-    wxString GetClass() const
+    virtual wxString GetClass() const
     {
         return wxT( "LIB_POLYLINE" );
     }
 
 
-    bool Save( OUTPUTFORMATTER& aFormatter );
+    virtual bool Save( OUTPUTFORMATTER& aFormatter );
 
-    bool Load( LINE_READER& aLineReader, wxString& aErrorMsg );
+    virtual bool Load( LINE_READER& aLineReader, wxString& aErrorMsg );
 
     void AddPoint( const wxPoint& aPoint );
 
@@ -74,48 +74,48 @@ public:
      */
     unsigned GetCornerCount() const { return m_PolyPoints.size(); }
 
-    bool HitTest( const wxPoint& aPosition ) const;
+    virtual bool HitTest( const wxPoint& aPosition ) const;
 
-    bool HitTest( const wxPoint &aPosition, int aThreshold, const TRANSFORM& aTransform ) const;
+    virtual bool HitTest( const wxPoint &aPosition, int aThreshold, const TRANSFORM& aTransform ) const;
 
-    const EDA_RECT GetBoundingBox() const;    // Virtual
+    virtual const EDA_RECT GetBoundingBox() const;
 
-    int GetPenSize( ) const;
+    virtual int GetPenSize( ) const;
 
-    void GetMsgPanelInfo( std::vector< MSG_PANEL_ITEM >& aList );
+    virtual void GetMsgPanelInfo( std::vector< MSG_PANEL_ITEM >& aList );
 
-    void BeginEdit( STATUS_FLAGS aEditMode, const wxPoint aStartPoint = wxPoint( 0, 0 ) );
+    virtual void BeginEdit( STATUS_FLAGS aEditMode, const wxPoint aStartPoint = wxPoint( 0, 0 ) );
 
-    bool ContinueEdit( const wxPoint aNextPoint );
+    virtual bool ContinueEdit( const wxPoint aNextPoint );
 
-    void EndEdit( const wxPoint& aPosition, bool aAbort = false );
+    virtual void EndEdit( const wxPoint& aPosition, bool aAbort = false );
 
-    void SetOffset( const wxPoint& aOffset );
+    virtual void SetOffset( const wxPoint& aOffset );
 
-    bool Inside( EDA_RECT& aRect ) const;
+    virtual bool Inside( EDA_RECT& aRect ) const;
 
-    void Move( const wxPoint& aPosition );
+    virtual void Move( const wxPoint& aPosition );
 
-    wxPoint GetPosition() const { return m_PolyPoints[0]; }
+    virtual wxPoint GetPosition() const { return m_PolyPoints[0]; }
 
-    void MirrorHorizontal( const wxPoint& aCenter );
+    virtual void MirrorHorizontal( const wxPoint& aCenter );
 
-    void MirrorVertical( const wxPoint& aCenter );
+    virtual void MirrorVertical( const wxPoint& aCenter );
 
-    void Rotate( const wxPoint& aCenter, bool aRotateCCW = true );
+    virtual void Rotate( const wxPoint& aCenter, bool aRotateCCW = true );
 
-    void Plot( PLOTTER* aPlotter, const wxPoint& aOffset, bool aFill,
+    virtual void Plot( PLOTTER* aPlotter, const wxPoint& aOffset, bool aFill,
                const TRANSFORM& aTransform );
 
-    int GetWidth() const { return m_Width; }
+    virtual int GetWidth() const { return m_Width; }
 
-    void SetWidth( int aWidth ) { m_Width = aWidth; }
+    virtual void SetWidth( int aWidth ) { m_Width = aWidth; }
 
-    wxString GetSelectMenuText() const;
+    virtual wxString GetSelectMenuText() const;
 
-    BITMAP_DEF GetMenuImage() const { return  add_polygon_xpm; }
+    virtual BITMAP_DEF GetMenuImage() const { return  add_polygon_xpm; }
 
-    EDA_ITEM* Clone() const;
+    virtual EDA_ITEM* Clone() const;
 
 private:
 
@@ -126,7 +126,7 @@ private:
      *      - Line segment point horizontal (X) position.
      *      - Line segment point vertical (Y) position.
      */
-    int compare( const LIB_ITEM& aOther ) const;
+    virtual int compare( const LIB_ITEM& aOther ) const;
 };
 
 
diff --git a/eeschema/lib_rectangle.h b/eeschema/lib_rectangle.h
index 6df93c9..376796c 100644
--- a/eeschema/lib_rectangle.h
+++ b/eeschema/lib_rectangle.h
@@ -41,11 +41,11 @@ class LIB_RECTANGLE  : public LIB_ITEM
     bool    m_isHeightLocked;       // Flag: Keep height locked
     bool    m_isStartPointSelected; // Flag: is the upper left edge selected?
 
-    void drawGraphic( EDA_DRAW_PANEL* aPanel, wxDC* aDC, const wxPoint& aOffset,
+    virtual void drawGraphic( EDA_DRAW_PANEL* aPanel, wxDC* aDC, const wxPoint& aOffset,
                       EDA_COLOR_T aColor, GR_DRAWMODE aDrawMode, void* aData,
                       const TRANSFORM& aTransform );
 
-    void calcEdit( const wxPoint& aPosition );
+    virtual void calcEdit( const wxPoint& aPosition );
 
 public:
     LIB_RECTANGLE( LIB_PART * aParent );
@@ -54,59 +54,59 @@ public:
 
     ~LIB_RECTANGLE() { }
 
-    wxString GetClass() const
+    virtual wxString GetClass() const
     {
         return wxT( "LIB_RECTANGLE" );
     }
 
     void SetEndPosition( const wxPoint& aPosition ) { m_End = aPosition; }
 
-    bool Save( OUTPUTFORMATTER& aFormatter );
+    virtual bool Save( OUTPUTFORMATTER& aFormatter );
 
-    bool Load( LINE_READER& aLineReader, wxString& aErrorMsg );
+    virtual bool Load( LINE_READER& aLineReader, wxString& aErrorMsg );
 
-    bool HitTest( const wxPoint& aPosition ) const;
+    virtual bool HitTest( const wxPoint& aPosition ) const;
 
-    bool HitTest( const wxPoint &aPosRef, int aThreshold, const TRANSFORM& aTransform ) const;
+    virtual bool HitTest( const wxPoint &aPosRef, int aThreshold, const TRANSFORM& aTransform ) const;
 
-    int GetPenSize( ) const;
+    virtual int GetPenSize( ) const;
 
-    const EDA_RECT GetBoundingBox() const;    // Virtual
+    virtual const EDA_RECT GetBoundingBox() const;
 
-    void GetMsgPanelInfo( std::vector< MSG_PANEL_ITEM >& aList );
+    virtual void GetMsgPanelInfo( std::vector< MSG_PANEL_ITEM >& aList );
 
-    void BeginEdit( STATUS_FLAGS aEditMode, const wxPoint aStartPoint = wxPoint( 0, 0 ) );
+    virtual void BeginEdit( STATUS_FLAGS aEditMode, const wxPoint aStartPoint = wxPoint( 0, 0 ) );
 
-    bool ContinueEdit( const wxPoint aNextPoint );
+    virtual bool ContinueEdit( const wxPoint aNextPoint );
 
-    void EndEdit( const wxPoint& aPosition, bool aAbort = false );
+    virtual void EndEdit( const wxPoint& aPosition, bool aAbort = false );
 
-    void SetOffset( const wxPoint& aOffset );
+    virtual void SetOffset( const wxPoint& aOffset );
 
-    bool Inside( EDA_RECT& aRect ) const;
+    virtual bool Inside( EDA_RECT& aRect ) const;
 
-    void Move( const wxPoint& aPosition );
+    virtual void Move( const wxPoint& aPosition );
 
-    wxPoint GetPosition() const { return m_Pos; }
+    virtual wxPoint GetPosition() const { return m_Pos; }
 
-    void MirrorHorizontal( const wxPoint& aCenter );
+    virtual void MirrorHorizontal( const wxPoint& aCenter );
 
-    void MirrorVertical( const wxPoint& aCenter );
+    virtual void MirrorVertical( const wxPoint& aCenter );
 
-    void Rotate( const wxPoint& aCenter, bool aRotateCCW = true );
+    virtual void Rotate( const wxPoint& aCenter, bool aRotateCCW = true );
 
-    void Plot( PLOTTER* aPlotter, const wxPoint& aOffset, bool aFill,
+    virtual void Plot( PLOTTER* aPlotter, const wxPoint& aOffset, bool aFill,
                const TRANSFORM& aTransform );
 
-    int GetWidth() const { return m_Width; }
+    virtual int GetWidth() const { return m_Width; }
 
-    void SetWidth( int aWidth ) { m_Width = aWidth; }
+    virtual void SetWidth( int aWidth ) { m_Width = aWidth; }
 
-    wxString GetSelectMenuText() const;
+    virtual wxString GetSelectMenuText() const;
 
-    BITMAP_DEF GetMenuImage() const { return  add_rectangle_xpm; }
+    virtual BITMAP_DEF GetMenuImage() const { return  add_rectangle_xpm; }
 
-    EDA_ITEM* Clone() const;
+    virtual EDA_ITEM* Clone() const;
 
 private:
 
@@ -119,7 +119,7 @@ private:
      *      - Rectangle horizontal (X) end position.
      *      - Rectangle vertical (Y) end position.
      */
-    int compare( const LIB_ITEM& aOther ) const;
+    virtual int compare( const LIB_ITEM& aOther ) const;
 };
 
 
diff --git a/eeschema/lib_text.h b/eeschema/lib_text.h
index 518678b..65f691c 100644
--- a/eeschema/lib_text.h
+++ b/eeschema/lib_text.h
@@ -48,11 +48,11 @@ class LIB_TEXT : public LIB_ITEM, public EDA_TEXT
     bool m_rotate;                ///< Flag to indicate a rotation occurred while editing.
     bool m_updateText;            ///< Flag to indicate text change occurred while editing.
 
-    void drawGraphic( EDA_DRAW_PANEL* aPanel, wxDC* aDC, const wxPoint& aOffset,
+    virtual void drawGraphic( EDA_DRAW_PANEL* aPanel, wxDC* aDC, const wxPoint& aOffset,
                       EDA_COLOR_T aColor, GR_DRAWMODE aDrawMode, void* aData,
                       const TRANSFORM& aTransform );
 
-    void calcEdit( const wxPoint& aPosition );
+    virtual void calcEdit( const wxPoint& aPosition );
 
 public:
     LIB_TEXT( LIB_PART * aParent );
@@ -61,7 +61,7 @@ public:
 
     ~LIB_TEXT() { }
 
-    wxString GetClass() const
+    virtual wxString GetClass() const
     {
         return wxT( "LIB_TEXT" );
     }
@@ -76,15 +76,15 @@ public:
      *
      * @param aText - New text value.
      */
-    void SetText( const wxString& aText );
+    virtual void SetText( const wxString& aText );
 
-    bool Save( OUTPUTFORMATTER& aFormatter );
+    virtual bool Save( OUTPUTFORMATTER& aFormatter );
 
-    bool Load( LINE_READER& aLineReader, wxString& aErrorMsg );
+    virtual bool Load( LINE_READER& aLineReader, wxString& aErrorMsg );
 
-    bool HitTest( const wxPoint& aPosition ) const;
+    virtual bool HitTest( const wxPoint& aPosition ) const;
 
-    bool HitTest( const wxPoint &aPosition, int aThreshold, const TRANSFORM& aTransform ) const;
+    virtual bool HitTest( const wxPoint &aPosition, int aThreshold, const TRANSFORM& aTransform ) const;
 
     bool HitTest( const EDA_RECT& aRect ) const
     {
@@ -92,46 +92,46 @@ public:
     }
 
 
-    int GetPenSize( ) const;
+    virtual int GetPenSize( ) const;
 
-    void GetMsgPanelInfo( std::vector< MSG_PANEL_ITEM >& aList );
+    virtual void GetMsgPanelInfo( std::vector< MSG_PANEL_ITEM >& aList );
 
-    const EDA_RECT GetBoundingBox() const;  // virtual
+    virtual const EDA_RECT GetBoundingBox() const;
 
-    void Rotate();
+    virtual void Rotate();
 
-    void BeginEdit( STATUS_FLAGS aEditMode, const wxPoint aStartPoint = wxPoint( 0, 0 ) );
+    virtual void BeginEdit( STATUS_FLAGS aEditMode, const wxPoint aStartPoint = wxPoint( 0, 0 ) );
 
-    bool ContinueEdit( const wxPoint aNextPoint );
+    virtual bool ContinueEdit( const wxPoint aNextPoint );
 
-    void EndEdit( const wxPoint& aPosition, bool aAbort = false );
+    virtual void EndEdit( const wxPoint& aPosition, bool aAbort = false );
 
-    void SetOffset( const wxPoint& aOffset );
+    virtual void SetOffset( const wxPoint& aOffset );
 
-    bool Inside( EDA_RECT& aRect ) const;
+    virtual bool Inside( EDA_RECT& aRect ) const;
 
-    void Move( const wxPoint& aPosition );
+    virtual void Move( const wxPoint& aPosition );
 
-    wxPoint GetPosition() const { return m_Pos; }
+    virtual wxPoint GetPosition() const { return m_Pos; }
 
-    void MirrorHorizontal( const wxPoint& aCenter );
+    virtual void MirrorHorizontal( const wxPoint& aCenter );
 
-    void MirrorVertical( const wxPoint& aCenter );
+    virtual void MirrorVertical( const wxPoint& aCenter );
 
-    void Rotate( const wxPoint& aCenter, bool aRotateCCW = true );
+    virtual void Rotate( const wxPoint& aCenter, bool aRotateCCW = true );
 
-    void Plot( PLOTTER* aPlotter, const wxPoint& aOffset, bool aFill,
+    virtual void Plot( PLOTTER* aPlotter, const wxPoint& aOffset, bool aFill,
                const TRANSFORM& aTransform );
 
-    int GetWidth() const { return m_Thickness; }
+    virtual int GetWidth() const { return m_Thickness; }
 
-    void SetWidth( int aWidth ) { m_Thickness = aWidth; }
+    virtual void SetWidth( int aWidth ) { m_Thickness = aWidth; }
 
-    wxString GetSelectMenuText() const;
+    virtual wxString GetSelectMenuText() const;
 
-    BITMAP_DEF GetMenuImage() const { return  add_text_xpm; }
+    virtual BITMAP_DEF GetMenuImage() const { return  add_text_xpm; }
 
-    EDA_ITEM* Clone() const;
+    virtual EDA_ITEM* Clone() const;
 
 private:
 
@@ -145,7 +145,7 @@ private:
      *      - Text width.
      *      - Text height.
      */
-    int compare( const LIB_ITEM& aOther ) const;
+    virtual int compare( const LIB_ITEM& aOther ) const;
 };
 
 
diff --git a/eeschema/libeditframe.h b/eeschema/libeditframe.h
index 4abccf5..e577281 100644
--- a/eeschema/libeditframe.h
+++ b/eeschema/libeditframe.h
@@ -175,7 +175,7 @@ public:
      static void SetDefaultPinLength( int aLength ) { m_defaultPinLength = aLength; }
 
 
-    void ReCreateMenuBar();
+    virtual void ReCreateMenuBar();
 
     /**
      * Function EnsureActiveLibExists
@@ -307,24 +307,24 @@ public:
      * Display reference like in schematic (a reference U is shown U? or U?A)
      * update status bar and info shown in the bottom of the window
      */
-    void RedrawActiveWindow( wxDC* DC, bool EraseBg );
+    virtual void RedrawActiveWindow( wxDC* DC, bool EraseBg );
 
     void OnCloseWindow( wxCloseEvent& Event );
-    void ReCreateHToolbar();
-    void ReCreateVToolbar();
+    virtual void ReCreateHToolbar();
+    virtual void ReCreateVToolbar();
     void CreateOptionToolbar();
-    void OnLeftClick( wxDC* DC, const wxPoint& MousePos );
-    bool OnRightClick( const wxPoint& MousePos, wxMenu* PopMenu );
-    double BestZoom();         // Returns the best zoom
-    void OnLeftDClick( wxDC* DC, const wxPoint& MousePos );
+    virtual void OnLeftClick( wxDC* DC, const wxPoint& MousePos );
+    virtual bool OnRightClick( const wxPoint& MousePos, wxMenu* PopMenu );
+    virtual double BestZoom();
+    virtual void OnLeftDClick( wxDC* DC, const wxPoint& MousePos );
 
-    bool OnHotKey( wxDC* aDC, int aHotKey, const wxPoint& aPosition, EDA_ITEM* aItem = NULL );
+    virtual bool OnHotKey( wxDC* aDC, int aHotKey, const wxPoint& aPosition, EDA_ITEM* aItem = NULL );
 
-    bool GeneralControl( wxDC* aDC, const wxPoint& aPosition, int aHotKey = 0 );
+    virtual bool GeneralControl( wxDC* aDC, const wxPoint& aPosition, int aHotKey = 0 );
 
-    void LoadSettings( wxConfigBase* aCfg );
+    virtual void LoadSettings( wxConfigBase* aCfg );
 
-    void SaveSettings( wxConfigBase* aCfg );
+    virtual void SaveSettings( wxConfigBase* aCfg );
 
     /**
      * Function CloseWindow
diff --git a/eeschema/sch_base_frame.h b/eeschema/sch_base_frame.h
index fed27d7..5da3e29 100644
--- a/eeschema/sch_base_frame.h
+++ b/eeschema/sch_base_frame.h
@@ -53,7 +53,7 @@ public:
                     const wxPoint& aPosition, const wxSize& aSize,
                     long aStyle, const wxString & aFrameName );
 
-    SCH_SCREEN* GetScreen() const;                              // overload EDA_DRAW_FRAME
+    virtual SCH_SCREEN* GetScreen() const;
 
     /**
      * Function GetZoomLevelIndicator
@@ -61,31 +61,31 @@ public:
      * level indicator in dialogs.
      * Virtual from the base class
      */
-    const wxString GetZoomLevelIndicator() const;
+    virtual const wxString GetZoomLevelIndicator() const;
 
-    void SetPageSettings( const PAGE_INFO& aPageSettings );     // overload EDA_DRAW_FRAME
-    const PAGE_INFO& GetPageSettings () const;                  // overload EDA_DRAW_FRAME
-    const wxSize GetPageSizeIU() const;                         // overload EDA_DRAW_FRAME
+    virtual void SetPageSettings( const PAGE_INFO& aPageSettings );
+    virtual const PAGE_INFO& GetPageSettings () const;
+    virtual const wxSize GetPageSizeIU() const;
 
-    const wxPoint& GetAuxOrigin() const;                        // overload EDA_DRAW_FRAME
-    void SetAuxOrigin( const wxPoint& aPosition );              // overload EDA_DRAW_FRAME
+    virtual const wxPoint& GetAuxOrigin() const;
+    virtual void SetAuxOrigin( const wxPoint& aPosition );
 
-    const wxPoint& GetGridOrigin() const                        // overload EDA_DRAW_FRAME
+    virtual const wxPoint& GetGridOrigin() const
     {
         static wxPoint zero;
         return zero;
     }
-    void SetGridOrigin( const wxPoint& aPoint )   {}            // overload EDA_DRAW_FRAME
+    virtual void SetGridOrigin( const wxPoint& aPoint ) {}
 
     // Virtual from EDA_DRAW_FRAME
     // the background color of the draw canvas:
-    EDA_COLOR_T GetDrawBgColor() const;
-    void SetDrawBgColor( EDA_COLOR_T aColor);
+    virtual EDA_COLOR_T GetDrawBgColor() const;
+    virtual void SetDrawBgColor( EDA_COLOR_T aColor);
 
-    const TITLE_BLOCK& GetTitleBlock() const;                   // overload EDA_DRAW_FRAME
-    void SetTitleBlock( const TITLE_BLOCK& aTitleBlock );       // overload EDA_DRAW_FRAME
+    virtual const TITLE_BLOCK& GetTitleBlock() const;
+    virtual void SetTitleBlock( const TITLE_BLOCK& aTitleBlock );
 
-    void UpdateStatusBar();                                     // overload EDA_DRAW_FRAME
+    virtual void UpdateStatusBar();
 
     /**
      * Function SelectComponentFromLib
diff --git a/eeschema/sch_bitmap.h b/eeschema/sch_bitmap.h
index 27e96e0..c96c69d 100644
--- a/eeschema/sch_bitmap.h
+++ b/eeschema/sch_bitmap.h
@@ -78,7 +78,7 @@ public:
     }
 
 
-    wxString GetClass() const
+    virtual wxString GetClass() const
     {
         return wxT( "SCH_BITMAP" );
     }
@@ -90,11 +90,11 @@ public:
      */
     wxSize GetSize() const;
 
-    const EDA_RECT GetBoundingBox() const;    // Virtual
+    virtual const EDA_RECT GetBoundingBox() const;
 
-    void SwapData( SCH_ITEM* aItem );
+    virtual void SwapData( SCH_ITEM* aItem );
 
-    void Draw( EDA_DRAW_PANEL* aPanel, wxDC* aDC, const wxPoint& aOffset,
+    virtual void Draw( EDA_DRAW_PANEL* aPanel, wxDC* aDC, const wxPoint& aOffset,
                GR_DRAWMODE aDrawMode, EDA_COLOR_T aColor = UNSPECIFIED_COLOR );
 
     /**
@@ -106,42 +106,42 @@ public:
      */
     bool ReadImageFile( const wxString& aFullFilename );
 
-    bool Save( FILE* aFile ) const;
+    virtual bool Save( FILE* aFile ) const;
 
-    bool Load( LINE_READER& aLine, wxString& aErrorMsg );
+    virtual bool Load( LINE_READER& aLine, wxString& aErrorMsg );
 
-    void Move( const wxPoint& aMoveVector )
+    virtual void Move( const wxPoint& aMoveVector )
     {
         m_Pos += aMoveVector;
     }
 
 
-    void MirrorY( int aYaxis_position );
+    virtual void MirrorY( int aYaxis_position );
 
-    void MirrorX( int aXaxis_position );
+    virtual void MirrorX( int aXaxis_position );
 
-    void Rotate( wxPoint aPosition );
+    virtual void Rotate( wxPoint aPosition );
 
-    bool IsSelectStateChanged( const wxRect& aRect );
+    virtual bool IsSelectStateChanged( const wxRect& aRect );
 
-    wxString GetSelectMenuText() const { return wxString( _( "Image" ) ); }
+    virtual wxString GetSelectMenuText() const { return wxString( _( "Image" ) ); }
 
-    BITMAP_DEF GetMenuImage() const { return image_xpm; }
+    virtual BITMAP_DEF GetMenuImage() const { return image_xpm; }
 
-    wxPoint GetPosition() const { return m_Pos; }
+    virtual wxPoint GetPosition() const { return m_Pos; }
 
-    void SetPosition( const wxPoint& aPosition ) { m_Pos = aPosition; }
+    virtual void SetPosition( const wxPoint& aPosition ) { m_Pos = aPosition; }
 
-    bool HitTest( const wxPoint& aPosition, int aAccuracy ) const;
+    virtual bool HitTest( const wxPoint& aPosition, int aAccuracy ) const;
 
-    bool HitTest( const EDA_RECT& aRect, bool aContained = false, int aAccuracy = 0 ) const;
+    virtual bool HitTest( const EDA_RECT& aRect, bool aContained = false, int aAccuracy = 0 ) const;
 
-    void Plot( PLOTTER* aPlotter );
+    virtual void Plot( PLOTTER* aPlotter );
 
-    EDA_ITEM* Clone() const;
+    virtual EDA_ITEM* Clone() const;
 
 #if defined(DEBUG)
-    void Show( int nestLevel, std::ostream& os ) const;     // override
+    virtual void Show( int nestLevel, std::ostream& os ) const;     // override
 #endif
 };
 
diff --git a/eeschema/sch_bus_entry.h b/eeschema/sch_bus_entry.h
index 09e1007..ac6ca36 100644
--- a/eeschema/sch_bus_entry.h
+++ b/eeschema/sch_bus_entry.h
@@ -57,7 +57,7 @@ public:
      *  and false for items moved with no reference to anchor
      * @return false for a bus entry
      */
-    bool IsMovableFromAnchorPoint() { return false; }
+    virtual bool IsMovableFromAnchorPoint() { return false; }
 
     wxPoint m_End() const;
 
@@ -77,49 +77,49 @@ public:
 
     void SetSize( const wxSize& aSize ) { m_size = aSize; }
 
-    void SwapData( SCH_ITEM* aItem );
+    virtual void SwapData( SCH_ITEM* aItem );
 
-    void Draw( EDA_DRAW_PANEL* aPanel, wxDC* aDC, const wxPoint& aOffset,
+    virtual void Draw( EDA_DRAW_PANEL* aPanel, wxDC* aDC, const wxPoint& aOffset,
                GR_DRAWMODE aDrawMode, EDA_COLOR_T aColor = UNSPECIFIED_COLOR );
 
     static bool Load( LINE_READER& aLine, wxString& aErrorMsg, SCH_ITEM **out );
 
-    const EDA_RECT GetBoundingBox() const;    // Virtual
+    virtual const EDA_RECT GetBoundingBox() const;
 
-    void Move( const wxPoint& aMoveVector )
+    virtual void Move( const wxPoint& aMoveVector )
     {
         m_pos += aMoveVector;
     }
 
 
-    void MirrorY( int aYaxis_position );
+    virtual void MirrorY( int aYaxis_position );
 
-    void MirrorX( int aXaxis_position );
+    virtual void MirrorX( int aXaxis_position );
 
-    void Rotate( wxPoint aPosition );
+    virtual void Rotate( wxPoint aPosition );
 
-    void GetEndPoints( std::vector <DANGLING_END_ITEM>& aItemList );
+    virtual void GetEndPoints( std::vector <DANGLING_END_ITEM>& aItemList );
 
-    bool IsSelectStateChanged( const wxRect& aRect );
+    virtual bool IsSelectStateChanged( const wxRect& aRect );
 
-    bool IsConnectable() const { return true; }
+    virtual bool IsConnectable() const { return true; }
 
-    void GetConnectionPoints( std::vector< wxPoint >& aPoints ) const;
+    virtual void GetConnectionPoints( std::vector< wxPoint >& aPoints ) const;
 
-    BITMAP_DEF GetMenuImage() const { return  add_entry_xpm; }
+    virtual BITMAP_DEF GetMenuImage() const { return  add_entry_xpm; }
 
-    wxPoint GetPosition() const { return m_pos; }
+    virtual wxPoint GetPosition() const { return m_pos; }
 
-    void SetPosition( const wxPoint& aPosition ) { m_pos = aPosition; }
+    virtual void SetPosition( const wxPoint& aPosition ) { m_pos = aPosition; }
 
-    bool HitTest( const wxPoint& aPosition, int aAccuracy ) const;
+    virtual bool HitTest( const wxPoint& aPosition, int aAccuracy ) const;
 
-    bool HitTest( const EDA_RECT& aRect, bool aContained = false, int aAccuracy = 0 ) const;
+    virtual bool HitTest( const EDA_RECT& aRect, bool aContained = false, int aAccuracy = 0 ) const;
 
-    void Plot( PLOTTER* aPlotter );
+    virtual void Plot( PLOTTER* aPlotter );
 
 #if defined(DEBUG)
-    void Show( int nestLevel, std::ostream& os ) const { ShowDummy( os ); } // override
+    virtual void Show( int nestLevel, std::ostream& os ) const { ShowDummy( os ); } // override
 #endif
 };
 
@@ -135,18 +135,18 @@ public:
 
     ~SCH_BUS_WIRE_ENTRY() { }
 
-    wxString GetClass() const
+    virtual wxString GetClass() const
     {
         return wxT( "SCH_BUS_WIRE_ENTRY" );
     }
 
-    bool Save( FILE* aFile ) const;
+    virtual bool Save( FILE* aFile ) const;
 
-    int GetPenSize() const;
+    virtual int GetPenSize() const;
 
-    wxString GetSelectMenuText() const;
+    virtual wxString GetSelectMenuText() const;
 
-    EDA_ITEM* Clone() const;
+    virtual EDA_ITEM* Clone() const;
 };
 
 /**
@@ -161,18 +161,18 @@ public:
 
     ~SCH_BUS_BUS_ENTRY() { }
 
-    wxString GetClass() const
+    virtual wxString GetClass() const
     {
         return wxT( "SCH_BUS_BUS_ENTRY" );
     }
 
-    bool Save( FILE* aFile ) const;
+    virtual bool Save( FILE* aFile ) const;
 
-    int GetPenSize() const;
+    virtual int GetPenSize() const;
 
-    wxString GetSelectMenuText() const;
+    virtual wxString GetSelectMenuText() const;
 
-    EDA_ITEM* Clone() const;
+    virtual EDA_ITEM* Clone() const;
 };
 
 #endif    // _SCH_BUS_ENTRY_H_
diff --git a/eeschema/sch_collectors.h b/eeschema/sch_collectors.h
index 0f7dba2..57d50e5 100644
--- a/eeschema/sch_collectors.h
+++ b/eeschema/sch_collectors.h
@@ -135,7 +135,7 @@ public:
         return NULL;
     }
 
-    SEARCH_RESULT Inspect( EDA_ITEM* aItem, const void* aTestData = NULL );
+    virtual SEARCH_RESULT Inspect( EDA_ITEM* aItem, const void* aTestData = NULL );
 
     /**
      * Function Collect
@@ -336,7 +336,7 @@ public:
      */
     bool ReplaceItem( SCH_SHEET_PATH* aSheetPath = NULL );
 
-    SEARCH_RESULT Inspect( EDA_ITEM* aItem, const void* aTestData = NULL );
+    virtual SEARCH_RESULT Inspect( EDA_ITEM* aItem, const void* aTestData = NULL );
 
     /**
      * Function Collect
@@ -373,7 +373,7 @@ public:
      * @return SEARCH_RESULT - SEARCH_QUIT if the Iterator is to stop the scan,
      *   else SCAN_CONTINUE;
      */
-    SEARCH_RESULT Inspect( EDA_ITEM* testItem, const void* testData );
+    virtual SEARCH_RESULT Inspect( EDA_ITEM* testItem, const void* testData );
 
     /**
      * Function Collect
diff --git a/eeschema/sch_component.h b/eeschema/sch_component.h
index 514e22c..3897d42 100644
--- a/eeschema/sch_component.h
+++ b/eeschema/sch_component.h
@@ -130,7 +130,7 @@ public:
 
     ~SCH_COMPONENT() { }
 
-    wxString GetClass() const
+    virtual wxString GetClass() const
     {
         return wxT( "SCH_COMPONENT" );
     }
@@ -143,7 +143,7 @@ public:
      * items which can be large (hierarchical sheets, compoments)
      * @return false for a componant
      */
-    bool IsMovableFromAnchorPoint() { return false; }
+    virtual bool IsMovableFromAnchorPoint() { return false; }
 
     void SetPartName( const wxString& aName, PART_LIBS* aLibs=NULL );
     const wxString& GetPartName() const        { return m_part_name; }
@@ -195,9 +195,9 @@ public:
      */
     int GetUnitCount() const;
 
-    bool Save( FILE* aFile ) const;
+    virtual bool Save( FILE* aFile ) const;
 
-    bool Load( LINE_READER& aLine, wxString& aErrorMsg );
+    virtual bool Load( LINE_READER& aLine, wxString& aErrorMsg );
 
     /**
      * Function SetOrientation
@@ -232,7 +232,7 @@ public:
      */
     wxPoint GetScreenCoord( const wxPoint& aPoint );
 
-    void GetMsgPanelInfo( std::vector< MSG_PANEL_ITEM >& aList );
+    virtual void GetMsgPanelInfo( std::vector< MSG_PANEL_ITEM >& aList );
 
     /**
      * Function ClearAnnotation
@@ -250,7 +250,7 @@ public:
      */
     void SetTimeStamp( time_t aNewTimeStamp );
 
-    const EDA_RECT GetBoundingBox() const;    // Virtual
+    virtual const EDA_RECT GetBoundingBox() const;
 
     //-----<Fields>-----------------------------------------------------------
 
@@ -302,7 +302,7 @@ public:
     /**
      * Virtual function, from the base class SCH_ITEM::Draw
      */
-    void Draw( EDA_DRAW_PANEL* aPanel, wxDC* aDC, const wxPoint& aOffset,
+    virtual void Draw( EDA_DRAW_PANEL* aPanel, wxDC* aDC, const wxPoint& aOffset,
                GR_DRAWMODE aDrawMode, EDA_COLOR_T aColor = UNSPECIFIED_COLOR )
     {
         Draw( aPanel, aDC, aOffset, aDrawMode, aColor, true );
@@ -324,7 +324,7 @@ public:
                GR_DRAWMODE aDrawMode, EDA_COLOR_T aColor,
                bool aDrawPinText );
 
-    void SwapData( SCH_ITEM* aItem );
+    virtual void SwapData( SCH_ITEM* aItem );
 
     // returns a unique ID, in the form of a path.
     wxString GetPath( const SCH_SHEET_PATH* sheet ) const;
@@ -375,7 +375,7 @@ public:
 
     // Geometric transforms (used in block operations):
 
-    void Move( const wxPoint& aMoveVector )
+    virtual void Move( const wxPoint& aMoveVector )
     {
         if( aMoveVector == wxPoint( 0, 0 ) )
             return;
@@ -388,21 +388,21 @@ public:
         SetModified();
     }
 
-    void MirrorY( int aYaxis_position );
+    virtual void MirrorY( int aYaxis_position );
 
-    void MirrorX( int aXaxis_position );
+    virtual void MirrorX( int aXaxis_position );
 
-    void Rotate( wxPoint aPosition );
+    virtual void Rotate( wxPoint aPosition );
 
-    bool Matches( wxFindReplaceData& aSearchData, void* aAuxData, wxPoint* aFindLocation );
+    virtual bool Matches( wxFindReplaceData& aSearchData, void* aAuxData, wxPoint* aFindLocation );
 
-    void GetEndPoints( std::vector<DANGLING_END_ITEM>& aItemList );
+    virtual void GetEndPoints( std::vector<DANGLING_END_ITEM>& aItemList );
 
     wxPoint GetPinPhysicalPosition( LIB_PIN* Pin );
 
-    bool IsSelectStateChanged( const wxRect& aRect );
+    virtual bool IsSelectStateChanged( const wxRect& aRect );
 
-    bool IsConnectable() const { return true; }
+    virtual bool IsConnectable() const { return true; }
 
     /**
      * @return true if the component is in netlist
@@ -411,9 +411,9 @@ public:
      */
     bool IsInNetlist() const;
 
-    void GetConnectionPoints( std::vector<wxPoint>& aPoints ) const;
+    virtual void GetConnectionPoints( std::vector<wxPoint>& aPoints ) const;
 
-    SEARCH_RESULT Visit( INSPECTOR* inspector, const void* testData,
+    virtual SEARCH_RESULT Visit( INSPECTOR* inspector, const void* testData,
                                  const KICAD_T scanTypes[] );
 
     /**
@@ -426,40 +426,40 @@ public:
      */
     LIB_ITEM* GetDrawItem( const wxPoint& aPosition, KICAD_T aType = TYPE_NOT_INIT );
 
-    wxString GetSelectMenuText() const;
+    virtual wxString GetSelectMenuText() const;
 
-    BITMAP_DEF GetMenuImage() const { return  add_component_xpm; }
+    virtual BITMAP_DEF GetMenuImage() const { return  add_component_xpm; }
 
-    void GetNetListItem( NETLIST_OBJECT_LIST& aNetListItems,
+    virtual void GetNetListItem( NETLIST_OBJECT_LIST& aNetListItems,
                          SCH_SHEET_PATH*      aSheetPath );
 
-    bool operator <( const SCH_ITEM& aItem ) const;
+    virtual bool operator <( const SCH_ITEM& aItem ) const;
 
     bool operator==( const SCH_COMPONENT& aComponent) const;
     bool operator!=( const SCH_COMPONENT& aComponent) const;
 
     SCH_ITEM& operator=( const SCH_ITEM& aItem );
 
-    bool IsReplaceable() const { return true; }
+    virtual bool IsReplaceable() const { return true; }
 
-    wxPoint GetPosition() const { return m_Pos; }
+    virtual wxPoint GetPosition() const { return m_Pos; }
 
-    void SetPosition( const wxPoint& aPosition ) { Move( aPosition - m_Pos ); }
+    virtual void SetPosition( const wxPoint& aPosition ) { Move( aPosition - m_Pos ); }
 
-    bool HitTest( const wxPoint& aPosition, int aAccuracy ) const;
+    virtual bool HitTest( const wxPoint& aPosition, int aAccuracy ) const;
 
-    bool HitTest( const EDA_RECT& aRect, bool aContained = false, int aAccuracy = 0 ) const;
+    virtual bool HitTest( const EDA_RECT& aRect, bool aContained = false, int aAccuracy = 0 ) const;
 
-    void Plot( PLOTTER* aPlotter );
+    virtual void Plot( PLOTTER* aPlotter );
 
-    EDA_ITEM* Clone() const;
+    virtual EDA_ITEM* Clone() const;
 
 #if defined(DEBUG)
-    void Show( int nestLevel, std::ostream& os ) const;     // override
+    virtual void Show( int nestLevel, std::ostream& os ) const;     // override
 #endif
 
 private:
-    bool doIsConnected( const wxPoint& aPosition ) const;
+    virtual bool doIsConnected( const wxPoint& aPosition ) const;
 };
 
 
diff --git a/eeschema/sch_field.h b/eeschema/sch_field.h
index 8b458bc..0cb9123 100644
--- a/eeschema/sch_field.h
+++ b/eeschema/sch_field.h
@@ -67,7 +67,7 @@ public:
 
     ~SCH_FIELD();
 
-    wxString GetClass() const
+    virtual wxString GetClass() const
     {
         return wxT( "SCH_FIELD" );
     }
@@ -100,7 +100,7 @@ public:
 
     void Place( SCH_EDIT_FRAME* frame, wxDC* DC );
 
-    const EDA_RECT GetBoundingBox() const;    // Virtual
+    virtual const EDA_RECT GetBoundingBox() const;
 
     /**
      * Function IsVoid
@@ -113,7 +113,7 @@ public:
         return len == 0 || ( len == 1 && m_Text[0] == wxChar( '~' ) );
     }
 
-    void SwapData( SCH_ITEM* aItem );
+    virtual void SwapData( SCH_ITEM* aItem );
 
     /**
      * Function ImportValues
@@ -123,7 +123,7 @@ public:
      */
     void ImportValues( const LIB_FIELD& aSource );
 
-    int GetPenSize() const;
+    virtual int GetPenSize() const;
 
     /**
      * Function IsVisible
@@ -134,20 +134,20 @@ public:
         return (m_Attributs & TEXT_NO_VISIBLE) == 0 ? true : false;
     }
 
-    void Draw( EDA_DRAW_PANEL* aPanel, wxDC* aDC, const wxPoint& aOffset,
+    virtual void Draw( EDA_DRAW_PANEL* aPanel, wxDC* aDC, const wxPoint& aOffset,
                GR_DRAWMODE aDrawMode, EDA_COLOR_T aColor = UNSPECIFIED_COLOR );
 
-    bool Save( FILE* aFile ) const;
+    virtual bool Save( FILE* aFile ) const;
 
     // Geometric transforms (used in block operations):
 
-    void Move( const wxPoint& aMoveVector )
+    virtual void Move( const wxPoint& aMoveVector )
     {
         m_Pos += aMoveVector;
     }
 
 
-    void Rotate( wxPoint aPosition );
+    virtual void Rotate( wxPoint aPosition );
 
     /**
      * @copydoc SCH_ITEM::MirrorX()
@@ -156,7 +156,7 @@ public:
      * when the parent component is mirrored.  This function is only needed by the
      * pure function of the master class.
      */
-    void MirrorX( int aXaxis_position )
+    virtual void MirrorX( int aXaxis_position )
     {
     }
 
@@ -167,34 +167,34 @@ public:
      * when the parent component is mirrored.  This function is only needed by the
      * pure function of the master class.
      */
-    void MirrorY( int aYaxis_position )
+    virtual void MirrorY( int aYaxis_position )
     {
     }
 
-    bool Matches( wxFindReplaceData& aSearchData, void* aAuxData, wxPoint* aFindLocation );
+    virtual bool Matches( wxFindReplaceData& aSearchData, void* aAuxData, wxPoint* aFindLocation );
 
-    bool Replace( wxFindReplaceData& aSearchData, void* aAuxData = NULL );
+    virtual bool Replace( wxFindReplaceData& aSearchData, void* aAuxData = NULL );
 
-    wxString GetSelectMenuText() const;
+    virtual wxString GetSelectMenuText() const;
 
-    BITMAP_DEF GetMenuImage() const;
+    virtual BITMAP_DEF GetMenuImage() const;
 
-    bool IsReplaceable() const { return true; }
+    virtual bool IsReplaceable() const { return true; }
 
-    wxPoint GetPosition() const;
+    virtual wxPoint GetPosition() const;
 
-    void SetPosition( const wxPoint& aPosition );
+    virtual void SetPosition( const wxPoint& aPosition );
 
-    bool HitTest( const wxPoint& aPosition, int aAccuracy ) const;
+    virtual bool HitTest( const wxPoint& aPosition, int aAccuracy ) const;
 
-    bool HitTest( const EDA_RECT& aRect, bool aContained = false, int aAccuracy = 0 ) const;
+    virtual bool HitTest( const EDA_RECT& aRect, bool aContained = false, int aAccuracy = 0 ) const;
 
-    void Plot( PLOTTER* aPlotter );
+    virtual void Plot( PLOTTER* aPlotter );
 
-    EDA_ITEM* Clone() const;
+    virtual EDA_ITEM* Clone() const;
 
 #if defined(DEBUG)
-    void Show( int nestLevel, std::ostream& os ) const { ShowDummy( os ); } // override
+    virtual void Show( int nestLevel, std::ostream& os ) const { ShowDummy( os ); } // override
 #endif
 };
 
diff --git a/eeschema/sch_junction.h b/eeschema/sch_junction.h
index 0e93d84..9c2cf13 100644
--- a/eeschema/sch_junction.h
+++ b/eeschema/sch_junction.h
@@ -45,7 +45,7 @@ public:
 
     ~SCH_JUNCTION() { }
 
-    wxString GetClass() const
+    virtual wxString GetClass() const
     {
         return wxT( "SCH_JUNCTION" );
     }
@@ -53,60 +53,60 @@ public:
     static int GetSymbolSize() { return m_symbolSize; }
     static void SetSymbolSize( int aSize ) { m_symbolSize = aSize; }
 
-    void SwapData( SCH_ITEM* aItem );
+    virtual void SwapData( SCH_ITEM* aItem );
 
-    const EDA_RECT GetBoundingBox() const;    // Virtual
+    virtual const EDA_RECT GetBoundingBox() const;
 
-    void Draw( EDA_DRAW_PANEL* aPanel, wxDC* aDC, const wxPoint& aOffset,
+    virtual void Draw( EDA_DRAW_PANEL* aPanel, wxDC* aDC, const wxPoint& aOffset,
                GR_DRAWMODE aDrawMode, EDA_COLOR_T aColor = UNSPECIFIED_COLOR );
 
-    bool Save( FILE* aFile ) const;
+    virtual bool Save( FILE* aFile ) const;
 
-    bool Load( LINE_READER& aLine, wxString& aErrorMsg );
+    virtual bool Load( LINE_READER& aLine, wxString& aErrorMsg );
 
-    void Move( const wxPoint& aMoveVector )
+    virtual void Move( const wxPoint& aMoveVector )
     {
         m_pos += aMoveVector;
     }
 
-    void MirrorY( int aYaxis_position );
+    virtual void MirrorY( int aYaxis_position );
 
-    void MirrorX( int aXaxis_position );
+    virtual void MirrorX( int aXaxis_position );
 
-    void Rotate( wxPoint aPosition );
+    virtual void Rotate( wxPoint aPosition );
 
-    void GetEndPoints( std::vector <DANGLING_END_ITEM>& aItemList );
+    virtual void GetEndPoints( std::vector <DANGLING_END_ITEM>& aItemList );
 
-    bool IsSelectStateChanged( const wxRect& aRect );
+    virtual bool IsSelectStateChanged( const wxRect& aRect );
 
-    bool IsConnectable() const { return true; }
+    virtual bool IsConnectable() const { return true; }
 
-    void GetConnectionPoints( std::vector< wxPoint >& aPoints ) const;
+    virtual void GetConnectionPoints( std::vector< wxPoint >& aPoints ) const;
 
-    wxString GetSelectMenuText() const { return wxString( _( "Junction" ) ); }
+    virtual wxString GetSelectMenuText() const { return wxString( _( "Junction" ) ); }
 
-    BITMAP_DEF GetMenuImage() const { return  add_junction_xpm; }
+    virtual BITMAP_DEF GetMenuImage() const { return  add_junction_xpm; }
 
-    void GetNetListItem( NETLIST_OBJECT_LIST& aNetListItems, SCH_SHEET_PATH* aSheetPath );
+    virtual void GetNetListItem( NETLIST_OBJECT_LIST& aNetListItems, SCH_SHEET_PATH* aSheetPath );
 
-    wxPoint GetPosition() const { return m_pos; }
+    virtual wxPoint GetPosition() const { return m_pos; }
 
-    void SetPosition( const wxPoint& aPosition ) { m_pos = aPosition; }
+    virtual void SetPosition( const wxPoint& aPosition ) { m_pos = aPosition; }
 
-    bool HitTest( const wxPoint& aPosition, int aAccuracy ) const;
+    virtual bool HitTest( const wxPoint& aPosition, int aAccuracy ) const;
 
-    bool HitTest( const EDA_RECT& aRect, bool aContained = false,
+    virtual bool HitTest( const EDA_RECT& aRect, bool aContained = false,
                           int aAccuracy = 0 ) const;
-    void Plot( PLOTTER* aPlotter );
+    virtual void Plot( PLOTTER* aPlotter );
 
-    EDA_ITEM* Clone() const;
+    virtual EDA_ITEM* Clone() const;
 
 #if defined(DEBUG)
-    void Show( int nestLevel, std::ostream& os ) const;     // override
+    virtual void Show( int nestLevel, std::ostream& os ) const;     // override
 #endif
 
 private:
-    bool doIsConnected( const wxPoint& aPosition ) const;
+    virtual bool doIsConnected( const wxPoint& aPosition ) const;
 };
 
 
diff --git a/eeschema/sch_line.h b/eeschema/sch_line.h
index 87a3972..09fb244 100644
--- a/eeschema/sch_line.h
+++ b/eeschema/sch_line.h
@@ -56,7 +56,7 @@ public:
     SCH_LINE* Next() const { return (SCH_LINE*) Pnext; }
     SCH_LINE* Back() const { return (SCH_LINE*) Pback; }
 
-    wxString GetClass() const
+    virtual wxString GetClass() const
     {
         return wxT( "SCH_LINE" );
     }
@@ -76,7 +76,7 @@ public:
 
     void SetEndPoint( const wxPoint& aPosition ) { m_end = aPosition; }
 
-    const EDA_RECT GetBoundingBox() const;    // Virtual
+    virtual const EDA_RECT GetBoundingBox() const;
 
     /**
      * Function GetLength
@@ -84,22 +84,22 @@ public:
      */
     double GetLength() const;
 
-    void Draw( EDA_DRAW_PANEL* aPanel, wxDC* aDC, const wxPoint& aOffset,
+    virtual void Draw( EDA_DRAW_PANEL* aPanel, wxDC* aDC, const wxPoint& aOffset,
                GR_DRAWMODE aDrawMode, EDA_COLOR_T aColor = UNSPECIFIED_COLOR );
 
-    bool Save( FILE* aFile ) const;
+    virtual bool Save( FILE* aFile ) const;
 
-    bool Load( LINE_READER& aLine, wxString& aErrorMsg );
+    virtual bool Load( LINE_READER& aLine, wxString& aErrorMsg );
 
-    int GetPenSize() const;
+    virtual int GetPenSize() const;
 
-    void Move( const wxPoint& aMoveVector );
+    virtual void Move( const wxPoint& aMoveVector );
 
-    void MirrorX( int aXaxis_position );
+    virtual void MirrorX( int aXaxis_position );
 
-    void MirrorY( int aYaxis_position );
+    virtual void MirrorY( int aYaxis_position );
 
-    void Rotate( wxPoint aPosition );
+    virtual void Rotate( wxPoint aPosition );
 
     /**
      * Check line against \a aLine to see if it overlaps and merge if it does.
@@ -113,44 +113,44 @@ public:
      */
     bool MergeOverlap( SCH_LINE* aLine );
 
-    void GetEndPoints( std::vector<DANGLING_END_ITEM>& aItemList );
+    virtual void GetEndPoints( std::vector<DANGLING_END_ITEM>& aItemList );
 
-    bool IsDanglingStateChanged( std::vector< DANGLING_END_ITEM >& aItemList );
+    virtual bool IsDanglingStateChanged( std::vector< DANGLING_END_ITEM >& aItemList );
 
-    bool IsDangling() const { return m_startIsDangling || m_endIsDangling; }
+    virtual bool IsDangling() const { return m_startIsDangling || m_endIsDangling; }
 
-    bool IsSelectStateChanged( const wxRect& aRect );
+    virtual bool IsSelectStateChanged( const wxRect& aRect );
 
-    bool IsConnectable() const;
+    virtual bool IsConnectable() const;
 
-    void GetConnectionPoints(std::vector< wxPoint >& aPoints ) const;
+    virtual void GetConnectionPoints(std::vector< wxPoint >& aPoints ) const;
 
-    wxString GetSelectMenuText() const;
+    virtual wxString GetSelectMenuText() const;
 
-    BITMAP_DEF GetMenuImage() const;
+    virtual BITMAP_DEF GetMenuImage() const;
 
-    void GetNetListItem( NETLIST_OBJECT_LIST& aNetListItems, SCH_SHEET_PATH* aSheetPath );
+    virtual void GetNetListItem( NETLIST_OBJECT_LIST& aNetListItems, SCH_SHEET_PATH* aSheetPath );
 
-    bool operator <( const SCH_ITEM& aItem ) const;
+    virtual bool operator <( const SCH_ITEM& aItem ) const;
 
-    wxPoint GetPosition() const { return m_start; }
+    virtual wxPoint GetPosition() const { return m_start; }
 
-    void SetPosition( const wxPoint& aPosition );
+    virtual void SetPosition( const wxPoint& aPosition );
 
-    bool HitTest( const wxPoint& aPosition, int aAccuracy ) const;
+    virtual bool HitTest( const wxPoint& aPosition, int aAccuracy ) const;
 
-    bool HitTest( const EDA_RECT& aRect, bool aContained = false, int aAccuracy = 0 ) const;
+    virtual bool HitTest( const EDA_RECT& aRect, bool aContained = false, int aAccuracy = 0 ) const;
 
-    void Plot( PLOTTER* aPlotter );
+    virtual void Plot( PLOTTER* aPlotter );
 
-    EDA_ITEM* Clone() const;
+    virtual EDA_ITEM* Clone() const;
 
 #if defined(DEBUG)
-    void Show( int nestLevel, std::ostream& os ) const; // override
+    virtual void Show( int nestLevel, std::ostream& os ) const; // override
 #endif
 
 private:
-    bool doIsConnected( const wxPoint& aPosition ) const;
+    virtual bool doIsConnected( const wxPoint& aPosition ) const;
 };
 
 
diff --git a/eeschema/sch_marker.h b/eeschema/sch_marker.h
index 343ff6b..82a8704 100644
--- a/eeschema/sch_marker.h
+++ b/eeschema/sch_marker.h
@@ -62,31 +62,31 @@ public:
 
     ~SCH_MARKER();
 
-    wxString GetClass() const
+    virtual wxString GetClass() const
     {
         return wxT( "SCH_MARKER" );
     }
 
-    void Draw( EDA_DRAW_PANEL* aPanel, wxDC* aDC, const wxPoint& aOffset,
+    virtual void Draw( EDA_DRAW_PANEL* aPanel, wxDC* aDC, const wxPoint& aOffset,
                GR_DRAWMODE aDraw_mode, EDA_COLOR_T aColor = UNSPECIFIED_COLOR );
 
-    bool Save( FILE* aFile ) const;
+    virtual bool Save( FILE* aFile ) const;
 
-    EDA_RECT const GetBoundingBox() const;      // Virtual
+    virtual EDA_RECT const GetBoundingBox() const;
 
     // Geometric transforms (used in block operations):
 
-    void Move( const wxPoint& aMoveVector )
+    virtual void Move( const wxPoint& aMoveVector )
     {
         m_Pos += aMoveVector;
     }
 
 
-    void MirrorY( int aYaxis_position );
+    virtual void MirrorY( int aYaxis_position );
 
-    void MirrorX( int aXaxis_position );
+    virtual void MirrorX( int aXaxis_position );
 
-    void Rotate( wxPoint aPosition );
+    virtual void Rotate( wxPoint aPosition );
 
     /**
      * Function Matches, virtual from the base class EDA_ITEM
@@ -98,26 +98,26 @@ public:
      * @param aFindLocation - a wxPoint where to put the location of matched item. can be NULL.
      * @return True if the DRC main or auxiliary text matches the search criteria.
      */
-    bool Matches( wxFindReplaceData& aSearchData, void* aAuxData, wxPoint* aFindLocation );
+    virtual bool Matches( wxFindReplaceData& aSearchData, void* aAuxData, wxPoint* aFindLocation );
 
-    void GetMsgPanelInfo( std::vector< MSG_PANEL_ITEM >& aList );
+    virtual void GetMsgPanelInfo( std::vector< MSG_PANEL_ITEM >& aList );
 
-    bool IsSelectStateChanged( const wxRect& aRect );
+    virtual bool IsSelectStateChanged( const wxRect& aRect );
 
-    wxString GetSelectMenuText() const { return wxString( _( "ERC Marker" ) ); }
+    virtual wxString GetSelectMenuText() const { return wxString( _( "ERC Marker" ) ); }
 
-    BITMAP_DEF GetMenuImage() const { return  erc_xpm; }
+    virtual BITMAP_DEF GetMenuImage() const { return  erc_xpm; }
 
-    wxPoint GetPosition() const { return m_Pos; }
+    virtual wxPoint GetPosition() const { return m_Pos; }
 
-    void SetPosition( const wxPoint& aPosition ) { m_Pos = aPosition; }
+    virtual void SetPosition( const wxPoint& aPosition ) { m_Pos = aPosition; }
 
-    bool HitTest( const wxPoint& aPosition, int aAccuracy ) const;
+    virtual bool HitTest( const wxPoint& aPosition, int aAccuracy ) const;
 
-    EDA_ITEM* Clone() const;
+    virtual EDA_ITEM* Clone() const;
 
 #if defined(DEBUG)
-    void Show( int nestLevel, std::ostream& os ) const;     // override
+    virtual void Show( int nestLevel, std::ostream& os ) const;     // override
 #endif
 };
 
diff --git a/eeschema/sch_no_connect.h b/eeschema/sch_no_connect.h
index 65ecd42..cc97fbc 100644
--- a/eeschema/sch_no_connect.h
+++ b/eeschema/sch_no_connect.h
@@ -46,67 +46,67 @@ public:
 
     ~SCH_NO_CONNECT() { }
 
-    wxString GetClass() const
+    virtual wxString GetClass() const
     {
         return wxT( "SCH_NO_CONNECT" );
     }
 
-    int GetPenSize() const;
+    virtual int GetPenSize() const;
 
-    void SwapData( SCH_ITEM* aItem );
+    virtual void SwapData( SCH_ITEM* aItem );
 
-    void Draw( EDA_DRAW_PANEL* aPanel, wxDC* aDC, const wxPoint& aOffset,
+    virtual void Draw( EDA_DRAW_PANEL* aPanel, wxDC* aDC, const wxPoint& aOffset,
                GR_DRAWMODE aDrawMode, EDA_COLOR_T aColor = UNSPECIFIED_COLOR );
 
-    bool Save( FILE* aFile ) const;
+    virtual bool Save( FILE* aFile ) const;
 
-    bool Load( LINE_READER& aLine, wxString& aErrorMsg );
+    virtual bool Load( LINE_READER& aLine, wxString& aErrorMsg );
 
-    const EDA_RECT GetBoundingBox() const;  // Virtual
+    virtual const EDA_RECT GetBoundingBox() const;
 
-    // Geometric transforms (used in block operations):
+    // Geometric transforms (used in block operations)l:
 
-    void Move( const wxPoint& aMoveVector )
+    virtual void Move( const wxPoint& aMoveVector )
     {
         m_pos += aMoveVector;
     }
 
-    void MirrorY( int aYaxis_position );
+    virtual void MirrorY( int aYaxis_position );
 
-    void MirrorX( int aXaxis_position );
+    virtual void MirrorX( int aXaxis_position );
 
-    void Rotate( wxPoint aPosition );
+    virtual void Rotate( wxPoint aPosition );
 
-    bool IsSelectStateChanged( const wxRect& aRect );
+    virtual bool IsSelectStateChanged( const wxRect& aRect );
 
-    bool IsConnectable() const { return true; }
+    virtual bool IsConnectable() const { return true; }
 
-    void GetConnectionPoints( std::vector< wxPoint >& aPoints ) const;
+    virtual void GetConnectionPoints( std::vector< wxPoint >& aPoints ) const;
 
-    wxString GetSelectMenuText() const { return wxString( _( "No Connect" ) ); }
+    virtual wxString GetSelectMenuText() const { return wxString( _( "No Connect" ) ); }
 
-    BITMAP_DEF GetMenuImage() const { return noconn_xpm; }
+    virtual BITMAP_DEF GetMenuImage() const { return noconn_xpm; }
 
-    void GetNetListItem( NETLIST_OBJECT_LIST& aNetListItems, SCH_SHEET_PATH* aSheetPath );
+    virtual void GetNetListItem( NETLIST_OBJECT_LIST& aNetListItems, SCH_SHEET_PATH* aSheetPath );
 
-    wxPoint GetPosition() const { return m_pos; }
+    virtual wxPoint GetPosition() const { return m_pos; }
 
-    void SetPosition( const wxPoint& aPosition ) { m_pos = aPosition; }
+    virtual void SetPosition( const wxPoint& aPosition ) { m_pos = aPosition; }
 
-    bool HitTest( const wxPoint& aPosition, int aAccuracy ) const;
+    virtual bool HitTest( const wxPoint& aPosition, int aAccuracy ) const;
 
-    bool HitTest( const EDA_RECT& aRect, bool aContained = false, int aAccuracy = 0 ) const;
+    virtual bool HitTest( const EDA_RECT& aRect, bool aContained = false, int aAccuracy = 0 ) const;
 
-    void Plot( PLOTTER* aPlotter );
+    virtual void Plot( PLOTTER* aPlotter );
 
-    EDA_ITEM* Clone() const;
+    virtual EDA_ITEM* Clone() const;
 
 #if defined(DEBUG)
-    void Show( int nestLevel, std::ostream& os ) const { ShowDummy( os ); } // override
+    virtual void Show( int nestLevel, std::ostream& os ) const { ShowDummy( os ); } // override
 #endif
 
 private:
-    bool doIsConnected( const wxPoint& aPosition ) const;
+    virtual bool doIsConnected( const wxPoint& aPosition ) const;
 };
 
 
diff --git a/eeschema/sch_sheet.h b/eeschema/sch_sheet.h
index 8ceff70..6c90d70 100644
--- a/eeschema/sch_sheet.h
+++ b/eeschema/sch_sheet.h
@@ -88,7 +88,7 @@ public:
 
     ~SCH_SHEET_PIN() { }
 
-    wxString GetClass() const
+    virtual wxString GetClass() const
     {
         return wxT( "SCH_SHEET_PIN" );
     }
@@ -101,9 +101,9 @@ public:
      *  and false for items moved with no reference to anchor
      * @return false for a hierarchical sheet pin
      */
-    bool IsMovableFromAnchorPoint() { return false; }
+    virtual bool IsMovableFromAnchorPoint() { return false; }
 
-    void Draw( EDA_DRAW_PANEL* aPanel, wxDC* aDC, const wxPoint& aOffset,
+    virtual void Draw( EDA_DRAW_PANEL* aPanel, wxDC* aDC, const wxPoint& aOffset,
                GR_DRAWMODE aDrawMode, EDA_COLOR_T aColor = UNSPECIFIED_COLOR );
 
     /**
@@ -112,11 +112,11 @@ public:
      * @param aPoints = a buffer to fill with polygon corners coordinates
      * @param aPos = Position of the shape
      */
-    void CreateGraphicShape( std::vector <wxPoint>& aPoints, const wxPoint& aPos );
+    virtual void CreateGraphicShape( std::vector <wxPoint>& aPoints, const wxPoint& aPos );
 
-    void SwapData( SCH_ITEM* aItem );
+    virtual void SwapData( SCH_ITEM* aItem );
 
-    int GetPenSize() const;
+    virtual int GetPenSize() const;
 
     /**
      * Get the sheet label number.
@@ -151,49 +151,49 @@ public:
      */
     SCH_SHEET* GetParent() const { return (SCH_SHEET*) m_Parent; }
 
-    bool Save( FILE* aFile ) const;
+    virtual bool Save( FILE* aFile ) const;
 
-    bool Load( LINE_READER& aLine, wxString& aErrorMsg );
+    virtual bool Load( LINE_READER& aLine, wxString& aErrorMsg );
 
 #if defined(DEBUG)
-    void Show( int nestLevel, std::ostream& os ) const;     // override
+    virtual void Show( int nestLevel, std::ostream& os ) const;     // override
 #endif
 
     // Geometric transforms (used in block operations):
 
-    void Move( const wxPoint& aMoveVector )
+    virtual void Move( const wxPoint& aMoveVector )
     {
         m_Pos += aMoveVector;
     }
 
-    void MirrorY( int aYaxis_position );
+    virtual void MirrorY( int aYaxis_position );
 
-    void Rotate( wxPoint aPosition );
+    virtual void Rotate( wxPoint aPosition );
 
-    void MirrorX( int aXaxis_position );
+    virtual void MirrorX( int aXaxis_position );
 
-    bool Matches( wxFindReplaceData& aSearchData, void* aAuxData, wxPoint* aFindLocation );
+    virtual bool Matches( wxFindReplaceData& aSearchData, void* aAuxData, wxPoint* aFindLocation );
 
-    bool Replace( wxFindReplaceData& aSearchData, void* aAuxData = NULL )
+    virtual bool Replace( wxFindReplaceData& aSearchData, void* aAuxData = NULL )
     {
         return EDA_ITEM::Replace( aSearchData, m_Text );
     }
 
-    bool IsReplaceable() const { return true; }
+    virtual bool IsReplaceable() const { return true; }
 
-    void GetEndPoints( std::vector< DANGLING_END_ITEM >& aItemList );
+    virtual void GetEndPoints( std::vector< DANGLING_END_ITEM >& aItemList );
 
-    bool IsConnectable() const { return true; }
+    virtual bool IsConnectable() const { return true; }
 
-    wxString GetSelectMenuText() const;
+    virtual wxString GetSelectMenuText() const;
 
-    BITMAP_DEF GetMenuImage() const { return  add_hierar_pin_xpm; }
+    virtual BITMAP_DEF GetMenuImage() const { return  add_hierar_pin_xpm; }
 
-    void SetPosition( const wxPoint& aPosition ) { ConstrainOnEdge( aPosition ); }
+    virtual void SetPosition( const wxPoint& aPosition ) { ConstrainOnEdge( aPosition ); }
 
-    bool HitTest( const wxPoint& aPosition, int aAccuracy ) const;
+    virtual bool HitTest( const wxPoint& aPosition, int aAccuracy ) const;
 
-    EDA_ITEM* Clone() const;
+    virtual EDA_ITEM* Clone() const;
 };
 
 
@@ -247,7 +247,7 @@ public:
 
     ~SCH_SHEET();
 
-    wxString GetClass() const
+    virtual wxString GetClass() const
     {
         return wxT( "SCH_SHEET" );
     }
@@ -260,7 +260,7 @@ public:
      * items which can be large (hierarchical sheets, compoments)
      * @return false for a hierarchical sheet
      */
-    bool IsMovableFromAnchorPoint() { return false; }
+    virtual bool IsMovableFromAnchorPoint() { return false; }
 
     wxString GetName() const { return m_name; }
 
@@ -301,11 +301,11 @@ public:
      */
     int GetScreenCount() const;
 
-    bool Save( FILE* aFile ) const;
+    virtual bool Save( FILE* aFile ) const;
 
-    bool Load( LINE_READER& aLine, wxString& aErrorMsg );
+    virtual bool Load( LINE_READER& aLine, wxString& aErrorMsg );
 
-    void GetMsgPanelInfo( std::vector< MSG_PANEL_ITEM >& aList );
+    virtual void GetMsgPanelInfo( std::vector< MSG_PANEL_ITEM >& aList );
 
     /* there is no member for orientation in sch_sheet, to preserve file
      * format, we detect orientation based on pin edges
@@ -404,12 +404,12 @@ public:
      */
     int GetMinHeight() const;
 
-    int GetPenSize() const;
+    virtual int GetPenSize() const;
 
-    void Draw( EDA_DRAW_PANEL* aPanel, wxDC* aDC, const wxPoint& aOffset,
+    virtual void Draw( EDA_DRAW_PANEL* aPanel, wxDC* aDC, const wxPoint& aOffset,
                GR_DRAWMODE aDrawMode, EDA_COLOR_T aColor = UNSPECIFIED_COLOR );
 
-    EDA_RECT const GetBoundingBox() const;
+    virtual EDA_RECT const GetBoundingBox() const;
 
     /**
      * Function GetResizePos
@@ -419,7 +419,7 @@ public:
      */
     wxPoint GetResizePosition() const;
 
-    void SwapData( SCH_ITEM* aItem );
+    virtual void SwapData( SCH_ITEM* aItem );
 
     /**
      * Function ComponentCount
@@ -493,7 +493,7 @@ public:
 
     // Geometric transforms (used in block operations):
 
-    void Move( const wxPoint& aMoveVector )
+    virtual void Move( const wxPoint& aMoveVector )
     {
         m_pos += aMoveVector;
 
@@ -503,17 +503,17 @@ public:
         }
     }
 
-    void MirrorY( int aYaxis_position );
+    virtual void MirrorY( int aYaxis_position );
 
-    void MirrorX( int aXaxis_position );
+    virtual void MirrorX( int aXaxis_position );
 
-    void Rotate( wxPoint aPosition );
+    virtual void Rotate( wxPoint aPosition );
 
-    bool Matches( wxFindReplaceData& aSearchData, void* aAuxData, wxPoint* aFindLocation );
+    virtual bool Matches( wxFindReplaceData& aSearchData, void* aAuxData, wxPoint* aFindLocation );
 
-    bool Replace( wxFindReplaceData& aSearchData, void* aAuxData = NULL );
+    virtual bool Replace( wxFindReplaceData& aSearchData, void* aAuxData = NULL );
 
-    bool IsReplaceable() const { return true; }
+    virtual bool IsReplaceable() const { return true; }
 
     /**
      * Resize this sheet to aSize and adjust all of the labels accordingly.
@@ -534,44 +534,44 @@ public:
      */
     wxPoint GetFileNamePosition();
 
-    void GetEndPoints( std::vector <DANGLING_END_ITEM>& aItemList );
+    virtual void GetEndPoints( std::vector <DANGLING_END_ITEM>& aItemList );
 
-    bool IsDanglingStateChanged( std::vector< DANGLING_END_ITEM >& aItemList );
+    virtual bool IsDanglingStateChanged( std::vector< DANGLING_END_ITEM >& aItemList );
 
-    bool IsDangling() const;
+    virtual bool IsDangling() const;
 
-    bool IsSelectStateChanged( const wxRect& aRect );
+    virtual bool IsSelectStateChanged( const wxRect& aRect );
 
-    bool IsConnectable() const { return true; }
+    virtual bool IsConnectable() const { return true; }
 
-    void GetConnectionPoints( std::vector< wxPoint >& aPoints ) const;
+    virtual void GetConnectionPoints( std::vector< wxPoint >& aPoints ) const;
 
-    SEARCH_RESULT Visit( INSPECTOR* inspector, const void* testData,
+    virtual SEARCH_RESULT Visit( INSPECTOR* inspector, const void* testData,
                                  const KICAD_T scanTypes[] );
 
-    wxString GetSelectMenuText() const;
+    virtual wxString GetSelectMenuText() const;
 
-    BITMAP_DEF GetMenuImage() const { return add_hierarchical_subsheet_xpm; }
+    virtual BITMAP_DEF GetMenuImage() const { return add_hierarchical_subsheet_xpm; }
 
-    void GetNetListItem( NETLIST_OBJECT_LIST& aNetListItems,
+    virtual void GetNetListItem( NETLIST_OBJECT_LIST& aNetListItems,
                          SCH_SHEET_PATH*      aSheetPath );
 
     SCH_ITEM& operator=( const SCH_ITEM& aSheet );
 
-    wxPoint GetPosition() const { return m_pos; }
+    virtual wxPoint GetPosition() const { return m_pos; }
 
-    void SetPosition( const wxPoint& aPosition );
+    virtual void SetPosition( const wxPoint& aPosition );
 
-    bool HitTest( const wxPoint& aPosition, int aAccuracy ) const;
+    virtual bool HitTest( const wxPoint& aPosition, int aAccuracy ) const;
 
-    bool HitTest( const EDA_RECT& aRect, bool aContained = false, int aAccuracy = 0 ) const;
+    virtual bool HitTest( const EDA_RECT& aRect, bool aContained = false, int aAccuracy = 0 ) const;
 
-    void Plot( PLOTTER* aPlotter );
+    virtual void Plot( PLOTTER* aPlotter );
 
-    EDA_ITEM* Clone() const;
+    virtual EDA_ITEM* Clone() const;
 
 #if defined(DEBUG)
-    void Show( int nestLevel, std::ostream& os ) const;     // override
+    virtual void Show( int nestLevel, std::ostream& os ) const;     // override
 #endif
 
 protected:
diff --git a/eeschema/sch_text.h b/eeschema/sch_text.h
index 6c068da..d6f4235 100644
--- a/eeschema/sch_text.h
+++ b/eeschema/sch_text.h
@@ -210,10 +210,10 @@ public:
 
     virtual EDA_ITEM* Clone() const;
 
-    void GetMsgPanelInfo( std::vector< MSG_PANEL_ITEM >& aList );
+    virtual void GetMsgPanelInfo( std::vector< MSG_PANEL_ITEM >& aList );
 
 #if defined(DEBUG)
-    void Show( int nestLevel, std::ostream& os ) const;     // override
+    virtual void Show( int nestLevel, std::ostream& os ) const;     // override
 #endif
 };
 
@@ -227,40 +227,40 @@ public:
 
     ~SCH_LABEL() { }
 
-    void Draw( EDA_DRAW_PANEL* panel, wxDC* DC, const wxPoint& offset,
+    virtual void Draw( EDA_DRAW_PANEL* panel, wxDC* DC, const wxPoint& offset,
                GR_DRAWMODE draw_mode, EDA_COLOR_T Color = UNSPECIFIED_COLOR );
 
-    wxString GetClass() const
+    virtual wxString GetClass() const
     {
         return wxT( "SCH_LABEL" );
     }
 
-    void SetOrientation( int aSchematicOrientation );
+    virtual void SetOrientation( int aSchematicOrientation );
 
-    wxPoint GetSchematicTextOffset() const;
+    virtual wxPoint GetSchematicTextOffset() const;
 
-    void MirrorX( int aXaxis_position );
+    virtual void MirrorX( int aXaxis_position );
 
-    void Rotate( wxPoint aPosition );
+    virtual void Rotate( wxPoint aPosition );
 
-    const EDA_RECT GetBoundingBox() const;  // Virtual
+    virtual const EDA_RECT GetBoundingBox() const;
 
-    bool Save( FILE* aFile ) const;
+    virtual bool Save( FILE* aFile ) const;
 
-    bool Load( LINE_READER& aLine, wxString& aErrorMsg );
+    virtual bool Load( LINE_READER& aLine, wxString& aErrorMsg );
 
-    bool IsConnectable() const { return true; }
+    virtual bool IsConnectable() const { return true; }
 
-    wxString GetSelectMenuText() const;
+    virtual wxString GetSelectMenuText() const;
 
-    BITMAP_DEF GetMenuImage() const { return  add_line_label_xpm; }
+    virtual BITMAP_DEF GetMenuImage() const { return  add_line_label_xpm; }
 
-    bool IsReplaceable() const { return true; }
+    virtual bool IsReplaceable() const { return true; }
 
-    EDA_ITEM* Clone() const;
+    virtual EDA_ITEM* Clone() const;
 
 private:
-    bool doIsConnected( const wxPoint& aPosition ) const { return m_Pos == aPosition; }
+    virtual bool doIsConnected( const wxPoint& aPosition ) const { return m_Pos == aPosition; }
 };
 
 
@@ -273,42 +273,42 @@ public:
 
     ~SCH_GLOBALLABEL() { }
 
-    void Draw( EDA_DRAW_PANEL* panel, wxDC* DC, const wxPoint& offset,
+    virtual void Draw( EDA_DRAW_PANEL* panel, wxDC* DC, const wxPoint& offset,
                GR_DRAWMODE draw_mode, EDA_COLOR_T Color = UNSPECIFIED_COLOR );
 
-    wxString GetClass() const
+    virtual wxString GetClass() const
     {
         return wxT( "SCH_GLOBALLABEL" );
     }
 
-    void SetOrientation( int aSchematicOrientation );
+    virtual void SetOrientation( int aSchematicOrientation );
 
-    wxPoint GetSchematicTextOffset() const;
+    virtual wxPoint GetSchematicTextOffset() const;
 
-    bool Save( FILE* aFile ) const;
+    virtual bool Save( FILE* aFile ) const;
 
-    bool Load( LINE_READER& aLine, wxString& aErrorMsg );
+    virtual bool Load( LINE_READER& aLine, wxString& aErrorMsg );
 
-    const EDA_RECT GetBoundingBox() const;  // Virtual
+    virtual const EDA_RECT GetBoundingBox() const;
 
-    void CreateGraphicShape( std::vector <wxPoint>& aPoints, const wxPoint& aPos );
+    virtual void CreateGraphicShape( std::vector <wxPoint>& aPoints, const wxPoint& aPos );
 
-    void MirrorY( int aYaxis_position );
+    virtual void MirrorY( int aYaxis_position );
 
-    void MirrorX( int aXaxis_position );
+    virtual void MirrorX( int aXaxis_position );
 
-    void Rotate( wxPoint aPosition );
+    virtual void Rotate( wxPoint aPosition );
 
-    bool IsConnectable() const { return true; }
+    virtual bool IsConnectable() const { return true; }
 
-    wxString GetSelectMenuText() const;
+    virtual wxString GetSelectMenuText() const;
 
-    BITMAP_DEF GetMenuImage() const { return  add_glabel_xpm; }
+    virtual BITMAP_DEF GetMenuImage() const { return  add_glabel_xpm; }
 
-    EDA_ITEM* Clone() const;
+    virtual EDA_ITEM* Clone() const;
 
 private:
-    bool doIsConnected( const wxPoint& aPosition ) const { return m_Pos == aPosition; }
+    virtual bool doIsConnected( const wxPoint& aPosition ) const { return m_Pos == aPosition; }
 };
 
 
@@ -323,42 +323,42 @@ public:
 
     ~SCH_HIERLABEL() { }
 
-    void Draw( EDA_DRAW_PANEL* panel, wxDC* DC, const wxPoint& offset,
+    virtual void Draw( EDA_DRAW_PANEL* panel, wxDC* DC, const wxPoint& offset,
                GR_DRAWMODE draw_mode, EDA_COLOR_T Color = UNSPECIFIED_COLOR );
 
-    wxString GetClass() const
+    virtual wxString GetClass() const
     {
         return wxT( "SCH_HIERLABEL" );
     }
 
-    void SetOrientation( int aSchematicOrientation );
+    virtual void SetOrientation( int aSchematicOrientation );
 
-    wxPoint GetSchematicTextOffset() const;
+    virtual wxPoint GetSchematicTextOffset() const;
 
-    void CreateGraphicShape( std::vector <wxPoint>& aPoints, const wxPoint& Pos );
+    virtual void CreateGraphicShape( std::vector <wxPoint>& aPoints, const wxPoint& Pos );
 
-    bool Save( FILE* aFile ) const;
+    virtual bool Save( FILE* aFile ) const;
 
-    bool Load( LINE_READER& aLine, wxString& aErrorMsg );
+    virtual bool Load( LINE_READER& aLine, wxString& aErrorMsg );
 
-    const EDA_RECT GetBoundingBox() const;      // Virtual
+    virtual const EDA_RECT GetBoundingBox() const;
 
-    void MirrorY( int aYaxis_position );
+    virtual void MirrorY( int aYaxis_position );
 
-    void MirrorX( int aXaxis_position );
+    virtual void MirrorX( int aXaxis_position );
 
-    void Rotate( wxPoint aPosition );
+    virtual void Rotate( wxPoint aPosition );
 
-    bool IsConnectable() const { return true; }
+    virtual bool IsConnectable() const { return true; }
 
-    wxString GetSelectMenuText() const;
+    virtual wxString GetSelectMenuText() const;
 
-    BITMAP_DEF GetMenuImage() const { return  add_hierarchical_label_xpm; }
+    virtual BITMAP_DEF GetMenuImage() const { return  add_hierarchical_label_xpm; }
 
-    EDA_ITEM* Clone() const;
+    virtual EDA_ITEM* Clone() const;
 
 private:
-    bool doIsConnected( const wxPoint& aPosition ) const { return m_Pos == aPosition; }
+    virtual bool doIsConnected( const wxPoint& aPosition ) const { return m_Pos == aPosition; }
 };
 
 #endif /* CLASS_TEXT_LABEL_H */
diff --git a/eeschema/schframe.h b/eeschema/schframe.h
index c09f0c3..f7ce50a 100644
--- a/eeschema/schframe.h
+++ b/eeschema/schframe.h
@@ -213,7 +213,7 @@ public:
     SCH_EDIT_FRAME( KIWAY* aKiway, wxWindow* aParent );
     ~SCH_EDIT_FRAME();
 
-    SCH_SCREEN* GetScreen() const;                  // overload SCH_BASE_FRAME
+    virtual SCH_SCREEN* GetScreen() const;
 
     void OnCloseWindow( wxCloseEvent& Event );
 
@@ -252,7 +252,7 @@ public:
     void Process_Config( wxCommandEvent& event );
     void OnSelectTool( wxCommandEvent& aEvent );
 
-    bool GeneralControl( wxDC* aDC, const wxPoint& aPosition, int aHotKey = 0 );
+    virtual bool GeneralControl( wxDC* aDC, const wxPoint& aPosition, int aHotKey = 0 );
 
     /**
      * Function GetProjectFileParametersList
@@ -270,7 +270,7 @@ public:
      * saves changes to the project settings to the project (.pro) file.
      * @param aAskForSave = true to open a dialog before saving the settings
      */
-    void SaveProjectSettings( bool aAskForSave );
+    virtual void SaveProjectSettings( bool aAskForSave );
 
     /**
      * Function LoadProjectFile
@@ -347,17 +347,17 @@ public:
      */
     PARAM_CFG_ARRAY& GetConfigurationSettings();
 
-    void LoadSettings( wxConfigBase* aCfg );
-    void SaveSettings( wxConfigBase* aCfg );
+    virtual void LoadSettings( wxConfigBase* aCfg );
+    virtual void SaveSettings( wxConfigBase* aCfg );
 
-    void RedrawActiveWindow( wxDC* DC, bool EraseBg );
+    virtual void RedrawActiveWindow( wxDC* DC, bool EraseBg );
 
     void CreateScreens();
-    void ReCreateHToolbar();
-    void ReCreateVToolbar();
+    virtual void ReCreateHToolbar();
+    virtual void ReCreateVToolbar();
     void ReCreateOptToolbar();
-    void ReCreateMenuBar();
-    bool OnHotKey( wxDC* aDC, int aHotKey, const wxPoint& aPosition, EDA_ITEM* aItem = NULL );
+    virtual void ReCreateMenuBar();
+    virtual bool OnHotKey( wxDC* aDC, int aHotKey, const wxPoint& aPosition, EDA_ITEM* aItem = NULL );
 
     /**
      * Function OnModify
@@ -379,13 +379,13 @@ public:
      */
     virtual void ExecuteRemoteCommand( const char* cmdline );
 
-    void KiwayMailIn( KIWAY_EXPRESS& aEvent );      // override virtual from KIWAY_PLAYER
+    virtual void KiwayMailIn( KIWAY_EXPRESS& aEvent );
 
-    void OnLeftClick( wxDC* aDC, const wxPoint& aPosition );
-    void OnLeftDClick( wxDC* aDC, const wxPoint& aPosition );
-    bool OnRightClick( const wxPoint& aPosition, wxMenu* PopMenu );
+    virtual void OnLeftClick( wxDC* aDC, const wxPoint& aPosition );
+    virtual void OnLeftDClick( wxDC* aDC, const wxPoint& aPosition );
+    virtual bool OnRightClick( const wxPoint& aPosition, wxMenu* PopMenu );
     void OnSelectOptionToolbar( wxCommandEvent& event );
-    double BestZoom();
+    virtual double BestZoom();
 
     /**
      * Function LocateAndShowItem
@@ -649,7 +649,7 @@ public:
      */
     void OnSaveProject( wxCommandEvent& aEvent );
 
-    bool OpenProjectFiles( const std::vector<wxString>& aFileSet, int aCtl = 0 );  // virtual from KIWAY_PLAYER
+    virtual bool OpenProjectFiles( const std::vector<wxString>& aFileSet, int aCtl = 0 );
 
     /**
      * Function AppendOneEEProject
@@ -1147,7 +1147,7 @@ public:
      * Function InitBlockPasteInfos
      * initializes the parameters used by the block paste command.
      */
-    void InitBlockPasteInfos();
+    virtual void InitBlockPasteInfos();
 
     /**
      * Function BlockCommand
diff --git a/eeschema/viewlib_frame.h b/eeschema/viewlib_frame.h
index a24b76f..25ca832 100644
--- a/eeschema/viewlib_frame.h
+++ b/eeschema/viewlib_frame.h
@@ -67,7 +67,7 @@ public:
      */
     static const wxChar* GetLibViewerFrameName();
 
-    void OnSize( wxSizeEvent& event );
+    virtual void OnSize( wxSizeEvent& event );
 
     /**
      * Function ReCreateListLib
@@ -80,20 +80,20 @@ public:
     void ReCreateListCmp();
     void Process_Special_Functions( wxCommandEvent& event );
     void DisplayLibInfos();
-    void RedrawActiveWindow( wxDC* DC, bool EraseBg );
+    virtual void RedrawActiveWindow( wxDC* DC, bool EraseBg );
     void OnCloseWindow( wxCloseEvent& Event );
     void CloseLibraryViewer( wxCommandEvent& event );
-    void ReCreateHToolbar();
-    void ReCreateVToolbar();
-    void ReCreateMenuBar();
+    virtual void ReCreateHToolbar();
+    virtual void ReCreateVToolbar();
+    virtual void ReCreateMenuBar();
 
-    void OnLeftClick( wxDC* DC, const wxPoint& MousePos );
-    double BestZoom();
+    virtual void OnLeftClick( wxDC* DC, const wxPoint& MousePos );
+    virtual double BestZoom();
     void ClickOnLibList( wxCommandEvent& event );
     void ClickOnCmpList( wxCommandEvent& event );
     void OnSetRelativeOffset( wxCommandEvent& event );
 
-    bool GeneralControl( wxDC* aDC, const wxPoint& aPosition, int aHotKey = 0 );
+    virtual bool GeneralControl( wxDC* aDC, const wxPoint& aPosition, int aHotKey = 0 );
 
     /**
      * Function OnHotKey
@@ -103,10 +103,10 @@ public:
      * case insensitive
      * </p>
      */
-    bool OnHotKey( wxDC* aDC, int aHotKey, const wxPoint& aPosition, EDA_ITEM* aItem = NULL );
+    virtual bool OnHotKey( wxDC* aDC, int aHotKey, const wxPoint& aPosition, EDA_ITEM* aItem = NULL );
 
-    void LoadSettings( wxConfigBase* aCfg );
-    void SaveSettings( wxConfigBase* aCfg );
+    virtual void LoadSettings( wxConfigBase* aCfg );
+    virtual void SaveSettings( wxConfigBase* aCfg );
 
     /**
      * Set the selected library in the library window.
@@ -146,7 +146,7 @@ private:
      */
     void ExportToSchematicLibraryPart( wxCommandEvent& event );
     void ViewOneLibraryContent( PART_LIB* Lib, int Flag );
-    bool OnRightClick( const wxPoint& MousePos, wxMenu* PopMenu );
+    virtual bool OnRightClick( const wxPoint& MousePos, wxMenu* PopMenu );
     void DClickOnCmpList( wxCommandEvent& event );
 
     wxComboBox*         m_selpartBox;
diff --git a/gerbview/class_gbr_layer_box_selector.h b/gerbview/class_gbr_layer_box_selector.h
index 6128bce..17f0a01 100644
--- a/gerbview/class_gbr_layer_box_selector.h
+++ b/gerbview/class_gbr_layer_box_selector.h
@@ -41,19 +41,16 @@ public:
     }
 
     // Reload the Layers names and bitmaps
-    // Virtual function
-    void Resync();
+    virtual void Resync();
 
     // Returns a color index from the layer id
-    // Virtual function
-    EDA_COLOR_T GetLayerColor( int aLayer ) const;
+    virtual EDA_COLOR_T GetLayerColor( int aLayer ) const;
 
     // Returns true if the layer id is enabled (i.e. is it should be displayed)
-    // Virtual function
-    bool IsLayerEnabled( int aLayer ) const { return true; };
+    virtual bool IsLayerEnabled( int aLayer ) const { return true; };
 
     // Returns the name of the layer id
-    wxString GetLayerName( int aLayer ) const;
+    virtual wxString GetLayerName( int aLayer ) const;
 };
 
 #endif //CLASS_GBR_LAYER_BOX_SELECTOR_H
diff --git a/gerbview/class_gbr_layout.h b/gerbview/class_gbr_layout.h
index 8388bf5..e5c986d 100644
--- a/gerbview/class_gbr_layout.h
+++ b/gerbview/class_gbr_layout.h
@@ -140,7 +140,7 @@ public:
     }
 
 #if defined(DEBUG)
-    void    Show( int nestLevel, std::ostream& os ) const;  // overload
+    virtual void Show( int nestLevel, std::ostream& os ) const;  // overload
 
 #endif
 };
diff --git a/gerbview/class_gbr_screen.h b/gerbview/class_gbr_screen.h
index 19b5f90..6a1a69f 100644
--- a/gerbview/class_gbr_screen.h
+++ b/gerbview/class_gbr_screen.h
@@ -62,7 +62,7 @@ public:
      * Function ClearUndoORRedoList
      * virtual pure in BASE_SCREEN, so it must be defined here
      */
-    void ClearUndoORRedoList( UNDO_REDO_CONTAINER& aList, int aItemCount = -1 );
+    virtual void ClearUndoORRedoList( UNDO_REDO_CONTAINER& aList, int aItemCount = -1 );
 };
 
 
diff --git a/gerbview/class_gerber_draw_item.h b/gerbview/class_gerber_draw_item.h
index 49e3340..9ef134e 100644
--- a/gerbview/class_gerber_draw_item.h
+++ b/gerbview/class_gerber_draw_item.h
@@ -213,7 +213,7 @@ public:
      */
     D_CODE* GetDcodeDescr();
 
-    const EDA_RECT GetBoundingBox() const;  // Virtual
+    virtual const EDA_RECT GetBoundingBox() const;
 
     /* Display on screen: */
     void Draw( EDA_DRAW_PANEL*         aPanel,
@@ -240,7 +240,7 @@ public:
     /* divers */
     int Shape() const { return m_Shape; }
 
-    void GetMsgPanelInfo( std::vector< MSG_PANEL_ITEM >& aList );
+    virtual void GetMsgPanelInfo( std::vector< MSG_PANEL_ITEM >& aList );
 
     wxString ShowGBRShape();
 
@@ -250,7 +250,7 @@ public:
      * @param aRefPos a wxPoint to test
      * @return bool - true if a hit, else false
      */
-    bool HitTest( const wxPoint& aRefPos ) const;
+    virtual bool HitTest( const wxPoint& aRefPos ) const;
 
     /**
      * Function HitTest (overloaded)
@@ -266,7 +266,7 @@ public:
      * returns the class name.
      * @return wxString
      */
-    wxString GetClass() const
+    virtual wxString GetClass() const
     {
         return wxT( "GERBER_DRAW_ITEM" );
     }
@@ -301,7 +301,7 @@ public:
         delete this;
     }
 #if defined(DEBUG)
-    void Show( int nestLevel, std::ostream& os ) const;  // override
+    virtual void Show( int nestLevel, std::ostream& os ) const;  // override
 #endif
 
 };
diff --git a/gerbview/class_gerbview_layer_widget.h b/gerbview/class_gerbview_layer_widget.h
index d7dfc78..6e01e3b 100644
--- a/gerbview/class_gerbview_layer_widget.h
+++ b/gerbview/class_gerbview_layer_widget.h
@@ -98,11 +98,11 @@ public:
     void ReFillRender();
 
     //-----<implement LAYER_WIDGET abstract callback functions>-----------
-    void OnLayerColorChange( int aLayer, EDA_COLOR_T aColor );
-    bool OnLayerSelect( int aLayer );
-    void OnLayerVisible( int aLayer, bool isVisible, bool isFinal );
-    void OnRenderColorChange( int aId, EDA_COLOR_T aColor );
-    void OnRenderEnable( int aId, bool isEnabled );
+    virtual void OnLayerColorChange( int aLayer, EDA_COLOR_T aColor );
+    virtual bool OnLayerSelect( int aLayer );
+    virtual void OnLayerVisible( int aLayer, bool isVisible, bool isFinal );
+    virtual void OnRenderColorChange( int aId, EDA_COLOR_T aColor );
+    virtual void OnRenderEnable( int aId, bool isEnabled );
     /**
      * Function SetLayersManagerTabsText
      * Update the layer manager tabs labels
diff --git a/gerbview/dialogs/dialog_print_using_printer.cpp b/gerbview/dialogs/dialog_print_using_printer.cpp
index 2f4ff2e..4c72164 100644
--- a/gerbview/dialogs/dialog_print_using_printer.cpp
+++ b/gerbview/dialogs/dialog_print_using_printer.cpp
@@ -70,14 +70,14 @@ public:
     ~DIALOG_PRINT_USING_PRINTER() {};
 
 private:
-    void OnCloseWindow( wxCloseEvent& event );
+    virtual void OnCloseWindow( wxCloseEvent& event );
     void OnInitDialog( wxInitDialogEvent& event );
-    void OnPageSetup( wxCommandEvent& event );
-    void OnPrintPreview( wxCommandEvent& event );
-    void OnPrintButtonClick( wxCommandEvent& event );
-    void OnScaleSelectionClick( wxCommandEvent& event );
+    virtual void OnPageSetup( wxCommandEvent& event );
+    virtual void OnPrintPreview( wxCommandEvent& event );
+    virtual void OnPrintButtonClick( wxCommandEvent& event );
+    virtual void OnScaleSelectionClick( wxCommandEvent& event );
 
-    void OnButtonCancelClick( wxCommandEvent& event ) { Close(); }
+    virtual void OnButtonCancelClick( wxCommandEvent& event ) { Close(); }
     void SetPrintParameters( );
     void InitValues( );
 
diff --git a/gerbview/dialogs/dialog_show_page_borders.h b/gerbview/dialogs/dialog_show_page_borders.h
index 1c86686..8c0b65b 100644
--- a/gerbview/dialogs/dialog_show_page_borders.h
+++ b/gerbview/dialogs/dialog_show_page_borders.h
@@ -41,7 +41,7 @@ public:
     ~DIALOG_PAGE_SHOW_PAGE_BORDERS() {};
 
 private:
-    void OnOKBUttonClick( wxCommandEvent& event );
-    void OnCancelButtonClick( wxCommandEvent& event );
+    virtual void OnOKBUttonClick( wxCommandEvent& event );
+    virtual void OnCancelButtonClick( wxCommandEvent& event );
 };
 
diff --git a/gerbview/dialogs/gerbview_dialog_display_options_frame.cpp b/gerbview/dialogs/gerbview_dialog_display_options_frame.cpp
index e778279..eb0b0ef 100644
--- a/gerbview/dialogs/gerbview_dialog_display_options_frame.cpp
+++ b/gerbview/dialogs/gerbview_dialog_display_options_frame.cpp
@@ -53,10 +53,10 @@ public:
     ~DIALOG_DISPLAY_OPTIONS() {};
 
 private:
-    void OnOKBUttonClick( wxCommandEvent& event );
-    void OnCancelButtonClick( wxCommandEvent& event );
+    virtual void OnOKBUttonClick( wxCommandEvent& event );
+    virtual void OnCancelButtonClick( wxCommandEvent& event );
     void initOptDialog( );
-    void OnMiddleBtnPanEnbl( wxCommandEvent& event )
+    virtual void OnMiddleBtnPanEnbl( wxCommandEvent& event )
     {
         m_OptMiddleButtonPanLimited->Enable( m_OptMiddleButtonPan->GetValue() );
     }
diff --git a/gerbview/gerbview.cpp b/gerbview/gerbview.cpp
index e6902ab..914840b 100644
--- a/gerbview/gerbview.cpp
+++ b/gerbview/gerbview.cpp
@@ -69,11 +69,11 @@ static struct IFACE : public KIFACE_I
         KIFACE_I( aName, aType )
     {}
 
-    bool OnKifaceStart( PGM_BASE* aProgram, int aCtlBits );
+    virtual bool OnKifaceStart( PGM_BASE* aProgram, int aCtlBits );
 
-    void OnKifaceEnd();
+    virtual void OnKifaceEnd();
 
-    wxWindow* CreateWindow( wxWindow* aParent, int aClassId, KIWAY* aKiway, int aCtlBits = 0 )
+    virtual wxWindow* CreateWindow( wxWindow* aParent, int aClassId, KIWAY* aKiway, int aCtlBits = 0 )
     {
         switch( aClassId )
         {
@@ -102,7 +102,7 @@ static struct IFACE : public KIFACE_I
      *
      * @return void* - and must be cast into the know type.
      */
-    void* IfaceOrAddress( int aDataId )
+    virtual void* IfaceOrAddress( int aDataId )
     {
         return NULL;
     }
diff --git a/gerbview/gerbview_frame.h b/gerbview/gerbview_frame.h
index e5309dc..94876ef 100644
--- a/gerbview/gerbview_frame.h
+++ b/gerbview/gerbview_frame.h
@@ -128,21 +128,21 @@ public:
      */
     EDA_RECT            GetGerberLayoutBoundingBox();
 
-    void                SetPageSettings( const PAGE_INFO& aPageSettings );  // overload
-    const PAGE_INFO&    GetPageSettings() const;                            // overload
-    const wxSize        GetPageSizeIU() const;                              // overload
+    virtual void                SetPageSettings( const PAGE_INFO& aPageSettings );
+    virtual const PAGE_INFO&    GetPageSettings() const;
+    virtual const wxSize        GetPageSizeIU() const;
 
-    const wxPoint&      GetAuxOrigin() const;                               // overload
-    void                SetAuxOrigin( const wxPoint& aPoint );              // overload
+    virtual const wxPoint&      GetAuxOrigin() const;
+    virtual void                SetAuxOrigin( const wxPoint& aPoint );
 
-    const wxPoint&      GetGridOrigin() const  { return m_grid_origin; }    // overload
-    void                SetGridOrigin( const wxPoint& aPoint )              // overload
+    virtual const wxPoint&      GetGridOrigin() const { return m_grid_origin; }
+    virtual void                SetGridOrigin( const wxPoint& aPoint )
     {
         m_grid_origin = aPoint;
     }
 
-    const TITLE_BLOCK&  GetTitleBlock() const;                              // overload
-    void                SetTitleBlock( const TITLE_BLOCK& aTitleBlock );    // overload
+    virtual const TITLE_BLOCK&  GetTitleBlock() const;
+    virtual void                SetTitleBlock( const TITLE_BLOCK& aTitleBlock );
 
     /**
      * Function SetCurItem
@@ -212,11 +212,11 @@ public:
 
     void    OnCloseWindow( wxCloseEvent& Event );
 
-    bool    OpenProjectFiles( const std::vector<wxString>& aFileSet, int aCtl );   // overload KIWAY_PLAYER
+    virtual bool    OpenProjectFiles( const std::vector<wxString>& aFileSet, int aCtl );
 
     // Virtual basic functions:
-    void    RedrawActiveWindow( wxDC* DC, bool EraseBg );
-    void    ReCreateHToolbar();
+    virtual void    RedrawActiveWindow( wxDC* DC, bool EraseBg );
+    virtual void    ReCreateHToolbar();
 
     /**
      * Function ReCreateVToolbar
@@ -224,19 +224,19 @@ public:
      *
      * @note This is currently not used.
      */
-    void    ReCreateVToolbar();
+    virtual void    ReCreateVToolbar();
 
     /**
      * Create or update the left vertical toolbar (option toolbar
      */
     void    ReCreateOptToolbar();
 
-    void    ReCreateMenuBar();
-    void    OnLeftClick( wxDC* DC, const wxPoint& MousePos );
-    void    OnLeftDClick( wxDC* DC, const wxPoint& MousePos );
-    bool    OnRightClick( const wxPoint& MousePos, wxMenu* PopMenu );
-    double  BestZoom();
-    void    UpdateStatusBar();
+    virtual void    ReCreateMenuBar();
+    virtual void    OnLeftClick( wxDC* DC, const wxPoint& MousePos );
+    virtual void    OnLeftDClick( wxDC* DC, const wxPoint& MousePos );
+    virtual bool    OnRightClick( const wxPoint& MousePos, wxMenu* PopMenu );
+    virtual double  BestZoom();
+    virtual void    UpdateStatusBar();
 
     /**
      * Function GetZoomLevelIndicator
@@ -244,7 +244,7 @@ public:
      * level indicator in dialogs.
      * Virtual from the base class
      */
-    const wxString GetZoomLevelIndicator() const;
+    virtual const wxString GetZoomLevelIndicator() const;
 
     /**
      * Function ReportMessage
@@ -312,7 +312,7 @@ public:
      * It may be overloaded by derived classes
      * @param aVisible = true if the grid must be shown
      */
-    void    SetGridVisibility( bool aVisible );
+    virtual void    SetGridVisibility( bool aVisible );
 
     /**
      * Function GetVisibleLayers
@@ -470,11 +470,11 @@ public:
      */
     PARAM_CFG_ARRAY&    GetConfigurationSettings( void );
 
-    void LoadSettings( wxConfigBase* aCfg );    // override virtual
+    virtual void LoadSettings( wxConfigBase* aCfg );
 
-    void SaveSettings( wxConfigBase* aCfg );    // override virtual
+    virtual void SaveSettings( wxConfigBase* aCfg );
 
-    void                ShowChangedLanguage();  // override EDA_BASE_FRAME virtual
+    virtual void                ShowChangedLanguage();
 
     void                Process_Special_Functions( wxCommandEvent& event );
     void                OnSelectOptionToolbar( wxCommandEvent& event );
@@ -524,7 +524,7 @@ public:
      * @param aPosition The cursor position in logical (drawing) units.
      * @param aItem = NULL or pointer on a EDA_ITEM under the mouse cursor
      */
-    bool OnHotKey( wxDC* aDC, int aHotkeyCode, const wxPoint& aPosition, EDA_ITEM* aItem = NULL );
+    virtual bool OnHotKey( wxDC* aDC, int aHotkeyCode, const wxPoint& aPosition, EDA_ITEM* aItem = NULL );
 
     GERBER_DRAW_ITEM*   GerberGeneralLocateAndDisplay();
     GERBER_DRAW_ITEM*   Locate( const wxPoint& aPosition, int typeloc );
@@ -634,7 +634,7 @@ public:
     bool                LoadExcellonFiles( const wxString& aFileName );
     bool                Read_EXCELLON_File( const wxString& aFullFileName );
 
-    bool                GeneralControl( wxDC* aDC, const wxPoint& aPosition, int aHotKey = 0 );
+    virtual bool        GeneralControl( wxDC* aDC, const wxPoint& aPosition, int aHotKey = 0 );
 
     /**
      * Set Size Items (Lines, Flashes) from DCodes List
diff --git a/gerbview/select_layers_to_pcb.h b/gerbview/select_layers_to_pcb.h
index e9a6eda..13f85e9 100644
--- a/gerbview/select_layers_to_pcb.h
+++ b/gerbview/select_layers_to_pcb.h
@@ -57,14 +57,14 @@ public: LAYERS_MAP_DIALOG( GERBVIEW_FRAME* parent );
 private:
     void initDialog();
     void normalizeBrdLayersCount();
-    void OnBrdLayersCountSelection( wxCommandEvent& event );
+    virtual void OnBrdLayersCountSelection( wxCommandEvent& event );
     void OnSelectLayer( wxCommandEvent& event );
-    void OnOkClick( wxCommandEvent& event );
-    void OnCancelClick( wxCommandEvent& event );
+    virtual void OnOkClick( wxCommandEvent& event );
+    virtual void OnCancelClick( wxCommandEvent& event );
 
-    void OnStoreSetup( wxCommandEvent& event );
-    void OnGetSetup( wxCommandEvent& event );
-    void OnResetClick( wxCommandEvent& event );
+    virtual void OnStoreSetup( wxCommandEvent& event );
+    virtual void OnGetSetup( wxCommandEvent& event );
+    virtual void OnResetClick( wxCommandEvent& event );
 
     DECLARE_EVENT_TABLE()
 };
diff --git a/include/class_base_screen.h b/include/class_base_screen.h
index 0ea8fa9..d1d745d 100644
--- a/include/class_base_screen.h
+++ b/include/class_base_screen.h
@@ -479,7 +479,7 @@ public:
     void ClearBlockCommand() { m_BlockLocate.Clear(); }
 
 #if defined(DEBUG)
-    void Show( int nestLevel, std::ostream& os ) const;     // overload
+    virtual void Show( int nestLevel, std::ostream& os ) const;     // overload
 #endif
 };
 
diff --git a/include/class_draw_panel_gal.h b/include/class_draw_panel_gal.h
index 04375ac..9324937 100644
--- a/include/class_draw_panel_gal.h
+++ b/include/class_draw_panel_gal.h
@@ -108,7 +108,7 @@ public:
     }
 
     /// @copydoc wxWindow::Refresh()
-    void Refresh( bool aEraseBackground = true, const wxRect* aRect = NULL );
+    virtual void Refresh( bool aEraseBackground = true, const wxRect* aRect = NULL );
 
     /**
      * Function ForceRefresh()
diff --git a/include/class_pcb_screen.h b/include/class_pcb_screen.h
index dc65b3d..e26d34c 100644
--- a/include/class_pcb_screen.h
+++ b/include/class_pcb_screen.h
@@ -99,7 +99,7 @@ public:
      * items are removed from the beginning of the list.
      * So this function can be called to remove old commands
      */
-    void ClearUndoORRedoList( UNDO_REDO_CONTAINER& aList, int aItemCount = -1 );
+    virtual void ClearUndoORRedoList( UNDO_REDO_CONTAINER& aList, int aItemCount = -1 );
 };
 
 #endif  // CLASS_PCB_SCREEN_H_
diff --git a/include/class_sch_screen.h b/include/class_sch_screen.h
index 20e2edd..d960346 100644
--- a/include/class_sch_screen.h
+++ b/include/class_sch_screen.h
@@ -523,7 +523,7 @@ public:
     int UpdatePickList();
 
 #if defined(DEBUG)
-    void Show( int nestLevel, std::ostream& os ) const;     // overload
+    virtual void Show( int nestLevel, std::ostream& os ) const;     // overload
 #endif
 };
 
diff --git a/include/class_worksheet_dataitem.h b/include/class_worksheet_dataitem.h
index 47f72cb..65bfddc 100644
--- a/include/class_worksheet_dataitem.h
+++ b/include/class_worksheet_dataitem.h
@@ -377,7 +377,7 @@ public:
      */
     void SetBoundingBox();
 
-    bool IsInsidePage( int ii ) const;
+    virtual bool IsInsidePage( int ii ) const;
 };
 
 
diff --git a/include/dialog_get_component.h b/include/dialog_get_component.h
index 583f10b..a6dd8f2 100644
--- a/include/dialog_get_component.h
+++ b/include/dialog_get_component.h
@@ -72,9 +72,10 @@ public:
 
 private:
     void     initDialog( wxArrayString& aHistoryList );
-    void     OnCancel( wxCommandEvent& event );
-    void     Accept( wxCommandEvent& event );
-    void     GetExtraSelection( wxCommandEvent& event );
+
+    virtual void OnCancel( wxCommandEvent& event );
+    virtual void Accept( wxCommandEvent& event );
+    virtual void GetExtraSelection( wxCommandEvent& event );
 };
 
 
diff --git a/include/dialog_helpers.h b/include/dialog_helpers.h
index 657470a..41e61de 100644
--- a/include/dialog_helpers.h
+++ b/include/dialog_helpers.h
@@ -88,12 +88,12 @@ public:
     wxString GetTextSelection( int aColumn = 0 );
 
 private:
-    void     onClose( wxCloseEvent& event );
-    void     onCancelClick( wxCommandEvent& event );
-    void     onOkClick( wxCommandEvent& event );
-    void     onListItemSelected( wxListEvent& event );
-    void     onListItemActivated( wxListEvent& event );
-    void     textChangeInFilterBox(wxCommandEvent& event);
+    virtual void onClose( wxCloseEvent& event );
+    virtual void onCancelClick( wxCommandEvent& event );
+    virtual void onOkClick( wxCommandEvent& event );
+    virtual void onListItemSelected( wxListEvent& event );
+    virtual void onListItemActivated( wxListEvent& event );
+    virtual void textChangeInFilterBox(wxCommandEvent& event);
 
     void    initDialog( const wxArrayString& aItemHeaders,
                         const wxString& aSelection);
diff --git a/include/dialog_hotkeys_editor.h b/include/dialog_hotkeys_editor.h
index aa827e7..d008f75 100644
--- a/include/dialog_hotkeys_editor.h
+++ b/include/dialog_hotkeys_editor.h
@@ -105,7 +105,7 @@ protected:
      *
      * @return String containing the text for the specified row, column combination
      */
-    wxString OnGetItemText( long aRow, long aColumn ) const;
+    virtual wxString OnGetItemText( long aRow, long aColumn ) const;
 
     /**
      * Function OnChar
@@ -233,7 +233,7 @@ private:
      *
      * @param aEvent is the button press event, unused
      */
-    void OnOKClicked( wxCommandEvent& aEvent );
+    virtual void OnOKClicked( wxCommandEvent& aEvent );
 
     /**
      * Function CancelClicked
@@ -241,7 +241,7 @@ private:
      *
      * @param aEvent is the button press event, unused
      */
-    void CancelClicked( wxCommandEvent& aEvent );
+    virtual void CancelClicked( wxCommandEvent& aEvent );
 
     /**
      * Function UndoClicked
@@ -249,7 +249,7 @@ private:
      *
      * @param aEvent is the button press event, unused
      */
-    void UndoClicked( wxCommandEvent& aEvent );
+    virtual void UndoClicked( wxCommandEvent& aEvent );
 };
 
 /**
diff --git a/include/dialog_shim.h b/include/dialog_shim.h
index 4369e7c..88389f0 100644
--- a/include/dialog_shim.h
+++ b/include/dialog_shim.h
@@ -78,9 +78,9 @@ public:
 
     bool IsQuasiModal()         { return m_qmodal_showing; }
 
-    bool Show( bool show );     // override wxDialog::Show
-
-    bool Enable( bool enable ); // override wxDialog::Enable virtual
+    // wxDialog
+    virtual bool Show( bool show );
+    virtual bool Enable( bool enable );
 
 protected:
 
diff --git a/include/draw_frame.h b/include/draw_frame.h
index a8ea81e..dd397a4 100644
--- a/include/draw_frame.h
+++ b/include/draw_frame.h
@@ -638,9 +638,9 @@ public:
     void OnSockRequest( wxSocketEvent& evt );
     void OnSockRequestServer( wxSocketEvent& evt );
 
-    void LoadSettings( wxConfigBase* aCfg );    // override virtual
+    virtual void LoadSettings( wxConfigBase* aCfg );
 
-    void SaveSettings( wxConfigBase* aCfg );    // override virtual
+    virtual void SaveSettings( wxConfigBase* aCfg );
 
     /**
      * Append a message to the message panel.
diff --git a/include/filter_reader.h b/include/filter_reader.h
index 1544302..a10eaa6 100644
--- a/include/filter_reader.h
+++ b/include/filter_reader.h
@@ -49,14 +49,14 @@ public:
 
     ~FILTER_READER();
 
-    char* ReadLine() throw( IO_ERROR );
+    virtual char* ReadLine() throw( IO_ERROR );
 
-    const wxString& GetSource() const
+    virtual const wxString& GetSource() const
     {
         return reader.GetSource();
     }
 
-    unsigned LineNumber() const
+    virtual unsigned LineNumber() const
     {
         return reader.LineNumber();
     }
@@ -83,14 +83,14 @@ public:
 
     ~WHITESPACE_FILTER_READER();
 
-    char* ReadLine() throw( IO_ERROR );
+    virtual char* ReadLine() throw( IO_ERROR );
 
-    const wxString& GetSource() const
+    virtual const wxString& GetSource() const
     {
         return reader.GetSource();
     }
 
-    unsigned LineNumber() const
+    virtual unsigned LineNumber() const
     {
         return reader.LineNumber();
     }
diff --git a/include/gal/opengl/noncached_container.h b/include/gal/opengl/noncached_container.h
index 3a51e6d..151200b 100644
--- a/include/gal/opengl/noncached_container.h
+++ b/include/gal/opengl/noncached_container.h
@@ -51,7 +51,7 @@ public:
     virtual VERTEX* Allocate( unsigned int aSize );
 
     ///< @copydoc VERTEX_CONTAINER::Delete( VERTEX_ITEM* aItem )
-    void Delete( VERTEX_ITEM* aItem ) {};
+    virtual void Delete( VERTEX_ITEM* aItem ) {};
 
     ///< @copydoc VERTEX_CONTAINER::Clear()
     virtual void Clear();
diff --git a/include/geometry/shape_circle.h b/include/geometry/shape_circle.h
index 700f61d..2c9a800 100644
--- a/include/geometry/shape_circle.h
+++ b/include/geometry/shape_circle.h
@@ -47,19 +47,19 @@ public:
     ~SHAPE_CIRCLE()
     {}
 
-    SHAPE* Clone() const
+    virtual SHAPE* Clone() const
     {
         return new SHAPE_CIRCLE( *this );
     }
 
-    const BOX2I BBox( int aClearance = 0 ) const
+    virtual const BOX2I BBox( int aClearance = 0 ) const
     {
         const VECTOR2I rc( m_radius + aClearance, m_radius + aClearance );
 
         return BOX2I( m_center - rc, rc * 2 );
     }
 
-    bool Collide( const SEG& aSeg, int aClearance = 0 ) const
+    virtual bool Collide( const SEG& aSeg, int aClearance = 0 ) const
     {
         int rc = aClearance + m_radius;
 
@@ -86,12 +86,12 @@ public:
         return m_center;
     }
 
-    void Move( const VECTOR2I& aVector )
+    virtual void Move( const VECTOR2I& aVector )
     {
         m_center += aVector;
     }
 
-    bool IsSolid() const
+    virtual bool IsSolid() const
     {
         return true;
     }
diff --git a/include/geometry/shape_line_chain.h b/include/geometry/shape_line_chain.h
index 3224c64..896b08f 100644
--- a/include/geometry/shape_line_chain.h
+++ b/include/geometry/shape_line_chain.h
@@ -127,7 +127,7 @@ public:
     ~SHAPE_LINE_CHAIN()
     {}
 
-    SHAPE* Clone() const;
+    virtual SHAPE* Clone() const;
 
     /**
      * Function Clear()
@@ -259,7 +259,7 @@ public:
     }
 
     /// @copydoc SHAPE::BBox()
-    const BOX2I BBox( int aClearance = 0 ) const
+    virtual const BOX2I BBox( int aClearance = 0 ) const
     {
         BOX2I bbox;
         bbox.Compute( m_points );
@@ -275,7 +275,7 @@ public:
      * @param aClearance minimum distance that does not qualify as a collision.
      * @return true, when a collision has been found
      */
-    bool Collide( const VECTOR2I& aP, int aClearance = 0 ) const;
+    virtual bool Collide( const VECTOR2I& aP, int aClearance = 0 ) const;
 
     /**
      * Function Collide()
@@ -295,7 +295,7 @@ public:
      * @param aClearance minimum distance that does not qualify as a collision.
      * @return true, when a collision has been found
      */
-    bool Collide( const SEG& aSeg, int aClearance = 0 ) const;
+    virtual bool Collide( const SEG& aSeg, int aClearance = 0 ) const;
 
     /**
      * Function Distance()
@@ -564,13 +564,13 @@ public:
 
     bool CompareGeometry( const SHAPE_LINE_CHAIN & aOther ) const;
 
-    void Move( const VECTOR2I& aVector )
+    virtual void Move( const VECTOR2I& aVector )
     {
         for( std::vector<VECTOR2I>::iterator i = m_points.begin(); i != m_points.end(); ++i )
             (*i) += aVector;
     }
 
-    bool IsSolid() const
+    virtual bool IsSolid() const
     {
         return false;
     }
diff --git a/include/geometry/shape_rect.h b/include/geometry/shape_rect.h
index 43bc3c5..7ca6722 100644
--- a/include/geometry/shape_rect.h
+++ b/include/geometry/shape_rect.h
@@ -64,13 +64,13 @@ public:
         m_h( aOther.m_h )
     {};
 
-    SHAPE* Clone() const
+    virtual SHAPE* Clone() const
     {
         return new SHAPE_RECT( *this );
     }
 
     /// @copydoc SHAPE::BBox()
-    const BOX2I BBox( int aClearance = 0 ) const
+    virtual const BOX2I BBox( int aClearance = 0 ) const
     {
         BOX2I bbox( VECTOR2I( m_p0.x - aClearance,  m_p0.y - aClearance ),
                     VECTOR2I( m_w + 2 * aClearance, m_h + 2 * aClearance ) );
@@ -90,7 +90,7 @@ public:
     }
 
     /// @copydoc SHAPE::Collide()
-    bool Collide( const SEG& aSeg, int aClearance = 0 ) const
+    virtual bool Collide( const SEG& aSeg, int aClearance = 0 ) const
     {
         //VECTOR2I pmin = VECTOR2I( std::min( aSeg.a.x, aSeg.b.x ), std::min( aSeg.a.y, aSeg.b.y ) );
         //VECTOR2I pmax = VECTOR2I( std::max( aSeg.a.x, aSeg.b.x ), std::max( aSeg.a.y, aSeg.b.y ));
@@ -159,12 +159,12 @@ public:
         return m_h;
     }
 
-    void Move( const VECTOR2I& aVector )
+    virtual void Move( const VECTOR2I& aVector )
     {
         m_p0 += aVector;
     }
 
-    bool IsSolid() const
+    virtual bool IsSolid() const
     {
         return true;
     }
diff --git a/include/geometry/shape_segment.h b/include/geometry/shape_segment.h
index 6dc3ade..d28b1b7 100644
--- a/include/geometry/shape_segment.h
+++ b/include/geometry/shape_segment.h
@@ -42,22 +42,22 @@ public:
 
     ~SHAPE_SEGMENT() {};
 
-    SHAPE* Clone() const
+    virtual SHAPE* Clone() const
     {
         return new SHAPE_SEGMENT( m_seg, m_width );
     }
 
-    const BOX2I BBox( int aClearance = 0 ) const
+    virtual const BOX2I BBox( int aClearance = 0 ) const
     {
         return BOX2I( m_seg.A, m_seg.B - m_seg.A ).Inflate( aClearance + m_width / 2 );
     }
 
-    bool Collide( const SEG& aSeg, int aClearance = 0 ) const
+    virtual bool Collide( const SEG& aSeg, int aClearance = 0 ) const
     {
         return m_seg.Distance( aSeg ) <= m_width / 2 + aClearance;
     }
 
-    bool Collide( const VECTOR2I& aP, int aClearance = 0 ) const
+    virtual bool Collide( const VECTOR2I& aP, int aClearance = 0 ) const
     {
         return m_seg.Distance( aP ) <= m_width / 2 + aClearance;
     }
@@ -82,12 +82,12 @@ public:
         return m_width;
     }
 
-    bool IsSolid() const
+    virtual bool IsSolid() const
     {
         return true;
     }
 
-    void Move( const VECTOR2I& aVector )
+    virtual void Move( const VECTOR2I& aVector )
     {
         m_seg.A += aVector;
         m_seg.B += aVector;
diff --git a/include/html_messagebox.h b/include/html_messagebox.h
index 8527630..df5e894 100644
--- a/include/html_messagebox.h
+++ b/include/html_messagebox.h
@@ -41,7 +41,7 @@ class HTML_MESSAGE_BOX : public DIALOG_DISPLAY_HTML_TEXT_BASE
 {
 protected:
     // Handlers for HTML_MESSAGE_BOX_BASE events.
-    void OnCloseButtonClick( wxCommandEvent& event );
+    virtual void OnCloseButtonClick( wxCommandEvent& event );
 
 public:
     /**
diff --git a/include/kiway.h b/include/kiway.h
index 865c645..487e3f6 100644
--- a/include/kiway.h
+++ b/include/kiway.h
@@ -360,7 +360,7 @@ public:
 
     void OnKiwayEnd();
 
-    bool ProcessEvent( wxEvent& aEvent );   // overload virtual
+    virtual bool ProcessEvent( wxEvent& aEvent );
 
 private:
 
diff --git a/include/kiway_express.h b/include/kiway_express.h
index cebc9df..fd68ae0 100644
--- a/include/kiway_express.h
+++ b/include/kiway_express.h
@@ -61,7 +61,7 @@ public:
     const std::string&  GetPayload()                    { return m_payload; }
     void SetPayload( const std::string& aPayload )      { m_payload = aPayload; }
 
-    KIWAY_EXPRESS* Clone() const            { return new KIWAY_EXPRESS( *this ); }
+    virtual KIWAY_EXPRESS* Clone() const                { return new KIWAY_EXPRESS( *this ); }
 
     //KIWAY_EXPRESS() {}
 
diff --git a/include/kiway_player.h b/include/kiway_player.h
index 94be92d..c798098 100644
--- a/include/kiway_player.h
+++ b/include/kiway_player.h
@@ -208,7 +208,7 @@ public:
     /**
      * Our version of Destroy() which is virtual from wxWidgets
      */
-    bool Destroy();
+    virtual bool Destroy();
 
 protected:
 
diff --git a/include/reporter.h b/include/reporter.h
index 42d4c1f..8ef45dc 100644
--- a/include/reporter.h
+++ b/include/reporter.h
@@ -133,7 +133,7 @@ public:
         SetReportErrors( true );
     }
 
-    REPORTER& Report( const wxString& aText );
+    virtual REPORTER& Report( const wxString& aText );
 };
 
 
@@ -152,7 +152,7 @@ public:
     {
     }
 
-    REPORTER& Report( const wxString& aText );
+    virtual REPORTER& Report( const wxString& aText );
 };
 
 #endif     // _REPORTER_H_
diff --git a/include/richio.h b/include/richio.h
index e3bf3bf..0d91a1b 100644
--- a/include/richio.h
+++ b/include/richio.h
@@ -365,7 +365,7 @@ public:
      */
     ~FILE_LINE_READER();
 
-    char* ReadLine() throw( IO_ERROR );   // see LINE_READER::ReadLine() description
+    virtual char* ReadLine() throw( IO_ERROR );   // see LINE_READER::ReadLine() description
 
     /**
      * Function Rewind
@@ -412,7 +412,7 @@ public:
      */
     STRING_LINE_READER( const STRING_LINE_READER& aStartingPoint );
 
-    char* ReadLine() throw( IO_ERROR );    // see LINE_READER::ReadLine() description
+    virtual char* ReadLine() throw( IO_ERROR );    // see LINE_READER::ReadLine() description
 };
 
 
@@ -435,7 +435,7 @@ public:
      */
     INPUTSTREAM_LINE_READER( wxInputStream* aStream, const wxString& aSource );
 
-    char* ReadLine() throw( IO_ERROR );    // see LINE_READER::ReadLine() description
+    virtual char* ReadLine() throw( IO_ERROR );    // see LINE_READER::ReadLine() description
 };
 
 
@@ -612,7 +612,7 @@ public:
 
 protected:
     //-----<OUTPUTFORMATTER>------------------------------------------------
-    void write( const char* aOutBuf, int aCount ) throw( IO_ERROR );
+    virtual void write( const char* aOutBuf, int aCount ) throw( IO_ERROR );
     //-----</OUTPUTFORMATTER>-----------------------------------------------
 };
 
@@ -644,7 +644,7 @@ public:
 
 protected:
     //-----<OUTPUTFORMATTER>------------------------------------------------
-    void write( const char* aOutBuf, int aCount ) throw( IO_ERROR );
+    virtual void write( const char* aOutBuf, int aCount ) throw( IO_ERROR );
     //-----</OUTPUTFORMATTER>-----------------------------------------------
 
     FILE*       m_fp;               ///< takes ownership
@@ -675,7 +675,7 @@ public:
 
 protected:
     //-----<OUTPUTFORMATTER>------------------------------------------------
-    void write( const char* aOutBuf, int aCount ) throw( IO_ERROR );
+    virtual void write( const char* aOutBuf, int aCount ) throw( IO_ERROR );
     //-----</OUTPUTFORMATTER>-----------------------------------------------
 };
 
diff --git a/include/tool/context_menu.h b/include/tool/context_menu.h
index 882fb3a..d67c912 100644
--- a/include/tool/context_menu.h
+++ b/include/tool/context_menu.h
@@ -57,7 +57,7 @@ public:
      * the menu.
      * @param aTitle is the new title.
      */
-    void SetTitle( const wxString& aTitle );
+    virtual void SetTitle( const wxString& aTitle );
 
     /**
      * Function Add()
diff --git a/include/view/view_group.h b/include/view/view_group.h
index 2a1ad62..2a31a61 100644
--- a/include/view/view_group.h
+++ b/include/view/view_group.h
@@ -170,23 +170,23 @@ protected:
     /// These functions cannot be used with VIEW_GROUP as they are intended only to work with
     /// singular VIEW_ITEMs (there is only one-to-one relation between item/layer combination and
     /// its group).
-    int getGroup( int aLayer ) const
+    virtual int getGroup( int aLayer ) const
     {
         return -1;
     }
 
-    std::vector<int> getAllGroups() const
+    virtual std::vector<int> getAllGroups() const
     {
         return std::vector<int>();
     }
 
-    void setGroup( int aLayer, int aGroup )
+    virtual void setGroup( int aLayer, int aGroup )
     {}
 
-    void deleteGroups()
+    virtual void deleteGroups()
     {}
 
-    bool storesGroups() const
+    virtual bool storesGroups() const
     {
         return false;
     }
diff --git a/include/view/wx_view_controls.h b/include/view/wx_view_controls.h
index d8722d5..efc2cd7 100644
--- a/include/view/wx_view_controls.h
+++ b/include/view/wx_view_controls.h
@@ -64,7 +64,7 @@ public:
      *
      * @param aEnabled says whether the option should be enabled or disabled.
      */
-    void SetGrabMouse( bool aEnabled );
+    virtual void SetGrabMouse( bool aEnabled );
 
     /**
      * Function SetAutoPan()
@@ -72,7 +72,7 @@ public:
      *
      * @param aEnabled says whether the option should enabled or disabled.
      */
-    void SetAutoPan( bool aEnabled )
+    virtual void SetAutoPan( bool aEnabled )
     {
         m_autoPanEnabled = aEnabled;
 
@@ -81,10 +81,10 @@ public:
     }
 
     /// @copydoc VIEW_CONTROLS::GetMousePosition()
-    VECTOR2D GetMousePosition() const;
+    virtual VECTOR2D GetMousePosition() const;
 
     /// @copydoc VIEW_CONTROLS::GetCursorPosition()
-    VECTOR2D GetCursorPosition() const;
+    virtual VECTOR2D GetCursorPosition() const;
 
     /// Event that forces mouse move event in the dispatcher (eg. used in autopanning, when mouse
     /// cursor does not move in screen coordinates, but does in world coordinates)
diff --git a/include/worksheet_viewitem.h b/include/worksheet_viewitem.h
index 7997825..6200fbe 100644
--- a/include/worksheet_viewitem.h
+++ b/include/worksheet_viewitem.h
@@ -115,17 +115,17 @@ public:
     }
 
     /// @copydoc VIEW_ITEM::ViewBBox()
-    const BOX2I ViewBBox() const;
+    virtual const BOX2I ViewBBox() const;
 
     /// @copydoc VIEW_ITEM::ViewDraw()
-    void ViewDraw( int aLayer, GAL* aGal ) const;
+    virtual void ViewDraw( int aLayer, GAL* aGal ) const;
 
     /// @copydoc VIEW_ITEM::ViewGetLayers()
-    void ViewGetLayers( int aLayers[], int& aCount ) const;
+    virtual void ViewGetLayers( int aLayers[], int& aCount ) const;
 
 #if defined(DEBUG)
     /// @copydoc EDA_ITEM::Show()
-    void Show( int x, std::ostream& st ) const
+    virtual void Show( int x, std::ostream& st ) const
     {
     }
 #endif
diff --git a/include/wxBasePcbFrame.h b/include/wxBasePcbFrame.h
index 7934968..fed5d2c 100644
--- a/include/wxBasePcbFrame.h
+++ b/include/wxBasePcbFrame.h
@@ -131,18 +131,18 @@ public:
      */
     EDA_RECT    GetBoardBoundingBox( bool aBoardEdgesOnly = false ) const;
 
-    virtual void SetPageSettings( const PAGE_INFO& aPageSettings ); // overload
-    const PAGE_INFO& GetPageSettings() const;                   // overload
-    const wxSize GetPageSizeIU() const;                         // overload
+    virtual void SetPageSettings( const PAGE_INFO& aPageSettings );     // overload
+    virtual const PAGE_INFO& GetPageSettings() const;                   // overload
+    virtual const wxSize GetPageSizeIU() const;                         // overload
 
-    const wxPoint& GetAuxOrigin() const;                        // overload
-    void SetAuxOrigin( const wxPoint& aPoint );                 // overload
+    virtual const wxPoint& GetAuxOrigin() const;                        // overload
+    virtual void SetAuxOrigin( const wxPoint& aPoint );                 // overload
 
-    const wxPoint& GetGridOrigin() const;                       // overload
-    void SetGridOrigin( const wxPoint& aPoint );                // overload
+    virtual const wxPoint& GetGridOrigin() const;                       // overload
+    virtual void SetGridOrigin( const wxPoint& aPoint );                // overload
 
-    const TITLE_BLOCK& GetTitleBlock() const;                   // overload
-    void SetTitleBlock( const TITLE_BLOCK& aTitleBlock );       // overload
+    virtual const TITLE_BLOCK& GetTitleBlock() const;                   // overload
+    virtual void SetTitleBlock( const TITLE_BLOCK& aTitleBlock );       // overload
 
     /**
      * Function GetDesignSettings
@@ -160,7 +160,7 @@ public:
      * Must be overloaded in frames which have display options
      * (board editor and footprint editor)
      */
-    void* GetDisplayOptions() { return &m_DisplayOptions; }
+    virtual void* GetDisplayOptions() { return &m_DisplayOptions; }
 
     const ZONE_SETTINGS& GetZoneSettings() const;
     void SetZoneSettings( const ZONE_SETTINGS& aSettings );
@@ -199,7 +199,7 @@ public:
     virtual void SetToolID( int aId, int aCursor, const wxString& aToolMsg );
     virtual void UpdateStatusBar();
 
-    PCB_SCREEN* GetScreen() const { return (PCB_SCREEN*) EDA_DRAW_FRAME::GetScreen(); }
+    virtual PCB_SCREEN* GetScreen() const { return (PCB_SCREEN*) EDA_DRAW_FRAME::GetScreen(); }
 
     /**
      * Function BestZoom
@@ -213,7 +213,7 @@ public:
      * level indicator in dialogs.
      * Virtual from the base class
      */
-    const wxString GetZoomLevelIndicator() const;
+    virtual const wxString GetZoomLevelIndicator() const;
 
     virtual void Show3D_Frame( wxCommandEvent& event );
 
@@ -630,8 +630,8 @@ public:
         return ( (PCB_SCREEN*) GetScreen() )->m_Active_Layer;
     }
 
-    void LoadSettings( wxConfigBase* aCfg );    // override virtual
-    void SaveSettings( wxConfigBase* aCfg );    // override virtual
+    virtual void LoadSettings( wxConfigBase* aCfg );    // override
+    virtual void SaveSettings( wxConfigBase* aCfg );    // override
 
     bool InvokeDialogGrid();
 
diff --git a/include/wxPcbStruct.h b/include/wxPcbStruct.h
index ecdf62f..0e6fec9 100644
--- a/include/wxPcbStruct.h
+++ b/include/wxPcbStruct.h
@@ -231,7 +231,7 @@ public:
      */
     virtual void ExecuteRemoteCommand( const char* cmdline );
 
-    void KiwayMailIn( KIWAY_EXPRESS& aEvent );      // virtual overload from KIWAY_PLAYER
+    virtual void KiwayMailIn( KIWAY_EXPRESS& aEvent );      // overload from KIWAY_PLAYER
 
     /**
      * Function ToPlotter
@@ -439,7 +439,7 @@ public:
      * @param aPosition The cursor position in logical (drawing) units.
      * @param aItem = NULL or pointer on a EDA_ITEM under the mouse cursor
      */
-    bool OnHotKey( wxDC* aDC, int aHotkeyCode, const wxPoint& aPosition, EDA_ITEM* aItem = NULL );
+    virtual bool OnHotKey( wxDC* aDC, int aHotkeyCode, const wxPoint& aPosition, EDA_ITEM* aItem = NULL );
 
     /**
      * Function OnHotkeyDeleteItem
@@ -514,7 +514,7 @@ public:
      */
     TRACK * OnHotkeyBeginRoute( wxDC* aDC );
 
-    void OnCloseWindow( wxCloseEvent& Event );
+    virtual void OnCloseWindow( wxCloseEvent& Event );
     void Process_Special_Functions( wxCommandEvent& event );
     void Tracks_and_Vias_Size_Event( wxCommandEvent& event );
     void OnSelectTool( wxCommandEvent& aEvent );
@@ -529,13 +529,13 @@ public:
     void ProcessMuWaveFunctions( wxCommandEvent& event );
     void MuWaveCommand( wxDC* DC, const wxPoint& MousePos );
 
-    void RedrawActiveWindow( wxDC* DC, bool EraseBg );
-    void ReCreateHToolbar();
-    void ReCreateAuxiliaryToolbar();
-    void ReCreateVToolbar();
+    virtual void RedrawActiveWindow( wxDC* DC, bool EraseBg );
+    virtual void ReCreateHToolbar();
+    virtual void ReCreateAuxiliaryToolbar();
+    virtual void ReCreateVToolbar();
     void ReCreateMicrowaveVToolbar();
     void ReCreateOptToolbar();
-    void ReCreateMenuBar();
+    virtual void ReCreateMenuBar();
 
     /**
      * Re create the layer Box by clearing the old list, and building
@@ -612,14 +612,14 @@ public:
      * Function Show3D_Frame
      * displays the 3D view of current printed circuit board.
      */
-    void Show3D_Frame( wxCommandEvent& event );
+    virtual void Show3D_Frame( wxCommandEvent& event );
 
     /**
      * Function UseGalCanvas
      * Enables/disables GAL canvas.
      * @param aEnable determines if GAL should be active or not.
      */
-    void UseGalCanvas( bool aEnable );
+    virtual void UseGalCanvas( bool aEnable );
 
     /**
      * Function ChangeCanvas
@@ -627,7 +627,7 @@ public:
      */
     void SwitchCanvas( wxCommandEvent& aEvent );
 
-    bool GeneralControl( wxDC* aDC, const wxPoint& aPosition, int aHotKey = 0 );
+    virtual bool GeneralControl( wxDC* aDC, const wxPoint& aPosition, int aHotKey = 0 );
 
     /**
      * Function ShowDesignRulesEditor
@@ -640,8 +640,8 @@ public:
     void PrepareLayerIndicator();
 
     /* mouse functions events: */
-    void OnLeftClick( wxDC* DC, const wxPoint& MousePos );
-    void OnLeftDClick( wxDC* DC, const wxPoint& MousePos );
+    virtual void OnLeftClick( wxDC* DC, const wxPoint& MousePos );
+    virtual void OnLeftDClick( wxDC* DC, const wxPoint& MousePos );
 
     /**
      * Function OnRightClick
@@ -650,10 +650,10 @@ public:
      * @param aMousePos The current mouse position
      * @param aPopMenu The menu to add to.
      */
-    bool OnRightClick( const wxPoint& aMousePos, wxMenu* aPopMenu );
+    virtual bool OnRightClick( const wxPoint& aMousePos, wxMenu* aPopMenu );
 
     void OnSelectOptionToolbar( wxCommandEvent& event );
-    void ToolOnRightClick( wxCommandEvent& event );
+    virtual void ToolOnRightClick( wxCommandEvent& event );
 
     /**
      * Function SaveCopyInUndoList.
@@ -702,7 +702,7 @@ public:
      *  - Get an old version of the board from Redo list
      *  @return none
      */
-    void RestoreCopyFromRedoList( wxCommandEvent& aEvent );
+    virtual void RestoreCopyFromRedoList( wxCommandEvent& aEvent );
 
     /**
      * Function RestoreCopyFromUndoList
@@ -711,7 +711,7 @@ public:
      *  - Get an old version of the board from Undo list
      *  @return none
      */
-    void RestoreCopyFromUndoList( wxCommandEvent& aEvent );
+    virtual void RestoreCopyFromUndoList( wxCommandEvent& aEvent );
 
     /* Block operations: */
 
@@ -867,7 +867,7 @@ public:
     bool LoadOnePcbFile( const wxString& aFileName, bool aAppend = false,
                          bool aForceFileDialog = false );
      */
-    bool OpenProjectFiles( const std::vector<wxString>& aFileSet, int aCtl = 0 );
+    virtual bool OpenProjectFiles( const std::vector<wxString>& aFileSet, int aCtl = 0 );
 
     /**
      * Function AppendBoardFile
@@ -913,10 +913,10 @@ public:
     bool Clear_Pcb( bool aQuery );
 
     ///> @copydoc PCB_BASE_FRAME::SetBoard()
-    void SetBoard( BOARD* aBoard );
+    virtual void SetBoard( BOARD* aBoard );
 
     ///> @copydoc PCB_BASE_FRAME::SetPageSettings()
-    void SetPageSettings( const PAGE_INFO& aPageSettings ); // overload
+    virtual void SetPageSettings( const PAGE_INFO& aPageSettings ); // overload
 
     // Drc control
 
@@ -1139,7 +1139,7 @@ public:
      * @param aDC = the current device context
      * @param aItem = a pointer to the BOARD_ITEM to edit
      */
-    void OnEditItemRequest( wxDC* aDC, BOARD_ITEM* aItem );
+    virtual void OnEditItemRequest( wxDC* aDC, BOARD_ITEM* aItem );
 
     /**
      * Locate track or pad and highlight the corresponding net.
@@ -1289,7 +1289,7 @@ public:
     bool MergeCollinearTracks( TRACK* track, wxDC* DC, int end );
 
     void Start_DragTrackSegmentAndKeepSlope( TRACK* track, wxDC* DC );
-    void SwitchLayer( wxDC* DC, LAYER_ID layer );
+    virtual void SwitchLayer( wxDC* DC, LAYER_ID layer );
 
     /**
      * Function Add45DegreeSegment
@@ -1696,7 +1696,7 @@ public:
      */
     MODULE* Genere_Self( wxDC* DC );
 
-    void ShowChangedLanguage();         // override EDA_BASE_FRAME virtual
+    virtual void ShowChangedLanguage();         // override EDA_BASE_FRAME
 
     /**
      * Function UpdateTitle
diff --git a/include/wxstruct.h b/include/wxstruct.h
index 6ce0a79..ded28c9 100644
--- a/include/wxstruct.h
+++ b/include/wxstruct.h
@@ -181,6 +181,8 @@ public:
 
     ~EDA_BASE_FRAME();
 
+    // wxFrame
+
     /**
      * Function ProcessEvent
      * overrides the default process event handler to implement the auto save feature.
@@ -188,9 +190,9 @@ public:
      * @warning If you override this function in a derived class, make sure you call
      *          down to this or the auto save feature will be disabled.
      */
-    bool ProcessEvent( wxEvent& aEvent );       // override wxFrame::ProcessEvent()
+    virtual bool ProcessEvent( wxEvent& aEvent );
 
-    bool Enable( bool enable );                 // override wxFrame::Enable virtual
+    virtual bool Enable( bool enable );
 
     void SetAutoSaveInterval( int aInterval ) { m_autoSaveInterval = aInterval; }
 
diff --git a/kicad/class_treeprojectfiles.h b/kicad/class_treeprojectfiles.h
index d10c53e..f6ddc4f 100644
--- a/kicad/class_treeprojectfiles.h
+++ b/kicad/class_treeprojectfiles.h
@@ -51,7 +51,7 @@ public:
     ~TREEPROJECTFILES();
 private:
     /* overridden sort function */
-    int OnCompareItems( const wxTreeItemId& item1, const wxTreeItemId& item2 );
+    virtual int OnCompareItems( const wxTreeItemId& item1, const wxTreeItemId& item2 );
 };
 
 #endif  // CLASS_TREEPROJECTFILES_H
diff --git a/kicad/dialogs/dialog_template_selector.h b/kicad/dialogs/dialog_template_selector.h
index 2b59ea6..4ecee6c 100644
--- a/kicad/dialogs/dialog_template_selector.h
+++ b/kicad/dialogs/dialog_template_selector.h
@@ -96,7 +96,7 @@ public:
     TEMPLATE_WIDGET* GetWidget();
     void SetWidget( TEMPLATE_WIDGET* aWidget );
     void onNotebookResize( wxSizeEvent& event );
-    void OnPageChange( wxNotebookEvent& event );
+    virtual void OnPageChange( wxNotebookEvent& event );
 };
 
 #endif
diff --git a/kicad/kicad.cpp b/kicad/kicad.cpp
index 4f497e2..575dc29 100644
--- a/kicad/kicad.cpp
+++ b/kicad/kicad.cpp
@@ -249,7 +249,7 @@ KIWAY  Kiway( &Pgm(), KFCTL_CPP_PROJECT_SUITE );
  */
 struct APP_KICAD : public wxApp
 {
-    bool OnInit()           // overload wxApp virtual
+    virtual bool OnInit()
     {
         // if( Kiways.OnStart( this ) )
         {
@@ -258,7 +258,7 @@ struct APP_KICAD : public wxApp
         return false;
     }
 
-    int  OnExit()           // overload wxApp virtual
+    virtual int  OnExit()
     {
         // Kiways.OnEnd();
 
@@ -267,7 +267,7 @@ struct APP_KICAD : public wxApp
         return wxApp::OnExit();
     }
 
-    int OnRun()             // overload wxApp virtual
+    virtual int OnRun()
     {
         try
         {
diff --git a/kicad/kicad.h b/kicad/kicad.h
index 342ec06..4ca4bbd 100644
--- a/kicad/kicad.h
+++ b/kicad/kicad.h
@@ -195,7 +195,7 @@ public:
 
     void Process_Config( wxCommandEvent& event );
 
-    void ReCreateMenuBar();
+    virtual void ReCreateMenuBar();
     void RecreateBaseHToolbar();
 
     /**
@@ -227,9 +227,9 @@ public:
 
     void CreateNewProject( const wxString& aPrjFullFileName, bool aTemplateSelector );
 
-    void LoadSettings( wxConfigBase* aCfg );
+    virtual void LoadSettings( wxConfigBase* aCfg );
 
-    void SaveSettings( wxConfigBase* aCfg );
+    virtual void SaveSettings( wxConfigBase* aCfg );
 
     /**
      * Function Execute
@@ -252,7 +252,7 @@ public:
         {
         }
 
-        void OnTerminate( int pid, int status );
+        virtual void OnTerminate( int pid, int status );
     };
 
 #ifdef KICAD_USE_FILES_WATCHER
@@ -285,11 +285,11 @@ public:
 
 private:
 
-    wxConfigBase*       config();       // override EDA_BASE_FRAME virtual
+    virtual wxConfigBase*       config();
 
-    const SEARCH_STACK& sys_search();   // override EDA_BASE_FRAME virtual
+    virtual const SEARCH_STACK& sys_search();
 
-    wxString help_name();               // override EDA_BASE_FRAME virtual
+    virtual wxString help_name();
 
     TREE_PROJECT_FRAME* m_LeftWin;
     LAUNCHER_PANEL*     m_Launcher;
diff --git a/kicad/pgm_kicad.h b/kicad/pgm_kicad.h
index bb1069e..fc07014 100644
--- a/kicad/pgm_kicad.h
+++ b/kicad/pgm_kicad.h
@@ -48,9 +48,9 @@ public:
         destroy();
     }
 
-    bool OnPgmInit( wxApp* aWxApp );                // overload PGM_BASE virtual
-    void OnPgmExit();                               // overload PGM_BASE virtual
-    void MacOpenFile( const wxString& aFileName );  // overload PGM_BASE virtual
+    virtual bool OnPgmInit( wxApp* aWxApp );
+    virtual void OnPgmExit();
+    virtual void MacOpenFile( const wxString& aFileName );
 
     wxFileHistory&  GetFileHistory()            { return m_bm.m_history; }
 
diff --git a/pagelayout_editor/class_pl_editor_layout.h b/pagelayout_editor/class_pl_editor_layout.h
index db04fcc..af7200e 100644
--- a/pagelayout_editor/class_pl_editor_layout.h
+++ b/pagelayout_editor/class_pl_editor_layout.h
@@ -89,7 +89,7 @@ public:
     void SetBoundingBox( const EDA_RECT& aBox ) { m_BoundingBox = aBox; }
 
 #if defined(DEBUG)
-    void    Show( int nestLevel, std::ostream& os ) const;  // overload
+    virtual void Show( int nestLevel, std::ostream& os ) const;  // overload
 
 #endif
 };
diff --git a/pagelayout_editor/class_pl_editor_screen.h b/pagelayout_editor/class_pl_editor_screen.h
index 957180f..da22784 100644
--- a/pagelayout_editor/class_pl_editor_screen.h
+++ b/pagelayout_editor/class_pl_editor_screen.h
@@ -55,7 +55,7 @@ public:
      * virtual pure in BASE_SCREEN, so it must be defined here
      */
 
-    void ClearUndoORRedoList( UNDO_REDO_CONTAINER& aList, int aItemCount = -1 );
+    virtual void ClearUndoORRedoList( UNDO_REDO_CONTAINER& aList, int aItemCount = -1 );
     /**
      * Function GetCurItem
      * returns the currently selected WORKSHEET_DATAITEM, overriding
diff --git a/pagelayout_editor/design_tree_frame.h b/pagelayout_editor/design_tree_frame.h
index 1ff901e..4789ccc 100644
--- a/pagelayout_editor/design_tree_frame.h
+++ b/pagelayout_editor/design_tree_frame.h
@@ -82,7 +82,7 @@ public:
     ~DESIGN_TREE_FRAME();
 
     void    ReCreateDesignTree();
-    wxSize  GetMinSize() const;
+    virtual wxSize  GetMinSize() const;
 
     /** @return the page layout item managed by the cell
      */
diff --git a/pagelayout_editor/dialogs/dialog_new_dataitem.cpp b/pagelayout_editor/dialogs/dialog_new_dataitem.cpp
index 12a6744..ff597ee 100644
--- a/pagelayout_editor/dialogs/dialog_new_dataitem.cpp
+++ b/pagelayout_editor/dialogs/dialog_new_dataitem.cpp
@@ -43,8 +43,8 @@ public:
     DIALOG_NEW_DATAITEM( PL_EDITOR_FRAME* aCaller, WORKSHEET_DATAITEM* aItem );
 
 private:
-    void OnCancelClick( wxCommandEvent& event );
-    void OnOKClick( wxCommandEvent& event );
+    virtual void OnCancelClick( wxCommandEvent& event );
+    virtual void OnOKClick( wxCommandEvent& event );
 
     void initDlg();
 };
diff --git a/pagelayout_editor/dialogs/dialogs_for_printing.cpp b/pagelayout_editor/dialogs/dialogs_for_printing.cpp
index 5ed93f4..19cdc0e 100644
--- a/pagelayout_editor/dialogs/dialogs_for_printing.cpp
+++ b/pagelayout_editor/dialogs/dialogs_for_printing.cpp
@@ -55,9 +55,9 @@ public:
         m_parent = aParent;
     }
 
-    bool OnPrintPage( int aPageNum );
-    bool HasPage( int aPageNum ) { return ( aPageNum <= 2 ); }
-    void GetPageInfo( int* minPage, int* maxPage, int* selPageFrom, int* selPageTo );
+    virtual bool OnPrintPage( int aPageNum );
+    virtual bool HasPage( int aPageNum ) { return ( aPageNum <= 2 ); }
+    virtual void GetPageInfo( int* minPage, int* maxPage, int* selPageFrom, int* selPageTo );
     void DrawPage( int aPageNum );
 };
 
@@ -77,7 +77,7 @@ public:
         m_parent = aParent;
     }
 
-    bool Show( bool show )      // overload
+    virtual bool Show( bool show )
     {
         bool        ret;
 
diff --git a/pagelayout_editor/pl_editor.cpp b/pagelayout_editor/pl_editor.cpp
index 1dca031..788f8d0 100644
--- a/pagelayout_editor/pl_editor.cpp
+++ b/pagelayout_editor/pl_editor.cpp
@@ -51,11 +51,11 @@ static struct IFACE : public KIFACE_I
         KIFACE_I( aName, aType )
     {}
 
-    bool OnKifaceStart( PGM_BASE* aProgram, int aCtlBits );
+    virtual bool OnKifaceStart( PGM_BASE* aProgram, int aCtlBits );
 
-    void OnKifaceEnd();
+    virtual void OnKifaceEnd();
 
-    wxWindow* CreateWindow( wxWindow* aParent, int aClassId, KIWAY* aKiway, int aCtlBits = 0 )
+    virtual wxWindow* CreateWindow( wxWindow* aParent, int aClassId, KIWAY* aKiway, int aCtlBits = 0 )
     {
         switch( aClassId )
         {
@@ -84,7 +84,7 @@ static struct IFACE : public KIFACE_I
      *
      * @return void* - and must be cast into the know type.
      */
-    void* IfaceOrAddress( int aDataId )
+    virtual void* IfaceOrAddress( int aDataId )
     {
         return NULL;
     }
diff --git a/pagelayout_editor/pl_editor_frame.h b/pagelayout_editor/pl_editor_frame.h
index b7aa5ee..220df74 100644
--- a/pagelayout_editor/pl_editor_frame.h
+++ b/pagelayout_editor/pl_editor_frame.h
@@ -76,7 +76,7 @@ public:
     PL_EDITOR_FRAME( KIWAY* aKiway, wxWindow* aParent );
     ~PL_EDITOR_FRAME();
 
-    bool OpenProjectFiles( const std::vector<wxString>& aFileSet, int aCtl );   // overload KIWAY_PLAYER
+    virtual bool OpenProjectFiles( const std::vector<wxString>& aFileSet, int aCtl );
 
     /**
      * Function LoadPageLayoutDescrFile
@@ -103,12 +103,12 @@ public:
     void    OnCloseWindow( wxCloseEvent& Event );
 
     // Virtual basic functions:
-    void    RedrawActiveWindow( wxDC* DC, bool EraseBg );
-    void    ReCreateHToolbar();
+    virtual void    RedrawActiveWindow( wxDC* DC, bool EraseBg );
+    virtual void    ReCreateHToolbar();
 
-    void SetPageSettings(const PAGE_INFO&);
-    const PAGE_INFO& GetPageSettings () const;                  // overload EDA_DRAW_FRAME
-    const wxSize GetPageSizeIU() const;                         // overload EDA_DRAW_FRAME
+    virtual void SetPageSettings(const PAGE_INFO&);
+    virtual const PAGE_INFO& GetPageSettings () const;
+    virtual const wxSize GetPageSizeIU() const;
 
     /**
      * Function GetZoomLevelIndicator
@@ -116,33 +116,33 @@ public:
      * level indicator in dialogs.
      * Virtual from the base class
      */
-    const wxString GetZoomLevelIndicator() const;
+    virtual const wxString GetZoomLevelIndicator() const;
 
-    PL_EDITOR_SCREEN* GetScreen() const                         // overload EDA_DRAW_FRAME
+    virtual PL_EDITOR_SCREEN* GetScreen() const
     {
         return (PL_EDITOR_SCREEN*) EDA_DRAW_FRAME::GetScreen();
     }
 
-    const wxPoint& GetAuxOrigin() const                         // overload EDA_DRAW_FRAME
+    virtual const wxPoint& GetAuxOrigin() const
     {
         static wxPoint dummy;   // ( 0,0 );
         return dummy;
     }
-    void SetAuxOrigin( const wxPoint& aPosition ) {}            // overload EDA_DRAW_FRAME
+    virtual void SetAuxOrigin( const wxPoint& aPosition ) {}
 
-    const wxPoint& GetGridOrigin() const                        // overload EDA_DRAW_FRAME
+    virtual const wxPoint& GetGridOrigin() const
     {
         return m_grid_origin;
     }
-    void SetGridOrigin( const wxPoint& aPoint )                 // overload EDA_DRAW_FRAME
+    virtual void SetGridOrigin( const wxPoint& aPoint )
     {
         m_grid_origin = aPoint;
     }
 
-    const TITLE_BLOCK& GetTitleBlock() const;                   // overload EDA_DRAW_FRAME
-    void SetTitleBlock( const TITLE_BLOCK& aTitleBlock );       // overload EDA_DRAW_FRAME
+    virtual const TITLE_BLOCK& GetTitleBlock() const;
+    virtual void SetTitleBlock( const TITLE_BLOCK& aTitleBlock );
 
-    void UpdateStatusBar();                                     // overload EDA_DRAW_FRAME
+    virtual void UpdateStatusBar();
 
     /**
      * Must be called to initialize parameters when a new page layout
@@ -154,7 +154,7 @@ public:
      * creates or updates the right vertical toolbar.
      * @note This is currently not used.
      */
-    void    ReCreateVToolbar();
+    virtual void    ReCreateVToolbar();
 
     /**
      * Create or update the left vertical toolbar (option toolbar
@@ -162,11 +162,11 @@ public:
      */
     void    ReCreateOptToolbar();
 
-    void    ReCreateMenuBar();
-    void    OnLeftClick( wxDC* aDC, const wxPoint& aMousePos );
-    void    OnLeftDClick( wxDC* aDC, const wxPoint& aMousePos );
-    bool    OnRightClick( const wxPoint& aMousePos, wxMenu* aPopMenu );
-    double  BestZoom();
+    virtual void    ReCreateMenuBar();
+    virtual void    OnLeftClick( wxDC* aDC, const wxPoint& aMousePos );
+    virtual void    OnLeftDClick( wxDC* aDC, const wxPoint& aMousePos );
+    virtual bool    OnRightClick( const wxPoint& aMousePos, wxMenu* aPopMenu );
+    virtual double  BestZoom();
 
     // Events created by clicking on the design tree list:
     void OnTreeSelection( wxTreeEvent& event );
@@ -204,9 +204,9 @@ public:
      */
     PARAM_CFG_ARRAY&    GetConfigurationSettings( void );
 
-    void LoadSettings( wxConfigBase* aCfg );    // override virtual
+    virtual void LoadSettings( wxConfigBase* aCfg );
 
-    void SaveSettings( wxConfigBase* aCfg );    // override virtual
+    virtual void SaveSettings( wxConfigBase* aCfg );
 
     void                Process_Special_Functions( wxCommandEvent& event );
     void                OnSelectOptionToolbar( wxCommandEvent& event );
@@ -245,7 +245,7 @@ public:
      * @param aPosition The cursor position in logical (drawing) units.
      * @param aItem = NULL or pointer on a EDA_ITEM under the mouse cursor
      */
-    bool OnHotKey( wxDC* aDC, int aHotkeyCode, const wxPoint& aPosition, EDA_ITEM* aItem = NULL );
+    virtual bool OnHotKey( wxDC* aDC, int aHotkeyCode, const wxPoint& aPosition, EDA_ITEM* aItem = NULL );
 
     void                Process_Settings( wxCommandEvent& event );
     void                Process_Config( wxCommandEvent& event );
@@ -264,7 +264,7 @@ public:
     void                ToPrinter( wxCommandEvent& event );
 
     void                Files_io( wxCommandEvent& event );
-    bool                GeneralControl( wxDC* aDC, const wxPoint& aPosition, int aHotKey = 0 );
+    virtual bool        GeneralControl( wxDC* aDC, const wxPoint& aPosition, int aHotKey = 0 );
 
     /** Virtual function PrintPage
      * used to print a page
diff --git a/pagelayout_editor/properties_frame.h b/pagelayout_editor/properties_frame.h
index 208bdc1..18760f1 100644
--- a/pagelayout_editor/properties_frame.h
+++ b/pagelayout_editor/properties_frame.h
@@ -48,8 +48,8 @@ public:
     ~PROPERTIES_FRAME();
 
     // Event functions
-    void OnAcceptPrms( wxCommandEvent& event );
-    void OnSetDefaultValues( wxCommandEvent& event );
+    virtual void OnAcceptPrms( wxCommandEvent& event );
+    virtual void OnSetDefaultValues( wxCommandEvent& event );
 
 
     // Data transfert from general properties to widgets
@@ -64,7 +64,7 @@ public:
     // Data transfert from widgets in properties frame to item
     bool CopyPrmsFromPanelToItem( WORKSHEET_DATAITEM* aItem );
 
-    wxSize GetMinSize() const;
+    virtual wxSize GetMinSize() const;
 };
 
 #endif /* _PROPERTIES_FRAME_H */
diff --git a/pcb_calculator/pcb_calculator.cpp b/pcb_calculator/pcb_calculator.cpp
index 31f27c7..876953f 100644
--- a/pcb_calculator/pcb_calculator.cpp
+++ b/pcb_calculator/pcb_calculator.cpp
@@ -55,11 +55,11 @@ static struct IFACE : public KIFACE_I
         KIFACE_I( aName, aType )
     {}
 
-    bool OnKifaceStart( PGM_BASE* aProgram, int aCtlBits );
+    virtual bool OnKifaceStart( PGM_BASE* aProgram, int aCtlBits );
 
-    void OnKifaceEnd();
+    virtual void OnKifaceEnd();
 
-    wxWindow* CreateWindow( wxWindow* aParent, int aClassId, KIWAY* aKiway, int aCtlBits = 0 )
+    virtual wxWindow* CreateWindow( wxWindow* aParent, int aClassId, KIWAY* aKiway, int aCtlBits = 0 )
     {
         switch( aClassId )
         {
@@ -85,7 +85,7 @@ static struct IFACE : public KIFACE_I
      *
      * @return void* - and must be cast into the know type.
      */
-    void* IfaceOrAddress( int aDataId )
+    virtual void* IfaceOrAddress( int aDataId )
     {
         return NULL;
     }
diff --git a/pcb_calculator/pcb_calculator.h b/pcb_calculator/pcb_calculator.h
index 74ddb44..f12b3dc 100644
--- a/pcb_calculator/pcb_calculator.h
+++ b/pcb_calculator/pcb_calculator.h
@@ -46,13 +46,13 @@ public:
 private:
 
     // Event handlers
-    void OnClosePcbCalc( wxCloseEvent& event );
+    virtual void OnClosePcbCalc( wxCloseEvent& event );
 
     // These 3 functions are called by the OnPaint event, to draw
     // icons that show the current item on the specific panels
-    void OnPaintTranslinePanel( wxPaintEvent& event );
-    void OnPaintAttenuatorPanel( wxPaintEvent& event );
-    void OnPaintAttFormulaPanel( wxPaintEvent& event );
+    virtual void OnPaintTranslinePanel( wxPaintEvent& event );
+    virtual void OnPaintAttenuatorPanel( wxPaintEvent& event );
+    virtual void OnPaintAttFormulaPanel( wxPaintEvent& event );
 
     // Config read-write
     void ReadConfig();
@@ -79,7 +79,7 @@ private:
      * Function OnTWCalculateButt
      * Called by clicking on the calculate button
      */
-    void OnTWCalculateButt( wxCommandEvent& event );
+    virtual void OnTWCalculateButt( wxCommandEvent& event );
 
     /**
      * Function TW_Init
@@ -101,8 +101,8 @@ private:
                     bool aUseInternalLayer );
 
     // Electrical spacing panel:
-    void OnElectricalSpacingUnitsSelection( wxCommandEvent& event );
-    void OnElectricalSpacingRefresh( wxCommandEvent& event );
+    virtual void OnElectricalSpacingUnitsSelection( wxCommandEvent& event );
+    virtual void OnElectricalSpacingRefresh( wxCommandEvent& event );
     void ElectricalSpacingUpdateData( double aUnitScale );
 
     // Transline functions:
@@ -110,42 +110,42 @@ private:
      * Function OnTranslineSelection
      * Called on new transmission line selection
     */
-    void OnTranslineSelection( wxCommandEvent& event );
+    virtual void OnTranslineSelection( wxCommandEvent& event );
 
     /**
      * Function OnTranslineAnalyse
      * Run a new analyse for the current transline with current parameters
      * and displays the electrical parmeters
      */
-    void OnTranslineAnalyse( wxCommandEvent& event );
+    virtual void OnTranslineAnalyse( wxCommandEvent& event );
 
     /**
      * Function OnTranslineSynthetize
      * Run a new synthezis for the current transline with current parameters
      * and displays the geometrical parmeters
      */
-    void OnTranslineSynthetize( wxCommandEvent& event );
+    virtual void OnTranslineSynthetize( wxCommandEvent& event );
 
     /**
      * Function OnTranslineEpsilonR_Button
      * Shows a list of current relative dielectric constant(Er)
      * and set the selected value in main dialog frame
      */
-    void OnTranslineEpsilonR_Button( wxCommandEvent& event );
+    virtual void OnTranslineEpsilonR_Button( wxCommandEvent& event );
 
     /**
      * Function OnTranslineTanD_Button
      * Shows a list of current dielectric loss factor (tangent delta)
      * and set the selected value in main dialog frame
      */
-    void OnTranslineTanD_Button( wxCommandEvent& event );
+    virtual void OnTranslineTanD_Button( wxCommandEvent& event );
 
     /**
      * Function OnTranslineRho_Button
      * Shows a list of current Specific resistance list (rho)
      * and set the selected value in main dialog frame
      */
-    void OnTranslineRho_Button( wxCommandEvent& event );
+    virtual void OnTranslineRho_Button( wxCommandEvent& event );
 
     /**
      * Function TranslineTypeSelection
@@ -165,25 +165,25 @@ private:
     void TransfDlgDataToTranslineParams();
 
     // Color Code panel
-    void OnToleranceSelection( wxCommandEvent& event );
+    virtual void OnToleranceSelection( wxCommandEvent& event );
     void ToleranceSelection( int aSelection );
 
     // Attenuators Panel
-    void OnAttenuatorSelection( wxCommandEvent& event );
+    virtual void OnAttenuatorSelection( wxCommandEvent& event );
     void SetAttenuator( unsigned aIdx );
-    void OnCalculateAttenuator( wxCommandEvent& event );
+    virtual void OnCalculateAttenuator( wxCommandEvent& event );
     void TransfPanelDataToAttenuator();
     void TransfAttenuatorDataToPanel();
     void TransfAttenuatorResultsToPanel();
 
     // Regulators Panel
-    void OnRegulatorCalcButtonClick( wxCommandEvent& event );
-    void OnRegulTypeSelection( wxCommandEvent& event );
-    void OnRegulatorSelection( wxCommandEvent& event );
-    void OnDataFileSelection( wxCommandEvent& event );
-    void OnAddRegulator( wxCommandEvent& event );
-    void OnEditRegulator( wxCommandEvent& event );
-    void OnRemoveRegulator( wxCommandEvent& event );
+    virtual void OnRegulatorCalcButtonClick( wxCommandEvent& event );
+    virtual void OnRegulTypeSelection( wxCommandEvent& event );
+    virtual void OnRegulatorSelection( wxCommandEvent& event );
+    virtual void OnDataFileSelection( wxCommandEvent& event );
+    virtual void OnAddRegulator( wxCommandEvent& event );
+    virtual void OnEditRegulator( wxCommandEvent& event );
+    virtual void OnRemoveRegulator( wxCommandEvent& event );
 
     /**
      * Function RegulatorPageUpdate:
@@ -239,7 +239,7 @@ public:
     bool   IsPrmSelected( enum PRMS_ID aPrmId );
 
     // Board classes panel:
-    void OnBoardClassesUnitsSelection( wxCommandEvent& event );
+    virtual void OnBoardClassesUnitsSelection( wxCommandEvent& event );
     void BoardClassesUpdateData( double aUnitScale );
 
 };
diff --git a/pcb_calculator/regulators_funct.cpp b/pcb_calculator/regulators_funct.cpp
index a0ee082..6464966 100644
--- a/pcb_calculator/regulators_funct.cpp
+++ b/pcb_calculator/regulators_funct.cpp
@@ -49,7 +49,7 @@ public:
     ~DIALOG_EDITOR_DATA() {};
 
     // Event called functions:
-    void OnOKClick( wxCommandEvent& event );
+    virtual void OnOKClick( wxCommandEvent& event );
 
     /**
      * Function IsOK()
@@ -86,7 +86,7 @@ public:
     /**
      * called when the current regulator type is changed
      */
-    void OnRegTypeSelection( wxCommandEvent& event )
+    virtual void OnRegTypeSelection( wxCommandEvent& event )
     {
         UpdateDialog();
     }
diff --git a/pcb_calculator/transline/c_microstrip.h b/pcb_calculator/transline/c_microstrip.h
index 3843b18..b3c0181 100644
--- a/pcb_calculator/transline/c_microstrip.h
+++ b/pcb_calculator/transline/c_microstrip.h
@@ -60,8 +60,8 @@ private:
     double atten_cond_o;        /* odd-mode conductors losses (dB) */
 
 public:
-    void   analyze();
-    void   synthesize();
+    virtual void   analyze();
+    virtual void   synthesize();
 
 private:
     double delta_u_thickness_single( double, double );
diff --git a/pcb_calculator/transline/coax.h b/pcb_calculator/transline/coax.h
index e59e39d..7af3af4 100644
--- a/pcb_calculator/transline/coax.h
+++ b/pcb_calculator/transline/coax.h
@@ -40,8 +40,8 @@ private:
     double fc;                  /* Cutoff frequency for higher order modes */
 
 public:
-    void   analyze();
-    void   synthesize();
+    virtual void   analyze();
+    virtual void   synthesize();
 
 private:
     void   get_coax_sub();
diff --git a/pcb_calculator/transline/coplanar.h b/pcb_calculator/transline/coplanar.h
index b3d6a70..9b11482 100644
--- a/pcb_calculator/transline/coplanar.h
+++ b/pcb_calculator/transline/coplanar.h
@@ -42,8 +42,8 @@ private:
     double atten_cond;          /* Loss in conductors (dB) */
 
 public:
-    void analyze();
-    void synthesize();
+    virtual void analyze();
+    virtual void synthesize();
 
 protected:
     bool backMetal;
diff --git a/pcb_calculator/transline/microstrip.h b/pcb_calculator/transline/microstrip.h
index 0438811..1b5ddb3 100644
--- a/pcb_calculator/transline/microstrip.h
+++ b/pcb_calculator/transline/microstrip.h
@@ -52,8 +52,8 @@ private:
     double Z0_h_1;      /* homogeneous stripline impedance */
 
 public:
-    void   analyze();
-    void   synthesize();
+    virtual void   analyze();
+    virtual void   synthesize();
 
 private:
     double er_eff_freq();
diff --git a/pcb_calculator/transline/rectwaveguide.h b/pcb_calculator/transline/rectwaveguide.h
index 6690014..f17ac6c 100644
--- a/pcb_calculator/transline/rectwaveguide.h
+++ b/pcb_calculator/transline/rectwaveguide.h
@@ -44,8 +44,8 @@ private:
     double fc10;                /* Cutoff frequency for TE10 mode */
 
 public:
-    void   analyze();
-    void   synthesize();
+    virtual void   analyze();
+    virtual void   synthesize();
 
 private:
     double kval_square();
diff --git a/pcb_calculator/transline/stripline.h b/pcb_calculator/transline/stripline.h
index 628e1e2..800f8b0 100644
--- a/pcb_calculator/transline/stripline.h
+++ b/pcb_calculator/transline/stripline.h
@@ -41,8 +41,8 @@ private:
     double atten_cond;          // loss in conductors (dB)
 
 public:
-    void   analyze();
-    void   synthesize();
+    virtual void   analyze();
+    virtual void   synthesize();
 
 private:
     double lineImpedance( double, double& );
diff --git a/pcb_calculator/transline/twistedpair.h b/pcb_calculator/transline/twistedpair.h
index d0e71b3..3a9ca36 100644
--- a/pcb_calculator/transline/twistedpair.h
+++ b/pcb_calculator/transline/twistedpair.h
@@ -41,8 +41,8 @@ private:
     double atten_cond;          /* Loss in conductors (dB) */
 
 public:
-    void analyze();
-    void synthesize();
+    virtual void analyze();
+    virtual void synthesize();
 
 private:
     void calc();
diff --git a/pcbnew/block.cpp b/pcbnew/block.cpp
index cc4e9ea..63bbe9c 100644
--- a/pcbnew/block.cpp
+++ b/pcbnew/block.cpp
@@ -102,12 +102,12 @@ public:
 
 
 private:
-    void ExecuteCommand( wxCommandEvent& event );
-    void OnCancel( wxCommandEvent& event )
+    virtual void ExecuteCommand( wxCommandEvent& event );
+    virtual void OnCancel( wxCommandEvent& event )
     {
         EndModal( wxID_CANCEL );
     }
-    void checkBoxClicked( wxCommandEvent& aEvent )
+    virtual void checkBoxClicked( wxCommandEvent& aEvent )
     {
         if( m_Include_Modules->GetValue() )
             m_IncludeLockedModules->Enable();
diff --git a/pcbnew/class_board.cpp b/pcbnew/class_board.cpp
index 455ccdf..86e3cbf 100644
--- a/pcbnew/class_board.cpp
+++ b/pcbnew/class_board.cpp
@@ -152,7 +152,7 @@ void BOARD::Move( const wxPoint& aMoveVector )        // overload
     // here it does the moving.
     struct MOVER : public INSPECTOR
     {
-        SEARCH_RESULT Inspect( EDA_ITEM* item, const void* data )
+        virtual SEARCH_RESULT Inspect( EDA_ITEM* item, const void* data )
         {
             BOARD_ITEM*     brd_item = (BOARD_ITEM*) item;
             const wxPoint*  vector   = (const wxPoint*) data;
@@ -1267,7 +1267,7 @@ MODULE* BOARD::FindModuleByReference( const wxString& aReference ) const
         FINDER() : found( 0 )  {}
 
         // implement interface INSPECTOR
-        SEARCH_RESULT Inspect( EDA_ITEM* item, const void* data )
+        virtual SEARCH_RESULT Inspect( EDA_ITEM* item, const void* data )
         {
             MODULE*         module = (MODULE*) item;
             const wxString& ref    = *(const wxString*) data;
diff --git a/pcbnew/class_board.h b/pcbnew/class_board.h
index 1f7fab1..c21809f 100644
--- a/pcbnew/class_board.h
+++ b/pcbnew/class_board.h
@@ -263,7 +263,7 @@ public:
                m_Track.GetCount() == 0 && m_Zone.GetCount() == 0;
     }
 
-    void Move( const wxPoint& aMoveVector );        // overload
+    virtual void Move( const wxPoint& aMoveVector );        // overload
 
     void SetFileFormatVersionAtLoad( int aVersion ) { m_fileFormatVersionAtLoad = aVersion; }
     int GetFileFormatVersionAtLoad()  const { return m_fileFormatVersionAtLoad; }
@@ -873,11 +873,11 @@ public:
      * as long as the BOARD has not changed.  Remember, ComputeBoundingBox()'s
      * aBoardEdgesOnly argument is considered in this return value also.
      */
-    const EDA_RECT GetBoundingBox() const { return m_BoundingBox; }   // override
+    virtual const EDA_RECT GetBoundingBox() const { return m_BoundingBox; }   // override
 
     void SetBoundingBox( const EDA_RECT& aBox ) { m_BoundingBox = aBox; }
 
-    void GetMsgPanelInfo( std::vector< MSG_PANEL_ITEM >& aList );
+    virtual void GetMsgPanelInfo( std::vector< MSG_PANEL_ITEM >& aList );
 
     /**
      * Function Draw.
@@ -887,7 +887,7 @@ public:
      * @param aDrawMode = GR_COPY, GR_OR ... (not always used)
      * @param aOffset = an draw offset value (default = 0,0)
      */
-    void Draw( EDA_DRAW_PANEL* aPanel, wxDC* aDC,
+    virtual void Draw( EDA_DRAW_PANEL* aPanel, wxDC* aDC,
                GR_DRAWMODE aDrawMode, const wxPoint& aOffset = ZeroOffset );
 
     /**
@@ -914,7 +914,7 @@ public:
      * @return SEARCH_RESULT - SEARCH_QUIT if the Iterator is to stop the scan,
      *  else SCAN_CONTINUE, and determined by the inspector.
      */
-    SEARCH_RESULT Visit( INSPECTOR* inspector, const void* testData,
+    virtual SEARCH_RESULT Visit( INSPECTOR* inspector, const void* testData,
                          const KICAD_T scanTypes[] );
 
     /**
@@ -992,13 +992,13 @@ public:
 
     /***************************************************************************/
 
-    wxString GetClass() const
+    virtual wxString GetClass() const
     {
         return wxT( "BOARD" );
     }
 
 #if defined(DEBUG)
-    void Show( int nestLevel, std::ostream& os ) const { ShowDummy( os ); } // override
+    virtual void Show( int nestLevel, std::ostream& os ) const { ShowDummy( os ); } // override
 #endif
 
 
diff --git a/pcbnew/class_board_connected_item.h b/pcbnew/class_board_connected_item.h
index 15dfe31..eb2c4d0 100644
--- a/pcbnew/class_board_connected_item.h
+++ b/pcbnew/class_board_connected_item.h
@@ -77,7 +77,7 @@ public:
     }
 
     ///> @copydoc BOARD_ITEM::IsConnected()
-    bool IsConnected() const
+    virtual bool IsConnected() const
     {
         return true;
     }
diff --git a/pcbnew/class_dimension.h b/pcbnew/class_dimension.h
index d12a597..50a5713 100644
--- a/pcbnew/class_dimension.h
+++ b/pcbnew/class_dimension.h
@@ -86,16 +86,16 @@ public:
 
     int GetValue() const { return m_Value; }
 
-    const wxPoint&  GetPosition() const;
+    virtual const wxPoint&  GetPosition() const;
 
-    void            SetPosition( const wxPoint& aPos ); // override, sets m_Text's position too
+    virtual void            SetPosition( const wxPoint& aPos );
 
     void SetTextSize( const wxSize& aTextSize )
     {
         m_Text.SetSize( aTextSize );
     }
 
-    void SetLayer( LAYER_ID aLayer );
+    virtual void SetLayer( LAYER_ID aLayer );
 
     void SetShape( int aShape )         { m_Shape = aShape; }
     int GetShape() const { return m_Shape; }
@@ -184,18 +184,18 @@ public:
 
     void            Copy( DIMENSION* source );
 
-    void            Draw( EDA_DRAW_PANEL* panel, wxDC* DC,
+    virtual void    Draw( EDA_DRAW_PANEL* panel, wxDC* DC,
                           GR_DRAWMODE aColorMode, const wxPoint& offset = ZeroOffset );
 
     /**
      * Function Move
      * @param offset : moving vector
      */
-    void            Move( const wxPoint& offset );
+    virtual void    Move( const wxPoint& offset );
 
-    void            Rotate( const wxPoint& aRotCentre, double aAngle );
+    virtual void    Rotate( const wxPoint& aRotCentre, double aAngle );
 
-    void            Flip( const wxPoint& aCentre );
+    virtual void    Flip( const wxPoint& aCentre );
 
     /**
      * Function Mirror
@@ -206,28 +206,28 @@ public:
      */
     void            Mirror( const wxPoint& axis_pos );
 
-    void            GetMsgPanelInfo( std::vector< MSG_PANEL_ITEM >& aList );
+    virtual void    GetMsgPanelInfo( std::vector< MSG_PANEL_ITEM >& aList );
 
-    bool            HitTest( const wxPoint& aPosition ) const;
+    virtual bool    HitTest( const wxPoint& aPosition ) const;
 
     /** @copydoc BOARD_ITEM::HitTest(const EDA_RECT& aRect,
      *                               bool aContained = true, int aAccuracy ) const
      */
-    bool HitTest( const EDA_RECT& aRect, bool aContained = true, int aAccuracy = 0 ) const;
+    virtual bool HitTest( const EDA_RECT& aRect, bool aContained = true, int aAccuracy = 0 ) const;
 
-    wxString GetClass() const
+    virtual wxString GetClass() const
     {
         return wxT( "DIMENSION" );
     }
 
     // Virtual function
-    const EDA_RECT    GetBoundingBox() const;
+    virtual const EDA_RECT    GetBoundingBox() const;
 
-    wxString    GetSelectMenuText() const;
+    virtual wxString    GetSelectMenuText() const;
 
-    BITMAP_DEF GetMenuImage() const { return add_dimension_xpm; }
+    virtual BITMAP_DEF GetMenuImage() const { return add_dimension_xpm; }
 
-    EDA_ITEM*   Clone() const;
+    virtual EDA_ITEM*   Clone() const;
 
     /// @copydoc VIEW_ITEM::ViewBBox()
     virtual const BOX2I ViewBBox() const;
diff --git a/pcbnew/class_drawsegment.h b/pcbnew/class_drawsegment.h
index 23d8bcf..1cf8c78 100644
--- a/pcbnew/class_drawsegment.h
+++ b/pcbnew/class_drawsegment.h
@@ -97,8 +97,8 @@ public:
     void SetBezControl2( const wxPoint& aPoint )    { m_BezierC2 = aPoint; }
     const wxPoint& GetBezControl2() const           { return m_BezierC2; }
 
-    void SetPosition( const wxPoint& aPos )         { m_Start = aPos; }     // override
-    const wxPoint& GetPosition() const              { return m_Start; }     // override
+    virtual void SetPosition( const wxPoint& aPos ) { m_Start = aPos; }     // override
+    virtual const wxPoint& GetPosition() const      { return m_Start; }     // override
 
     /**
      * Function GetStart
@@ -122,7 +122,7 @@ public:
     // m_Start, m_End, and m_Angle.
     // No Set...() function for these attributes.
 
-    const wxPoint GetCenter() const;        //override
+    virtual const wxPoint GetCenter() const;        //override
     const wxPoint& GetArcStart() const      { return m_End; }
     const wxPoint GetArcEnd() const;
 
@@ -180,7 +180,7 @@ public:
 
     void Copy( DRAWSEGMENT* source );
 
-    void Draw( EDA_DRAW_PANEL* panel, wxDC* DC,
+    virtual void Draw( EDA_DRAW_PANEL* panel, wxDC* DC,
                GR_DRAWMODE aDrawMode, const wxPoint& aOffset = ZeroOffset );
 
     virtual void GetMsgPanelInfo( std::vector< MSG_PANEL_ITEM >& aList );
@@ -192,9 +192,9 @@ public:
     /** @copydoc BOARD_ITEM::HitTest(const EDA_RECT& aRect,
      *                               bool aContained = true, int aAccuracy ) const
      */
-    bool HitTest( const EDA_RECT& aRect, bool aContained = true, int aAccuracy = 0 ) const;
+    virtual bool HitTest( const EDA_RECT& aRect, bool aContained = true, int aAccuracy = 0 ) const;
 
-    wxString GetClass() const
+    virtual wxString GetClass() const
     {
         return wxT( "DRAWSEGMENT" );
     }
@@ -243,7 +243,7 @@ public:
     virtual EDA_ITEM* Clone() const;
 
 #if defined(DEBUG)
-    void Show( int nestLevel, std::ostream& os ) const { ShowDummy( os ); } // override
+    virtual void Show( int nestLevel, std::ostream& os ) const { ShowDummy( os ); } // override
 #endif
 };
 
diff --git a/pcbnew/class_edge_mod.h b/pcbnew/class_edge_mod.h
index 1230ee8..f81017f 100644
--- a/pcbnew/class_edge_mod.h
+++ b/pcbnew/class_edge_mod.h
@@ -61,7 +61,7 @@ public:
 
     void Copy( EDGE_MODULE* source );           // copy structure
 
-    void Move( const wxPoint& aMoveVector )
+    virtual void Move( const wxPoint& aMoveVector )
     {
         m_Start += aMoveVector;
         m_End   += aMoveVector;
@@ -69,7 +69,7 @@ public:
     }
 
     /// Flip entity relative to aCentre
-    void Flip( const wxPoint& aCentre );
+    virtual void Flip( const wxPoint& aCentre );
 
     void SetStart0( const wxPoint& aPoint )     { m_Start0 = aPoint; }
     const wxPoint& GetStart0() const            { return m_Start0; }
@@ -84,26 +84,26 @@ public:
     void SetDrawCoord();
 
     /* drawing functions */
-    void Draw( EDA_DRAW_PANEL* panel, wxDC* DC,
+    virtual void Draw( EDA_DRAW_PANEL* panel, wxDC* DC,
                GR_DRAWMODE aDrawMode, const wxPoint& offset = ZeroOffset );
 
-    void GetMsgPanelInfo( std::vector< MSG_PANEL_ITEM >& aList );
+    virtual void GetMsgPanelInfo( std::vector< MSG_PANEL_ITEM >& aList );
 
-    wxString GetClass() const
+    virtual wxString GetClass() const
     {
         return wxT( "MGRAPHIC" );
     }
 
-    wxString GetSelectMenuText() const;
+    virtual wxString GetSelectMenuText() const;
 
-    BITMAP_DEF GetMenuImage() const { return  show_mod_edge_xpm; }
+    virtual BITMAP_DEF GetMenuImage() const { return  show_mod_edge_xpm; }
 
-    EDA_ITEM* Clone() const;
+    virtual EDA_ITEM* Clone() const;
 
-    void Rotate( const wxPoint& aRotCentre, double aAngle ); // override
+    virtual void Rotate( const wxPoint& aRotCentre, double aAngle );
 
 #if defined(DEBUG)
-    void Show( int nestLevel, std::ostream& os ) const { ShowDummy( os ); } // override
+    virtual void Show( int nestLevel, std::ostream& os ) const { ShowDummy( os ); } // override
 #endif
 
 //protected:  @todo: is it just me?
diff --git a/pcbnew/class_marker_pcb.h b/pcbnew/class_marker_pcb.h
index 89d73e6..e4d1cf9 100644
--- a/pcbnew/class_marker_pcb.h
+++ b/pcbnew/class_marker_pcb.h
@@ -70,23 +70,23 @@ public:
 
     ~MARKER_PCB();
 
-    void Move(const wxPoint& aMoveVector)
+    virtual void Move(const wxPoint& aMoveVector)
     {
         m_Pos += aMoveVector;
     }
 
-    void Rotate( const wxPoint& aRotCentre, double aAngle );
+    virtual void Rotate( const wxPoint& aRotCentre, double aAngle );
 
-    void Flip( const wxPoint& aCentre );
+    virtual void Flip( const wxPoint& aCentre );
 
-    void Draw( EDA_DRAW_PANEL* aPanel, wxDC* aDC,
+    virtual void Draw( EDA_DRAW_PANEL* aPanel, wxDC* aDC,
                GR_DRAWMODE aDrawMode, const wxPoint& aOffset = ZeroOffset )
     {
         DrawMarker( aPanel, aDC, aDrawMode, aOffset );
     }
 
-    const wxPoint& GetPosition() const          { return m_Pos; }
-    void SetPosition( const wxPoint& aPos )     { m_Pos = aPos; }
+    virtual const wxPoint& GetPosition() const      { return m_Pos; }
+    virtual void SetPosition( const wxPoint& aPos ) { m_Pos = aPos; }
 
     void SetItem( const BOARD_ITEM* aItem )
     {
diff --git a/pcbnew/class_mire.h b/pcbnew/class_mire.h
index 03bebba..12c714e 100644
--- a/pcbnew/class_mire.h
+++ b/pcbnew/class_mire.h
@@ -56,8 +56,8 @@ public:
 
     ~PCB_TARGET();
 
-    void SetPosition( const wxPoint& aPos ) { m_Pos = aPos; }   // override
-    const wxPoint& GetPosition() const      { return m_Pos; }   // override
+    virtual void SetPosition( const wxPoint& aPos ) { m_Pos = aPos; }
+    virtual const wxPoint& GetPosition() const      { return m_Pos; }
 
     void SetShape( int aShape )     { m_Shape = aShape; }
     int GetShape() const            { return m_Shape; }
@@ -68,23 +68,23 @@ public:
     void SetWidth( int aWidth )     { m_Width = aWidth; }
     int GetWidth() const            { return m_Width; }
 
-    void Move( const wxPoint& aMoveVector )
+    virtual void Move( const wxPoint& aMoveVector )
     {
         m_Pos += aMoveVector;
     }
 
-    void Rotate( const wxPoint& aRotCentre, double aAngle );
+    virtual void Rotate( const wxPoint& aRotCentre, double aAngle );
 
-    void Flip( const wxPoint& aCentre );
+    virtual void Flip( const wxPoint& aCentre );
 
     void Copy( PCB_TARGET* source );
 
-    void Draw( EDA_DRAW_PANEL* panel, wxDC* DC,
+    virtual void Draw( EDA_DRAW_PANEL* panel, wxDC* DC,
                GR_DRAWMODE aDrawMode, const wxPoint& offset = ZeroOffset );
 
-    bool HitTest( const wxPoint& aPosition ) const;
+    virtual bool HitTest( const wxPoint& aPosition ) const;
 
-    wxString GetClass() const
+    virtual wxString GetClass() const
     {
         return wxT( "PCB_TARGET" );
     }
@@ -92,19 +92,19 @@ public:
     /** @copydoc BOARD_ITEM::HitTest(const EDA_RECT& aRect,
      *                               bool aContained = true, int aAccuracy ) const
      */
-    bool HitTest( const EDA_RECT& aRect, bool aContained = true, int aAccuracy = 0 ) const;
+    virtual bool HitTest( const EDA_RECT& aRect, bool aContained = true, int aAccuracy = 0 ) const;
 
     // Virtual function
-    const EDA_RECT GetBoundingBox() const;
+    virtual const EDA_RECT GetBoundingBox() const;
 
-    wxString GetSelectMenuText() const;
+    virtual wxString GetSelectMenuText() const;
 
-    BITMAP_DEF GetMenuImage() const { return  add_mires_xpm; }
+    virtual BITMAP_DEF GetMenuImage() const { return  add_mires_xpm; }
 
-    EDA_ITEM* Clone() const;
+    virtual EDA_ITEM* Clone() const;
 
 #if defined(DEBUG)
-    void Show( int nestLevel, std::ostream& os ) const { ShowDummy( os ); } // override
+    virtual void Show( int nestLevel, std::ostream& os ) const { ShowDummy( os ); } // override
 #endif
 };
 
diff --git a/pcbnew/class_module.h b/pcbnew/class_module.h
index 8503ec5..b6a91c7 100644
--- a/pcbnew/class_module.h
+++ b/pcbnew/class_module.h
@@ -146,7 +146,7 @@ public:
     EDA_RECT GetFootprintRect() const;
 
     // Virtual function
-    const EDA_RECT GetBoundingBox() const;
+    virtual const EDA_RECT GetBoundingBox() const;
 
     DLIST<D_PAD>& Pads()                        { return m_Pads; }
     const DLIST<D_PAD>& Pads() const            { return m_Pads; }
@@ -157,8 +157,8 @@ public:
     DLIST<S3D_MASTER>& Models()                 { return m_3D_Drawings; }
     const DLIST<S3D_MASTER>& Models() const     { return m_3D_Drawings; }
 
-    void SetPosition( const wxPoint& aPos );                        // was overload
-    const wxPoint& GetPosition() const          { return m_Pos; }   // was overload
+    virtual void SetPosition( const wxPoint& aPos );                        // was overload
+    virtual const wxPoint& GetPosition() const          { return m_Pos; }   // was overload
 
     void SetOrientation( double newangle );
     double GetOrientation() const { return m_Orient; }
@@ -203,11 +203,11 @@ public:
     void IncrementFlag() { flag += 1; }
     int GetFlag() const { return flag; }
 
-    void Move( const wxPoint& aMoveVector );
+    virtual void Move( const wxPoint& aMoveVector );
 
-    void Rotate( const wxPoint& aRotCentre, double aAngle );
+    virtual void Rotate( const wxPoint& aRotCentre, double aAngle );
 
-    void Flip( const wxPoint& aCentre );
+    virtual void Flip( const wxPoint& aCentre );
 
     /**
      * Function MoveAnchorPosition
@@ -235,7 +235,7 @@ public:
 #define MODULE_PADS_LOCKED  0x08        ///< In autoplace: module waiting for autoplace
 
 
-    bool IsLocked() const
+    virtual bool IsLocked() const
     {
         return (m_ModuleStatus & MODULE_is_LOCKED) != 0;
     }
@@ -295,7 +295,7 @@ public:
      * @param aDrawMode = GR_OR, GR_XOR..
      * @param aOffset = draw offset (usually wxPoint(0,0)
      */
-    void Draw( EDA_DRAW_PANEL* aPanel,
+    virtual void Draw( EDA_DRAW_PANEL* aPanel,
                wxDC*           aDC,
                GR_DRAWMODE     aDrawMode,
                const wxPoint&  aOffset = ZeroOffset );
@@ -388,14 +388,14 @@ public:
     void DrawAncre( EDA_DRAW_PANEL* panel, wxDC* DC,
                     const wxPoint& offset, int dim_ancre, GR_DRAWMODE draw_mode );
 
-    void GetMsgPanelInfo( std::vector< MSG_PANEL_ITEM >& aList );
+    virtual void GetMsgPanelInfo( std::vector< MSG_PANEL_ITEM >& aList );
 
-    bool HitTest( const wxPoint& aPosition ) const;
+    virtual bool HitTest( const wxPoint& aPosition ) const;
 
     /** @copydoc BOARD_ITEM::HitTest(const EDA_RECT& aRect,
      *                               bool aContained = true, int aAccuracy ) const
      */
-    bool HitTest( const EDA_RECT& aRect, bool aContained = true, int aAccuracy = 0 ) const;
+    virtual bool HitTest( const EDA_RECT& aRect, bool aContained = true, int aAccuracy = 0 ) const;
 
     /**
      * Function GetReference
@@ -530,19 +530,19 @@ public:
      */
     void Add3DModel( S3D_MASTER* a3DModel );
 
-    SEARCH_RESULT Visit( INSPECTOR* inspector, const void* testData,
+    virtual SEARCH_RESULT Visit( INSPECTOR* inspector, const void* testData,
                          const KICAD_T scanTypes[] );
 
-    wxString GetClass() const
+    virtual wxString GetClass() const
     {
         return wxT( "MODULE" );
     }
 
-    wxString GetSelectMenuText() const;
+    virtual wxString GetSelectMenuText() const;
 
-    BITMAP_DEF GetMenuImage() const { return  module_xpm; }
+    virtual BITMAP_DEF GetMenuImage() const { return module_xpm; }
 
-    EDA_ITEM* Clone() const;
+    virtual EDA_ITEM* Clone() const;
 
     /**
      * Function RunOnChildren
@@ -553,7 +553,7 @@ public:
     void RunOnChildren( boost::function<void (BOARD_ITEM*)> aFunction );
 
     /// @copydoc VIEW_ITEM::ViewUpdate()
-    void ViewUpdate( int aUpdateFlags = KIGFX::VIEW_ITEM::ALL );
+    virtual void ViewUpdate( int aUpdateFlags = KIGFX::VIEW_ITEM::ALL );
 
     /// @copydoc VIEW_ITEM::ViewGetLayers()
     virtual void ViewGetLayers( int aLayers[], int& aCount ) const;
diff --git a/pcbnew/class_netclass.h b/pcbnew/class_netclass.h
index 74a915d..8d5d4c7 100644
--- a/pcbnew/class_netclass.h
+++ b/pcbnew/class_netclass.h
@@ -207,7 +207,7 @@ public:
         throw( IO_ERROR );
 
 #if defined(DEBUG)
-    void Show( int nestLevel, std::ostream& os ) const;     // overload
+    virtual void Show( int nestLevel, std::ostream& os ) const;     // overload
 #endif
 };
 
diff --git a/pcbnew/class_pad.h b/pcbnew/class_pad.h
index b5a9d0c..f22171e 100644
--- a/pcbnew/class_pad.h
+++ b/pcbnew/class_pad.h
@@ -129,8 +129,8 @@ public:
     PAD_SHAPE_T GetShape() const                { return m_padShape; }
     void SetShape( PAD_SHAPE_T aShape )         { m_padShape = aShape; m_boundingRadius = -1; }
 
-    void SetPosition( const wxPoint& aPos )     { m_Pos = aPos; }   // was overload
-    const wxPoint& GetPosition() const          { return m_Pos; }   // was overload
+    virtual void SetPosition( const wxPoint& aPos )     { m_Pos = aPos; }   // was overload
+    virtual const wxPoint& GetPosition() const          { return m_Pos; }   // was overload
 
     void SetY( int y )                          { m_Pos.y = y; }
     void SetX( int x )                          { m_Pos.x = x; }
@@ -153,7 +153,7 @@ public:
     void SetOffset( const wxPoint& aOffset )    { m_Offset = aOffset; }
     const wxPoint& GetOffset() const            { return m_Offset; }
 
-    void Flip( const wxPoint& aCentre );        // Virtual function
+    virtual void Flip( const wxPoint& aCentre );
 
     /**
      * Function SetOrientation
@@ -232,7 +232,7 @@ public:
      * @param aItem is another BOARD_CONNECTED_ITEM or NULL
      * @return int - the clearance in internal units.
      */
-    int GetClearance( BOARD_CONNECTED_ITEM* aItem = NULL ) const;
+    virtual int GetClearance( BOARD_CONNECTED_ITEM* aItem = NULL ) const;
 
    // Mask margins handling:
 
@@ -269,7 +269,7 @@ public:
     int GetThermalGap() const;
 
     /* drawing functions */
-    void Draw( EDA_DRAW_PANEL* aPanel, wxDC* aDC,
+    virtual void Draw( EDA_DRAW_PANEL* aPanel, wxDC* aDC,
                GR_DRAWMODE aDrawMode, const wxPoint& aOffset = ZeroOffset );
 
     /**
@@ -378,22 +378,21 @@ public:
     int GetSubRatsnest() const                  { return m_SubRatsnest; }
     void SetSubRatsnest( int aSubRatsnest )     { m_SubRatsnest = aSubRatsnest; }
 
-    void GetMsgPanelInfo( std::vector< MSG_PANEL_ITEM >& aList );
+    virtual void GetMsgPanelInfo( std::vector< MSG_PANEL_ITEM >& aList );
 
-    bool IsOnLayer( LAYER_ID aLayer ) const
+    virtual bool IsOnLayer( LAYER_ID aLayer ) const
     {
         return m_layerMask[aLayer];
     }
 
-    bool HitTest( const wxPoint& aPosition ) const;
+    virtual bool HitTest( const wxPoint& aPosition ) const;
 
-    wxString GetClass() const
+    virtual wxString GetClass() const
     {
         return wxT( "PAD" );
     }
 
-    // Virtual function:
-    const EDA_RECT GetBoundingBox() const;
+    virtual const EDA_RECT GetBoundingBox() const;
 
     ///> Set absolute coordinates.
     void SetDrawCoord();
@@ -408,17 +407,17 @@ public:
      */
     static int Compare( const D_PAD* padref, const D_PAD* padcmp );
 
-    void Move( const wxPoint& aMoveVector )
+    virtual void Move( const wxPoint& aMoveVector )
     {
         m_Pos += aMoveVector;
         SetLocalCoord();
     }
 
-    void Rotate( const wxPoint& aRotCentre, double aAngle );
+    virtual void Rotate( const wxPoint& aRotCentre, double aAngle );
 
-    wxString GetSelectMenuText() const;
+    virtual wxString GetSelectMenuText() const;
 
-    BITMAP_DEF GetMenuImage() const { return pad_xpm; }
+    virtual BITMAP_DEF GetMenuImage() const { return pad_xpm; }
 
     /**
      * Function ShowPadShape
@@ -440,7 +439,7 @@ public:
      */
     void AppendConfigs( PARAM_CFG_ARRAY* aResult );
 
-    EDA_ITEM* Clone() const;
+    virtual EDA_ITEM* Clone() const;
 
     /**
      * same as Clone, but returns a D_PAD item.
diff --git a/pcbnew/class_pcb_layer_box_selector.h b/pcbnew/class_pcb_layer_box_selector.h
index 559633c..e90a25c 100644
--- a/pcbnew/class_pcb_layer_box_selector.h
+++ b/pcbnew/class_pcb_layer_box_selector.h
@@ -71,21 +71,19 @@ public:
     void SetLayerSet( LSET aMask ) { m_layerMaskDisable = aMask; }
 
     // Reload the Layers names and bitmaps
-    // Virtual function
-    void Resync();
+    virtual void Resync();
 
 private:
     // Returns a color index from the layer id
-    // Virtual function
-    EDA_COLOR_T GetLayerColor( LAYER_NUM aLayer ) const;
+    virtual EDA_COLOR_T GetLayerColor( LAYER_NUM aLayer ) const;
 
     // Returns true if the layer id is enabled (i.e. is it should be displayed)
     // Virtual function
-    bool IsLayerEnabled( LAYER_NUM aLayer ) const;
+    virtual bool IsLayerEnabled( LAYER_NUM aLayer ) const;
 
     // Returns the name of the layer id
     // Virtual function
-    wxString GetLayerName( LAYER_NUM aLayer ) const;
+    virtual wxString GetLayerName( LAYER_NUM aLayer ) const;
 
     LSET getEnabledLayers() const;
 };
diff --git a/pcbnew/class_pcb_layer_widget.h b/pcbnew/class_pcb_layer_widget.h
index a3a1aa7..fbe7e1d 100644
--- a/pcbnew/class_pcb_layer_widget.h
+++ b/pcbnew/class_pcb_layer_widget.h
@@ -88,11 +88,11 @@ public:
     void SetLayersManagerTabsText();
 
     //-----<implement LAYER_WIDGET abstract callback functions>-----------
-    void OnLayerColorChange( int aLayer, EDA_COLOR_T aColor );
-    bool OnLayerSelect( int aLayer );
-    void OnLayerVisible( int aLayer, bool isVisible, bool isFinal );
-    void OnRenderColorChange( int aId, EDA_COLOR_T aColor );
-    void OnRenderEnable( int aId, bool isEnabled );
+    virtual void OnLayerColorChange( int aLayer, EDA_COLOR_T aColor );
+    virtual bool OnLayerSelect( int aLayer );
+    virtual void OnLayerVisible( int aLayer, bool isVisible, bool isFinal );
+    virtual void OnRenderColorChange( int aId, EDA_COLOR_T aColor );
+    virtual void OnRenderEnable( int aId, bool isEnabled );
     //-----</implement LAYER_WIDGET abstract callback functions>----------
 
     /**
diff --git a/pcbnew/class_pcb_text.h b/pcbnew/class_pcb_text.h
index e1aeee7..89054cc 100644
--- a/pcbnew/class_pcb_text.h
+++ b/pcbnew/class_pcb_text.h
@@ -64,24 +64,24 @@ public:
         m_Pos = aPos;
     }
 
-    void Move( const wxPoint& aMoveVector )
+    virtual void Move( const wxPoint& aMoveVector )
     {
         m_Pos += aMoveVector;
     }
 
-    void Rotate( const wxPoint& aRotCentre, double aAngle );
+    virtual void Rotate( const wxPoint& aRotCentre, double aAngle );
 
-    void Flip( const wxPoint& aCentre );
+    virtual void Flip( const wxPoint& aCentre );
 
     /* duplicate structure */
     void Copy( TEXTE_PCB* source );
 
-    void Draw( EDA_DRAW_PANEL* panel, wxDC* DC,
+    virtual void Draw( EDA_DRAW_PANEL* panel, wxDC* DC,
                GR_DRAWMODE aDrawMode, const wxPoint& offset = ZeroOffset );
 
-    void GetMsgPanelInfo( std::vector< MSG_PANEL_ITEM >& aList );
+    virtual void GetMsgPanelInfo( std::vector< MSG_PANEL_ITEM >& aList );
 
-    bool HitTest( const wxPoint& aPosition ) const
+    virtual bool HitTest( const wxPoint& aPosition ) const
     {
         return TextHitTest( aPosition );
     }
@@ -89,12 +89,12 @@ public:
     /** @copydoc BOARD_ITEM::HitTest(const EDA_RECT& aRect,
      *                               bool aContained = true, int aAccuracy ) const
      */
-    bool HitTest( const EDA_RECT& aRect, bool aContained = true, int aAccuracy = 0 ) const
+    virtual bool HitTest( const EDA_RECT& aRect, bool aContained = true, int aAccuracy = 0 ) const
     {
         return TextHitTest( aRect, aContained, aAccuracy );
     }
 
-    wxString GetClass() const
+    virtual wxString GetClass() const
     {
         return wxT( "PTEXT" );
     }
@@ -131,14 +131,13 @@ public:
                                                int                aCircleToSegmentsCount,
                                                double             aCorrectionFactor ) const;
 
-    wxString GetSelectMenuText() const;
+    virtual wxString GetSelectMenuText() const;
 
-    BITMAP_DEF GetMenuImage() const { return  add_text_xpm; }
+    virtual BITMAP_DEF GetMenuImage() const { return add_text_xpm; }
 
-    // Virtual function
-    const EDA_RECT GetBoundingBox() const;
+    virtual const EDA_RECT GetBoundingBox() const;
 
-    EDA_ITEM* Clone() const;
+    virtual EDA_ITEM* Clone() const;
 
 #if defined(DEBUG)
     virtual void Show( int nestLevel, std::ostream& os ) const { ShowDummy( os ); }    // override
diff --git a/pcbnew/class_text_mod.h b/pcbnew/class_text_mod.h
index 4ade64b..e019178 100644
--- a/pcbnew/class_text_mod.h
+++ b/pcbnew/class_text_mod.h
@@ -84,15 +84,15 @@ public:
         SetLocalCoord();
     }
 
-    void Move( const wxPoint& aMoveVector )
+    virtual void Move( const wxPoint& aMoveVector )
     {
         m_Pos += aMoveVector;
         SetLocalCoord();
     }
 
-    void Rotate( const wxPoint& aRotCentre, double aAngle );
+    virtual void Rotate( const wxPoint& aRotCentre, double aAngle );
 
-    void Flip( const wxPoint& aCentre );
+    virtual void Flip( const wxPoint& aCentre );
 
     /// Rotate text during module rotation transform, in footprint editor
     void RotateTransformWithModule( const wxPoint& aOffset, double aAngle );
@@ -130,7 +130,7 @@ public:
     double GetDrawRotation() const;
 
     // Virtual function
-    const EDA_RECT GetBoundingBox() const;
+    virtual const EDA_RECT GetBoundingBox() const;
 
     ///> Set absolute coordinates.
     void SetDrawCoord();
@@ -139,7 +139,7 @@ public:
     void SetLocalCoord();
 
     /* drawing functions */
-    void Draw( EDA_DRAW_PANEL* panel,
+    virtual void Draw( EDA_DRAW_PANEL* panel,
                wxDC*           DC,
                GR_DRAWMODE     aDrawMode,
                const wxPoint&  offset = ZeroOffset );
@@ -158,20 +158,20 @@ public:
                         GR_DRAWMODE     aDrawMode,
                         const wxPoint&  aOffset = ZeroOffset );
 
-    void GetMsgPanelInfo( std::vector< MSG_PANEL_ITEM >& aList );
+    virtual void GetMsgPanelInfo( std::vector< MSG_PANEL_ITEM >& aList );
 
-    bool HitTest( const wxPoint& aPosition ) const;
+    virtual bool HitTest( const wxPoint& aPosition ) const;
 
-    wxString GetClass() const
+    virtual wxString GetClass() const
     {
         return wxT( "MTEXT" );
     }
 
-    wxString GetSelectMenuText() const;
+    virtual wxString GetSelectMenuText() const;
 
-    BITMAP_DEF GetMenuImage() const { return  footprint_text_xpm; }
+    virtual BITMAP_DEF GetMenuImage() const { return footprint_text_xpm; }
 
-    EDA_ITEM* Clone() const;
+    virtual EDA_ITEM* Clone() const;
 
     virtual wxString GetShownText() const;
 
diff --git a/pcbnew/class_track.h b/pcbnew/class_track.h
index 8347dee..3ff674b 100644
--- a/pcbnew/class_track.h
+++ b/pcbnew/class_track.h
@@ -107,8 +107,8 @@ public:
 
     virtual void Flip( const wxPoint& aCentre );
 
-    void SetPosition( const wxPoint& aPos )     { m_Start = aPos; }     // was overload
-    const wxPoint& GetPosition() const          { return m_Start; }     // was overload
+    virtual void SetPosition( const wxPoint& aPos )     { m_Start = aPos; }     // was overload
+    virtual const wxPoint& GetPosition() const          { return m_Start; }     // was overload
 
     void SetWidth( int aWidth )                 { m_Width = aWidth; }
     int GetWidth() const                        { return m_Width; }
@@ -129,8 +129,7 @@ public:
             return m_End;
     }
 
-    // Virtual function
-    const EDA_RECT GetBoundingBox() const;
+    virtual const EDA_RECT GetBoundingBox() const;
 
     /**
      * Function GetBestInsertPoint
@@ -163,7 +162,7 @@ public:
     }
 
     /* Display on screen: */
-    void Draw( EDA_DRAW_PANEL* panel, wxDC* DC,
+    virtual void Draw( EDA_DRAW_PANEL* panel, wxDC* DC,
                GR_DRAWMODE aDrawMode, const wxPoint& aOffset = ZeroOffset );
 
     /**
@@ -205,7 +204,7 @@ public:
      */
     bool IsNull();
 
-    void GetMsgPanelInfo( std::vector< MSG_PANEL_ITEM >& aList );
+    virtual void GetMsgPanelInfo( std::vector< MSG_PANEL_ITEM >& aList );
 
     /**
      * Function ShowWidth
@@ -213,7 +212,7 @@ public:
      */
     wxString ShowWidth() const;
 
-    SEARCH_RESULT Visit( INSPECTOR* inspector, const void* testData,
+    virtual SEARCH_RESULT Visit( INSPECTOR* inspector, const void* testData,
                          const KICAD_T scanTypes[] );
 
 
@@ -276,7 +275,7 @@ public:
      */
     int GetEndSegments( int NbSegm, TRACK** StartTrack, TRACK** EndTrack );
 
-    wxString GetClass() const
+    virtual wxString GetClass() const
     {
         return wxT( "TRACK" );
     }
@@ -353,22 +352,21 @@ public:
 
     // Do not create a copy constructor.  The one generated by the compiler is adequate.
 
-    wxString GetClass() const
+    virtual wxString GetClass() const
     {
         return wxT( "ZONE" );
     }
 
-
     SEGZONE* Next() const { return static_cast<SEGZONE*>( Pnext ); }
 
-    wxString GetSelectMenuText() const;
+    virtual wxString GetSelectMenuText() const;
 
-    void Draw( EDA_DRAW_PANEL* panel, wxDC* DC,
+    virtual void Draw( EDA_DRAW_PANEL* panel, wxDC* DC,
                GR_DRAWMODE aDrawMode, const wxPoint& aOffset = ZeroOffset );
 
-    BITMAP_DEF GetMenuImage() const { return  add_zone_xpm; }
+    virtual BITMAP_DEF GetMenuImage() const { return  add_zone_xpm; }
 
-    EDA_ITEM* Clone() const;
+    virtual EDA_ITEM* Clone() const;
 
 protected:
     virtual void GetMsgPanelInfoBase( std::vector< MSG_PANEL_ITEM >& aList );
@@ -387,10 +385,10 @@ public:
 
     // Do not create a copy constructor.  The one generated by the compiler is adequate.
 
-    void Draw( EDA_DRAW_PANEL* panel, wxDC* DC,
+    virtual void Draw( EDA_DRAW_PANEL* panel, wxDC* DC,
                GR_DRAWMODE aDrawMode, const wxPoint& aOffset = ZeroOffset );
 
-    bool IsOnLayer( LAYER_ID aLayer ) const;
+    virtual bool IsOnLayer( LAYER_ID aLayer ) const;
 
     virtual LSET GetLayerSet() const;
 
@@ -412,23 +410,23 @@ public:
      */
     void LayerPair( LAYER_ID* top_layer, LAYER_ID* bottom_layer ) const;
 
-    const wxPoint& GetPosition() const  {  return m_Start; }       // was overload
-    void SetPosition( const wxPoint& aPoint ) { m_Start = aPoint;  m_End = aPoint; }    // was overload
+    virtual const wxPoint& GetPosition() const  {  return m_Start; }       // was overload
+    virtual void SetPosition( const wxPoint& aPoint ) { m_Start = aPoint;  m_End = aPoint; }    // was overload
 
     virtual bool HitTest( const wxPoint& aPosition ) const;
 
     virtual bool HitTest( const EDA_RECT& aRect, bool aContained = true, int aAccuracy = 0 ) const;
 
-    wxString GetClass() const
+    virtual wxString GetClass() const
     {
         return wxT( "VIA" );
     }
 
-    wxString GetSelectMenuText() const;
+    virtual wxString GetSelectMenuText() const;
 
-    BITMAP_DEF GetMenuImage() const { return  via_sketch_xpm; }
+    virtual BITMAP_DEF GetMenuImage() const { return via_sketch_xpm; }
 
-    EDA_ITEM* Clone() const;
+    virtual EDA_ITEM* Clone() const;
 
     /// @copydoc VIEW_ITEM::ViewGetLayers()
     virtual void ViewGetLayers( int aLayers[], int& aCount ) const;
diff --git a/pcbnew/class_zone.h b/pcbnew/class_zone.h
index 13eb37b..1e711a5 100644
--- a/pcbnew/class_zone.h
+++ b/pcbnew/class_zone.h
@@ -89,8 +89,8 @@ public:
      * Function GetPosition
      * @return a wxPoint, position of the first point of the outline
      */
-    const wxPoint& GetPosition() const;             // was overload
-    void SetPosition( const wxPoint& aPos )     {}  // was overload
+    virtual const wxPoint& GetPosition() const;             // was overload
+    virtual void SetPosition( const wxPoint& aPos )     {}  // was overload
 
     /**
      * Function SetPriority
@@ -111,7 +111,7 @@ public:
      */
     void Copy( ZONE_CONTAINER* src );
 
-    void GetMsgPanelInfo( std::vector< MSG_PANEL_ITEM >& aList );
+    virtual void GetMsgPanelInfo( std::vector< MSG_PANEL_ITEM >& aList );
 
     /**
      * Function Draw
@@ -121,7 +121,7 @@ public:
      * @param aDrawMode = GR_OR, GR_XOR, GR_COPY ..
      * @param offset = Draw offset (usually wxPoint(0,0))
      */
-    void Draw( EDA_DRAW_PANEL* panel,
+    virtual void Draw( EDA_DRAW_PANEL* panel,
                wxDC*           DC,
                GR_DRAWMODE     aDrawMode,
                const wxPoint&  offset = ZeroOffset );
@@ -154,9 +154,9 @@ public:
     /** Function GetBoundingBox (virtual)
      * @return an EDA_RECT that is the bounding box of the zone outline
      */
-    const EDA_RECT GetBoundingBox() const;
+    virtual const EDA_RECT GetBoundingBox() const;
 
-    int GetClearance( BOARD_CONNECTED_ITEM* aItem = NULL ) const;
+    virtual int GetClearance( BOARD_CONNECTED_ITEM* aItem = NULL ) const;
 
     /**
      * Function TestForCopperIslandAndRemoveInsulatedIslands
@@ -372,7 +372,7 @@ public:
     /** @copydoc BOARD_ITEM::HitTest(const EDA_RECT& aRect,
      *                               bool aContained = true, int aAccuracy ) const
      */
-    bool HitTest( const EDA_RECT& aRect, bool aContained = true, int aAccuracy = 0 ) const;
+    virtual bool HitTest( const EDA_RECT& aRect, bool aContained = true, int aAccuracy = 0 ) const;
 
     /**
      * Function FillZoneAreasWithSegments
@@ -399,7 +399,7 @@ public:
      * Move the outlines
      * @param offset = moving vector
      */
-    void Move( const wxPoint& offset );
+    virtual void Move( const wxPoint& offset );
 
     /**
      * Function MoveEdge
@@ -415,7 +415,7 @@ public:
      * @param centre = rot centre
      * @param angle = in 0.1 degree
      */
-    void Rotate( const wxPoint& centre, double angle );
+    virtual void Rotate( const wxPoint& centre, double angle );
 
     /**
      * Function Flip
@@ -438,7 +438,7 @@ public:
      * returns the class name.
      * @return wxString
      */
-    wxString GetClass() const
+    virtual wxString GetClass() const
     {
         return wxT( "ZONE_CONTAINER" );
     }
diff --git a/pcbnew/collectors.h b/pcbnew/collectors.h
index a718fda..81b11fc 100644
--- a/pcbnew/collectors.h
+++ b/pcbnew/collectors.h
@@ -353,7 +353,7 @@ public:
      * @return SEARCH_RESULT - SEARCH_QUIT if the Iterator is to stop the scan,
      *   else SCAN_CONTINUE;
      */
-    SEARCH_RESULT Inspect( EDA_ITEM* testItem, const void* testData );
+    virtual SEARCH_RESULT Inspect( EDA_ITEM* testItem, const void* testData );
 
 
     /**
@@ -446,7 +446,7 @@ public:
      * Function IsLayerLocked
      * @return bool - true if the given layer is locked, else false.
      */
-    bool IsLayerLocked( LAYER_ID aLayerId ) const
+    virtual bool IsLayerLocked( LAYER_ID aLayerId ) const
     {
         return m_LayerLocked[aLayerId];
     }
@@ -460,7 +460,7 @@ public:
      * Function IsLayerVisible
      * @return bool - true if the given layer is visible, else false.
      */
-    bool IsLayerVisible( LAYER_ID aLayerId ) const
+    virtual bool IsLayerVisible( LAYER_ID aLayerId ) const
     {
         return m_LayerVisible[aLayerId];
     }
@@ -474,7 +474,7 @@ public:
      * Function IgnoreLockedLayers
      * @return bool - true if should ignore locked layers, else false.
      */
-    bool IgnoreLockedLayers() const                 { return m_IgnoreLockedLayers; }
+    virtual bool IgnoreLockedLayers() const         { return m_IgnoreLockedLayers; }
     void SetIgnoreLockedLayers( bool ignore )       { m_IgnoreLockedLayers = ignore; }
 
 
@@ -482,7 +482,7 @@ public:
      * Function IgnoredNonVisibleLayers
      * @return bool - true if should ignore non-visible layers, else false.
      */
-    bool IgnoreNonVisibleLayers() const             { return m_IgnoreNonVisibleLayers; }
+    virtual bool IgnoreNonVisibleLayers() const     { return m_IgnoreNonVisibleLayers; }
     void SetIgnoreNonVisibleLayers( bool ignore )   { m_IgnoreLockedLayers = ignore; }
 
 
@@ -490,7 +490,7 @@ public:
      * Function GetPreferredLayer
      * @return int - the preferred layer for HitTest()ing.
      */
-    LAYER_ID GetPreferredLayer() const             { return m_PreferredLayer; }
+    virtual LAYER_ID GetPreferredLayer() const     { return m_PreferredLayer; }
     void SetPreferredLayer( LAYER_ID aLayer )      { m_PreferredLayer = aLayer; }
 
 
@@ -499,7 +499,7 @@ public:
      * provides wildcard behavior regarding the preferred layer.
      * @return bool - true if should ignore preferred layer, else false.
      */
-    bool IgnorePreferredLayer() const               { return  m_IgnorePreferredLayer; }
+    virtual bool IgnorePreferredLayer() const       { return  m_IgnorePreferredLayer; }
     void SetIgnorePreferredLayer( bool ignore )     { m_IgnorePreferredLayer = ignore; }
 
 
@@ -507,7 +507,7 @@ public:
      * Function IgnoreLockedItems
      * @return bool - true if should ignore locked items, else false.
      */
-    bool IgnoreLockedItems() const                  { return m_IgnoreLockedItems; }
+    virtual bool IgnoreLockedItems() const          { return m_IgnoreLockedItems; }
     void SetIgnoreLockedItems( bool ignore )        { m_IgnoreLockedItems = ignore; }
 
 
@@ -517,7 +517,7 @@ public:
      * included.
      * @return bool - true if should include, else false.
      */
-    bool IncludeSecondary() const  { return m_IncludeSecondary; }
+    virtual bool IncludeSecondary() const  { return m_IncludeSecondary; }
     void SetIncludeSecondary( bool include ) { m_IncludeSecondary = include; }
 
 
@@ -525,63 +525,63 @@ public:
      * Function IgnoreMTextsMarkedNoShow
      * @return bool - true if MTexts marked as "no show" should be ignored.
      */
-    bool IgnoreMTextsMarkedNoShow() const { return m_IgnoreMTextsMarkedNoShow; }
+    virtual bool IgnoreMTextsMarkedNoShow() const { return m_IgnoreMTextsMarkedNoShow; }
     void SetIgnoreMTextsMarkedNoShow( bool ignore ) { m_IgnoreMTextsMarkedNoShow = ignore; }
 
     /**
      * Function IgnoreMTextsOnCu
      * @return bool - true if should ignore MTexts on back layers
      */
-    bool IgnoreMTextsOnBack() const { return m_IgnoreMTextsOnBack; }
+    virtual bool IgnoreMTextsOnBack() const { return m_IgnoreMTextsOnBack; }
     void SetIgnoreMTextsOnBack( bool ignore ) { m_IgnoreMTextsOnBack = ignore; }
 
     /**
      * Function IgnoreMTextsOnFront
      * @return bool - true if should ignore MTexts on front layers
      */
-    bool IgnoreMTextsOnFront() const { return m_IgnoreMTextsOnFront; }
+    virtual bool IgnoreMTextsOnFront() const { return m_IgnoreMTextsOnFront; }
     void SetIgnoreMTextsOnFront( bool ignore ) { m_IgnoreMTextsOnFront = ignore; }
 
     /**
      * Function IgnoreModulesOnBack
      * @return bool - true if should ignore MODULEs on the back side
      */
-    bool IgnoreModulesOnBack() const { return m_IgnoreModulesOnBack; }
+    virtual bool IgnoreModulesOnBack() const { return m_IgnoreModulesOnBack; }
     void SetIgnoreModulesOnBack( bool ignore ) { m_IgnoreModulesOnBack = ignore; }
 
     /**
      * Function IgnoreModulesOnFront
      * @return bool - true if should ignore MODULEs on component layer.
      */
-    bool IgnoreModulesOnFront() const { return m_IgnoreModulesOnFront; }
+    virtual bool IgnoreModulesOnFront() const { return m_IgnoreModulesOnFront; }
     void SetIgnoreModulesOnFront( bool ignore ) { m_IgnoreModulesOnFront = ignore; }
 
     /**
      * Function IgnorePadsOnBack
      * @return bool - true if should ignore Pads on Back Side.
      */
-    bool IgnorePadsOnBack() const { return m_IgnorePadsOnBack; }
+    virtual bool IgnorePadsOnBack() const { return m_IgnorePadsOnBack; }
     void SetIgnorePadsOnBack(bool ignore) { m_IgnorePadsOnBack = ignore; }
 
     /**
      * Function IgnorePadsOnFront
      * @return bool - true if should ignore PADSs on Front Side.
      */
-    bool IgnorePadsOnFront() const { return m_IgnorePadsOnFront; }
+    virtual bool IgnorePadsOnFront() const { return m_IgnorePadsOnFront; }
     void SetIgnorePadsOnFront(bool ignore) { m_IgnorePadsOnFront = ignore; }
 
     /**
      * Function IgnoreModulesVals
      * @return bool - true if should ignore modules values.
      */
-    bool IgnoreModulesVals() const { return m_IgnoreModulesVals; }
+    virtual bool IgnoreModulesVals() const { return m_IgnoreModulesVals; }
     void SetIgnoreModulesVals(bool ignore) { m_IgnoreModulesVals = ignore; }
 
     /**
      * Function IgnoreModulesRefs
      * @return bool - true if should ignore modules references.
      */
-    bool IgnoreModulesRefs() const { return m_IgnoreModulesRefs; }
+    virtual bool IgnoreModulesRefs() const { return m_IgnoreModulesRefs; }
     void SetIgnoreModulesRefs(bool ignore) { m_IgnoreModulesRefs = ignore; }
 };
 
@@ -621,7 +621,7 @@ public:
      * @return SEARCH_RESULT - SEARCH_QUIT if the Iterator is to stop the scan,
      *   else SCAN_CONTINUE;
      */
-    SEARCH_RESULT Inspect( EDA_ITEM* testItem, const void* testData );
+    virtual SEARCH_RESULT Inspect( EDA_ITEM* testItem, const void* testData );
 
 
     /**
diff --git a/pcbnew/dialogs/dialog_SVG_print.cpp b/pcbnew/dialogs/dialog_SVG_print.cpp
index 4317bbb..d0973ea 100644
--- a/pcbnew/dialogs/dialog_SVG_print.cpp
+++ b/pcbnew/dialogs/dialog_SVG_print.cpp
@@ -67,12 +67,12 @@ private:
 
     void initDialog();
 
-    void OnCloseWindow( wxCloseEvent& event );
-    void OnButtonPlot( wxCommandEvent& event );
+    virtual void OnCloseWindow( wxCloseEvent& event );
+    virtual void OnButtonPlot( wxCommandEvent& event );
 
-    void OnButtonCloseClick( wxCommandEvent& event );
+    virtual void OnButtonCloseClick( wxCommandEvent& event );
 
-    void OnOutputDirectoryBrowseClicked( wxCommandEvent& event );
+    virtual void OnOutputDirectoryBrowseClicked( wxCommandEvent& event );
     void SetPenWidth();
     void ExportSVGFile( bool aOnlyOneFile );
 
diff --git a/pcbnew/dialogs/dialog_cleaning_options.h b/pcbnew/dialogs/dialog_cleaning_options.h
index 0aaef4d..8b7ecb6 100644
--- a/pcbnew/dialogs/dialog_cleaning_options.h
+++ b/pcbnew/dialogs/dialog_cleaning_options.h
@@ -43,11 +43,11 @@ public:
     }
 
 private:
-        void OnCancelClick( wxCommandEvent& event )
+        virtual void OnCancelClick( wxCommandEvent& event )
         {
             EndModal( wxID_CANCEL );
         }
-        void OnOKClick( wxCommandEvent& event )
+        virtual void OnOKClick( wxCommandEvent& event )
         {
             GetOpts( );
             EndModal( wxID_OK );
diff --git a/pcbnew/dialogs/dialog_copper_zones.cpp b/pcbnew/dialogs/dialog_copper_zones.cpp
index f0215ff..1b6beca 100644
--- a/pcbnew/dialogs/dialog_copper_zones.cpp
+++ b/pcbnew/dialogs/dialog_copper_zones.cpp
@@ -83,10 +83,10 @@ private:
      */
     void initDialog();
 
-    void OnButtonOkClick( wxCommandEvent& event );
-    void OnButtonCancelClick( wxCommandEvent& event );
-    void OnClose( wxCloseEvent& event );
-    void OnCornerSmoothingModeChoice( wxCommandEvent& event );
+    virtual void OnButtonOkClick( wxCommandEvent& event );
+    virtual void OnButtonCancelClick( wxCommandEvent& event );
+    virtual void OnClose( wxCloseEvent& event );
+    virtual void OnCornerSmoothingModeChoice( wxCommandEvent& event );
 
     /**
      * Function AcceptOptions
@@ -96,10 +96,10 @@ private:
      */
     bool AcceptOptions( bool aPromptForErrors, bool aUseExportableSetupOnly = false );
 
-    void OnNetSortingOptionSelected( wxCommandEvent& event );
-    void ExportSetupToOtherCopperZones( wxCommandEvent& event );
-    void OnPadsInZoneClick( wxCommandEvent& event );
-    void OnRunFiltersButtonClick( wxCommandEvent& event );
+    virtual void OnNetSortingOptionSelected( wxCommandEvent& event );
+    virtual void ExportSetupToOtherCopperZones( wxCommandEvent& event );
+    virtual void OnPadsInZoneClick( wxCommandEvent& event );
+    virtual void OnRunFiltersButtonClick( wxCommandEvent& event );
 
 
     void buildAvailableListOfNets();
diff --git a/pcbnew/dialogs/dialog_create_array.h b/pcbnew/dialogs/dialog_create_array.h
index 2f80d27..b0148af 100644
--- a/pcbnew/dialogs/dialog_create_array.h
+++ b/pcbnew/dialogs/dialog_create_array.h
@@ -262,9 +262,9 @@ protected:
         int     m_numberingOffsetX, m_numberingOffsetY;
         ARRAY_NUMBERING_TYPE_T m_priAxisNumType, m_secAxisNumType;
 
-        void        TransformItem( int n, BOARD_ITEM* item, const wxPoint& rotPoint ) const;    // override virtual
-        int         GetArraySize() const;                                                       // override virtual
-        wxString    GetItemNumber( int n ) const;                                               // override virtual
+        virtual void        TransformItem( int n, BOARD_ITEM* item, const wxPoint& rotPoint ) const;
+        virtual int         GetArraySize() const;
+        virtual wxString    GetItemNumber( int n ) const;
 
 private:
         wxPoint getGridCoords( int n ) const;
@@ -288,9 +288,9 @@ private:
         ARRAY_NUMBERING_TYPE_T m_numberingType;
         long m_numberingOffset;
 
-        void        TransformItem( int n, BOARD_ITEM* item, const wxPoint& rotPoint ) const;    // override virtual
-        int         GetArraySize() const;                                                       // override virtual
-        wxString    GetItemNumber( int n ) const;                                               // override virtual
+        virtual void        TransformItem( int n, BOARD_ITEM* item, const wxPoint& rotPoint ) const;
+        virtual int         GetArraySize() const;
+        virtual wxString    GetItemNumber( int n ) const;
     };
 
     // Constructor and destructor
@@ -311,9 +311,9 @@ private:
     const wxPoint m_originalItemPosition;
 
     // Event callbacks
-    void    OnParameterChanged( wxCommandEvent& event );
-    void    OnCancelClick( wxCommandEvent& event );
-    void    OnOkClick( wxCommandEvent& event );
+    virtual void    OnParameterChanged( wxCommandEvent& event );
+    virtual void    OnCancelClick( wxCommandEvent& event );
+    virtual void    OnOkClick( wxCommandEvent& event );
 
     // Internal callback handlers
     void setControlEnablement();
diff --git a/pcbnew/dialogs/dialog_design_rules.h b/pcbnew/dialogs/dialog_design_rules.h
index c314818..0027eb1 100644
--- a/pcbnew/dialogs/dialog_design_rules.h
+++ b/pcbnew/dialogs/dialog_design_rules.h
@@ -83,44 +83,44 @@ private:
     std::vector <int> m_TracksWidthList;
 
 private:
-    void OnNetClassesNameLeftClick( wxGridEvent& event ){ event.Skip(); }
-    void OnNetClassesNameRightClick( wxGridEvent& event ){ event.Skip(); }
-    void OnCancelButtonClick( wxCommandEvent& event );
-    void OnOkButtonClick( wxCommandEvent& event );
-    void OnAddNetclassClick( wxCommandEvent& event );
-    void OnRemoveNetclassClick( wxCommandEvent& event );
+    virtual void OnNetClassesNameLeftClick( wxGridEvent& event ) { event.Skip(); }
+    virtual void OnNetClassesNameRightClick( wxGridEvent& event ) { event.Skip(); }
+    virtual void OnCancelButtonClick( wxCommandEvent& event );
+    virtual void OnOkButtonClick( wxCommandEvent& event );
+    virtual void OnAddNetclassClick( wxCommandEvent& event );
+    virtual void OnRemoveNetclassClick( wxCommandEvent& event );
 
     /*
      * Called on "Move Up" button click
      * the selected(s) rules are moved up
      * The default netclass is always the first rule
      */
-    void OnMoveUpSelectedNetClass( wxCommandEvent& event );
+    virtual void OnMoveUpSelectedNetClass( wxCommandEvent& event );
 
     /*
      * Called on the left Choice Box selection
      */
-    void OnLeftCBSelection( wxCommandEvent& event );
+    virtual void OnLeftCBSelection( wxCommandEvent& event );
 
     /*
      * Called on the Right Choice Box selection
      */
-    void OnRightCBSelection( wxCommandEvent& event );
+    virtual void OnRightCBSelection( wxCommandEvent& event );
 
-    void OnRightToLeftCopyButton( wxCommandEvent& event );
-    void OnLeftToRightCopyButton( wxCommandEvent& event );
+    virtual void OnRightToLeftCopyButton( wxCommandEvent& event );
+    virtual void OnLeftToRightCopyButton( wxCommandEvent& event );
 
     /*
      * Called on clicking the left "select all" button:
      * select all items of the left netname list list box
      */
-    void OnLeftSelectAllButton( wxCommandEvent& event );
+    virtual void OnLeftSelectAllButton( wxCommandEvent& event );
 
     /*
      * Called on clicking the right "select all" button:
      * select all items of the right netname list list box
      */
-    void OnRightSelectAllButton( wxCommandEvent& event );
+    virtual void OnRightSelectAllButton( wxCommandEvent& event );
 
     /*
      * Function TestDataValidity
diff --git a/pcbnew/dialogs/dialog_display_options.h b/pcbnew/dialogs/dialog_display_options.h
index 6590a67..7b3ad7b 100644
--- a/pcbnew/dialogs/dialog_display_options.h
+++ b/pcbnew/dialogs/dialog_display_options.h
@@ -37,7 +37,7 @@ private:
 public:
    DIALOG_DISPLAY_OPTIONS( PCB_EDIT_FRAME* parent );
    ~DIALOG_DISPLAY_OPTIONS( ) { };
-   void OnOkClick( wxCommandEvent& event );
-   void OnCancelClick( wxCommandEvent& event );
+   virtual void OnOkClick( wxCommandEvent& event );
+   virtual void OnCancelClick( wxCommandEvent& event );
 };
 
diff --git a/pcbnew/dialogs/dialog_drc.h b/pcbnew/dialogs/dialog_drc.h
index a75d457..7ad3d95 100644
--- a/pcbnew/dialogs/dialog_drc.h
+++ b/pcbnew/dialogs/dialog_drc.h
@@ -74,44 +74,44 @@ private:
     void SetDrcParmeters( );
 
     /// wxEVT_COMMAND_CHECKBOX_CLICKED event handler for ID_CHECKBOX
-    void OnReportCheckBoxClicked( wxCommandEvent& event );
+    virtual void OnReportCheckBoxClicked( wxCommandEvent& event );
 
     /// wxEVT_COMMAND_BUTTON_CLICKED event handler for ID_BUTTON_BROWSE_RPT_FILE
-    void OnButtonBrowseRptFileClick( wxCommandEvent& event );
+    virtual void OnButtonBrowseRptFileClick( wxCommandEvent& event );
 
     /// wxEVT_COMMAND_BUTTON_CLICKED event handler for ID_STARTDRC
-    void OnStartdrcClick( wxCommandEvent& event );
+    virtual void OnStartdrcClick( wxCommandEvent& event );
 
     /// wxEVT_COMMAND_BUTTON_CLICKED event handler for ID_LIST_UNCONNECTED
-    void OnListUnconnectedClick( wxCommandEvent& event );
+    virtual void OnListUnconnectedClick( wxCommandEvent& event );
 
     /// wxEVT_COMMAND_BUTTON_CLICKED event handler for ID_DELETE_ALL
-    void OnDeleteAllClick( wxCommandEvent& event );
+    virtual void OnDeleteAllClick( wxCommandEvent& event );
 
     /// wxEVT_COMMAND_BUTTON_CLICKED event handler for ID_DELETE_ONE
-    void OnDeleteOneClick( wxCommandEvent& event );
+    virtual void OnDeleteOneClick( wxCommandEvent& event );
 
     /// wxEVT_LEFT_DCLICK event handler for ID_CLEARANCE_LIST
-    void OnLeftDClickClearance( wxMouseEvent& event );
+    virtual void OnLeftDClickClearance( wxMouseEvent& event );
 
     /// wxEVT_RIGHT_UP event handler for ID_CLEARANCE_LIST
-    void OnRightUpClearance( wxMouseEvent& event );
+    virtual void OnRightUpClearance( wxMouseEvent& event );
 
     /// wxEVT_LEFT_DCLICK event handler for ID_UNCONNECTED_LIST
-    void OnLeftDClickUnconnected( wxMouseEvent& event );
+    virtual void OnLeftDClickUnconnected( wxMouseEvent& event );
 
     /// wxEVT_RIGHT_UP event handler for ID_UNCONNECTED_LIST
-    void OnRightUpUnconnected( wxMouseEvent& event );
+    virtual void OnRightUpUnconnected( wxMouseEvent& event );
 
     /// wxEVT_COMMAND_BUTTON_CLICKED event handler for wxID_CANCEL
-    void OnCancelClick( wxCommandEvent& event );
+    virtual void OnCancelClick( wxCommandEvent& event );
 
     /// wxEVT_COMMAND_BUTTON_CLICKED event handler for wxID_OK
-    void OnOkClick( wxCommandEvent& event );
+    virtual void OnOkClick( wxCommandEvent& event );
 
-    void OnMarkerSelectionEvent( wxCommandEvent& event );
-    void OnUnconnectedSelectionEvent( wxCommandEvent& event );
-    void OnChangingMarkerList( wxNotebookEvent& event );
+    virtual void OnMarkerSelectionEvent( wxCommandEvent& event );
+    virtual void OnUnconnectedSelectionEvent( wxCommandEvent& event );
+    virtual void OnChangingMarkerList( wxNotebookEvent& event );
 
     void DelDRCMarkers();
     void RedrawDrawPanel();
diff --git a/pcbnew/dialogs/dialog_drclistbox.h b/pcbnew/dialogs/dialog_drclistbox.h
index 4848504..0add28e 100644
--- a/pcbnew/dialogs/dialog_drclistbox.h
+++ b/pcbnew/dialogs/dialog_drclistbox.h
@@ -71,13 +71,13 @@ public:
 
     //-----<Interface DRC_ITEM_LIST>---------------------------------------
 
-    void            DeleteAllItems()
+    virtual void            DeleteAllItems()
     {
         m_board->DeleteMARKERs();
     }
 
 
-    const DRC_ITEM* GetItem( int aIndex )
+    virtual const DRC_ITEM* GetItem( int aIndex )
     {
         const MARKER_PCB* marker = m_board->GetMARKER( aIndex );
         if( marker )
@@ -85,7 +85,7 @@ public:
         return NULL;
     }
 
-    void DeleteItem( int aIndex )
+    virtual void DeleteItem( int aIndex )
     {
         MARKER_PCB* marker = m_board->GetMARKER( aIndex );
         if( marker )
@@ -97,7 +97,7 @@ public:
      * Function GetCount
      * returns the number of items in the list.
      */
-    int  GetCount()
+    virtual int  GetCount()
     {
         return m_board->GetMARKERCount();
     }
@@ -131,7 +131,7 @@ public:
 
     //-----<Interface DRC_ITEM_LIST>---------------------------------------
 
-    void            DeleteAllItems()
+    virtual void            DeleteAllItems()
     {
         if( m_vector )
         {
@@ -143,7 +143,7 @@ public:
     }
 
 
-    const DRC_ITEM* GetItem( int aIndex )
+    virtual const DRC_ITEM* GetItem( int aIndex )
     {
         if( m_vector &&  (unsigned)aIndex < m_vector->size() )
         {
@@ -153,7 +153,7 @@ public:
         return NULL;
     }
 
-    void DeleteItem( int aIndex )
+    virtual void DeleteItem( int aIndex )
     {
         if( m_vector &&  (unsigned)aIndex < m_vector->size() )
         {
@@ -167,7 +167,7 @@ public:
      * Function GetCount
      * returns the number of items in the list.
      */
-    int  GetCount()
+    virtual int  GetCount()
     {
         if( m_vector )
         {
@@ -244,7 +244,7 @@ public:
      * @param n An index into the list.
      * @return wxString - the simple html text to show in the listbox.
      */
-    wxString OnGetItem( size_t n ) const
+    virtual wxString OnGetItem( size_t n ) const
     {
         if( m_list )
         {
@@ -262,7 +262,7 @@ public:
      * @param n An index into the list.
      * @return wxString - the simple html text to show in the listbox.
      */
-    wxString OnGetItemMarkup( size_t n ) const
+    virtual wxString OnGetItemMarkup( size_t n ) const
     {
         return OnGetItem( n );
     }
diff --git a/pcbnew/dialogs/dialog_edit_module_for_BoardEditor.h b/pcbnew/dialogs/dialog_edit_module_for_BoardEditor.h
index c83b093..e2d9800 100644
--- a/pcbnew/dialogs/dialog_edit_module_for_BoardEditor.h
+++ b/pcbnew/dialogs/dialog_edit_module_for_BoardEditor.h
@@ -55,23 +55,23 @@ private:
     void Edit3DShapeFileName();
 
     // virtual event functions
-    void OnEditValue( wxCommandEvent& event );
-    void OnEditReference( wxCommandEvent& event );
+    virtual void OnEditValue( wxCommandEvent& event );
+    virtual void OnEditReference( wxCommandEvent& event );
     void On3DShapeSelection( wxCommandEvent& event );
-    void On3DShapeNameSelected( wxCommandEvent& event );
-    void Edit3DShapeFilename( wxCommandEvent& event )
+    virtual void On3DShapeNameSelected( wxCommandEvent& event );
+    virtual void Edit3DShapeFilename( wxCommandEvent& event )
     {
         Edit3DShapeFileName();
     }
-    void Remove3DShape( wxCommandEvent& event );
-    void Add3DShape( wxCommandEvent& event )
+    virtual void Remove3DShape( wxCommandEvent& event );
+    virtual void Add3DShape( wxCommandEvent& event )
     {
         BrowseAndAdd3DShapeFile();
     }
-    void OnCancelClick( wxCommandEvent& event );
-    void OnOkClick( wxCommandEvent& event );
-    void GotoModuleEditor( wxCommandEvent& event );
-    void ExchangeModule( wxCommandEvent& event );
-    void ModuleOrientEvent( wxCommandEvent& event );
+    virtual void OnCancelClick( wxCommandEvent& event );
+    virtual void OnOkClick( wxCommandEvent& event );
+    virtual void GotoModuleEditor( wxCommandEvent& event );
+    virtual void ExchangeModule( wxCommandEvent& event );
+    virtual void ModuleOrientEvent( wxCommandEvent& event );
 };
 
diff --git a/pcbnew/dialogs/dialog_edit_module_for_Modedit.h b/pcbnew/dialogs/dialog_edit_module_for_Modedit.h
index 06fac76..b6b313b 100644
--- a/pcbnew/dialogs/dialog_edit_module_for_Modedit.h
+++ b/pcbnew/dialogs/dialog_edit_module_for_Modedit.h
@@ -58,21 +58,21 @@ private:
     void Edit3DShapeFileName();
 
     // virtual event functions
-    void OnEditValue( wxCommandEvent& event );
-    void OnEditReference( wxCommandEvent& event );
+    virtual void OnEditValue( wxCommandEvent& event );
+    virtual void OnEditReference( wxCommandEvent& event );
     void On3DShapeSelection( wxCommandEvent& event );
-    void On3DShapeNameSelected( wxCommandEvent& event );
-    void Add3DShape( wxCommandEvent& event )
+    virtual void On3DShapeNameSelected( wxCommandEvent& event );
+    virtual void Add3DShape( wxCommandEvent& event )
     {
         BrowseAndAdd3DShapeFile();
     }
-    void Remove3DShape( wxCommandEvent& event );
-    void Edit3DShapeFilename( wxCommandEvent& event )
+    virtual void Remove3DShape( wxCommandEvent& event );
+    virtual void Edit3DShapeFilename( wxCommandEvent& event )
     {
         Edit3DShapeFileName();
     }
-    void OnCancelClick( wxCommandEvent& event );
-    void OnOkClick( wxCommandEvent& event );
+    virtual void OnCancelClick( wxCommandEvent& event );
+    virtual void OnOkClick( wxCommandEvent& event );
 };
 
 
diff --git a/pcbnew/dialogs/dialog_edit_module_text.h b/pcbnew/dialogs/dialog_edit_module_text.h
index 674481b..185d0ce 100644
--- a/pcbnew/dialogs/dialog_edit_module_text.h
+++ b/pcbnew/dialogs/dialog_edit_module_text.h
@@ -46,7 +46,7 @@ public:
 
 private:
     void initDlg( );
-    void OnOkClick( wxCommandEvent& event );
+    virtual void OnOkClick( wxCommandEvent& event );
     void OnCancelClick( wxCommandEvent& event );
 };
 
diff --git a/pcbnew/dialogs/dialog_find.h b/pcbnew/dialogs/dialog_find.h
index d374c41..cd10d3f 100644
--- a/pcbnew/dialogs/dialog_find.h
+++ b/pcbnew/dialogs/dialog_find.h
@@ -48,10 +48,10 @@ private:
     // Function called when an item is found
     boost::function<void (BOARD_ITEM*)> callback;
 
-    void onButtonFindItemClick( wxCommandEvent& event );
-    void onButtonFindMarkerClick( wxCommandEvent& event );
-    void onButtonCloseClick( wxCommandEvent& event );
-    void onClose( wxCloseEvent& event );
+    virtual void onButtonFindItemClick( wxCommandEvent& event );
+    virtual void onButtonFindMarkerClick( wxCommandEvent& event );
+    virtual void onButtonCloseClick( wxCommandEvent& event );
+    virtual void onClose( wxCloseEvent& event );
 };
 
 #endif /* DIALOG_FIND_BASE_H */
diff --git a/pcbnew/dialogs/dialog_footprint_wizard_list.h b/pcbnew/dialogs/dialog_footprint_wizard_list.h
index 0361e36..312c0b0 100644
--- a/pcbnew/dialogs/dialog_footprint_wizard_list.h
+++ b/pcbnew/dialogs/dialog_footprint_wizard_list.h
@@ -39,9 +39,9 @@ public:
     FOOTPRINT_WIZARD* GetWizard();
 
 private:
-    void OnCellWizardClick( wxGridEvent& event );
-    void OnOpenButtonClick( wxCommandEvent& event );
-    void OnCancelClick( wxCommandEvent& event );
+    virtual void OnCellWizardClick( wxGridEvent& event );
+    virtual void OnOpenButtonClick( wxCommandEvent& event );
+    virtual void OnCancelClick( wxCommandEvent& event );
 };
 
 #endif  // _DIALOG_FOOTPRINT_WIZARD_LIST_H_
diff --git a/pcbnew/dialogs/dialog_fp_lib_table.cpp b/pcbnew/dialogs/dialog_fp_lib_table.cpp
index 7f1b116..855b902 100644
--- a/pcbnew/dialogs/dialog_fp_lib_table.cpp
+++ b/pcbnew/dialogs/dialog_fp_lib_table.cpp
@@ -81,10 +81,10 @@ public:
 
     //-----<wxGridTableBase overloads>-------------------------------------------
 
-    int         GetNumberRows()     { return rows.size(); }
-    int         GetNumberCols()     { return COL_COUNT; }
+    virtual int         GetNumberRows()    { return rows.size(); }
+    virtual int         GetNumberCols()    { return COL_COUNT; }
 
-    wxString    GetValue( int aRow, int aCol )
+    virtual wxString    GetValue( int aRow, int aCol )
     {
         if( unsigned( aRow ) < rows.size() )
         {
@@ -105,7 +105,7 @@ public:
         return wxEmptyString;
     }
 
-    void    SetValue( int aRow, int aCol, const wxString &aValue )
+    virtual void    SetValue( int aRow, int aCol, const wxString &aValue )
     {
         if( unsigned( aRow ) < rows.size() )
         {
@@ -122,12 +122,12 @@ public:
         }
     }
 
-    bool IsEmptyCell( int aRow, int aCol )
+    virtual bool IsEmptyCell( int aRow, int aCol )
     {
         return !GetValue( aRow, aCol );
     }
 
-    bool InsertRows( size_t aPos = 0, size_t aNumRows = 1 )
+    virtual bool InsertRows( size_t aPos = 0, size_t aNumRows = 1 )
     {
         if( aPos < rows.size() )
         {
@@ -149,7 +149,7 @@ public:
         return false;
     }
 
-    bool AppendRows( size_t aNumRows = 1 )
+    virtual bool AppendRows( size_t aNumRows = 1 )
     {
         // do not modify aNumRows, original value needed for wxGridTableMessage below
         for( int i = aNumRows; i; --i )
@@ -167,7 +167,7 @@ public:
         return true;
     }
 
-    bool DeleteRows( size_t aPos, size_t aNumRows )
+    virtual bool DeleteRows( size_t aPos, size_t aNumRows )
     {
         // aPos may be a large positive, e.g. size_t(-1), and the sum of
         // aPos+aNumRows may wrap here, so both ends of the range are tested.
@@ -191,13 +191,13 @@ public:
         return false;
     }
 
-    void Clear()
+    virtual void Clear()
     {
         rows.clear();
         nickIndex.clear();
     }
 
-    wxString GetColLabelValue( int aCol )
+    virtual wxString GetColLabelValue( int aCol )
     {
         switch( aCol )
         {
@@ -496,7 +496,7 @@ private:
 
     //-----<event handlers>----------------------------------
 
-    void onKeyDown( wxKeyEvent& ev )
+    virtual void onKeyDown( wxKeyEvent& ev )
     {
 #if 0
         // send the key to the current grid
@@ -508,13 +508,13 @@ private:
 #endif
     }
 
-    void pageChangedHandler( wxAuiNotebookEvent& event )
+    virtual void pageChangedHandler( wxAuiNotebookEvent& event )
     {
         m_pageNdx = m_auinotebook->GetSelection();
         m_cur_grid = ( m_pageNdx == 0 ) ? m_global_grid : m_project_grid;
     }
 
-    void appendRowHandler( wxCommandEvent& event )
+    virtual void appendRowHandler( wxCommandEvent& event )
     {
         if( m_cur_grid->AppendRows( 1 ) )
         {
@@ -527,7 +527,7 @@ private:
         }
     }
 
-    void deleteRowHandler( wxCommandEvent& event )
+    virtual void deleteRowHandler( wxCommandEvent& event )
     {
 #if 1
         int currRow = getCursorRow();
@@ -564,7 +564,7 @@ private:
 #endif
     }
 
-    void moveUpHandler( wxCommandEvent& event )
+    virtual void moveUpHandler( wxCommandEvent& event )
     {
         int curRow = getCursorRow();
         if( curRow >= 1 )
@@ -596,7 +596,7 @@ private:
         }
     }
 
-    void moveDownHandler( wxCommandEvent& event )
+    virtual void moveDownHandler( wxCommandEvent& event )
     {
         FP_TBL_MODEL* tbl = cur_model();
 
@@ -628,7 +628,7 @@ private:
         }
     }
 
-    void optionsEditor( wxCommandEvent& event )
+    virtual void optionsEditor( wxCommandEvent& event )
     {
         FP_TBL_MODEL*   tbl = cur_model();
 
@@ -660,19 +660,19 @@ private:
         }
     }
 
-    void OnClickLibraryWizard( wxCommandEvent& event );
+    virtual void OnClickLibraryWizard( wxCommandEvent& event );
 
-    void onCancelButtonClick( wxCommandEvent& event )
+    virtual void onCancelButtonClick( wxCommandEvent& event )
     {
         EndModal( 0 );
     }
 
-    void onCancelCaptionButtonClick( wxCloseEvent& event )
+    virtual void onCancelCaptionButtonClick( wxCloseEvent& event )
     {
         EndModal( 0 );
     }
 
-    void onOKButtonClick( wxCommandEvent& event )
+    virtual void onOKButtonClick( wxCommandEvent& event )
     {
         int dialogRet = 0;
 
diff --git a/pcbnew/dialogs/dialog_fp_plugin_options.cpp b/pcbnew/dialogs/dialog_fp_plugin_options.cpp
index 316ce5a..789657a 100644
--- a/pcbnew/dialogs/dialog_fp_plugin_options.cpp
+++ b/pcbnew/dialogs/dialog_fp_plugin_options.cpp
@@ -253,7 +253,7 @@ private:
 
     //-----<event handlers>------------------------------------------------------
 
-    void onListBoxItemSelected( wxCommandEvent& event )
+    virtual void onListBoxItemSelected( wxCommandEvent& event )
     {
         // change the help text based on the m_listbox selection:
         if( event.IsSelection() )
@@ -274,22 +274,22 @@ private:
         }
     }
 
-    void onListBoxItemDoubleClicked( wxCommandEvent& event )
+    virtual void onListBoxItemDoubleClicked( wxCommandEvent& event )
     {
         appendOption();
     }
 
-    void onAppendOption( wxCommandEvent& event )
+    virtual void onAppendOption( wxCommandEvent& event )
     {
         appendOption();
     }
 
-    void onAppendRow( wxMouseEvent& event )
+    virtual void onAppendRow( wxMouseEvent& event )
     {
         appendRow();
     }
 
-    void onDeleteRow( wxMouseEvent& event )
+    virtual void onDeleteRow( wxMouseEvent& event )
     {
         int rowCount = m_grid->GetNumberRows();
         int curRow   = getCursorRow();
@@ -303,7 +303,7 @@ private:
         }
     }
 
-    void onMoveUp( wxMouseEvent& event )
+    virtual void onMoveUp( wxMouseEvent& event )
     {
         int curRow = getCursorRow();
         if( curRow >= 1 )
@@ -336,7 +336,7 @@ private:
         }
     }
 
-    void onMoveDown( wxMouseEvent& event )
+    virtual void onMoveDown( wxMouseEvent& event )
     {
         int curRow = getCursorRow();
         if( curRow + 1 < m_grid->GetNumberRows() )
@@ -368,17 +368,17 @@ private:
         }
     }
 
-    void onCancelButtonClick( wxCommandEvent& event )
+    virtual void onCancelButtonClick( wxCommandEvent& event )
     {
         abort();
     }
 
-    void onCancelCaptionButtonClick( wxCloseEvent& event )
+    virtual void onCancelCaptionButtonClick( wxCloseEvent& event )
     {
         abort();
     }
 
-    void onOKButtonClick( wxCommandEvent& event )
+    virtual void onOKButtonClick( wxCommandEvent& event )
     {
         saveColSizes();
 
diff --git a/pcbnew/dialogs/dialog_freeroute_exchange.h b/pcbnew/dialogs/dialog_freeroute_exchange.h
index 7debe7b..a7a99d4 100644
--- a/pcbnew/dialogs/dialog_freeroute_exchange.h
+++ b/pcbnew/dialogs/dialog_freeroute_exchange.h
@@ -35,12 +35,12 @@ private:
 
 private:
     // Virtual event handlers
-    void OnOKButtonClick( wxCommandEvent& event );
-    void OnExportButtonClick( wxCommandEvent& event );
-    void OnLaunchButtonClick( wxCommandEvent& event );
-    void OnImportButtonClick( wxCommandEvent& event );
-    void OnHelpButtonClick( wxCommandEvent& event );
-    void OnCancelButtonClick( wxCommandEvent& event );
+    virtual void OnOKButtonClick( wxCommandEvent& event );
+    virtual void OnExportButtonClick( wxCommandEvent& event );
+    virtual void OnLaunchButtonClick( wxCommandEvent& event );
+    virtual void OnImportButtonClick( wxCommandEvent& event );
+    virtual void OnHelpButtonClick( wxCommandEvent& event );
+    virtual void OnCancelButtonClick( wxCommandEvent& event );
 
     void MyInit ( );
     const wxString createDSN_File();
diff --git a/pcbnew/dialogs/dialog_gendrill.h b/pcbnew/dialogs/dialog_gendrill.h
index 048f2f9..fac3556 100644
--- a/pcbnew/dialogs/dialog_gendrill.h
+++ b/pcbnew/dialogs/dialog_gendrill.h
@@ -68,20 +68,20 @@ private:
     void            InitDisplayParams( void );
 
     // event functions
-    void            OnSelDrillUnitsSelected( wxCommandEvent& event );
-    void            OnSelZerosFmtSelected( wxCommandEvent& event );
-    void            OnGenDrillFile( wxCommandEvent& event );
-    void            OnGenMapFile( wxCommandEvent& event );
+    virtual void            OnSelDrillUnitsSelected( wxCommandEvent& event );
+    virtual void            OnSelZerosFmtSelected( wxCommandEvent& event );
+    virtual void            OnGenDrillFile( wxCommandEvent& event );
+    virtual void            OnGenMapFile( wxCommandEvent& event );
 
     /*
      *  Create a plain text report file giving a list of drill values and drill count
      *  for through holes, oblong holes, and for buried vias,
      *  drill values and drill count per layer pair
      */
-    void            OnGenReportFile( wxCommandEvent& event );
+    virtual void            OnGenReportFile( wxCommandEvent& event );
 
-    void            OnCancelClick( wxCommandEvent& event );
-    void            OnOutputDirectoryBrowseClicked( wxCommandEvent& event );
+    virtual void            OnCancelClick( wxCommandEvent& event );
+    virtual void            OnOutputDirectoryBrowseClicked( wxCommandEvent& event );
 
     // Specific functions:
     void            SetParams( void );
diff --git a/pcbnew/dialogs/dialog_general_options.h b/pcbnew/dialogs/dialog_general_options.h
index 4b4fbe2..91aca51 100644
--- a/pcbnew/dialogs/dialog_general_options.h
+++ b/pcbnew/dialogs/dialog_general_options.h
@@ -37,13 +37,13 @@ private:
 public:
     DIALOG_GENERALOPTIONS( PCB_EDIT_FRAME* parent );
     ~DIALOG_GENERALOPTIONS() {};
-    void OnOkClick( wxCommandEvent& event );
-    void OnCancelClick( wxCommandEvent& event );
+    virtual void OnOkClick( wxCommandEvent& event );
+    virtual void OnCancelClick( wxCommandEvent& event );
 
     PCB_EDIT_FRAME* GetParent() const { return (PCB_EDIT_FRAME*) wxDialog::GetParent(); }
 
 private:
-    void OnMiddleBtnPanEnbl( wxCommandEvent& event )
+    virtual void OnMiddleBtnPanEnbl( wxCommandEvent& event )
     {
         m_OptMiddleButtonPanLimited->Enable( m_MiddleButtonPANOpt->GetValue() );
     }
diff --git a/pcbnew/dialogs/dialog_global_deletion.h b/pcbnew/dialogs/dialog_global_deletion.h
index e38b495..956fa97 100644
--- a/pcbnew/dialogs/dialog_global_deletion.h
+++ b/pcbnew/dialogs/dialog_global_deletion.h
@@ -36,20 +36,20 @@ private:
     PCB_EDIT_FRAME* m_Parent;
     LAYER_NUM m_currentLayer;
 
-    void OnOkClick( wxCommandEvent& event )
+    virtual void OnOkClick( wxCommandEvent& event )
     {
         AcceptPcbDelete();
         EndModal(wxID_OK);
     }
 
-    void OnCancelClick( wxCommandEvent& event )
+    virtual void OnCancelClick( wxCommandEvent& event )
     {
         EndModal(wxID_CANCEL);
     }
 
     void AcceptPcbDelete();
-    void OnCheckDeleteTracks( wxCommandEvent& event );
-    void OnCheckDeleteModules( wxCommandEvent& event );
+    virtual void OnCheckDeleteTracks( wxCommandEvent& event );
+    virtual void OnCheckDeleteModules( wxCommandEvent& event );
 };
 
 #endif  // _DIALOG_GLOBAL_DELETION_H_
diff --git a/pcbnew/dialogs/dialog_global_edit_tracks_and_vias.h b/pcbnew/dialogs/dialog_global_edit_tracks_and_vias.h
index 6114239..f8de492 100644
--- a/pcbnew/dialogs/dialog_global_edit_tracks_and_vias.h
+++ b/pcbnew/dialogs/dialog_global_edit_tracks_and_vias.h
@@ -43,9 +43,9 @@ public:
     ~DIALOG_GLOBAL_EDIT_TRACKS_AND_VIAS() {};
 
     // Virtual event handlers, overided here
-    void OnSelectionClick( wxCommandEvent& event ){ m_OptionID = event.GetId(); }
-    void OnOkClick( wxCommandEvent& event );
-    void OnCancelClick( wxCommandEvent& event );
+    virtual void OnSelectionClick( wxCommandEvent& event ) { m_OptionID = event.GetId(); }
+    virtual void OnOkClick( wxCommandEvent& event ) ;
+    virtual void OnCancelClick( wxCommandEvent& event );
     void MyInit();
 };
 
diff --git a/pcbnew/dialogs/dialog_global_modules_fields_edition.cpp b/pcbnew/dialogs/dialog_global_modules_fields_edition.cpp
index 387e387..865bd6c 100644
--- a/pcbnew/dialogs/dialog_global_modules_fields_edition.cpp
+++ b/pcbnew/dialogs/dialog_global_modules_fields_edition.cpp
@@ -71,8 +71,8 @@ private:
     void initDialog();
 
     // event handlers
-    void OnOKClick( wxCommandEvent& event );
-    void OnCancelClick( wxCommandEvent& event )
+    virtual void OnOKClick( wxCommandEvent& event );
+    virtual void OnCancelClick( wxCommandEvent& event )
     {
         EndModal( wxID_CANCEL );
     }
diff --git a/pcbnew/dialogs/dialog_graphic_item_properties.cpp b/pcbnew/dialogs/dialog_graphic_item_properties.cpp
index edb2759..8fddca2 100644
--- a/pcbnew/dialogs/dialog_graphic_item_properties.cpp
+++ b/pcbnew/dialogs/dialog_graphic_item_properties.cpp
@@ -66,8 +66,8 @@ public:
 
 private:
     void initDlg();
-    void OnOkClick( wxCommandEvent& event );
-    void OnCancelClick( wxCommandEvent& event ) { event.Skip(); }
+    virtual void OnOkClick( wxCommandEvent& event );
+    virtual void OnCancelClick( wxCommandEvent& event ) { event.Skip(); }
     void OnLayerChoice( wxCommandEvent& event );
     bool itemValuesOK();
 };
diff --git a/pcbnew/dialogs/dialog_graphic_item_properties_for_Modedit.cpp b/pcbnew/dialogs/dialog_graphic_item_properties_for_Modedit.cpp
index 92c8d7c..03f67ab 100644
--- a/pcbnew/dialogs/dialog_graphic_item_properties_for_Modedit.cpp
+++ b/pcbnew/dialogs/dialog_graphic_item_properties_for_Modedit.cpp
@@ -66,8 +66,8 @@ public:
 
 private:
     void initDlg();
-    void OnOkClick( wxCommandEvent& event );
-    void OnCancelClick( wxCommandEvent& event ){ event.Skip(); }
+    virtual void OnOkClick( wxCommandEvent& event );
+    virtual void OnCancelClick( wxCommandEvent& event ) { event.Skip(); }
     void OnLayerChoice( wxCommandEvent& event );
     bool itemValuesOK();
 };
diff --git a/pcbnew/dialogs/dialog_graphic_items_options.h b/pcbnew/dialogs/dialog_graphic_items_options.h
index 5d14702..c563aa8 100644
--- a/pcbnew/dialogs/dialog_graphic_items_options.h
+++ b/pcbnew/dialogs/dialog_graphic_items_options.h
@@ -47,8 +47,8 @@ public:
 
 private:
     void initValues( );
-    void OnOkClick( wxCommandEvent& event );
-    void OnCancelClick( wxCommandEvent& event );
+    virtual void OnOkClick( wxCommandEvent& event );
+    virtual void OnCancelClick( wxCommandEvent& event );
 };
 
 #endif
diff --git a/pcbnew/dialogs/dialog_keepout_area_properties.cpp b/pcbnew/dialogs/dialog_keepout_area_properties.cpp
index 76da0e5..c60aeb1 100644
--- a/pcbnew/dialogs/dialog_keepout_area_properties.cpp
+++ b/pcbnew/dialogs/dialog_keepout_area_properties.cpp
@@ -70,8 +70,8 @@ private:
      */
     void initDialog();
 
-    void OnOkClick( wxCommandEvent& event );
-    void OnCancelClick( wxCommandEvent& event );
+    virtual void OnOkClick( wxCommandEvent& event );
+    virtual void OnCancelClick( wxCommandEvent& event );
 
     /**
      * Function AcceptOptionsForKeepOut
diff --git a/pcbnew/dialogs/dialog_layers_setup.cpp b/pcbnew/dialogs/dialog_layers_setup.cpp
index 048c6b5..9d69d0b 100644
--- a/pcbnew/dialogs/dialog_layers_setup.cpp
+++ b/pcbnew/dialogs/dialog_layers_setup.cpp
@@ -164,12 +164,12 @@ protected:
     int getLayerTypeIndex( LAYER_NUM layer );
 
 
-    void OnCancelButtonClick( wxCommandEvent& event );
-    void OnOkButtonClick( wxCommandEvent& event );
-    void OnCheckBox( wxCommandEvent& event );
-    void DenyChangeCheckBox( wxCommandEvent& event );
-    void OnPresetsChoice( wxCommandEvent& event );
-    void OnCopperLayersChoice( wxCommandEvent& event );
+    virtual void OnCancelButtonClick( wxCommandEvent& event );
+    virtual void OnOkButtonClick( wxCommandEvent& event );
+    virtual void OnCheckBox( wxCommandEvent& event );
+    virtual void DenyChangeCheckBox( wxCommandEvent& event );
+    virtual void OnPresetsChoice( wxCommandEvent& event );
+    virtual void OnCopperLayersChoice( wxCommandEvent& event );
 
     bool testLayerNames();
 
@@ -219,7 +219,7 @@ protected:
      * overrides the standard Layout() function so that the column titles can
      * be positioned using information in the flexgridsizer.
      */
-    bool Layout()
+    virtual bool Layout()
     {
         bool ret = DIALOG_LAYERS_SETUP_BASE::Layout();
 
diff --git a/pcbnew/dialogs/dialog_modedit_options.cpp b/pcbnew/dialogs/dialog_modedit_options.cpp
index 603db1d..4c0a2ba 100644
--- a/pcbnew/dialogs/dialog_modedit_options.cpp
+++ b/pcbnew/dialogs/dialog_modedit_options.cpp
@@ -43,8 +43,8 @@ public:
     DIALOG_MODEDIT_OPTIONS( FOOTPRINT_EDIT_FRAME* aParent );
 
 private:
-    void OnCancelClick( wxCommandEvent& event ) { EndModal( wxID_CANCEL ); }
-    void OnOkClick( wxCommandEvent& event );
+    virtual void OnCancelClick( wxCommandEvent& event ) { EndModal( wxID_CANCEL ); }
+    virtual void OnOkClick( wxCommandEvent& event );
 
     void initValues( );
 };
diff --git a/pcbnew/dialogs/dialog_move_exact.h b/pcbnew/dialogs/dialog_move_exact.h
index 812e0d3..a65ccec 100644
--- a/pcbnew/dialogs/dialog_move_exact.h
+++ b/pcbnew/dialogs/dialog_move_exact.h
@@ -47,13 +47,13 @@ private:
     /*!
      * Reset a text field to be 0 if it was exited while blank
      */
-    void OnTextFocusLost( wxFocusEvent& event );
+    virtual void OnTextFocusLost( wxFocusEvent& event );
 
-    void OnPolarChanged( wxCommandEvent& event );
-    void OnClear( wxCommandEvent& event );
+    virtual void OnPolarChanged( wxCommandEvent& event );
+    virtual void OnClear( wxCommandEvent& event );
 
-    void OnCancelClick( wxCommandEvent& event );
-    void OnOkClick( wxCommandEvent& event );
+    virtual void OnCancelClick( wxCommandEvent& event );
+    virtual void OnOkClick( wxCommandEvent& event );
 
     /**
      * Convert a given Cartesian point into a polar representation.
diff --git a/pcbnew/dialogs/dialog_netlist.h b/pcbnew/dialogs/dialog_netlist.h
index 33910fb..a704fb0 100644
--- a/pcbnew/dialogs/dialog_netlist.h
+++ b/pcbnew/dialogs/dialog_netlist.h
@@ -88,23 +88,23 @@ private:
     void loadFootprints( NETLIST& aNetlist );
 
     // Virtual event handlers:
-    void OnOpenNetlistClick( wxCommandEvent& event );
-    void OnReadNetlistFileClick( wxCommandEvent& event );
-    void OnTestFootprintsClick( wxCommandEvent& event );
-    void OnCompileRatsnestClick( wxCommandEvent& event );
-    void OnCancelClick( wxCommandEvent& event );
-    void OnSaveMessagesToFile( wxCommandEvent& aEvent );
-    void OnClickSilentMode( wxCommandEvent& event )
+    virtual void OnOpenNetlistClick( wxCommandEvent& event );
+    virtual void OnReadNetlistFileClick( wxCommandEvent& event );
+    virtual void OnTestFootprintsClick( wxCommandEvent& event );
+    virtual void OnCompileRatsnestClick( wxCommandEvent& event );
+    virtual void OnCancelClick( wxCommandEvent& event );
+    virtual void OnSaveMessagesToFile( wxCommandEvent& aEvent );
+    virtual void OnClickSilentMode( wxCommandEvent& event )
     {
         m_silentMode = m_checkBoxSilentMode->GetValue();
     }
-    void OnClickFullMessages( wxCommandEvent& event )
+    virtual void OnClickFullMessages( wxCommandEvent& event )
     {
         m_reportAll = m_checkBoxFullMessages->GetValue();
     }
 
-    void OnUpdateUISaveMessagesToFile( wxUpdateUIEvent& aEvent );
-    void OnUpdateUIValidNetlistFile( wxUpdateUIEvent& aEvent );
+    virtual void OnUpdateUISaveMessagesToFile( wxUpdateUIEvent& aEvent );
+    virtual void OnUpdateUIValidNetlistFile( wxUpdateUIEvent& aEvent );
 };
 
 
diff --git a/pcbnew/dialogs/dialog_non_copper_zones_properties.cpp b/pcbnew/dialogs/dialog_non_copper_zones_properties.cpp
index 35516e1..7fa813c 100644
--- a/pcbnew/dialogs/dialog_non_copper_zones_properties.cpp
+++ b/pcbnew/dialogs/dialog_non_copper_zones_properties.cpp
@@ -59,8 +59,8 @@ private:
     ZONE_SETTINGS*  m_ptr;
     ZONE_SETTINGS   m_settings;     // working copy of zone settings
 
-    void OnOkClick( wxCommandEvent& event );
-    void OnCancelClick( wxCommandEvent& event );
+    virtual void OnOkClick( wxCommandEvent& event );
+    virtual void OnCancelClick( wxCommandEvent& event );
     void Init();
 
 public:
diff --git a/pcbnew/dialogs/dialog_orient_footprints.cpp b/pcbnew/dialogs/dialog_orient_footprints.cpp
index 4c6dd83..d7847ec 100644
--- a/pcbnew/dialogs/dialog_orient_footprints.cpp
+++ b/pcbnew/dialogs/dialog_orient_footprints.cpp
@@ -72,8 +72,8 @@ public:
 private:
     void init();
 
-    void OnOkClick( wxCommandEvent& event );
-    void OnCancelClick( wxCommandEvent& event );
+    virtual void OnOkClick( wxCommandEvent& event );
+    virtual void OnCancelClick( wxCommandEvent& event );
 };
 
 
diff --git a/pcbnew/dialogs/dialog_pad_properties.cpp b/pcbnew/dialogs/dialog_pad_properties.cpp
index 4842632..0eddf02 100644
--- a/pcbnew/dialogs/dialog_pad_properties.cpp
+++ b/pcbnew/dialogs/dialog_pad_properties.cpp
@@ -132,23 +132,23 @@ private:
     // event handlers:
     void OnResize( wxSizeEvent& event );
 
-    void OnPadShapeSelection( wxCommandEvent& event );
-    void OnDrillShapeSelected( wxCommandEvent& event );
+    virtual void OnPadShapeSelection( wxCommandEvent& event );
+    virtual void OnDrillShapeSelected( wxCommandEvent& event );
 
-    void PadOrientEvent( wxCommandEvent& event );
-    void PadTypeSelected( wxCommandEvent& event );
+    virtual void PadOrientEvent( wxCommandEvent& event );
+    virtual void PadTypeSelected( wxCommandEvent& event );
 
-    void OnSetLayers( wxCommandEvent& event );
-    void OnCancelButtonClick( wxCommandEvent& event );
-    void OnPaintShowPanel( wxPaintEvent& event );
+    virtual void OnSetLayers( wxCommandEvent& event );
+    virtual void OnCancelButtonClick( wxCommandEvent& event );
+    virtual void OnPaintShowPanel( wxPaintEvent& event );
 
     /// Called when a dimension has changed.
     /// Update the graphical pad shown in the panel.
-    void OnValuesChanged( wxCommandEvent& event );
+    virtual void OnValuesChanged( wxCommandEvent& event );
 
     /// Updates the different parameters for the component being edited.
     /// Fired from the OK button click.
-    void PadPropertiesAccept( wxCommandEvent& event );
+    virtual void PadPropertiesAccept( wxCommandEvent& event );
 };
 
 
diff --git a/pcbnew/dialogs/dialog_pcb_text_properties.cpp b/pcbnew/dialogs/dialog_pcb_text_properties.cpp
index eca91a1..07e9c84 100644
--- a/pcbnew/dialogs/dialog_pcb_text_properties.cpp
+++ b/pcbnew/dialogs/dialog_pcb_text_properties.cpp
@@ -61,9 +61,9 @@ private:
     void MyInit();
 
     // Handlers for DIALOG_PCB_TEXT_PROPERTIES_BASE events.
-    void OnClose( wxCloseEvent& event );
-    void OnCancelClick( wxCommandEvent& event );
-    void OnOkClick( wxCommandEvent& event );
+    virtual void OnClose( wxCloseEvent& event );
+    virtual void OnCancelClick( wxCommandEvent& event );
+    virtual void OnOkClick( wxCommandEvent& event );
 };
 
 
diff --git a/pcbnew/dialogs/dialog_plot.h b/pcbnew/dialogs/dialog_plot.h
index 47f4692..d405c71 100644
--- a/pcbnew/dialogs/dialog_plot.h
+++ b/pcbnew/dialogs/dialog_plot.h
@@ -59,15 +59,15 @@ private:
 
     // Event called functions
     void        Init_Dialog();
-    void        Plot( wxCommandEvent& event );
-    void        OnQuit( wxCommandEvent& event );
-    void        OnClose( wxCloseEvent& event );
-    void        OnOutputDirectoryBrowseClicked( wxCommandEvent& event );
-    void        OnRightClick( wxMouseEvent& event );
-    void        OnPopUpLayers( wxCommandEvent& event );
-    void        SetPlotFormat( wxCommandEvent& event );
-    void        OnSetScaleOpt( wxCommandEvent& event );
-    void        CreateDrillFile( wxCommandEvent& event );
+    virtual void        Plot( wxCommandEvent& event );
+    virtual void        OnQuit( wxCommandEvent& event );
+    virtual void        OnClose( wxCloseEvent& event );
+    virtual void        OnOutputDirectoryBrowseClicked( wxCommandEvent& event );
+    virtual void        OnRightClick( wxMouseEvent& event );
+    virtual void        OnPopUpLayers( wxCommandEvent& event );
+    virtual void        SetPlotFormat( wxCommandEvent& event );
+    virtual void        OnSetScaleOpt( wxCommandEvent& event );
+    virtual void        CreateDrillFile( wxCommandEvent& event );
 
     // orther functions
     void        applyPlotSettings();
diff --git a/pcbnew/dialogs/dialog_print_for_modedit.cpp b/pcbnew/dialogs/dialog_print_for_modedit.cpp
index 72504d5..3bc16ff 100644
--- a/pcbnew/dialogs/dialog_print_for_modedit.cpp
+++ b/pcbnew/dialogs/dialog_print_for_modedit.cpp
@@ -59,17 +59,17 @@ private:
     PCB_BASE_FRAME* m_parent;
     wxConfigBase*       m_config;
 
-    void OnCloseWindow( wxCloseEvent& event );
+    virtual void OnCloseWindow( wxCloseEvent& event );
 
     /// Open a dialog box for printer setup (printer options, page size ...)
-    void OnPageSetup( wxCommandEvent& event );
+    virtual void OnPageSetup( wxCommandEvent& event );
 
-    void OnPrintPreview( wxCommandEvent& event );
+    virtual void OnPrintPreview( wxCommandEvent& event );
 
     /// Called on activate Print button
-    void OnPrintButtonClick( wxCommandEvent& event );
+    virtual void OnPrintButtonClick( wxCommandEvent& event );
 
-    void OnButtonCancelClick( wxCommandEvent& event ) { Close(); }
+    virtual void OnButtonCancelClick( wxCommandEvent& event ) { Close(); }
     void InitValues( );
 };
 
diff --git a/pcbnew/dialogs/dialog_print_using_printer.cpp b/pcbnew/dialogs/dialog_print_using_printer.cpp
index 222c98e..5d706f6 100644
--- a/pcbnew/dialogs/dialog_print_using_printer.cpp
+++ b/pcbnew/dialogs/dialog_print_using_printer.cpp
@@ -85,13 +85,13 @@ private:
     wxCheckBox*     m_BoxSelectLayer[LAYER_ID_COUNT];
     static bool     m_ExcludeEdgeLayer;
 
-    void OnCloseWindow( wxCloseEvent& event );
-    void OnPageSetup( wxCommandEvent& event );
-    void OnPrintPreview( wxCommandEvent& event );
-    void OnPrintButtonClick( wxCommandEvent& event );
-    void OnScaleSelectionClick( wxCommandEvent& event );
+    virtual void OnCloseWindow( wxCloseEvent& event );
+    virtual void OnPageSetup( wxCommandEvent& event );
+    virtual void OnPrintPreview( wxCommandEvent& event );
+    virtual void OnPrintButtonClick( wxCommandEvent& event );
+    virtual void OnScaleSelectionClick( wxCommandEvent& event );
 
-    void OnButtonCancelClick( wxCommandEvent& event ) { Close(); }
+    virtual void OnButtonCancelClick( wxCommandEvent& event ) { Close(); }
     void SetPrintParameters( );
     void SetPenWidth();
     void initValues( );
diff --git a/pcbnew/dialogs/dialog_set_grid.cpp b/pcbnew/dialogs/dialog_set_grid.cpp
index 689b803..3efd355 100644
--- a/pcbnew/dialogs/dialog_set_grid.cpp
+++ b/pcbnew/dialogs/dialog_set_grid.cpp
@@ -46,9 +46,9 @@ public:
         int* aFastGrid1, int* aFastGrid2, const wxArrayString& aGridChoices );
 
 private:
-    void            OnResetGridOrgClick( wxCommandEvent& event );
-    void            OnCancelClick( wxCommandEvent& event );
-    void            OnOkClick( wxCommandEvent& event );
+    virtual void            OnResetGridOrgClick( wxCommandEvent& event );
+    virtual void            OnCancelClick( wxCommandEvent& event );
+    virtual void            OnOkClick( wxCommandEvent& event );
 
     EDA_UNITS_T&    m_callers_grid_units;
     EDA_UNITS_T     m_callers_board_units;
diff --git a/pcbnew/dialogs/dialog_track_via_size.h b/pcbnew/dialogs/dialog_track_via_size.h
index b84d77f..c738a52 100644
--- a/pcbnew/dialogs/dialog_track_via_size.h
+++ b/pcbnew/dialogs/dialog_track_via_size.h
@@ -50,9 +50,9 @@ protected:
     bool check();
 
     // Handlers for DIALOG_TRACK_VIA_SIZE_BASE events.
-    void onClose( wxCloseEvent& aEvent );
-    void onOkClick( wxCommandEvent& aEvent );
-    void onCancelClick( wxCommandEvent& aEvent );
+    virtual void onClose( wxCloseEvent& aEvent );
+    virtual void onOkClick( wxCommandEvent& aEvent );
+    virtual void onCancelClick( wxCommandEvent& aEvent );
 };
 
 #endif // __dialog_track_via_size__
diff --git a/pcbnew/dialogs/wizard_add_fplib.h b/pcbnew/dialogs/wizard_add_fplib.h
index 867d544..8be8850 100644
--- a/pcbnew/dialogs/wizard_add_fplib.h
+++ b/pcbnew/dialogs/wizard_add_fplib.h
@@ -177,18 +177,18 @@ private:
                           const wxString&      aPluginName );
 
     // Virtual event functions, from WIZARD_FPLIB_TABLE_BASE
-    void OnFinish( wxWizardEvent& event ) { event.Skip(); }
-    void OnPageChanged( wxWizardEvent& event );
-    void OnPageChanging( wxWizardEvent& event );
-    void OnAddEVariable( wxCommandEvent& event );
-    void OnRemoveEVariable( wxCommandEvent& event );
-    void OnAddFpLibs( wxCommandEvent& event );
-    void OnRemoveFpLibs( wxCommandEvent& event );
-    void OnPathManagementSelection( wxCommandEvent& event );
-    void OnSelectEnvVarCell( wxGridEvent& event );
-    void OnPluginSelection( wxCommandEvent& event );
+    virtual void OnFinish( wxWizardEvent& event ) { event.Skip(); }
+    virtual void OnPageChanged( wxWizardEvent& event );
+    virtual void OnPageChanging( wxWizardEvent& event );
+    virtual void OnAddEVariable( wxCommandEvent& event );
+    virtual void OnRemoveEVariable( wxCommandEvent& event );
+    virtual void OnAddFpLibs( wxCommandEvent& event );
+    virtual void OnRemoveFpLibs( wxCommandEvent& event );
+    virtual void OnPathManagementSelection( wxCommandEvent& event );
+    virtual void OnSelectEnvVarCell( wxGridEvent& event );
+    virtual void OnPluginSelection( wxCommandEvent& event );
 #ifdef BUILD_GITHUB_PLUGIN
-    void OnGithubLibsList( wxCommandEvent& event );
+    virtual void OnGithubLibsList( wxCommandEvent& event );
 #endif
     bool ValidateOptions();
 };
diff --git a/pcbnew/dimension.cpp b/pcbnew/dimension.cpp
index 043dc10..f7bb8fd 100644
--- a/pcbnew/dimension.cpp
+++ b/pcbnew/dimension.cpp
@@ -94,8 +94,8 @@ public:
 
 
 private:
-    void OnCancelClick( wxCommandEvent& event );
-    void OnOKClick( wxCommandEvent& event );
+    virtual void OnCancelClick( wxCommandEvent& event );
+    virtual void OnOKClick( wxCommandEvent& event );
 };
 
 
diff --git a/pcbnew/eagle_plugin.h b/pcbnew/eagle_plugin.h
index e9bde95..d228967 100644
--- a/pcbnew/eagle_plugin.h
+++ b/pcbnew/eagle_plugin.h
@@ -79,22 +79,22 @@ class EAGLE_PLUGIN : public PLUGIN
 public:
 
     //-----<PUBLIC PLUGIN API>--------------------------------------------------
-    const wxString PluginName() const;
+    virtual const wxString PluginName() const;
 
-    BOARD* Load( const wxString& aFileName, BOARD* aAppendToMe,  const PROPERTIES* aProperties = NULL );
+    virtual BOARD* Load( const wxString& aFileName, BOARD* aAppendToMe,  const PROPERTIES* aProperties = NULL );
 
-    const wxString GetFileExtension() const;
+    virtual const wxString GetFileExtension() const;
 
-    wxArrayString FootprintEnumerate( const wxString& aLibraryPath, const PROPERTIES* aProperties = NULL);
+    virtual wxArrayString FootprintEnumerate( const wxString& aLibraryPath, const PROPERTIES* aProperties = NULL);
 
-    MODULE* FootprintLoad( const wxString& aLibraryPath, const wxString& aFootprintName, const PROPERTIES* aProperties = NULL );
+    virtual MODULE* FootprintLoad( const wxString& aLibraryPath, const wxString& aFootprintName, const PROPERTIES* aProperties = NULL );
 
-    bool IsFootprintLibWritable( const wxString& aLibraryPath )
+    virtual bool IsFootprintLibWritable( const wxString& aLibraryPath )
     {
         return false;   // until someone writes others like FootprintSave(), etc.
     }
 
-    void FootprintLibOptions( PROPERTIES* aProperties ) const;
+    virtual void FootprintLibOptions( PROPERTIES* aProperties ) const;
 
 /*
     void Save( const wxString& aFileName, BOARD* aBoard, const PROPERTIES* aProperties = NULL );
diff --git a/pcbnew/exporters/gen_modules_placefile.cpp b/pcbnew/exporters/gen_modules_placefile.cpp
index f2ed9a4..2504084 100644
--- a/pcbnew/exporters/gen_modules_placefile.cpp
+++ b/pcbnew/exporters/gen_modules_placefile.cpp
@@ -102,13 +102,13 @@ private:
     static int m_unitsOpt;
     static int m_fileOpt;
 
-    void OnInitDialog( wxInitDialogEvent& event );
-    void OnOutputDirectoryBrowseClicked( wxCommandEvent& event );
-    void OnCancelButton( wxCommandEvent& event )
+    virtual void OnInitDialog( wxInitDialogEvent& event );
+    virtual void OnOutputDirectoryBrowseClicked( wxCommandEvent& event );
+    virtual void OnCancelButton( wxCommandEvent& event )
     {
         EndModal( wxID_CANCEL );
     }
-    void OnOKButton( wxCommandEvent& event );
+    virtual void OnOKButton( wxCommandEvent& event );
 
     bool CreateFiles();
 
diff --git a/pcbnew/footprint_wizard_frame.h b/pcbnew/footprint_wizard_frame.h
index e90cd00..5071ebb 100644
--- a/pcbnew/footprint_wizard_frame.h
+++ b/pcbnew/footprint_wizard_frame.h
@@ -69,7 +69,7 @@ public:
 
 private:
 
-    void                OnSize( wxSizeEvent& event );
+    virtual void        OnSize( wxSizeEvent& event );
 
     /**
      * Function ExportSelectedFootprint();
@@ -126,18 +126,18 @@ private:
     void                DisplayWizardInfos();
 
 
-    void                RedrawActiveWindow( wxDC* DC, bool EraseBg );
-    void                OnCloseWindow( wxCloseEvent& Event );
-    void                ReCreateHToolbar();
-    void                ReCreateVToolbar();
-    void                OnLeftClick( wxDC* DC, const wxPoint& MousePos );
+    virtual void        RedrawActiveWindow( wxDC* DC, bool EraseBg );
+    virtual void        OnCloseWindow( wxCloseEvent& Event );
+    virtual void        ReCreateHToolbar();
+    virtual void        ReCreateVToolbar();
+    virtual void        OnLeftClick( wxDC* DC, const wxPoint& MousePos );
     void                ClickOnPageList( wxCommandEvent& event );
     void                OnSetRelativeOffset( wxCommandEvent& event );
 
-    bool                GeneralControl( wxDC* aDC, const wxPoint& aPosition, int aHotKey = 0 );
+    virtual bool        GeneralControl( wxDC* aDC, const wxPoint& aPosition, int aHotKey = 0 );
 
-    void                LoadSettings( wxConfigBase* aCfg ); // override virtual
-    void                SaveSettings( wxConfigBase* aCfg ); // override virtual
+    virtual void        LoadSettings( wxConfigBase* aCfg );
+    virtual void        SaveSettings( wxConfigBase* aCfg );
 
 
     /**
@@ -152,13 +152,13 @@ private:
     void                ParametersUpdated( wxGridEvent& event );
 
 
-    bool                OnRightClick( const wxPoint& MousePos, wxMenu* PopMenu );
+    virtual bool        OnRightClick( const wxPoint& MousePos, wxMenu* PopMenu );
 
     /**
      * Function Show3D_Frame (virtual)
      * displays 3D view of the footprint (module) being edited.
      */
-    void                Show3D_Frame( wxCommandEvent& event );
+    virtual void        Show3D_Frame( wxCommandEvent& event );
 
     /**
      * Function Update3D_Frame
@@ -173,9 +173,9 @@ private:
      * Virtual functions, not used here, but needed by PCB_BASE_FRAME
      * (virtual pure functions )
      */
-    void OnLeftDClick( wxDC*, const wxPoint& ) {}
-    void SaveCopyInUndoList( BOARD_ITEM*, UNDO_REDO_T, const wxPoint& ) {}
-    void SaveCopyInUndoList( const PICKED_ITEMS_LIST&, UNDO_REDO_T, const wxPoint& ) {}
+    virtual void OnLeftDClick( wxDC*, const wxPoint& ) {}
+    virtual void SaveCopyInUndoList( BOARD_ITEM*, UNDO_REDO_T, const wxPoint& ) {}
+    virtual void SaveCopyInUndoList( const PICKED_ITEMS_LIST&, UNDO_REDO_T, const wxPoint& ) {}
 
 
     DECLARE_EVENT_TABLE()
diff --git a/pcbnew/github/github_plugin.h b/pcbnew/github/github_plugin.h
index 5a041d0..d7e6cb5 100644
--- a/pcbnew/github/github_plugin.h
+++ b/pcbnew/github/github_plugin.h
@@ -163,33 +163,33 @@ class GITHUB_PLUGIN : public PCB_IO
 {
 public:
     //-----<PLUGIN API>----------------------------------------------------------
-    const wxString PluginName() const;
+    virtual const wxString PluginName() const;
 
-    const wxString GetFileExtension() const;
+    virtual const wxString GetFileExtension() const;
 
-    wxArrayString FootprintEnumerate( const wxString& aLibraryPath,
+    virtual wxArrayString FootprintEnumerate( const wxString& aLibraryPath,
             const PROPERTIES* aProperties = NULL );
 
-    MODULE* FootprintLoad( const wxString& aLibraryPath,
+    virtual MODULE* FootprintLoad( const wxString& aLibraryPath,
             const wxString& aFootprintName, const PROPERTIES* aProperties );
 
-    void FootprintSave( const wxString& aLibraryPath, const MODULE* aFootprint,
+    virtual void FootprintSave( const wxString& aLibraryPath, const MODULE* aFootprint,
             const PROPERTIES* aProperties = NULL );
 
-    void FootprintDelete( const wxString& aLibraryPath, const wxString& aFootprintName,
+    virtual void FootprintDelete( const wxString& aLibraryPath, const wxString& aFootprintName,
             const PROPERTIES* aProperties = NULL );
 
-    bool IsFootprintLibWritable( const wxString& aLibraryPath );
+    virtual bool IsFootprintLibWritable( const wxString& aLibraryPath );
 
-    void FootprintLibOptions( PROPERTIES* aListToAppendTo ) const;
+    virtual void FootprintLibOptions( PROPERTIES* aListToAppendTo ) const;
 
     // Since I derive from PCB_IO, I have to implement this, else I'd inherit his, which is bad since
     // my lib_path is not his.  Note: it is impossible to create a Github library, but can the C.O.W. portion.
-    void FootprintLibCreate( const wxString& aLibraryPath, const PROPERTIES* aProperties );
+    virtual void FootprintLibCreate( const wxString& aLibraryPath, const PROPERTIES* aProperties );
 
     // Since I derive from PCB_IO, I have to implement this, else I'd inherit his, which is bad since
     // my lib_path is not his.  Note: it is impossible to delete a Github library, but can the C.O.W portion.
-    bool FootprintLibDelete( const wxString& aLibraryPath, const PROPERTIES* aProperties );
+    virtual bool FootprintLibDelete( const wxString& aLibraryPath, const PROPERTIES* aProperties );
 
     //-----</PLUGIN API>---------------------------------------------------------
 
diff --git a/pcbnew/globaleditpad.cpp b/pcbnew/globaleditpad.cpp
index 9a38f70..5b307cd 100644
--- a/pcbnew/globaleditpad.cpp
+++ b/pcbnew/globaleditpad.cpp
@@ -59,9 +59,9 @@ public:
     DIALOG_GLOBAL_PADS_EDITION( PCB_BASE_FRAME* aParent, D_PAD* aPad );
 
 private:
-    void InstallPadEditor( wxCommandEvent& event );
-    void PadPropertiesAccept( wxCommandEvent& event );
-    void OnCancelClick( wxCommandEvent& event );
+    virtual void InstallPadEditor( wxCommandEvent& event );
+    virtual void PadPropertiesAccept( wxCommandEvent& event );
+    virtual void OnCancelClick( wxCommandEvent& event );
 };
 
 
diff --git a/pcbnew/gpcb_plugin.h b/pcbnew/gpcb_plugin.h
index 4ae6556..694d34b 100644
--- a/pcbnew/gpcb_plugin.h
+++ b/pcbnew/gpcb_plugin.h
@@ -52,28 +52,28 @@ public:
 
     //-----<PLUGIN API>---------------------------------------------------------
 
-    const wxString PluginName() const
+    virtual const wxString PluginName() const
     {
         return wxT( "Geda PCB" );
     }
 
-    const wxString GetFileExtension() const
+    virtual const wxString GetFileExtension() const
     {
         return wxT( "fp" );
     }
 
-    wxArrayString FootprintEnumerate( const wxString& aLibraryPath,
+    virtual wxArrayString FootprintEnumerate( const wxString& aLibraryPath,
                                       const PROPERTIES* aProperties = NULL);
 
-    MODULE* FootprintLoad( const wxString& aLibraryPath, const wxString& aFootprintName,
+    virtual MODULE* FootprintLoad( const wxString& aLibraryPath, const wxString& aFootprintName,
                            const PROPERTIES* aProperties = NULL );
 
-    void FootprintDelete( const wxString& aLibraryPath, const wxString& aFootprintName,
+    virtual void FootprintDelete( const wxString& aLibraryPath, const wxString& aFootprintName,
                           const PROPERTIES* aProperties = NULL );
 
-    bool FootprintLibDelete( const wxString& aLibraryPath, const PROPERTIES* aProperties = NULL );
+    virtual bool FootprintLibDelete( const wxString& aLibraryPath, const PROPERTIES* aProperties = NULL );
 
-    bool IsFootprintLibWritable( const wxString& aLibraryPath );
+    virtual bool IsFootprintLibWritable( const wxString& aLibraryPath );
 
     //-----</PLUGIN API>--------------------------------------------------------
 
diff --git a/pcbnew/import_dxf/dialog_dxf_import.h b/pcbnew/import_dxf/dialog_dxf_import.h
index 2785732..49c4498 100644
--- a/pcbnew/import_dxf/dialog_dxf_import.h
+++ b/pcbnew/import_dxf/dialog_dxf_import.h
@@ -52,7 +52,7 @@ private:
     static LAYER_NUM     m_layer;
 
     // Virtual event handlers
-    void OnCancelClick( wxCommandEvent& event ) { event.Skip(); }
-    void OnOKClick( wxCommandEvent& event );
-    void OnBrowseDxfFiles( wxCommandEvent& event );
+    virtual void OnCancelClick( wxCommandEvent& event ) { event.Skip(); }
+    virtual void OnOKClick( wxCommandEvent& event );
+    virtual void OnBrowseDxfFiles( wxCommandEvent& event );
 };
diff --git a/pcbnew/import_dxf/dxf2brd_items.h b/pcbnew/import_dxf/dxf2brd_items.h
index c95ec09..53de328 100644
--- a/pcbnew/import_dxf/dxf2brd_items.h
+++ b/pcbnew/import_dxf/dxf2brd_items.h
@@ -121,9 +121,9 @@ private:
     virtual void addPolyline( const DRW_Polyline& aData );
     virtual void addSpline( const DRW_Spline* aData ) {}
     virtual void addKnot( const DRW_Entity&) {}
-    virtual void addInsert( const DRW_Insert& aData ){}
-    virtual void addTrace( const DRW_Trace& aData ){}
-    virtual void addSolid( const DRW_Solid& aData ){}
+    virtual void addInsert( const DRW_Insert& aData ) {}
+    virtual void addTrace( const DRW_Trace& aData ) {}
+    virtual void addSolid( const DRW_Solid& aData ) {}
     virtual void addMText( const DRW_MText& aData);
     virtual void addDimAlign( const DRW_DimAligned* aData ) {}
     virtual void addDimLinear( const DRW_DimLinear* aData ) {}
diff --git a/pcbnew/kicad_plugin.h b/pcbnew/kicad_plugin.h
index 1655293..fa20e70 100644
--- a/pcbnew/kicad_plugin.h
+++ b/pcbnew/kicad_plugin.h
@@ -89,12 +89,12 @@ public:
 
     //-----<PLUGIN API>---------------------------------------------------------
 
-    const wxString PluginName() const
+    virtual const wxString PluginName() const
     {
         return wxT( "KiCad" );
     }
 
-    const wxString GetFileExtension() const
+    virtual const wxString GetFileExtension() const
     {
         // Would have used wildcards_and_files_ext.cpp's KiCadPcbFileExtension,
         // but to be pure, a plugin should not assume that it will always be linked
@@ -103,26 +103,26 @@ public:
         return wxT( "kicad_pcb" );
     }
 
-    void Save( const wxString& aFileName, BOARD* aBoard,
-               const PROPERTIES* aProperties = NULL );          // overload
+    virtual void Save( const wxString& aFileName, BOARD* aBoard,
+               const PROPERTIES* aProperties = NULL );
 
-    BOARD* Load( const wxString& aFileName, BOARD* aAppendToMe, const PROPERTIES* aProperties = NULL );
+    virtual BOARD* Load( const wxString& aFileName, BOARD* aAppendToMe, const PROPERTIES* aProperties = NULL );
 
-    wxArrayString FootprintEnumerate( const wxString& aLibraryPath, const PROPERTIES* aProperties = NULL);
+    virtual wxArrayString FootprintEnumerate( const wxString& aLibraryPath, const PROPERTIES* aProperties = NULL);
 
-    MODULE* FootprintLoad( const wxString& aLibraryPath, const wxString& aFootprintName,
+    virtual MODULE* FootprintLoad( const wxString& aLibraryPath, const wxString& aFootprintName,
                            const PROPERTIES* aProperties = NULL );
 
-    void FootprintSave( const wxString& aLibraryPath, const MODULE* aFootprint,
+    virtual void FootprintSave( const wxString& aLibraryPath, const MODULE* aFootprint,
                         const PROPERTIES* aProperties = NULL );
 
-    void FootprintDelete( const wxString& aLibraryPath, const wxString& aFootprintName, const PROPERTIES* aProperties = NULL );
+    virtual void FootprintDelete( const wxString& aLibraryPath, const wxString& aFootprintName, const PROPERTIES* aProperties = NULL );
 
-    void FootprintLibCreate( const wxString& aLibraryPath, const PROPERTIES* aProperties = NULL);
+    virtual void FootprintLibCreate( const wxString& aLibraryPath, const PROPERTIES* aProperties = NULL);
 
-    bool FootprintLibDelete( const wxString& aLibraryPath, const PROPERTIES* aProperties = NULL );
+    virtual bool FootprintLibDelete( const wxString& aLibraryPath, const PROPERTIES* aProperties = NULL );
 
-    bool IsFootprintLibWritable( const wxString& aLibraryPath );
+    virtual bool IsFootprintLibWritable( const wxString& aLibraryPath );
 
     //-----</PLUGIN API>--------------------------------------------------------
 
diff --git a/pcbnew/legacy_plugin.h b/pcbnew/legacy_plugin.h
index 519eecf..ce6f7f4 100644
--- a/pcbnew/legacy_plugin.h
+++ b/pcbnew/legacy_plugin.h
@@ -67,17 +67,17 @@ public:
 
     //-----<PLUGIN IMPLEMENTATION>----------------------------------------------
 
-    const wxString PluginName() const
+    virtual const wxString PluginName() const
     {
         return wxT( "KiCad-Legacy" );
     }
 
-    const wxString GetFileExtension() const
+    virtual const wxString GetFileExtension() const
     {
         return wxT( "brd" );
     }
 
-    BOARD* Load( const wxString& aFileName, BOARD* aAppendToMe, const PROPERTIES* aProperties = NULL );
+    virtual BOARD* Load( const wxString& aFileName, BOARD* aAppendToMe, const PROPERTIES* aProperties = NULL );
 
     /* we let go of "save" support when the number of CU layers were expanded from 16 to 32.
     void Save( const wxString& aFileName, BOARD* aBoard, const PROPERTIES* aProperties = NULL );
@@ -89,14 +89,14 @@ public:
     void FootprintLibCreate( const wxString& aLibraryPath, const PROPERTIES* aProperties = NULL );
     */
 
-    wxArrayString FootprintEnumerate( const wxString& aLibraryPath, const PROPERTIES* aProperties = NULL);
+    virtual wxArrayString FootprintEnumerate( const wxString& aLibraryPath, const PROPERTIES* aProperties = NULL);
 
-    MODULE* FootprintLoad( const wxString& aLibraryPath, const wxString& aFootprintName,
+    virtual MODULE* FootprintLoad( const wxString& aLibraryPath, const wxString& aFootprintName,
                                     const PROPERTIES* aProperties = NULL );
 
-    bool FootprintLibDelete( const wxString& aLibraryPath, const PROPERTIES* aProperties = NULL );
+    virtual bool FootprintLibDelete( const wxString& aLibraryPath, const PROPERTIES* aProperties = NULL );
 
-    bool IsFootprintLibWritable( const wxString& aLibraryPath );
+    virtual bool IsFootprintLibWritable( const wxString& aLibraryPath );
 
     //-----</PLUGIN IMPLEMENTATION>---------------------------------------------
 
diff --git a/pcbnew/module_editor_frame.h b/pcbnew/module_editor_frame.h
index 389a0ee..60e3e96 100644
--- a/pcbnew/module_editor_frame.h
+++ b/pcbnew/module_editor_frame.h
@@ -54,14 +54,14 @@ public:
      */
     static const wxChar* GetFootprintEditorFrameName();
 
-    BOARD_DESIGN_SETTINGS& GetDesignSettings() const;           // overload PCB_BASE_FRAME, get parent's
-    void SetDesignSettings( const BOARD_DESIGN_SETTINGS& aSettings );  // overload
+    virtual BOARD_DESIGN_SETTINGS& GetDesignSettings() const;
+    virtual void SetDesignSettings( const BOARD_DESIGN_SETTINGS& aSettings );
 
-    const PCB_PLOT_PARAMS& GetPlotSettings() const;             // overload PCB_BASE_FRAME, get parent's
-    void SetPlotSettings( const PCB_PLOT_PARAMS& aSettings );   // overload
+    virtual const PCB_PLOT_PARAMS& GetPlotSettings() const;
+    virtual void SetPlotSettings( const PCB_PLOT_PARAMS& aSettings );
 
-    void LoadSettings( wxConfigBase* aCfg );         // Virtual
-    void SaveSettings( wxConfigBase* aCfg );         // Virtual
+    virtual void LoadSettings( wxConfigBase* aCfg );
+    virtual void SaveSettings( wxConfigBase* aCfg );
 
     /**
      * Function GetConfigurationSettings
@@ -79,7 +79,7 @@ public:
 
     void InstallOptionsFrame( const wxPoint& pos );
 
-    void OnCloseWindow( wxCloseEvent& Event );
+    virtual void OnCloseWindow( wxCloseEvent& Event );
     void CloseModuleEditor( wxCommandEvent& Event );
 
     void Process_Special_Functions( wxCommandEvent& event );
@@ -90,25 +90,25 @@ public:
      * Function RedrawActiveWindoow
      * draws the footprint editor BOARD, and others elements such as axis and grid.
      */
-    void RedrawActiveWindow( wxDC* DC, bool EraseBg );
+    virtual void RedrawActiveWindow( wxDC* DC, bool EraseBg );
 
     /**
      * Function ReCreateHToolbar
      * create the main horizontal toolbar for the footprint editor
      */
-    void ReCreateHToolbar();
+    virtual void ReCreateHToolbar();
 
-    void ReCreateVToolbar();
+    virtual void ReCreateVToolbar();
     void ReCreateOptToolbar();
-    void ReCreateAuxiliaryToolbar();
-    void OnLeftClick( wxDC* DC, const wxPoint& MousePos );
+    virtual void ReCreateAuxiliaryToolbar();
+    virtual void OnLeftClick( wxDC* DC, const wxPoint& MousePos );
 
     /**
      * Function OnLeftDClick
      * handles the double click in the footprint editor:
      * If the double clicked item is editable: call the corresponding editor.
      */
-    void OnLeftDClick( wxDC* DC, const wxPoint& MousePos );
+    virtual void OnLeftDClick( wxDC* DC, const wxPoint& MousePos );
 
     /**
      * Function OnRightClick
@@ -116,14 +116,14 @@ public:
      * Create the pop up menu
      * After this menu is built, the standard ZOOM menu is added
      */
-    bool OnRightClick( const wxPoint& MousePos, wxMenu* PopMenu );
+    virtual bool OnRightClick( const wxPoint& MousePos, wxMenu* PopMenu );
 
     /**
      * @brief (Re)Create the menubar for the module editor frame
      */
-    void ReCreateMenuBar();
+    virtual void ReCreateMenuBar();
 
-    void ToolOnRightClick( wxCommandEvent& event );
+    virtual void ToolOnRightClick( wxCommandEvent& event );
     void OnSelectOptionToolbar( wxCommandEvent& event );
 
     /**
@@ -143,7 +143,7 @@ public:
      * case insensitive
      * </p>
      */
-    bool OnHotKey( wxDC* aDC, int aHotKey, const wxPoint& aPosition, EDA_ITEM* aItem = NULL );
+    virtual bool OnHotKey( wxDC* aDC, int aHotKey, const wxPoint& aPosition, EDA_ITEM* aItem = NULL );
 
     BOARD_ITEM* PrepareItemForHotkey( bool failIfCurrentlyEdited );
 
@@ -158,9 +158,9 @@ public:
      * Function Show3D_Frame
      * displays 3D view of the footprint (module) being edited.
      */
-    void Show3D_Frame( wxCommandEvent& event );
+    virtual void Show3D_Frame( wxCommandEvent& event );
 
-    bool GeneralControl( wxDC* aDC, const wxPoint& aPosition, int aHotKey = 0 );
+    virtual bool GeneralControl( wxDC* aDC, const wxPoint& aPosition, int aHotKey = 0 );
     void OnVerticalToolbar( wxCommandEvent& aEvent );
 
     void OnUpdateVerticalToolbar( wxUpdateUIEvent& aEvent );
@@ -174,7 +174,7 @@ public:
     void OnUpdateSelectCurrentLib( wxUpdateUIEvent& aEvent );
 
     ///> @copydoc PCB_BASE_EDIT_FRAME::OnEditItemRequest()
-    void OnEditItemRequest( wxDC* aDC, BOARD_ITEM* aItem );
+    virtual void OnEditItemRequest( wxDC* aDC, BOARD_ITEM* aItem );
 
     /**
      * Function LoadModuleFromBoard
@@ -294,7 +294,7 @@ public:
      *  - Place the current edited library component in Redo list
      *  - Get old version of the current edited library component
      */
-    void RestoreCopyFromUndoList( wxCommandEvent& aEvent );
+    virtual void RestoreCopyFromUndoList( wxCommandEvent& aEvent );
 
     /**
      * Function RestoreCopyFromRedoList
@@ -302,7 +302,7 @@ public:
      *  - Place the current edited library component in undo list
      *  - Get old version of the current edited library component
      */
-    void RestoreCopyFromRedoList( wxCommandEvent& aEvent );
+    virtual void RestoreCopyFromRedoList( wxCommandEvent& aEvent );
 
     /// Return the current library nickname.
     const wxString GetCurrentLib() const;
@@ -496,7 +496,7 @@ public:
     virtual EDA_COLOR_T GetGridColor() const;
 
     ///> @copydoc PCB_BASE_FRAME::SetActiveLayer()
-    void SetActiveLayer( LAYER_ID aLayer );
+    virtual void SetActiveLayer( LAYER_ID aLayer );
 
     ///> @copydoc EDA_DRAW_FRAME::UseGalCanvas()
     virtual void UseGalCanvas( bool aEnable );
diff --git a/pcbnew/modview_frame.h b/pcbnew/modview_frame.h
index ca744dc..5be85b4 100644
--- a/pcbnew/modview_frame.h
+++ b/pcbnew/modview_frame.h
@@ -85,7 +85,7 @@ private:
     const wxString      getCurFootprintName();
     void                setCurFootprintName( const wxString& aName );
 
-    void OnSize( wxSizeEvent& event );
+    virtual void OnSize( wxSizeEvent& event );
 
     void ReCreateFootprintList();
     void OnIterateFootprintList( wxCommandEvent& event );
@@ -101,22 +101,22 @@ private:
      * Display the current selected component.
      * If the component is an alias, the ROOT component is displayed
      */
-    void RedrawActiveWindow( wxDC* DC, bool EraseBg );
+    virtual void RedrawActiveWindow( wxDC* DC, bool EraseBg );
 
-    void OnCloseWindow( wxCloseEvent& Event );
+    virtual void OnCloseWindow( wxCloseEvent& Event );
     void CloseFootprintViewer( wxCommandEvent& event );
 
-    void ReCreateHToolbar();
-    void ReCreateVToolbar();
-    void ReCreateMenuBar();
+    virtual void ReCreateHToolbar();
+    virtual void ReCreateVToolbar();
+    virtual void ReCreateMenuBar();
 
-    void OnLeftClick( wxDC* DC, const wxPoint& MousePos );
+    virtual void OnLeftClick( wxDC* DC, const wxPoint& MousePos );
     void ClickOnLibList( wxCommandEvent& event );
     void ClickOnFootprintList( wxCommandEvent& event );
     void DClickOnFootprintList( wxCommandEvent& event );
     void OnSetRelativeOffset( wxCommandEvent& event );
 
-    bool GeneralControl( wxDC* aDC, const wxPoint& aPosition, int aHotKey = 0 );
+    virtual bool GeneralControl( wxDC* aDC, const wxPoint& aPosition, int aHotKey = 0 );
 
     /**
      * Function OnHotKey
@@ -126,10 +126,10 @@ private:
      * case insensitive
      * </p>
      */
-    bool OnHotKey( wxDC* aDC, int aHotKey, const wxPoint& aPosition, EDA_ITEM* aItem = NULL );
+    virtual bool OnHotKey( wxDC* aDC, int aHotKey, const wxPoint& aPosition, EDA_ITEM* aItem = NULL );
 
-    void LoadSettings( wxConfigBase* aCfg );    // override virtual
-    void SaveSettings( wxConfigBase* aCfg );    // override virtual
+    virtual void LoadSettings( wxConfigBase* aCfg );
+    virtual void SaveSettings( wxConfigBase* aCfg );
 
     /**
      * Function OnActivate
@@ -161,13 +161,13 @@ private:
      */
     void SelectAndViewFootprint( int aMode );
 
-    bool OnRightClick( const wxPoint& MousePos, wxMenu* PopMenu );
+    virtual bool OnRightClick( const wxPoint& MousePos, wxMenu* PopMenu );
 
     /**
      * Function Show3D_Frame (virtual)
      * displays 3D view of the footprint (module) being edited.
      */
-    void Show3D_Frame( wxCommandEvent& event );
+    virtual void Show3D_Frame( wxCommandEvent& event );
 
     /**
      * Function Update3D_Frame
@@ -182,9 +182,9 @@ private:
      * Virtual functions, not used here, but needed by PCB_BASE_FRAME
      * (virtual pure functions )
      */
-    void OnLeftDClick( wxDC*, const wxPoint& ) {}
-    void SaveCopyInUndoList( BOARD_ITEM*, UNDO_REDO_T, const wxPoint& ) {}
-    void SaveCopyInUndoList( const PICKED_ITEMS_LIST&, UNDO_REDO_T, const wxPoint &) {}
+    virtual void OnLeftDClick( wxDC*, const wxPoint& ) {}
+    virtual void SaveCopyInUndoList( BOARD_ITEM*, UNDO_REDO_T, const wxPoint& ) {}
+    virtual void SaveCopyInUndoList( const PICKED_ITEMS_LIST&, UNDO_REDO_T, const wxPoint &) {}
 
     void updateView();
 
diff --git a/pcbnew/pcad2kicadpcb_plugin/pcad_plugin.h b/pcbnew/pcad2kicadpcb_plugin/pcad_plugin.h
index 45ecbd9..32208f8 100644
--- a/pcbnew/pcad2kicadpcb_plugin/pcad_plugin.h
+++ b/pcbnew/pcad2kicadpcb_plugin/pcad_plugin.h
@@ -39,13 +39,13 @@ public:
 
     // -----<PUBLIC PLUGIN API>--------------------------------------------------
 
-    const wxString  PluginName() const;
+    virtual const wxString  PluginName() const;
 
-    BOARD*          Load( const wxString&   aFileName,
+    virtual BOARD*  Load( const wxString&   aFileName,
                           BOARD*            aAppendToMe,
                           const PROPERTIES* aProperties = NULL );
 
-    const wxString  GetFileExtension() const;
+    virtual const wxString  GetFileExtension() const;
 
     // -----</PUBLIC PLUGIN API>-------------------------------------------------
 
diff --git a/pcbnew/pcad2kicadpcb_plugin/pcb.h b/pcbnew/pcad2kicadpcb_plugin/pcb.h
index 5d566ff..552c584 100644
--- a/pcbnew/pcad2kicadpcb_plugin/pcb.h
+++ b/pcbnew/pcad2kicadpcb_plugin/pcb.h
@@ -53,17 +53,17 @@ public:
     PCB( BOARD* aBoard );
     ~PCB();
 
-    LAYER_ID        GetKiCadLayer( int aPCadLayer );
-    LAYER_TYPE_T    GetLayerType( int aPCadLayer );
-    wxString        GetLayerNetNameRef( int aPCadLayer );
-    int             GetNewTimestamp();
-    int             GetNetCode( wxString aNetName );
+    virtual LAYER_ID        GetKiCadLayer( int aPCadLayer );
+    virtual LAYER_TYPE_T    GetLayerType( int aPCadLayer );
+    virtual wxString        GetLayerNetNameRef( int aPCadLayer );
+    virtual int             GetNewTimestamp();
+    virtual int             GetNetCode( wxString aNetName );
 
     void            Parse( wxStatusBar* aStatusBar,
                            wxXmlDocument* aXmlDoc,
                            wxString     aActualConversion );
 
-    void            AddToBoard();
+    virtual void            AddToBoard();
 
 private:
     int             m_timestamp_cnt;
diff --git a/pcbnew/pcad2kicadpcb_plugin/pcb_arc.h b/pcbnew/pcad2kicadpcb_plugin/pcb_arc.h
index 8b1c83e..e1e9542 100644
--- a/pcbnew/pcad2kicadpcb_plugin/pcb_arc.h
+++ b/pcbnew/pcad2kicadpcb_plugin/pcb_arc.h
@@ -52,8 +52,8 @@ public:
 
     virtual void    SetPosOffset( int aX_offs, int aY_offs );
     virtual void    Flip();
-    void            AddToModule( MODULE* aModule );
-    void            AddToBoard();
+    virtual void    AddToModule( MODULE* aModule );
+    virtual void    AddToBoard();
 };
 
 } // namespace PCAD2KICAD
diff --git a/pcbnew/pcad2kicadpcb_plugin/pcb_line.h b/pcbnew/pcad2kicadpcb_plugin/pcb_line.h
index e24aa38..52fbb6f 100644
--- a/pcbnew/pcad2kicadpcb_plugin/pcb_line.h
+++ b/pcbnew/pcad2kicadpcb_plugin/pcb_line.h
@@ -53,8 +53,8 @@ public:
                            wxString     aActualConversion );
     virtual void    SetPosOffset( int aX_offs, int aY_offs );
     virtual void    Flip();
-    void            AddToModule( MODULE* aModule );
-    void            AddToBoard();
+    virtual void    AddToModule( MODULE* aModule );
+    virtual void    AddToBoard();
 };
 
 } // namespace PCAD2KICAD
diff --git a/pcbnew/pcad2kicadpcb_plugin/pcb_module.h b/pcbnew/pcad2kicadpcb_plugin/pcb_module.h
index 27d8d3d..a9e3af1 100644
--- a/pcbnew/pcad2kicadpcb_plugin/pcb_module.h
+++ b/pcbnew/pcad2kicadpcb_plugin/pcb_module.h
@@ -63,7 +63,7 @@ public:
                            wxString aDefaultMeasurementUnit, wxString aActualConversion );
 
     virtual void    Flip();
-    void            AddToBoard();
+    virtual void    AddToBoard();
 
 private:
     XNODE*          FindPatternMultilayerSection( XNODE* aNode, wxString* aPatGraphRefName );
diff --git a/pcbnew/pcad2kicadpcb_plugin/pcb_pad.h b/pcbnew/pcad2kicadpcb_plugin/pcb_pad.h
index fa18bd5..9ee5a83 100644
--- a/pcbnew/pcad2kicadpcb_plugin/pcb_pad.h
+++ b/pcbnew/pcad2kicadpcb_plugin/pcb_pad.h
@@ -53,7 +53,7 @@ public:
                            wxString     aActualConversion );
     virtual void    Flip();
     void            AddToModule( MODULE* aModule, int aRotation, bool aEncapsulatedPad );
-    void            AddToBoard();
+    virtual void    AddToBoard();
 
 private:
     wxString m_defaultPinDes;
diff --git a/pcbnew/pcad2kicadpcb_plugin/pcb_pad_shape.h b/pcbnew/pcad2kicadpcb_plugin/pcb_pad_shape.h
index 662fb03..adc5027 100644
--- a/pcbnew/pcad2kicadpcb_plugin/pcb_pad_shape.h
+++ b/pcbnew/pcad2kicadpcb_plugin/pcb_pad_shape.h
@@ -51,7 +51,7 @@ public:
                            wxString     aDefaultMeasurementUnit,
                            wxString     aActualConversion );
 
-    void            AddToBoard();
+    virtual void    AddToBoard();
 };
 
 WX_DEFINE_ARRAY( PCB_PAD_SHAPE*, PCB_PAD_SHAPES_ARRAY );
diff --git a/pcbnew/pcad2kicadpcb_plugin/pcb_polygon.h b/pcbnew/pcad2kicadpcb_plugin/pcb_polygon.h
index 90ffdbd..e58342e 100644
--- a/pcbnew/pcad2kicadpcb_plugin/pcb_polygon.h
+++ b/pcbnew/pcad2kicadpcb_plugin/pcb_polygon.h
@@ -57,8 +57,8 @@ public:
                         wxStatusBar*    aStatusBar );
 
     virtual void    SetPosOffset( int aX_offs, int aY_offs );
-    void            AddToModule( MODULE* aModule );
-    void            AddToBoard();
+    virtual void    AddToModule( MODULE* aModule );
+    virtual void    AddToBoard();
 
 // protected:
     void            AssignNet( wxString aNetName );
diff --git a/pcbnew/pcad2kicadpcb_plugin/pcb_text.h b/pcbnew/pcad2kicadpcb_plugin/pcb_text.h
index b85ec29..f90dfe0 100644
--- a/pcbnew/pcad2kicadpcb_plugin/pcb_text.h
+++ b/pcbnew/pcad2kicadpcb_plugin/pcb_text.h
@@ -48,8 +48,8 @@ public:
                            int          aLayer,
                            wxString     aDefaultMeasurementUnit,
                            wxString     aActualConversion );
-    void            AddToModule( MODULE* aModule );
-    void            AddToBoard();
+    virtual void    AddToModule( MODULE* aModule );
+    virtual void    AddToBoard();
 
 // virtual void    SetPosOffset( int aX_offs, int aY_offs );
 };
diff --git a/pcbnew/pcb_painter.h b/pcbnew/pcb_painter.h
index c6ea211..92d1d87 100644
--- a/pcbnew/pcb_painter.h
+++ b/pcbnew/pcb_painter.h
@@ -79,7 +79,7 @@ public:
     PCB_RENDER_SETTINGS();
 
     /// @copydoc RENDER_SETTINGS::ImportLegacyColors()
-    void ImportLegacyColors( const COLORS_DESIGN_SETTINGS* aSettings );
+    virtual void ImportLegacyColors( const COLORS_DESIGN_SETTINGS* aSettings );
 
     /**
      * Function LoadDisplayOptions
@@ -139,7 +139,7 @@ public:
 
 protected:
     ///> @copydoc RENDER_SETTINGS::Update()
-    void update();
+    virtual void update();
 
     ///> Colors for all layers (normal)
     COLOR4D m_layerColors[TOTAL_LAYER_COUNT];
diff --git a/pcbnew/pcbnew.cpp b/pcbnew/pcbnew.cpp
index 6d45c3b..afb7b15 100644
--- a/pcbnew/pcbnew.cpp
+++ b/pcbnew/pcbnew.cpp
@@ -103,11 +103,11 @@ static struct IFACE : public KIFACE_I
         KIFACE_I( aName, aType )
     {}
 
-    bool OnKifaceStart( PGM_BASE* aProgram, int aCtlBits );
+    virtual bool OnKifaceStart( PGM_BASE* aProgram, int aCtlBits );
 
-    void OnKifaceEnd();
+    virtual void OnKifaceEnd();
 
-    wxWindow* CreateWindow( wxWindow* aParent, int aClassId, KIWAY* aKiway, int aCtlBits = 0 )
+    virtual wxWindow* CreateWindow( wxWindow* aParent, int aClassId, KIWAY* aKiway, int aCtlBits = 0 )
     {
         wxWindow* frame = NULL;
 
@@ -162,7 +162,7 @@ static struct IFACE : public KIFACE_I
      *
      * @return void* - and must be cast into the know type.
      */
-    void* IfaceOrAddress( int aDataId )
+    virtual void* IfaceOrAddress( int aDataId )
     {
         return NULL;
     }
diff --git a/pcbnew/printout_controler.h b/pcbnew/printout_controler.h
index a9cd6c2..053805e 100644
--- a/pcbnew/printout_controler.h
+++ b/pcbnew/printout_controler.h
@@ -111,9 +111,9 @@ public:
                                EDA_DRAW_FRAME*         aParent,
                                const wxString&         aTitle );
 
-    bool OnPrintPage( int aPage );
+    virtual bool OnPrintPage( int aPage );
 
-    bool HasPage( int aPage )       // do not test page num
+    virtual bool HasPage( int aPage )
     {
         if( aPage <= m_PrintParams.m_PageCount )
             return true;
@@ -121,7 +121,7 @@ public:
             return false;
     }
 
-    void GetPageInfo( int* minPage, int* maxPage, int* selPageFrom, int* selPageTo );
+    virtual void GetPageInfo( int* minPage, int* maxPage, int* selPageFrom, int* selPageTo );
 
     void DrawPage();
 };
diff --git a/pcbnew/ratsnest.cpp b/pcbnew/ratsnest.cpp
index f1eb0c7..b658baa 100644
--- a/pcbnew/ratsnest.cpp
+++ b/pcbnew/ratsnest.cpp
@@ -88,7 +88,7 @@ public:
      * @param aItem2 = other item
      * @return the weight between items ( the rectilinear distance )
      */
-    int GetWeight( int aItem1, int aItem2 );
+    virtual int GetWeight( int aItem1, int aItem2 );
 };
 
 
diff --git a/pcbnew/ratsnest_data.h b/pcbnew/ratsnest_data.h
index 348c319..66e446d 100644
--- a/pcbnew/ratsnest_data.h
+++ b/pcbnew/ratsnest_data.h
@@ -75,7 +75,7 @@ struct RN_NODE_FILTER : public std::unary_function<const RN_NODE_PTR&, bool>
 ///> Filters out nodes that have the flag set.
 struct WITHOUT_FLAG : public RN_NODE_FILTER
 {
-    bool operator()( const RN_NODE_PTR& aNode ) const
+    virtual bool operator()( const RN_NODE_PTR& aNode ) const
     {
         return !aNode->GetFlag();
     }
diff --git a/pcbnew/ratsnest_viewitem.h b/pcbnew/ratsnest_viewitem.h
index 970859b..e357be2 100644
--- a/pcbnew/ratsnest_viewitem.h
+++ b/pcbnew/ratsnest_viewitem.h
@@ -44,17 +44,17 @@ public:
     RATSNEST_VIEWITEM( RN_DATA* aData );
 
     /// @copydoc VIEW_ITEM::ViewBBox()
-    const BOX2I ViewBBox() const;
+    virtual const BOX2I ViewBBox() const;
 
     /// @copydoc VIEW_ITEM::ViewDraw()
-    void ViewDraw( int aLayer, GAL* aGal ) const;
+    virtual void ViewDraw( int aLayer, GAL* aGal ) const;
 
     /// @copydoc VIEW_ITEM::ViewGetLayers()
-    void ViewGetLayers( int aLayers[], int& aCount ) const;
+    virtual void ViewGetLayers( int aLayers[], int& aCount ) const;
 
 #if defined(DEBUG)
     /// @copydoc EDA_ITEM::Show()
-    void Show( int x, std::ostream& st ) const
+    virtual void Show( int x, std::ostream& st ) const
     {
     }
 #endif
diff --git a/pcbnew/router/length_tuner_tool.h b/pcbnew/router/length_tuner_tool.h
index ed6ebf8..9c206f0 100644
--- a/pcbnew/router/length_tuner_tool.h
+++ b/pcbnew/router/length_tuner_tool.h
@@ -33,7 +33,7 @@ public:
     LENGTH_TUNER_TOOL();
     ~LENGTH_TUNER_TOOL();
 
-    void Reset( RESET_REASON aReason );
+    virtual void Reset( RESET_REASON aReason );
 
     int TuneSingleTrace( const TOOL_EVENT& aEvent );
     int TuneDiffPair( const TOOL_EVENT& aEvent );
diff --git a/pcbnew/router/pns_diff_pair.h b/pcbnew/router/pns_diff_pair.h
index 3b6a591..620d700 100644
--- a/pcbnew/router/pns_diff_pair.h
+++ b/pcbnew/router/pns_diff_pair.h
@@ -299,7 +299,7 @@ public:
         return aItem && DIFF_PAIR == aItem->Kind();
     }
 
-    PNS_DIFF_PAIR * Clone() const { assert(false); return NULL; }
+    virtual PNS_DIFF_PAIR * Clone() const { assert(false); return NULL; }
 
     static PNS_DIFF_PAIR* AssembleDp ( PNS_LINE *aLine );
 
diff --git a/pcbnew/router/pns_diff_pair_placer.h b/pcbnew/router/pns_diff_pair_placer.h
index 19a43cc..3578bbc 100644
--- a/pcbnew/router/pns_diff_pair_placer.h
+++ b/pcbnew/router/pns_diff_pair_placer.h
@@ -62,7 +62,7 @@ public:
      * Starts routing a single track at point aP, taking item aStartItem as anchor
      * (unless NULL).
      */
-    bool Start( const VECTOR2I& aP, PNS_ITEM* aStartItem );
+    virtual bool Start( const VECTOR2I& aP, PNS_ITEM* aStartItem );
 
     /**
      * Function Move()
@@ -71,7 +71,7 @@ public:
      * aEndItem as anchor (if not NULL).
      * (unless NULL).
      */
-    bool Move( const VECTOR2I& aP, PNS_ITEM* aEndItem );
+    virtual bool Move( const VECTOR2I& aP, PNS_ITEM* aEndItem );
 
     /**
      * Function FixRoute()
@@ -82,28 +82,28 @@ public:
      * result is violating design rules - in such case, the track is only committed
      * if Settings.CanViolateDRC() is on.
      */
-    bool FixRoute( const VECTOR2I& aP, PNS_ITEM* aEndItem );
+    virtual bool FixRoute( const VECTOR2I& aP, PNS_ITEM* aEndItem );
 
     /**
      * Function ToggleVia()
      *
      * Enables/disables a via at the end of currently routed trace.
      */
-    bool ToggleVia( bool aEnabled );
+    virtual bool ToggleVia( bool aEnabled );
 
     /**
      * Function SetLayer()
      *
      * Sets the current routing layer.
      */
-    bool SetLayer( int aLayer );
+    virtual bool SetLayer( int aLayer );
 
     /**
      * Function Traces()
      *
      * Returns the complete routed line, as a single-member PNS_ITEMSET.
      */
-    const PNS_ITEMSET Traces();
+    virtual const PNS_ITEMSET Traces();
 
     /**
      * Function CurrentEnd()
@@ -111,7 +111,7 @@ public:
      * Returns the current end of the line being placed. It may not be equal
      * to the cursor position due to collisions.
      */
-    const VECTOR2I& CurrentEnd() const
+    virtual const VECTOR2I& CurrentEnd() const
     {
         return m_currentEnd;
     }
@@ -121,7 +121,7 @@ public:
      *
      * Returns the net code of currently routed track.
      */
-    int CurrentNet() const
+    virtual int CurrentNet() const
     {
         return m_currentNet;
     }
@@ -131,7 +131,7 @@ public:
      *
      * Returns the layer of currently routed track.
      */
-    int CurrentLayer() const
+    virtual int CurrentLayer() const
     {
         return m_currentLayer;
     }
@@ -141,14 +141,14 @@ public:
      *
      * Returns the most recent world state.
      */
-    PNS_NODE* CurrentNode( bool aLoopsRemoved = false ) const;
+    virtual PNS_NODE* CurrentNode( bool aLoopsRemoved = false ) const;
 
     /**
      * Function FlipPosture()
      *
      * Toggles the current posture (straight/diagonal) of the trace head.
      */
-    void FlipPosture();
+    virtual void FlipPosture();
 
     /**
      * Function UpdateSizes()
@@ -157,13 +157,13 @@ public:
      * a settings class. Used to dynamically change these parameters as
      * the track is routed.
      */
-    void UpdateSizes( const PNS_SIZES_SETTINGS& aSizes );
+    virtual void UpdateSizes( const PNS_SIZES_SETTINGS& aSizes );
 
-    bool IsPlacingVia() const { return m_placingVia; }
+    virtual bool IsPlacingVia() const { return m_placingVia; }
 
-    void SetOrthoMode( bool aOrthoMode );
+    virtual void SetOrthoMode( bool aOrthoMode );
 
-    void GetModifiedNets( std::vector<int>& aNets ) const;
+    virtual void GetModifiedNets( std::vector<int>& aNets ) const;
 
 private:
     int viaGap() const;
diff --git a/pcbnew/router/pns_dp_meander_placer.h b/pcbnew/router/pns_dp_meander_placer.h
index 029c93a..fc6771c 100644
--- a/pcbnew/router/pns_dp_meander_placer.h
+++ b/pcbnew/router/pns_dp_meander_placer.h
@@ -57,7 +57,7 @@ public:
      * Starts routing a single track at point aP, taking item aStartItem as anchor
      * (unless NULL).
      */
-    bool Start ( const VECTOR2I& aP, PNS_ITEM* aStartItem );
+    virtual bool Start ( const VECTOR2I& aP, PNS_ITEM* aStartItem );
 
     /**
      * Function Move()
@@ -66,7 +66,7 @@ public:
      * aEndItem as anchor (if not NULL).
      * (unless NULL).
      */
-    bool Move( const VECTOR2I& aP, PNS_ITEM* aEndItem );
+    virtual bool Move( const VECTOR2I& aP, PNS_ITEM* aEndItem );
 
     /**
      * Function FixRoute()
@@ -77,7 +77,7 @@ public:
      * result is violating design rules - in such case, the track is only committed
      * if Settings.CanViolateDRC() is on.
      */
-    bool FixRoute( const VECTOR2I& aP, PNS_ITEM* aEndItem );
+    virtual bool FixRoute( const VECTOR2I& aP, PNS_ITEM* aEndItem );
 
     const PNS_LINE Trace() const;
 
@@ -86,21 +86,21 @@ public:
      *
      * Returns the most recent world state.
      */
-    PNS_NODE* CurrentNode( bool aLoopsRemoved = false ) const;
+    virtual PNS_NODE* CurrentNode( bool aLoopsRemoved = false ) const;
 
-    const PNS_ITEMSET Traces();
+    virtual const PNS_ITEMSET Traces();
 
-    const VECTOR2I& CurrentEnd() const;
+    virtual const VECTOR2I& CurrentEnd() const;
 
-    int CurrentNet() const;
-    int CurrentLayer() const;
+    virtual int CurrentNet() const;
+    virtual int CurrentLayer() const;
 
     int totalLength();
 
-    const wxString TuningInfo() const;
-    TUNING_STATUS TuningStatus() const;
+    virtual const wxString TuningInfo() const;
+    virtual TUNING_STATUS TuningStatus() const;
 
-    bool CheckFit( PNS_MEANDER_SHAPE* aShape );
+    virtual bool CheckFit( PNS_MEANDER_SHAPE* aShape );
 
 
 private:
diff --git a/pcbnew/router/pns_joint.h b/pcbnew/router/pns_joint.h
index 78cb36e..9b040e7 100644
--- a/pcbnew/router/pns_joint.h
+++ b/pcbnew/router/pns_joint.h
@@ -72,7 +72,7 @@ public:
         m_layers = aB.m_layers;
     }
 
-    PNS_ITEM* Clone( ) const
+    virtual PNS_ITEM* Clone( ) const
     {
         assert( false );
         return NULL;
diff --git a/pcbnew/router/pns_line.h b/pcbnew/router/pns_line.h
index cf75e0f..7329888 100644
--- a/pcbnew/router/pns_line.h
+++ b/pcbnew/router/pns_line.h
@@ -106,7 +106,7 @@ public:
     }
 
     ///> Returns the shape of the line
-    const SHAPE* Shape() const
+    virtual const SHAPE* Shape() const
     {
         return &m_line;
     }
@@ -261,8 +261,8 @@ public:
     void DragSegment( const VECTOR2I& aP, int aIndex, int aSnappingThreshold = 0 );
     void DragCorner( const VECTOR2I& aP, int aIndex, int aSnappingThreshold = 0 );
 
-    void SetRank( int aRank );
-    int Rank() const;
+    virtual void SetRank( int aRank );
+    virtual int Rank() const;
 
     bool HasLoops() const;
 
diff --git a/pcbnew/router/pns_line_placer.h b/pcbnew/router/pns_line_placer.h
index cfa6228..1c1355a 100644
--- a/pcbnew/router/pns_line_placer.h
+++ b/pcbnew/router/pns_line_placer.h
@@ -59,7 +59,7 @@ public:
      * Starts routing a single track at point aP, taking item aStartItem as anchor
      * (unless NULL).
      */
-    bool Start( const VECTOR2I& aP, PNS_ITEM* aStartItem );
+    virtual bool Start( const VECTOR2I& aP, PNS_ITEM* aStartItem );
 
     /**
      * Function Move()
@@ -68,7 +68,7 @@ public:
      * aEndItem as anchor (if not NULL).
      * (unless NULL).
      */
-    bool Move( const VECTOR2I& aP, PNS_ITEM* aEndItem );
+    virtual bool Move( const VECTOR2I& aP, PNS_ITEM* aEndItem );
 
     /**
      * Function FixRoute()
@@ -79,21 +79,21 @@ public:
      * result is violating design rules - in such case, the track is only committed
      * if Settings.CanViolateDRC() is on.
      */
-    bool FixRoute( const VECTOR2I& aP, PNS_ITEM* aEndItem );
+    virtual bool FixRoute( const VECTOR2I& aP, PNS_ITEM* aEndItem );
 
     /**
      * Function ToggleVia()
      *
      * Enables/disables a via at the end of currently routed trace.
      */
-    bool ToggleVia( bool aEnabled );
+    virtual bool ToggleVia( bool aEnabled );
 
     /**
      * Function SetLayer()
      *
      * Sets the current routing layer.
      */
-    bool SetLayer( int aLayer );
+    virtual bool SetLayer( int aLayer );
 
     /**
      * Function Head()
@@ -123,7 +123,7 @@ public:
      *
      * Returns the complete routed line, as a single-member PNS_ITEMSET.
      */
-    const PNS_ITEMSET Traces();
+    virtual const PNS_ITEMSET Traces();
 
     /**
      * Function CurrentEnd()
@@ -131,7 +131,7 @@ public:
      * Returns the current end of the line being placed. It may not be equal
      * to the cursor position due to collisions.
      */
-    const VECTOR2I& CurrentEnd() const
+    virtual const VECTOR2I& CurrentEnd() const
     {
         return m_currentEnd;
     }
@@ -141,7 +141,7 @@ public:
      *
      * Returns the net code of currently routed track.
      */
-    int CurrentNet() const
+    virtual int CurrentNet() const
     {
         return m_currentNet;
     }
@@ -151,7 +151,7 @@ public:
      *
      * Returns the layer of currently routed track.
      */
-    int CurrentLayer() const
+    virtual int CurrentLayer() const
     {
         return m_currentLayer;
     }
@@ -161,14 +161,14 @@ public:
      *
      * Returns the most recent world state.
      */
-    PNS_NODE* CurrentNode( bool aLoopsRemoved = false ) const;
+    virtual PNS_NODE* CurrentNode( bool aLoopsRemoved = false ) const;
 
     /**
      * Function FlipPosture()
      *
      * Toggles the current posture (straight/diagonal) of the trace head.
      */
-    void FlipPosture();
+    virtual void FlipPosture();
 
     /**
      * Function UpdateSizes()
@@ -177,13 +177,13 @@ public:
      * a settings class. Used to dynamically change these parameters as
      * the track is routed.
      */
-    void UpdateSizes( const PNS_SIZES_SETTINGS& aSizes );
+    virtual void UpdateSizes( const PNS_SIZES_SETTINGS& aSizes );
 
-    void SetOrthoMode( bool aOrthoMode );
+    virtual void SetOrthoMode( bool aOrthoMode );
 
-    bool IsPlacingVia() const { return m_placingVia; }
+    virtual bool IsPlacingVia() const { return m_placingVia; }
 
-    void GetModifiedNets( std::vector<int>& aNets ) const;
+    virtual void GetModifiedNets( std::vector<int>& aNets ) const;
 private:
     /**
      * Function route()
diff --git a/pcbnew/router/pns_meander_placer.h b/pcbnew/router/pns_meander_placer.h
index 227a0ce..af94d34 100644
--- a/pcbnew/router/pns_meander_placer.h
+++ b/pcbnew/router/pns_meander_placer.h
@@ -60,19 +60,19 @@ public:
     virtual bool FixRoute( const VECTOR2I& aP, PNS_ITEM* aEndItem );
 
     /// @copydoc PNS_PLACEMENT_ALGO::CurrentNode()
-    PNS_NODE* CurrentNode( bool aLoopsRemoved = false ) const;
+    virtual PNS_NODE* CurrentNode( bool aLoopsRemoved = false ) const;
 
     /// @copydoc PNS_PLACEMENT_ALGO::Traces()
-    const PNS_ITEMSET Traces();
+    virtual const PNS_ITEMSET Traces();
 
     /// @copydoc PNS_PLACEMENT_ALGO::CurrentEnd()
-    const VECTOR2I& CurrentEnd() const;
+    virtual const VECTOR2I& CurrentEnd() const;;
 
     /// @copydoc PNS_PLACEMENT_ALGO::CurrentNet()
-    int CurrentNet() const;
+    virtual int CurrentNet() const;
 
     /// @copydoc PNS_PLACEMENT_ALGO::CurrentLayer()
-    int CurrentLayer() const;
+    virtual int CurrentLayer() const;
 
     /// @copydoc PNS_MEANDER_PLACER_BASE::TuningInfo()
     virtual const wxString TuningInfo() const;
@@ -81,7 +81,7 @@ public:
     virtual TUNING_STATUS TuningStatus() const;
 
     /// @copydoc PNS_MEANDER_PLACER_BASE::CheckFit()
-    bool CheckFit ( PNS_MEANDER_SHAPE* aShape );
+    virtual bool CheckFit ( PNS_MEANDER_SHAPE* aShape );
 
 protected:
 
diff --git a/pcbnew/router/pns_meander_skew_placer.h b/pcbnew/router/pns_meander_skew_placer.h
index 7cb303c..96d9580 100644
--- a/pcbnew/router/pns_meander_skew_placer.h
+++ b/pcbnew/router/pns_meander_skew_placer.h
@@ -41,20 +41,20 @@ public:
     ~PNS_MEANDER_SKEW_PLACER();
 
     /// @copydoc PNS_PLACEMENT_ALGO::Start()
-    bool Start( const VECTOR2I& aP, PNS_ITEM* aStartItem );
+    virtual bool Start( const VECTOR2I& aP, PNS_ITEM* aStartItem );
 
     /// @copydoc PNS_PLACEMENT_ALGO::Move()
-    bool Move( const VECTOR2I& aP, PNS_ITEM* aEndItem );
+    virtual bool Move( const VECTOR2I& aP, PNS_ITEM* aEndItem );
 
     /// @copydoc PNS_MEANDER_PLACER_BASE::TuningInfo()
-    const wxString TuningInfo() const;
+    virtual const wxString TuningInfo() const;
 
 private:
 
     int currentSkew( ) const;
     int itemsetLength( const PNS_ITEMSET& aSet ) const;
 
-    int origPathLength () const;
+    virtual int origPathLength () const;
 
     PNS_DIFF_PAIR m_originPair;
     PNS_ITEMSET m_tunedPath, m_tunedPathP, m_tunedPathN;
diff --git a/pcbnew/router/pns_segment.h b/pcbnew/router/pns_segment.h
index ecd24bd..16cbf16 100644
--- a/pcbnew/router/pns_segment.h
+++ b/pcbnew/router/pns_segment.h
@@ -60,9 +60,9 @@ public:
         return aItem && SEGMENT == aItem->Kind();
     }
 
-    PNS_SEGMENT* Clone( ) const;
+    virtual PNS_SEGMENT* Clone( ) const;
 
-    const SHAPE* Shape() const
+    virtual const SHAPE* Shape() const
     {
         return static_cast<const SHAPE*>( &m_seg );
     }
@@ -72,7 +72,7 @@ public:
         SetLayers( PNS_LAYERSET( aLayer ) );
     }
 
-    int Layer() const
+    virtual int Layer() const
     {
         return Layers().Start();
     }
@@ -108,7 +108,7 @@ public:
         m_seg.SetSeg( SEG (tmp.B , tmp.A ) );
     }
 
-    const SHAPE_LINE_CHAIN Hull( int aClearance, int aWalkaroundThickness ) const;
+    virtual const SHAPE_LINE_CHAIN Hull( int aClearance, int aWalkaroundThickness ) const;
 
     virtual VECTOR2I Anchor(int n) const
     {
diff --git a/pcbnew/router/pns_solid.h b/pcbnew/router/pns_solid.h
index e598409..3feb674 100644
--- a/pcbnew/router/pns_solid.h
+++ b/pcbnew/router/pns_solid.h
@@ -54,11 +54,11 @@ public:
         return aItem && SOLID == aItem->Kind();
     }
 
-    PNS_ITEM* Clone() const;
+    virtual PNS_ITEM* Clone() const;
 
-    const SHAPE* Shape() const { return m_shape; }
+    virtual const SHAPE* Shape() const { return m_shape; }
 
-    const SHAPE_LINE_CHAIN Hull( int aClearance = 0, int aWalkaroundThickness = 0 ) const;
+    virtual const SHAPE_LINE_CHAIN Hull( int aClearance = 0, int aWalkaroundThickness = 0 ) const;
 
     void SetShape( SHAPE* shape )
     {
diff --git a/pcbnew/router/pns_via.h b/pcbnew/router/pns_via.h
index 1417e59..8d4f84b 100644
--- a/pcbnew/router/pns_via.h
+++ b/pcbnew/router/pns_via.h
@@ -127,14 +127,14 @@ public:
             bool aSolidsOnly = true,
             int aMaxIterations = 10 );
 
-    const SHAPE* Shape() const
+    virtual const SHAPE* Shape() const
     {
         return &m_shape;
     }
 
-    PNS_VIA* Clone() const;
+    virtual PNS_VIA* Clone() const;
 
-    const SHAPE_LINE_CHAIN Hull( int aClearance = 0, int aWalkaroundThickness = 0 ) const;
+    virtual const SHAPE_LINE_CHAIN Hull( int aClearance = 0, int aWalkaroundThickness = 0 ) const;
 
     virtual VECTOR2I Anchor( int n ) const
     {
diff --git a/pcbnew/router/router_preview_item.h b/pcbnew/router/router_preview_item.h
index 6344dc7..691282b 100644
--- a/pcbnew/router/router_preview_item.h
+++ b/pcbnew/router/router_preview_item.h
@@ -73,7 +73,7 @@ public:
     }
 
 #if defined(DEBUG)
-    void Show( int aA, std::ostream& aB ) const {};
+    virtual void Show( int aA, std::ostream& aB ) const {}
 #endif
 
     /** Get class name
@@ -84,7 +84,7 @@ public:
         return "ROUTER_PREVIEW_ITEM";
     }
 
-    const BOX2I ViewBBox() const;
+    virtual const BOX2I ViewBBox() const;
 
     virtual void ViewDraw( int aLayer, KIGFX::GAL* aGal ) const;
 
diff --git a/pcbnew/router/router_tool.cpp b/pcbnew/router/router_tool.cpp
index 088695d..f8ee763 100644
--- a/pcbnew/router/router_tool.cpp
+++ b/pcbnew/router/router_tool.cpp
@@ -154,7 +154,7 @@ public:
     }
 
 protected:
-    OPT_TOOL_EVENT handleCustomEvent( const wxMenuEvent& aEvent )
+    virtual OPT_TOOL_EVENT handleCustomEvent( const wxMenuEvent& aEvent )
     {
 #if ID_POPUP_PCB_SELECT_VIASIZE1 < ID_POPUP_PCB_SELECT_WIDTH1
 #error You have changed event ids order, it breaks code. Check the source code for more details.
diff --git a/pcbnew/router/router_tool.h b/pcbnew/router/router_tool.h
index 73c4ea9..b88a0d8 100644
--- a/pcbnew/router/router_tool.h
+++ b/pcbnew/router/router_tool.h
@@ -30,7 +30,7 @@ public:
     ROUTER_TOOL();
     ~ROUTER_TOOL();
 
-    void Reset( RESET_REASON aReason );
+    virtual void Reset( RESET_REASON aReason );
 
     int RouteSingleTrace ( const TOOL_EVENT& aEvent );
     int RouteDiffPair ( const TOOL_EVENT& aEvent );
diff --git a/pcbnew/sel_layer.cpp b/pcbnew/sel_layer.cpp
index b32b032..8188a07 100644
--- a/pcbnew/sel_layer.cpp
+++ b/pcbnew/sel_layer.cpp
@@ -52,20 +52,20 @@ protected:
     BOARD*  m_brd;
 
     // Returns true if the layer id is enabled (i.e. is it should be displayed)
-    bool IsLayerEnabled( LAYER_NUM aLayer ) const
+    virtual bool IsLayerEnabled( LAYER_NUM aLayer ) const
     {
         return m_brd->IsLayerEnabled( LAYER_ID( aLayer ) );
     }
 
     // Returns a color index from the layer id
     // Virtual function
-    EDA_COLOR_T GetLayerColor( LAYER_NUM aLayer ) const
+    virtual EDA_COLOR_T GetLayerColor( LAYER_NUM aLayer ) const
     {
         return m_brd->GetLayerColor( ToLAYER_ID( aLayer ) );
     }
 
     // Returns the name of the layer id
-    wxString GetLayerName( LAYER_NUM aLayer ) const      // overrides LAYER_SELECTOR
+    virtual wxString GetLayerName( LAYER_NUM aLayer ) const
     {
         return m_brd->GetLayerName( ToLAYER_ID( aLayer ) );
     }
@@ -94,8 +94,8 @@ public:
 
 private:
     // Event handlers
-    void OnLeftGridCellClick( wxGridEvent& event );
-    void OnRightGridCellClick( wxGridEvent& event );
+    virtual void OnLeftGridCellClick( wxGridEvent& event );
+    virtual void OnRightGridCellClick( wxGridEvent& event );
 
     void buildList();
 };
@@ -264,15 +264,15 @@ public:
     }
 
 private:
-    void OnLeftGridCellClick( wxGridEvent& event );
-    void OnRightGridCellClick( wxGridEvent& event );
+    virtual void OnLeftGridCellClick( wxGridEvent& event );
+    virtual void OnRightGridCellClick( wxGridEvent& event );
 
     void OnOkClick( wxCommandEvent& event )
     {
         EndModal( wxID_OK );
     }
 
-    void OnCancelClick( wxCommandEvent& event )
+    virtual void OnCancelClick( wxCommandEvent& event )
     {
         EndModal( wxID_CANCEL );
     }
diff --git a/pcbnew/specctra.h b/pcbnew/specctra.h
index 35b1c19..21f6e7d 100644
--- a/pcbnew/specctra.h
+++ b/pcbnew/specctra.h
@@ -387,7 +387,7 @@ public:
 
     PARSER( ELEM* aParent );
 
-    void FormatContents( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR );
+    virtual void FormatContents( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR );
 };
 
 
@@ -421,7 +421,7 @@ public:
     DSN_T   GetEngUnits() const  { return units; }
     int     GetValue() const  { return value; }
 
-    void Format( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR )
+    virtual void Format( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR )
     {
         if( type == T_unit )
             out->Print( nestLevel, "(%s %s)\n", Name(),
@@ -467,7 +467,7 @@ public:
     POINT GetOrigin() { return point0; }
     POINT GetEnd() { return point1; }
 
-    void Format( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR )
+    virtual void Format( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR )
     {
         const char* newline = nestLevel ? "\n" : "";
 
@@ -500,7 +500,7 @@ public:
     {
     }
 
-    void Format( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR )
+    virtual void Format( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR )
     {
         out->Print( nestLevel, "(%s", Name() );
 
@@ -546,7 +546,7 @@ public:
         delete rule;
     }
 
-    void Format( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR )
+    virtual void Format( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR )
     {
         out->Print( nestLevel, "(%s", Name() );
 
@@ -607,7 +607,7 @@ public:
         aperture_width = aWidth;
     }
 
-    void Format( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR )
+    virtual void Format( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR )
     {
         const char* newline = nestLevel ? "\n" : "";
 
@@ -700,7 +700,7 @@ public:
     }
 
 
-    void Format( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR )
+    virtual void Format( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR )
     {
         out->Print( nestLevel, "(%s\n", Name() );
 
@@ -733,7 +733,7 @@ public:
         diameter = 0.0;
     }
 
-    void Format( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR )
+    virtual void Format( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR )
     {
         const char* newline = nestLevel ? "\n" : "";
 
@@ -780,7 +780,7 @@ public:
         aperture_width = 0.0;
     }
 
-    void Format( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR )
+    virtual void Format( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR )
     {
         const char* newline = nestLevel ? "\n" : "";
 
@@ -862,7 +862,7 @@ public:
         }
     }
 
-    void Format( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR )
+    virtual void Format( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR )
     {
         out->Print( nestLevel, "(%s ", Name() );
 
@@ -945,7 +945,7 @@ public:
         windows.push_back( aWindow );
     }
 
-    void Format( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR )
+    virtual void Format( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR )
     {
         const char* newline = "\n";
 
@@ -1022,7 +1022,7 @@ public:
         padstacks.push_back( aViaName );
     }
 
-    void Format( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR )
+    virtual void Format( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR )
     {
         const int RIGHTMARGIN = 80;
         int perLine = out->Print( nestLevel, "(%s", Name() );
@@ -1076,7 +1076,7 @@ public:
     {
     }
 
-    void FormatContents( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR )
+    virtual void FormatContents( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR )
     {
         for( STRINGS::iterator i=class_ids.begin();  i!=class_ids.end();  ++i )
         {
@@ -1115,7 +1115,7 @@ public:
         delete classes;
     }
 
-    void FormatContents( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR )
+    virtual void FormatContents( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR )
     {
         if( classes )
             classes->Format( out, nestLevel );
@@ -1145,7 +1145,7 @@ public:
     {
     }
 
-    void Format( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR )
+    virtual void Format( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR )
     {
         out->Print( nestLevel, "(%s\n", Name() );
 
@@ -1200,7 +1200,7 @@ public:
         delete rules;
     }
 
-    void Format( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR )
+    virtual void Format( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR )
     {
         const char* quote = out->GetQuoteChar( name.c_str() );
 
@@ -1274,7 +1274,7 @@ public:
         layer_weight = 0.0;
     }
 
-    void Format( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR )
+    virtual void Format( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR )
     {
         const char* quote0 = out->GetQuoteChar( layer_id0.c_str() );
         const char* quote1 = out->GetQuoteChar( layer_id1.c_str() );
@@ -1301,7 +1301,7 @@ public:
     {
     }
 
-    void Format( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR )
+    virtual void Format( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR )
     {
         out->Print( nestLevel, "(%s\n", Name() );
 
@@ -1347,7 +1347,7 @@ public:
     {
     }
 
-    void Format( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR )
+    virtual void Format( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR )
     {
         out->Print( nestLevel, "(%s %s)\n", Name(),
                    GetTokenText( value ) );
@@ -1373,7 +1373,7 @@ public:
     {
     }
 
-    void Format( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR )
+    virtual void Format( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR )
     {
         const char* quote = out->GetQuoteChar( value.c_str() );
 
@@ -1416,7 +1416,7 @@ public:
         delete rules;
     }
 
-    void FormatContents( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR )
+    virtual void FormatContents( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR )
     {
         if( region_id.size() )
         {
@@ -1460,7 +1460,7 @@ public:
         image_type= T_NONE;
     }
 
-    void Format( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR )
+    virtual void Format( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR )
     {
         out->Print( nestLevel, "(%s %s %.6g",
                    Name(),
@@ -1504,7 +1504,7 @@ public:
         delete rules;
     }
 
-    void FormatContents( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR )
+    virtual void FormatContents( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR )
     {
         for( LAYERS::iterator i=layers.begin();  i!=layers.end();  ++i )
             i->Format( out, nestLevel );
@@ -1588,7 +1588,7 @@ public:
             place_boundary->SetParent( this );
     }
 
-    void FormatContents( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR )
+    virtual void FormatContents( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR )
     {
         if( unit )
             unit->Format( out, nestLevel );
@@ -1635,7 +1635,7 @@ public:
             i->Format( out, nestLevel );
     }
 
-    UNIT_RES* GetUnits() const
+    virtual UNIT_RES* GetUnits() const
     {
         if( unit )
             return unit;
@@ -1720,7 +1720,7 @@ public:
         rotation = aRotation;
     }
 
-    void Format( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR );
+    virtual void Format( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR );
 };
 typedef boost::ptr_vector<PLACE>    PLACES;
 
@@ -1757,7 +1757,7 @@ public:
      */
 //    static int Compare( IMAGE* lhs, IMAGE* rhs );
 
-    void Format( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR )
+    virtual void Format( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR )
     {
         const char* quote = out->GetQuoteChar( image_id.c_str() );
         out->Print( nestLevel, "(%s %s%s%s\n", Name(),
@@ -1768,7 +1768,7 @@ public:
         out->Print( nestLevel, ")\n" );
     }
 
-    void FormatContents( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR )
+    virtual void FormatContents( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR )
     {
         for( PLACES::iterator i=places.begin();  i!=places.end();  ++i )
             i->Format( out, nestLevel );
@@ -1821,7 +1821,7 @@ public:
         return added;
     }
 
-    void FormatContents( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR )
+    virtual void FormatContents( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR )
     {
         if( unit )
             unit->Format( out, nestLevel );
@@ -1836,7 +1836,7 @@ public:
             i->Format( out, nestLevel );
     }
 
-    UNIT_RES* GetUnits() const
+    virtual UNIT_RES* GetUnits() const
     {
         if( unit )
             return unit;
@@ -1887,7 +1887,7 @@ public:
         connect = aConnect;
     }
 
-    void Format( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR )
+    virtual void Format( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR )
     {
         out->Print( nestLevel, "(%s ", Name() );
 
@@ -1946,7 +1946,7 @@ public:
         vertex.FixNegativeZero();
     }
 
-    void Format( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR )
+    virtual void Format( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR )
     {
         const char* quote = out->GetQuoteChar( padstack_id.c_str() );
         if( isRotated )
@@ -2031,7 +2031,7 @@ public:
         return image_id;
     }
 
-    void Format( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR )
+    virtual void Format( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR )
     {
         std::string imageId = GetImageId();
 
@@ -2046,7 +2046,7 @@ public:
     }
 
     // this is here for makeHash()
-    void FormatContents( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR )
+    virtual void FormatContents( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR )
     {
         if( side != T_both )
             out->Print( 0, " (side %s)", GetTokenText( side ) );
@@ -2073,7 +2073,7 @@ public:
     }
 
 
-    UNIT_RES* GetUnits() const
+    virtual UNIT_RES* GetUnits() const
     {
         if( unit )
             return unit;
@@ -2146,7 +2146,7 @@ public:
         padstack_id = aPadstackId;
     }
 
-    void Format( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR )
+    virtual void Format( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR )
     {
         const char* quote = out->GetQuoteChar( padstack_id.c_str() );
 
@@ -2160,7 +2160,7 @@ public:
 
 
     // this factored out for use by Compare()
-    void FormatContents( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR )
+    virtual void FormatContents( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR )
     {
         if( unit )
             unit->Format( out, nestLevel );
@@ -2194,7 +2194,7 @@ public:
     }
 
 
-    UNIT_RES* GetUnits() const
+    virtual UNIT_RES* GetUnits() const
     {
         if( unit )
             return unit;
@@ -2389,7 +2389,7 @@ public:
         return NULL;
     }
 
-    void FormatContents( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR )
+    virtual void FormatContents( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR )
     {
         if( unit )
             unit->Format( out, nestLevel );
@@ -2404,7 +2404,7 @@ public:
             i->Format( out, nestLevel );
     }
 
-    UNIT_RES* GetUnits() const
+    virtual UNIT_RES* GetUnits() const
     {
         if( unit )
             return unit;
@@ -2478,7 +2478,7 @@ public:
         delete rules;
     }
 
-    void Format( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR )
+    virtual void Format( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR )
     {
         // no quoting on these two, the lexer preserved the quotes on input
         out->Print( nestLevel, "(%s %s %s ",
@@ -2536,7 +2536,7 @@ public:
     {
     }
 
-    void Format( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR )
+    virtual void Format( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR )
     {
         out->Print( nestLevel, "(%s", Name() );
 
@@ -2619,7 +2619,7 @@ public:
         return -1;
     }
 
-    void Format( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR )
+    virtual void Format( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR )
     {
         const char* quote = out->GetQuoteChar( net_id.c_str() );
         const char* space = " ";
@@ -2696,7 +2696,7 @@ public:
     {
     }
 
-    void FormatContents( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR )
+    virtual void FormatContents( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR )
     {
         for( FROMTOS::iterator i=fromtos.begin();  i!=fromtos.end();  ++i )
             i->Format( out, nestLevel );
@@ -2743,7 +2743,7 @@ public:
     }
 
 
-    void Format( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR )
+    virtual void Format( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR )
     {
         const char* quote = out->GetQuoteChar( class_id.c_str() );
 
@@ -2812,7 +2812,7 @@ public:
     {
     }
 
-    void FormatContents( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR )
+    virtual void FormatContents( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR )
     {
         for( NETS::iterator i=nets.begin();  i!=nets.end();  ++i )
             i->Format( out, nestLevel );
@@ -2893,7 +2893,7 @@ public:
         }
     }
 
-    void Format( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR )
+    virtual void Format( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR )
     {
         out->Print( nestLevel, "(%s ", Name() );
 
@@ -2977,7 +2977,7 @@ public:
         return padstack_id;
     }
 
-    void Format( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR )
+    virtual void Format( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR )
     {
         const char* quote = out->GetQuoteChar( padstack_id.c_str() );
 
@@ -3103,7 +3103,7 @@ public:
         delete unit;
     }
 
-    void FormatContents( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR )
+    virtual void FormatContents( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR )
     {
         if( unit )
             unit->Format( out, nestLevel );
@@ -3115,7 +3115,7 @@ public:
             i->Format( out, nestLevel );
     }
 
-    UNIT_RES*  GetUnits() const
+    virtual UNIT_RES*  GetUnits() const
     {
         if( unit )
             return unit;
@@ -3166,7 +3166,7 @@ public:
         delete wiring;
     }
 
-    void Format( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR )
+    virtual void Format( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR )
     {
         const char* quote = out->GetQuoteChar( pcbname.c_str() );
 
@@ -3200,7 +3200,7 @@ public:
         out->Print( nestLevel, ")\n" );
     }
 
-    UNIT_RES*  GetUnits() const
+    virtual UNIT_RES*  GetUnits() const
     {
         if( unit )
             return unit;
@@ -3229,7 +3229,7 @@ public:
         time_stamp = time(NULL);
     }
 
-    void Format( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR )
+    virtual void Format( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR )
     {
         char    temp[80];
         struct  tm* tmp;
@@ -3273,7 +3273,7 @@ public:
         time_stamp = time(NULL);
     }
 
-    void FormatContents( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR )
+    virtual void FormatContents( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR )
     {
         for( ANCESTORS::iterator i=ancestors.begin();  i!=ancestors.end();  ++i )
             i->Format( out, nestLevel );
@@ -3316,7 +3316,7 @@ public:
     {
     }
 
-    void Format( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR )
+    virtual void Format( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR )
     {
         bool singleLine = pin_refs.size() <= 1;
         out->Print( nestLevel, "(%s", Name() );
@@ -3375,7 +3375,7 @@ public:
         delete rules;
     }
 
-    void Format( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR )
+    virtual void Format( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR )
     {
         const char* quote = out->GetQuoteChar( net_id.c_str() );
 
@@ -3434,7 +3434,7 @@ public:
 //        delete test_points;
     }
 
-    UNIT_RES*  GetUnits() const
+    virtual UNIT_RES*  GetUnits() const
     {
         if( resolution )
             return resolution;
@@ -3442,7 +3442,7 @@ public:
         return ELEM::GetUnits();
     }
 
-    void FormatContents( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR )
+    virtual void FormatContents( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR )
     {
         if( resolution )
             resolution->Format( out, nestLevel );
@@ -3505,7 +3505,7 @@ public:
     {
     }
 
-    void FormatContents( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR )
+    virtual void FormatContents( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR )
     {
         for( PIN_PAIRS::iterator i=pin_pairs.begin();  i!=pin_pairs.end();  ++i )
         {
@@ -3562,7 +3562,7 @@ public:
         delete route;
     }
 
-    void Format( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR )
+    virtual void Format( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR )
     {
         const char* quote = out->GetQuoteChar( session_id.c_str() );
         out->Print( nestLevel, "(%s %s%s%s\n", Name(),
diff --git a/pcbnew/target_edit.cpp b/pcbnew/target_edit.cpp
index 4e2e77b..10985e1 100644
--- a/pcbnew/target_edit.cpp
+++ b/pcbnew/target_edit.cpp
@@ -74,8 +74,8 @@ public:
     ~TARGET_PROPERTIES_DIALOG_EDITOR() { }
 
 private:
-    void OnOkClick( wxCommandEvent& event );
-    void OnCancelClick( wxCommandEvent& event );
+    virtual void OnOkClick( wxCommandEvent& event );
+    virtual void OnCancelClick( wxCommandEvent& event );
 };
 
 
diff --git a/pcbnew/tools/bright_box.h b/pcbnew/tools/bright_box.h
index 9276305..4434baa 100644
--- a/pcbnew/tools/bright_box.h
+++ b/pcbnew/tools/bright_box.h
@@ -47,18 +47,16 @@ public:
         return m_item->ViewBBox();
     }
 
-    void ViewDraw( int aLayer, KIGFX::GAL* aGal ) const;
+    virtual void ViewDraw( int aLayer, KIGFX::GAL* aGal ) const;
 
-    void ViewGetLayers( int aLayers[], int& aCount ) const
+    virtual void ViewGetLayers( int aLayers[], int& aCount ) const
     {
         aLayers[0] = ITEM_GAL_LAYER( GP_OVERLAY );
         aCount = 1;
     }
 
 #if defined(DEBUG)
-    void Show( int x, std::ostream& st ) const
-    {
-    }
+    virtual void Show( int x, std::ostream& st ) const {}
 #endif
 
     /** Get class name
diff --git a/pcbnew/tools/drawing_tool.h b/pcbnew/tools/drawing_tool.h
index e8041c6..6733f0c 100644
--- a/pcbnew/tools/drawing_tool.h
+++ b/pcbnew/tools/drawing_tool.h
@@ -50,7 +50,7 @@ public:
     ~DRAWING_TOOL();
 
     /// @copydoc TOOL_INTERACTIVE::Reset()
-    void Reset( RESET_REASON aReason );
+    virtual void Reset( RESET_REASON aReason );
 
     /**
      * Function DrawLine()
diff --git a/pcbnew/tools/edit_points.h b/pcbnew/tools/edit_points.h
index 02743e0..e78680a 100644
--- a/pcbnew/tools/edit_points.h
+++ b/pcbnew/tools/edit_points.h
@@ -504,7 +504,7 @@ public:
     }
 
 #if defined(DEBUG)
-    void Show( int x, std::ostream& st ) const
+    virtual void Show( int x, std::ostream& st ) const
     {
     }
 #endif
diff --git a/pcbnew/tools/edit_tool.h b/pcbnew/tools/edit_tool.h
index 009d53c..b9463de 100644
--- a/pcbnew/tools/edit_tool.h
+++ b/pcbnew/tools/edit_tool.h
@@ -51,10 +51,10 @@ public:
     EDIT_TOOL();
 
     /// @copydoc TOOL_INTERACTIVE::Reset()
-    void Reset( RESET_REASON aReason );
+    virtual void Reset( RESET_REASON aReason );
 
     /// @copydoc TOOL_INTERACTIVE::Init()
-    bool Init();
+    virtual bool Init();
 
     /**
      * Function Main()
diff --git a/pcbnew/tools/module_tools.h b/pcbnew/tools/module_tools.h
index 8b001d7..3bc569f 100644
--- a/pcbnew/tools/module_tools.h
+++ b/pcbnew/tools/module_tools.h
@@ -46,10 +46,10 @@ public:
     MODULE_TOOLS();
 
     /// @copydoc TOOL_INTERACTIVE::Reset()
-    void Reset( RESET_REASON aReason );
+    virtual void Reset( RESET_REASON aReason );
 
     /// @copydoc TOOL_INTERACTIVE::Init()
-    bool Init();
+    virtual bool Init();
 
     /**
      * Function PlacePad()
diff --git a/pcbnew/tools/pcb_editor_control.h b/pcbnew/tools/pcb_editor_control.h
index 2225018..b7075ea 100644
--- a/pcbnew/tools/pcb_editor_control.h
+++ b/pcbnew/tools/pcb_editor_control.h
@@ -40,10 +40,10 @@ public:
     PCB_EDITOR_CONTROL();
 
     /// @copydoc TOOL_INTERACTIVE::Reset()
-    void Reset( RESET_REASON aReason );
+    virtual void Reset( RESET_REASON aReason );
 
     /// @copydoc TOOL_INTERACTIVE::Init()
-    bool Init();
+    virtual bool Init();
 
     // Track & via size control
     int TrackWidthInc( const TOOL_EVENT& aEvent );
diff --git a/pcbnew/tools/pcbnew_control.h b/pcbnew/tools/pcbnew_control.h
index 7eab41b..394dd22 100644
--- a/pcbnew/tools/pcbnew_control.h
+++ b/pcbnew/tools/pcbnew_control.h
@@ -41,10 +41,10 @@ public:
     PCBNEW_CONTROL();
 
     /// @copydoc TOOL_INTERACTIVE::Reset()
-    void Reset( RESET_REASON aReason );
+    virtual void Reset( RESET_REASON aReason );
 
     /// @copydoc TOOL_INTERACTIVE::Init()
-    bool Init();
+    virtual bool Init();
 
     // View controls
     int ZoomInOut( const TOOL_EVENT& aEvent );
diff --git a/pcbnew/tools/placement_tool.h b/pcbnew/tools/placement_tool.h
index 75e52fb..dad303c 100644
--- a/pcbnew/tools/placement_tool.h
+++ b/pcbnew/tools/placement_tool.h
@@ -36,10 +36,10 @@ public:
     virtual ~PLACEMENT_TOOL();
 
     /// @copydoc TOOL_INTERACTIVE::Reset()
-    void Reset( RESET_REASON aReason ) {};
+    virtual void Reset( RESET_REASON aReason ) {}
 
     /// @copydoc TOOL_INTERACTIVE::Init()
-    bool Init();
+    virtual bool Init();
 
     /**
      * Function AlignTop()
diff --git a/pcbnew/tools/point_editor.h b/pcbnew/tools/point_editor.h
index fa3b136..2f67072 100644
--- a/pcbnew/tools/point_editor.h
+++ b/pcbnew/tools/point_editor.h
@@ -43,10 +43,10 @@ public:
     POINT_EDITOR();
 
     /// @copydoc TOOL_INTERACTIVE::Reset()
-    void Reset( RESET_REASON aReason );
+    virtual void Reset( RESET_REASON aReason );
 
     /// @copydoc TOOL_INTERACTIVE::Init()
-    bool Init();
+    virtual bool Init();
 
     /**
      * Function OnSelected()
diff --git a/pcbnew/tools/selection_area.h b/pcbnew/tools/selection_area.h
index e177c37..cdfca4e 100644
--- a/pcbnew/tools/selection_area.h
+++ b/pcbnew/tools/selection_area.h
@@ -49,9 +49,9 @@ public:
 
     virtual const BOX2I ViewBBox() const;
 
-    void ViewDraw( int aLayer, KIGFX::GAL* aGal ) const;
+    virtual void ViewDraw( int aLayer, KIGFX::GAL* aGal ) const;
 
-    void ViewGetLayers( int aLayers[], int& aCount ) const;
+    virtual void ViewGetLayers( int aLayers[], int& aCount ) const;
 
     void SetOrigin( VECTOR2I aOrigin )
     {
@@ -64,7 +64,7 @@ public:
     }
 
 #if defined(DEBUG)
-    void Show( int x, std::ostream& st ) const
+    virtual void Show( int x, std::ostream& st ) const
     {
     }
 #endif
diff --git a/pcbnew/tools/selection_tool.h b/pcbnew/tools/selection_tool.h
index 149262c..6a4d66b 100644
--- a/pcbnew/tools/selection_tool.h
+++ b/pcbnew/tools/selection_tool.h
@@ -105,7 +105,7 @@ public:
     ~SELECTION_TOOL();
 
     /// @copydoc TOOL_INTERACTIVE::Reset()
-    void Reset( RESET_REASON aReason );
+    virtual void Reset( RESET_REASON aReason );
 
     /**
      * Function Main()
diff --git a/pcbnew/xchgmod.cpp b/pcbnew/xchgmod.cpp
index 9835d42..38ab908 100644
--- a/pcbnew/xchgmod.cpp
+++ b/pcbnew/xchgmod.cpp
@@ -62,11 +62,11 @@ public:
     ~DIALOG_EXCHANGE_MODULE() { };
 
 private:
-    void OnSelectionClicked( wxCommandEvent& event );
-    void OnOkClick( wxCommandEvent& event );
-    void OnQuit( wxCommandEvent& event );
-    void BrowseAndSelectFootprint( wxCommandEvent& event );
-    void RebuildCmpList( wxCommandEvent& event );
+    virtual void OnSelectionClicked( wxCommandEvent& event );
+    virtual void OnOkClick( wxCommandEvent& event );
+    virtual void OnQuit( wxCommandEvent& event );
+    virtual void BrowseAndSelectFootprint( wxCommandEvent& event );
+    virtual void RebuildCmpList( wxCommandEvent& event );
     void init();
 
     void ChangeCurrentFootprint();
diff --git a/polygon/clipper.hpp b/polygon/clipper.hpp
index 5f3cc1c..bb6c568 100644
--- a/polygon/clipper.hpp
+++ b/polygon/clipper.hpp
@@ -269,7 +269,7 @@ public:
   void ZFillFunction(ZFillCallback zFillFunc);
 #endif
 protected:
-  void Reset();
+  virtual void Reset();
   virtual bool ExecuteInternal();
 private:
   PolyOutList       m_PolyOuts;
diff --git a/utils/idftools/dxf2idf.h b/utils/idftools/dxf2idf.h
index 686ac07..5234f24 100644
--- a/utils/idftools/dxf2idf.h
+++ b/utils/idftools/dxf2idf.h
@@ -46,51 +46,51 @@ private:
     virtual void addCircle(const DRW_Circle& data );
 
     // DRW_Interface callbacks unsupported by DXF2IDF
-    virtual void addHeader( const DRW_Header* data ){}
-    virtual void addLType( const DRW_LType& data ){}
-    virtual void addLayer( const DRW_Layer& data ){}
-    virtual void addDimStyle( const DRW_Dimstyle& data ){}
-    virtual void addVport(const DRW_Vport& data){}
-    virtual void addTextStyle(const DRW_Textstyle& data){}
-    virtual void addBlock(const DRW_Block& data ){}
-    virtual void setBlock(const int handle){}
-    virtual void endBlock(){}
-    virtual void addPoint(const DRW_Point& data ){}
-    virtual void addRay(const DRW_Ray& data ){}
-    virtual void addXline(const DRW_Xline& data ){}
-    virtual void addEllipse(const DRW_Ellipse& data ){}
-    virtual void addLWPolyline(const DRW_LWPolyline& data ){}
-    virtual void addPolyline(const DRW_Polyline& data ){}
-    virtual void addSpline(const DRW_Spline* data ){}
-    virtual void addKnot(const DRW_Entity&){}
-    virtual void addInsert(const DRW_Insert& data ){}
-    virtual void addTrace(const DRW_Trace& data ){}
-    virtual void add3dFace(const DRW_3Dface& data ){}
-    virtual void addSolid(const DRW_Solid& data ){}
-    virtual void addMText(const DRW_MText& data){}
-    virtual void addText(const DRW_Text& data ){}
-    virtual void addDimAlign(const DRW_DimAligned *data ){}
-    virtual void addDimLinear(const DRW_DimLinear *data ){}
-    virtual void addDimRadial(const DRW_DimRadial *data ){}
-    virtual void addDimDiametric(const DRW_DimDiametric *data ){}
-    virtual void addDimAngular(const DRW_DimAngular *data ){}
-    virtual void addDimAngular3P(const DRW_DimAngular3p *data ){}
-    virtual void addDimOrdinate(const DRW_DimOrdinate *data ){}
-    virtual void addLeader(const DRW_Leader *data ){}
-    virtual void addHatch(const DRW_Hatch* data ){}
-    virtual void addViewport(const DRW_Viewport& data){}
-    virtual void addImage(const DRW_Image* data ){}
-    virtual void linkImage(const DRW_ImageDef* data ){}
-    virtual void addComment(const char*){}
-    virtual void writeHeader(DRW_Header& data){}
-    virtual void writeBlocks(){}
-    virtual void writeBlockRecords(){}
-    virtual void writeEntities(){}
-    virtual void writeLTypes(){}
-    virtual void writeLayers(){}
-    virtual void writeTextstyles(){}
-    virtual void writeVports(){}
-    virtual void writeDimstyles(){}
+    virtual void addHeader( const DRW_Header* data ) {}
+    virtual void addLType( const DRW_LType& data ) {}
+    virtual void addLayer( const DRW_Layer& data ) {}
+    virtual void addDimStyle( const DRW_Dimstyle& data ) {}
+    virtual void addVport(const DRW_Vport& data) {}
+    virtual void addTextStyle(const DRW_Textstyle& data) {}
+    virtual void addBlock(const DRW_Block& data ) {}
+    virtual void setBlock(const int handle) {}
+    virtual void endBlock() {}
+    virtual void addPoint(const DRW_Point& data ) {}
+    virtual void addRay(const DRW_Ray& data ) {}
+    virtual void addXline(const DRW_Xline& data ) {}
+    virtual void addEllipse(const DRW_Ellipse& data ) {}
+    virtual void addLWPolyline(const DRW_LWPolyline& data ) {}
+    virtual void addPolyline(const DRW_Polyline& data ) {}
+    virtual void addSpline(const DRW_Spline* data ) {}
+    virtual void addKnot(const DRW_Entity&) {}
+    virtual void addInsert(const DRW_Insert& data ) {}
+    virtual void addTrace(const DRW_Trace& data ) {}
+    virtual void add3dFace(const DRW_3Dface& data ) {}
+    virtual void addSolid(const DRW_Solid& data ) {}
+    virtual void addMText(const DRW_MText& data) {}
+    virtual void addText(const DRW_Text& data ) {}
+    virtual void addDimAlign(const DRW_DimAligned *data ) {}
+    virtual void addDimLinear(const DRW_DimLinear *data ) {}
+    virtual void addDimRadial(const DRW_DimRadial *data ) {}
+    virtual void addDimDiametric(const DRW_DimDiametric *data ) {}
+    virtual void addDimAngular(const DRW_DimAngular *data ) {}
+    virtual void addDimAngular3P(const DRW_DimAngular3p *data ) {}
+    virtual void addDimOrdinate(const DRW_DimOrdinate *data ) {}
+    virtual void addLeader(const DRW_Leader *data ) {}
+    virtual void addHatch(const DRW_Hatch* data ) {}
+    virtual void addViewport(const DRW_Viewport& data) {}
+    virtual void addImage(const DRW_Image* data ) {}
+    virtual void linkImage(const DRW_ImageDef* data ) {}
+    virtual void addComment(const char*) {}
+    virtual void writeHeader(DRW_Header& data) {}
+    virtual void writeBlocks() {}
+    virtual void writeBlockRecords() {}
+    virtual void writeEntities() {}
+    virtual void writeLTypes() {}
+    virtual void writeLayers() {}
+    virtual void writeTextstyles() {}
+    virtual void writeVports() {}
+    virtual void writeDimstyles() {}
     virtual void addAppId( const DRW_AppId& data ) {}
     virtual void writeAppId() {}
 };
-- 
2.1.4



Follow ups

References