← Back to team overview

kicad-developers team mailing list archive

[PATCH 3/4] Add "virtual" keyword on implicitly virtual methods

 

These methods override virtual methods from the base class, so these are
virtual anyway, and explicitly marking them makes the class definition
easier to read.
---
 3d-viewer/3d_cache/dialogs/dlg_3d_pathconfig.h     |  10 +-
 3d-viewer/3d_cache/dialogs/dlg_select_3dmodel.h    |   2 +-
 3d-viewer/3d_cache/sg/scenegraph.h                 |  18 ++--
 3d-viewer/3d_cache/sg/sg_appearance.h              |  18 ++--
 3d-viewer/3d_cache/sg/sg_colors.h                  |  18 ++--
 3d-viewer/3d_cache/sg/sg_coords.h                  |  18 ++--
 3d-viewer/3d_cache/sg/sg_faceset.h                 |  18 ++--
 3d-viewer/3d_cache/sg/sg_index.h                   |  18 ++--
 3d-viewer/3d_cache/sg/sg_normals.h                 |  18 ++--
 3d-viewer/3d_cache/sg/sg_shape.h                   |  18 ++--
 3d-viewer/3d_draw.cpp                              |   2 +-
 3d-viewer/3d_material.h                            |   2 +-
 .../3d_render_ogl_legacy/c3d_render_ogl_legacy.h   |   4 +-
 .../3d_render_raytracing/accelerators/ccontainer.h |   4 +-
 .../accelerators/ccontainer2d.h                    |   4 +-
 .../3d_rendering/3d_render_raytracing/cmaterial.h  |   2 +-
 .../shapes2D/cfilledcircle2d.h                     |  10 +-
 .../3d_render_raytracing/shapes2D/cpolygon2d.h     |  20 ++--
 .../3d_render_raytracing/shapes2D/cpolygon4pts2d.h |  10 +-
 .../3d_render_raytracing/shapes2D/cring2d.h        |  10 +-
 .../shapes2D/croundsegment2d.h                     |  10 +-
 .../3d_render_raytracing/shapes2D/ctriangle2d.h    |  10 +-
 3d-viewer/3d_rendering/ctrack_ball.h               |  10 +-
 3d-viewer/3d_struct.h                              |   4 +-
 3d-viewer/3d_viewer.h                              |   4 +-
 3d-viewer/dialogs/dialog_3D_view_option.cpp        |   8 +-
 3d-viewer/modelparsers.h                           |   4 +-
 bitmap2component/bitmap2cmp_gui.cpp                |  22 ++--
 common/confirm.cpp                                 |   6 +-
 common/dialogs/dialog_image_editor.h               |  18 ++--
 common/dialogs/dialog_page_settings.h              |  30 +++---
 common/dialogs/wx_html_report_panel.h              |  14 +--
 common/single_top.cpp                              |  12 +--
 cvpcb/class_DisplayFootprintsFrame.h               |  20 ++--
 cvpcb/cvpcb.cpp                                    |   8 +-
 cvpcb/cvpcb_mainframe.h                            |   8 +-
 cvpcb/dialogs/dialog_config_equfiles.h             |  14 +--
 cvpcb/dialogs/dialog_display_options.h             |   8 +-
 cvpcb/dialogs/fp_conflict_assignment_selector.h    |  10 +-
 cvpcb/listview_classes.h                           |   6 +-
 eeschema/class_libentry.h                          |   4 +-
 eeschema/class_sch_screen.h                        |   2 +-
 eeschema/dialogs/dialog_annotate.cpp               |   6 +-
 eeschema/dialogs/dialog_bom.cpp                    |  20 ++--
 eeschema/dialogs/dialog_edit_component_in_lib.h    |  22 ++--
 .../dialogs/dialog_edit_component_in_schematic.cpp |  24 ++---
 eeschema/dialogs/dialog_edit_label.cpp             |   4 +-
 .../dialogs/dialog_edit_libentry_fields_in_lib.cpp |  20 ++--
 eeschema/dialogs/dialog_edit_one_field.h           |   8 +-
 eeschema/dialogs/dialog_eeschema_config.cpp        |  20 ++--
 eeschema/dialogs/dialog_eeschema_options.h         |  10 +-
 eeschema/dialogs/dialog_erc.h                      |  14 +--
 eeschema/dialogs/dialog_lib_edit_pin.h             |  12 +--
 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    |  20 ++--
 eeschema/dialogs/dialog_rescue_each.cpp            |  16 +--
 eeschema/dialogs/dialog_schematic_find.h           |  20 ++--
 eeschema/eeschema.cpp                              |   8 +-
 eeschema/lib_arc.h                                 |  56 +++++-----
 eeschema/lib_bezier.h                              |  48 ++++-----
 eeschema/lib_circle.h                              |  60 +++++------
 eeschema/lib_collectors.h                          |   2 +-
 eeschema/lib_draw_item.h                           |   2 +-
 eeschema/lib_field.h                               |  66 ++++++------
 eeschema/lib_pin.h                                 |  58 +++++-----
 eeschema/lib_polyline.h                            |  58 +++++-----
 eeschema/lib_rectangle.h                           |  58 +++++-----
 eeschema/lib_text.h                                |  64 +++++------
 eeschema/libeditframe.h                            |  26 ++---
 .../netlist_exporters/netlist_exporter_cadstar.h   |   2 +-
 .../netlist_exporters/netlist_exporter_generic.h   |   2 +-
 .../netlist_exporters/netlist_exporter_kicad.h     |   2 +-
 .../netlist_exporters/netlist_exporter_orcadpcb2.h |   2 +-
 .../netlist_exporters/netlist_exporter_pspice.h    |   2 +-
 eeschema/sch_base_frame.h                          |  28 ++---
 eeschema/sch_bitmap.h                              |  42 ++++----
 eeschema/sch_bus_entry.h                           |  64 +++++------
 eeschema/sch_collectors.h                          |   6 +-
 eeschema/sch_component.h                           |  70 ++++++------
 eeschema/sch_field.h                               |  46 ++++----
 eeschema/sch_junction.h                            |  52 ++++-----
 eeschema/sch_line.h                                |  58 +++++-----
 eeschema/sch_marker.h                              |  40 +++----
 eeschema/sch_no_connect.h                          |  54 +++++-----
 eeschema/sch_sheet.h                               | 118 ++++++++++----------
 eeschema/sch_text.h                                | 104 +++++++++---------
 eeschema/schframe.h                                |  36 +++----
 eeschema/viewlib_frame.h                           |  26 ++---
 gerbview/class_gbr_layer_box_selector.h            |  11 +-
 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                          |  54 +++++-----
 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_worksheet_dataitem.h                 |   4 +-
 include/dialog_env_var_config.h                    |   4 +-
 include/dialog_get_component.h                     |   6 +-
 include/dialog_helpers.h                           |  12 +--
 include/dialog_hotkeys_editor.h                    |   8 +-
 include/dialog_shim.h                              |   4 +-
 include/draw_frame.h                               |   6 +-
 include/filter_reader.h                            |  12 +--
 include/gal/opengl/noncached_container.h           |   2 +-
 include/gal/opengl/opengl_compositor.h             |   2 +-
 include/geometry/shape_circle.h                    |  10 +-
 include/geometry/shape_convex.h                    |  10 +-
 include/geometry/shape_line_chain.h                |  16 +--
 include/geometry/shape_poly_set.h                  |  14 +--
 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/origin_viewitem.h                          |  10 +-
 include/plot_common.h                              |   4 +-
 include/plugins/3dapi/ifsg_appearance.h            |   6 +-
 include/plugins/3dapi/ifsg_colors.h                |   6 +-
 include/plugins/3dapi/ifsg_coordindex.h            |   6 +-
 include/plugins/3dapi/ifsg_coords.h                |   6 +-
 include/plugins/3dapi/ifsg_faceset.h               |   6 +-
 include/plugins/3dapi/ifsg_normals.h               |   6 +-
 include/plugins/3dapi/ifsg_shape.h                 |   6 +-
 include/plugins/3dapi/ifsg_transform.h             |   6 +-
 include/reporter.h                                 |   8 +-
 include/richio.h                                   |  12 +--
 include/tool/context_menu.h                        |   2 +-
 include/view/view_group.h                          |  10 +-
 include/view/wx_view_controls.h                    |  12 +--
 include/worksheet_viewitem.h                       |   8 +-
 include/wxBasePcbFrame.h                           |  36 +++----
 include/wxPcbStruct.h                              |  56 +++++-----
 include/wxstruct.h                                 |   4 +-
 kicad/class_treeprojectfiles.h                     |   3 +-
 kicad/dialogs/dialog_template_selector.h           |   8 +-
 kicad/kicad.cpp                                    |   6 +-
 kicad/kicad.h                                      |  14 +--
 kicad/pgm_kicad.h                                  |   6 +-
 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                |  52 ++++-----
 pagelayout_editor/properties_frame.h               |   6 +-
 pcb_calculator/pcb_calculator.cpp                  |   8 +-
 pcb_calculator/pcb_calculator.h                    |  56 +++++-----
 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                           |  32 +++---
 pcbnew/class_drawsegment.h                         |  14 +--
 pcbnew/class_edge_mod.h                            |  20 ++--
 pcbnew/class_marker_pcb.h                          |  24 ++---
 pcbnew/class_mire.h                                |  28 ++---
 pcbnew/class_module.h                              |  39 ++++---
 pcbnew/class_netinfo.h                             |  12 +--
 pcbnew/class_pad.h                                 |  37 ++++---
 pcbnew/class_pcb_layer_box_selector.h              |   8 +-
 pcbnew/class_pcb_layer_widget.h                    |  10 +-
 pcbnew/class_pcb_text.h                            |  26 ++---
 pcbnew/class_text_mod.h                            |  25 +++--
 pcbnew/class_track.h                               |  45 ++++----
 pcbnew/class_zone.h                                |  22 ++--
 pcbnew/collectors.h                                |  66 ++++++------
 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               |  16 +--
 pcbnew/dialogs/dialog_design_rules.h               |  24 ++---
 pcbnew/dialogs/dialog_display_options.h            |   4 +-
 pcbnew/dialogs/dialog_drc.h                        |  32 +++---
 pcbnew/dialogs/dialog_drclistbox.h                 |  20 ++--
 .../dialogs/dialog_edit_module_for_BoardEditor.h   |  24 ++---
 pcbnew/dialogs/dialog_edit_module_for_Modedit.h    |  18 ++--
 pcbnew/dialogs/dialog_edit_module_text.h           |   6 +-
 pcbnew/dialogs/dialog_find.h                       |   8 +-
 pcbnew/dialogs/dialog_footprint_wizard_list.h      |   2 +-
 pcbnew/dialogs/dialog_fp_lib_table.cpp             |  42 ++++----
 pcbnew/dialogs/dialog_fp_plugin_options.cpp        |  20 ++--
 pcbnew/dialogs/dialog_freeroute_exchange.h         |   8 +-
 pcbnew/dialogs/dialog_gendrill.h                   |  14 +--
 pcbnew/dialogs/dialog_general_options.h            |   6 +-
 pcbnew/dialogs/dialog_get_footprint_by_name.h      |   2 +-
 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  |   6 +-
 .../dialog_graphic_item_properties_for_Modedit.cpp |   6 +-
 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                 |   8 +-
 pcbnew/dialogs/dialog_netlist.h                    |  18 ++--
 .../dialogs/dialog_non_copper_zones_properties.cpp |   4 +-
 pcbnew/dialogs/dialog_pad_properties.h             |  20 ++--
 pcbnew/dialogs/dialog_pcb_text_properties.cpp      |   4 +-
 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_select_net_from_list.cpp     |   4 +-
 pcbnew/dialogs/dialog_select_pretty_lib.h          |   2 +-
 pcbnew/dialogs/dialog_set_grid.cpp                 |   6 +-
 pcbnew/dialogs/dialog_track_via_properties.h       |  10 +-
 pcbnew/dialogs/dialog_track_via_size.h             |   6 +-
 pcbnew/dialogs/wizard_3DShape_Libs_downloader.h    |  18 ++--
 pcbnew/dialogs/wizard_add_fplib.h                  |  14 +--
 pcbnew/dimension.cpp                               |   4 +-
 pcbnew/eagle_plugin.h                              |  14 +--
 pcbnew/edit.cpp                                    |  12 +--
 pcbnew/exporters/gen_modules_placefile.cpp         |   4 +-
 pcbnew/footprint_wizard_frame.h                    |  30 +++---
 pcbnew/github/github_plugin.h                      |  20 ++--
 pcbnew/github/html_link_parser.h                   |   8 +-
 pcbnew/globaleditpad.cpp                           |   6 +-
 pcbnew/gpcb_plugin.h                               |  20 ++--
 pcbnew/import_dxf/dialog_dxf_import.h              |   8 +-
 pcbnew/import_dxf/dxf2brd_items.h                  |   6 +-
 pcbnew/kicad_plugin.h                              |  28 ++---
 pcbnew/legacy_plugin.h                             |  14 +--
 pcbnew/module_editor_frame.h                       |  50 ++++-----
 pcbnew/modview_frame.h                             |  34 +++---
 pcbnew/pcad2kicadpcb_plugin/pcad_plugin.h          |  10 +-
 pcbnew/pcad2kicadpcb_plugin/pcb.h                  |  18 ++--
 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_base_edit_frame.h                       |   2 +-
 pcbnew/pcb_draw_panel_gal.h                        |   2 +-
 pcbnew/pcb_painter.h                               |   4 +-
 pcbnew/pcbnew.cpp                                  |   8 +-
 pcbnew/printout_controler.h                        |   6 +-
 pcbnew/ratsnest.cpp                                |   2 +-
 pcbnew/ratsnest_data.h                             |   8 +-
 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                    |  32 +++---
 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.h                        |   4 +-
 pcbnew/sel_layer.cpp                               |  16 +--
 pcbnew/specctra.h                                  | 120 ++++++++++-----------
 pcbnew/target_edit.cpp                             |   4 +-
 pcbnew/tools/bright_box.h                          |   6 +-
 pcbnew/tools/drawing_tool.h                        |   4 +-
 pcbnew/tools/edit_points.h                         |   2 +-
 pcbnew/tools/edit_tool.cpp                         |  16 +--
 pcbnew/tools/edit_tool.h                           |   6 +-
 pcbnew/tools/module_tools.h                        |   6 +-
 pcbnew/tools/pcb_editor_control.h                  |   6 +-
 pcbnew/tools/pcbnew_control.h                      |   4 +-
 pcbnew/tools/picker_tool.h                         |   4 +-
 pcbnew/tools/placement_tool.h                      |   6 +-
 pcbnew/tools/point_editor.h                        |   6 +-
 pcbnew/tools/selection_area.h                      |   6 +-
 pcbnew/tools/selection_tool.h                      |   6 +-
 pcbnew/xchgmod.cpp                                 |  12 +--
 plugins/3d/vrml/v1/vrml1_base.h                    |   6 +-
 plugins/3d/vrml/v1/vrml1_coords.h                  |   8 +-
 plugins/3d/vrml/v1/vrml1_faceset.h                 |   8 +-
 plugins/3d/vrml/v1/vrml1_group.h                   |   4 +-
 plugins/3d/vrml/v1/vrml1_matbinding.h              |   8 +-
 plugins/3d/vrml/v1/vrml1_material.h                |   8 +-
 plugins/3d/vrml/v1/vrml1_separator.h               |   4 +-
 plugins/3d/vrml/v1/vrml1_shapehints.h              |   8 +-
 plugins/3d/vrml/v1/vrml1_switch.h                  |   4 +-
 plugins/3d/vrml/v1/vrml1_transform.h               |   8 +-
 plugins/3d/vrml/v2/vrml2_appearance.h              |  14 +--
 plugins/3d/vrml/v2/vrml2_base.h                    |   8 +-
 plugins/3d/vrml/v2/vrml2_box.h                     |  10 +-
 plugins/3d/vrml/v2/vrml2_color.h                   |  10 +-
 plugins/3d/vrml/v2/vrml2_coords.h                  |  10 +-
 plugins/3d/vrml/v2/vrml2_faceset.h                 |  14 +--
 plugins/3d/vrml/v2/vrml2_inline.h                  |  10 +-
 plugins/3d/vrml/v2/vrml2_lineset.h                 |  14 +--
 plugins/3d/vrml/v2/vrml2_material.h                |  10 +-
 plugins/3d/vrml/v2/vrml2_norms.h                   |  10 +-
 plugins/3d/vrml/v2/vrml2_pointset.h                |  14 +--
 plugins/3d/vrml/v2/vrml2_shape.h                   |  14 +--
 plugins/3d/vrml/v2/vrml2_switch.h                  |   8 +-
 plugins/3d/vrml/v2/vrml2_transform.h               |   8 +-
 plugins/3d/vrml/x3d/x3d_appearance.h               |  10 +-
 plugins/3d/vrml/x3d/x3d_coords.h                   |  10 +-
 plugins/3d/vrml/x3d/x3d_ifaceset.h                 |  10 +-
 plugins/3d/vrml/x3d/x3d_shape.h                    |  10 +-
 plugins/3d/vrml/x3d/x3d_transform.h                |  10 +-
 plugins/ldr/3d/pluginldr3D.h                       |   6 +-
 utils/idftools/dxf2idf.h                           |  84 +++++++--------
 321 files changed, 2329 insertions(+), 2337 deletions(-)

diff --git a/3d-viewer/3d_cache/dialogs/dlg_3d_pathconfig.h b/3d-viewer/3d_cache/dialogs/dlg_3d_pathconfig.h
index 74e5491..9a7759e 100644
--- a/3d-viewer/3d_cache/dialogs/dlg_3d_pathconfig.h
+++ b/3d-viewer/3d_cache/dialogs/dlg_3d_pathconfig.h
@@ -37,14 +37,14 @@ private:
     wxString m_curdir;
     wxTextValidator m_aliasValidator;
 
-    void OnAddAlias( wxCommandEvent& event );
-    void OnDelAlias( wxCommandEvent& event );
-    void OnAliasMoveUp( wxCommandEvent& event );
-    void OnAliasMoveDown( wxCommandEvent& event );
+    virtual void OnAddAlias( wxCommandEvent& event );
+    virtual void OnDelAlias( wxCommandEvent& event );
+    virtual void OnAliasMoveUp( wxCommandEvent& event );
+    virtual void OnAliasMoveDown( wxCommandEvent& event );
 
 public:
     DLG_3D_PATH_CONFIG( wxWindow* aParent, S3D_FILENAME_RESOLVER* aResolver );
-    bool TransferDataFromWindow();
+    virtual bool TransferDataFromWindow();
 };
 
 #endif  // DLG_3D_PATHCONFIG_H
diff --git a/3d-viewer/3d_cache/dialogs/dlg_select_3dmodel.h b/3d-viewer/3d_cache/dialogs/dlg_select_3dmodel.h
index 2d32088..4eb8ab5 100644
--- a/3d-viewer/3d_cache/dialogs/dlg_select_3dmodel.h
+++ b/3d-viewer/3d_cache/dialogs/dlg_select_3dmodel.h
@@ -64,7 +64,7 @@ public:
     DLG_SELECT_3DMODEL( wxWindow* aParent, S3D_CACHE* aCacheManager, S3D_INFO* aModelItem,
         wxString& prevModelSelectDir, int& prevModelWildcard );
 
-    bool TransferDataFromWindow();
+    virtual bool TransferDataFromWindow();
     void OnSelectionChanged( wxTreeEvent& event );
     void OnFileActivated( wxTreeEvent& event );
     void SetRootDir( wxCommandEvent& event );
diff --git a/3d-viewer/3d_cache/sg/scenegraph.h b/3d-viewer/3d_cache/sg/scenegraph.h
index 1ba7467..8f43487 100644
--- a/3d-viewer/3d_cache/sg/scenegraph.h
+++ b/3d-viewer/3d_cache/sg/scenegraph.h
@@ -57,8 +57,8 @@ private:
     bool addNode( SGNODE* aNode, bool isChild );
 
 public:
-    void unlinkChildNode( const SGNODE* aNode );
-    void unlinkRefNode( const SGNODE* aNode );
+    virtual void unlinkChildNode( const SGNODE* aNode );
+    virtual void unlinkRefNode( const SGNODE* aNode );
 
 public:
     // note: order of transformation is Translate, Rotate, Offset
@@ -74,15 +74,15 @@ public:
     virtual ~SCENEGRAPH();
 
     virtual bool SetParent( SGNODE* aParent, bool notify = true );
-    SGNODE* FindNode(const char *aNodeName, const SGNODE *aCaller);
-    bool AddRefNode( SGNODE* aNode );
-    bool AddChildNode( SGNODE* aNode );
+    virtual SGNODE* FindNode(const char *aNodeName, const SGNODE *aCaller);
+    virtual bool AddRefNode( SGNODE* aNode );
+    virtual bool AddChildNode( SGNODE* aNode );
 
-    void ReNameNodes( void );
-    bool WriteVRML( std::ofstream& aFile, bool aReuseFlag );
+    virtual void ReNameNodes( void );
+    virtual bool WriteVRML( std::ofstream& aFile, bool aReuseFlag );
 
-    bool WriteCache( std::ofstream& aFile, SGNODE* parentNode );
-    bool ReadCache( std::ifstream& aFile, SGNODE* parentNode );
+    virtual bool WriteCache( std::ofstream& aFile, SGNODE* parentNode );
+    virtual bool ReadCache( std::ifstream& aFile, SGNODE* parentNode );
 
     bool Prepare( const glm::dmat4* aTransform,
         S3D::MATLIST& materials, std::vector< SMESH >& meshes );
diff --git a/3d-viewer/3d_cache/sg/sg_appearance.h b/3d-viewer/3d_cache/sg/sg_appearance.h
index f44f85a..291cde6 100644
--- a/3d-viewer/3d_cache/sg/sg_appearance.h
+++ b/3d-viewer/3d_cache/sg/sg_appearance.h
@@ -41,8 +41,8 @@ public:
     SGCOLOR emissive;   // default 0.0 0.0 0.0
     SGCOLOR specular;   // default 0.0 0.0 0.0
 
-    void unlinkChildNode( const SGNODE* aNode );
-    void unlinkRefNode( const SGNODE* aNode );
+    virtual void unlinkChildNode( const SGNODE* aNode );
+    virtual void unlinkRefNode( const SGNODE* aNode );
 
 public:
     SGAPPEARANCE( SGNODE* aParent );
@@ -66,15 +66,15 @@ public:
     bool SetAmbient( const SGCOLOR* aRGBColor );
     bool SetAmbient( const SGCOLOR& aRGBColor );
 
-    SGNODE* FindNode(const char *aNodeName, const SGNODE *aCaller);
-    bool AddRefNode( SGNODE* aNode );
-    bool AddChildNode( SGNODE* aNode );
+    virtual SGNODE* FindNode(const char *aNodeName, const SGNODE *aCaller);
+    virtual bool AddRefNode( SGNODE* aNode );
+    virtual bool AddChildNode( SGNODE* aNode );
 
-    void ReNameNodes( void );
-    bool WriteVRML( std::ofstream& aFile, bool aReuseFlag );
+    virtual void ReNameNodes( void );
+    virtual bool WriteVRML( std::ofstream& aFile, bool aReuseFlag );
 
-    bool WriteCache( std::ofstream& aFile, SGNODE* parentNode );
-    bool ReadCache( std::ifstream& aFile, SGNODE* parentNode );
+    virtual bool WriteCache( std::ofstream& aFile, SGNODE* parentNode );
+    virtual bool ReadCache( std::ifstream& aFile, SGNODE* parentNode );
 };
 
 #endif  // SG_APPEARANCE_H
diff --git a/3d-viewer/3d_cache/sg/sg_colors.h b/3d-viewer/3d_cache/sg/sg_colors.h
index edfdd50..18a7fbb 100644
--- a/3d-viewer/3d_cache/sg/sg_colors.h
+++ b/3d-viewer/3d_cache/sg/sg_colors.h
@@ -37,8 +37,8 @@ class SGCOLORS : public SGNODE
 public:
     std::vector< SGCOLOR > colors;
 
-    void unlinkChildNode( const SGNODE* aNode );
-    void unlinkRefNode( const SGNODE* aNode );
+    virtual void unlinkChildNode( const SGNODE* aNode );
+    virtual void unlinkRefNode( const SGNODE* aNode );
 
 public:
     SGCOLORS( SGNODE* aParent );
@@ -46,20 +46,20 @@ public:
 
     virtual bool SetParent( SGNODE* aParent, bool notify = true );
 
-    SGNODE* FindNode(const char *aNodeName, const SGNODE *aCaller);
-    bool AddRefNode( SGNODE* aNode );
-    bool AddChildNode( SGNODE* aNode );
+    virtual SGNODE* FindNode(const char *aNodeName, const SGNODE *aCaller);
+    virtual bool AddRefNode( SGNODE* aNode );
+    virtual bool AddChildNode( SGNODE* aNode );
 
     bool GetColorList( size_t& aListSize, SGCOLOR*& aColorList );
     void SetColorList( size_t aListSize, const SGCOLOR* aColorList );
     void AddColor( double aRedValue, double aGreenValue, double aBlueValue );
     void AddColor( const SGCOLOR& aColor );
 
-    void ReNameNodes( void );
-    bool WriteVRML( std::ofstream& aFile, bool aReuseFlag );
+    virtual void ReNameNodes( void );
+    virtual bool WriteVRML( std::ofstream& aFile, bool aReuseFlag );
 
-    bool WriteCache( std::ofstream& aFile, SGNODE* parentNode );
-    bool ReadCache( std::ifstream& aFile, SGNODE* parentNode );
+    virtual bool WriteCache( std::ofstream& aFile, SGNODE* parentNode );
+    virtual bool ReadCache( std::ifstream& aFile, SGNODE* parentNode );
 };
 
 #endif  // SG_COLORS_H
diff --git a/3d-viewer/3d_cache/sg/sg_coords.h b/3d-viewer/3d_cache/sg/sg_coords.h
index 5e5a9f6..b1b40e9 100644
--- a/3d-viewer/3d_cache/sg/sg_coords.h
+++ b/3d-viewer/3d_cache/sg/sg_coords.h
@@ -39,8 +39,8 @@ class SGCOORDS : public SGNODE
 public:
     std::vector< SGPOINT > coords;
 
-    void unlinkChildNode( const SGNODE* aNode );
-    void unlinkRefNode( const SGNODE* aNode );
+    virtual void unlinkChildNode( const SGNODE* aNode );
+    virtual void unlinkRefNode( const SGNODE* aNode );
 
 public:
     SGCOORDS( SGNODE* aParent );
@@ -48,9 +48,9 @@ public:
 
     virtual bool SetParent( SGNODE* aParent, bool notify = true );
 
-    SGNODE* FindNode(const char *aNodeName, const SGNODE *aCaller);
-    bool AddRefNode( SGNODE* aNode );
-    bool AddChildNode( SGNODE* aNode );
+    virtual SGNODE* FindNode(const char *aNodeName, const SGNODE *aCaller);
+    virtual bool AddRefNode( SGNODE* aNode );
+    virtual bool AddChildNode( SGNODE* aNode );
 
     bool GetCoordsList( size_t& aListSize, SGPOINT*& aCoordsList );
     void SetCoordsList( size_t aListSize, const SGPOINT* aCoordsList );
@@ -64,11 +64,11 @@ public:
      */
     bool CalcNormals( SGFACESET* callingNode, SGNODE** aPtr = NULL );
 
-    void ReNameNodes( void );
-    bool WriteVRML( std::ofstream& aFile, bool aReuseFlag );
+    virtual void ReNameNodes( void );
+    virtual bool WriteVRML( std::ofstream& aFile, bool aReuseFlag );
 
-    bool WriteCache( std::ofstream& aFile, SGNODE* parentNode );
-    bool ReadCache( std::ifstream& aFile, SGNODE* parentNode );
+    virtual bool WriteCache( std::ofstream& aFile, SGNODE* parentNode );
+    virtual bool ReadCache( std::ifstream& aFile, SGNODE* parentNode );
 };
 
 #endif  // SG_COORDS_H
diff --git a/3d-viewer/3d_cache/sg/sg_faceset.h b/3d-viewer/3d_cache/sg/sg_faceset.h
index a016ac9..322cf76 100644
--- a/3d-viewer/3d_cache/sg/sg_faceset.h
+++ b/3d-viewer/3d_cache/sg/sg_faceset.h
@@ -60,8 +60,8 @@ public:
     SGCOORDS*       m_RCoords;
     SGNORMALS*      m_RNormals;
 
-    void unlinkChildNode( const SGNODE* aNode );
-    void unlinkRefNode( const SGNODE* aNode );
+    virtual void unlinkChildNode( const SGNODE* aNode );
+    virtual void unlinkRefNode( const SGNODE* aNode );
     // validate the data held by this face set
     bool validate( void );
 
@@ -71,17 +71,17 @@ public:
 
     virtual bool SetParent( SGNODE* aParent, bool notify = true );
 
-    SGNODE* FindNode( const char *aNodeName, const SGNODE *aCaller );
-    bool AddRefNode( SGNODE* aNode );
-    bool AddChildNode( SGNODE* aNode );
+    virtual SGNODE* FindNode( const char *aNodeName, const SGNODE *aCaller );
+    virtual bool AddRefNode( SGNODE* aNode );
+    virtual bool AddChildNode( SGNODE* aNode );
 
     bool CalcNormals( SGNODE** aPtr );
 
-    void ReNameNodes( void );
-    bool WriteVRML( std::ofstream& aFile, bool aReuseFlag );
+    virtual void ReNameNodes( void );
+    virtual bool WriteVRML( std::ofstream& aFile, bool aReuseFlag );
 
-    bool WriteCache( std::ofstream& aFile, SGNODE* parentNode );
-    bool ReadCache( std::ifstream& aFile, SGNODE* parentNode );
+    virtual bool WriteCache( std::ofstream& aFile, SGNODE* parentNode );
+    virtual bool ReadCache( std::ifstream& aFile, SGNODE* parentNode );
 
     /**
      * Function GatherCoordIndices
diff --git a/3d-viewer/3d_cache/sg/sg_index.h b/3d-viewer/3d_cache/sg/sg_index.h
index ee4484a..659cba2 100644
--- a/3d-viewer/3d_cache/sg/sg_index.h
+++ b/3d-viewer/3d_cache/sg/sg_index.h
@@ -42,8 +42,8 @@ protected:
 public:
     // for internal SG consumption only
     std::vector< int > index;
-    void unlinkChildNode( const SGNODE* aCaller );
-    void unlinkRefNode( const SGNODE* aCaller );
+    virtual void unlinkChildNode( const SGNODE* aCaller );
+    virtual void unlinkRefNode( const SGNODE* aCaller );
 
 public:
     SGINDEX( SGNODE* aParent );
@@ -51,9 +51,9 @@ public:
 
     virtual bool SetParent( SGNODE* aParent, bool notify = true );
 
-    SGNODE* FindNode(const char *aNodeName, const SGNODE *aCaller);
-    bool AddRefNode( SGNODE* aNode );
-    bool AddChildNode( SGNODE* aNode );
+    virtual SGNODE* FindNode(const char *aNodeName, const SGNODE *aCaller);
+    virtual bool AddRefNode( SGNODE* aNode );
+    virtual bool AddChildNode( SGNODE* aNode );
 
     /**
      * Function GetIndices
@@ -88,11 +88,11 @@ public:
      */
     void AddIndex( int aIndex );
 
-    void ReNameNodes( void );
-    bool WriteVRML( std::ofstream& aFile, bool aReuseFlag );
+    virtual void ReNameNodes( void );
+    virtual bool WriteVRML( std::ofstream& aFile, bool aReuseFlag );
 
-    bool WriteCache( std::ofstream& aFile, SGNODE* parentNode );
-    bool ReadCache( std::ifstream& aFile, SGNODE* parentNode );
+    virtual bool WriteCache( std::ofstream& aFile, SGNODE* parentNode );
+    virtual bool ReadCache( std::ifstream& aFile, SGNODE* parentNode );
 };
 
 #endif  // SG_INDEX_H
diff --git a/3d-viewer/3d_cache/sg/sg_normals.h b/3d-viewer/3d_cache/sg/sg_normals.h
index 356072d..47552af 100644
--- a/3d-viewer/3d_cache/sg/sg_normals.h
+++ b/3d-viewer/3d_cache/sg/sg_normals.h
@@ -37,8 +37,8 @@ class SGNORMALS : public SGNODE
 public:
     std::vector< SGVECTOR > norms;
 
-    void unlinkChildNode( const SGNODE* aNode );
-    void unlinkRefNode( const SGNODE* aNode );
+    virtual void unlinkChildNode( const SGNODE* aNode );
+    virtual void unlinkRefNode( const SGNODE* aNode );
 
 public:
     SGNORMALS( SGNODE* aParent );
@@ -46,20 +46,20 @@ public:
 
     virtual bool SetParent( SGNODE* aParent, bool notify = true );
 
-    SGNODE* FindNode(const char *aNodeName, const SGNODE *aCaller);
-    bool AddRefNode( SGNODE* aNode );
-    bool AddChildNode( SGNODE* aNode );
+    virtual SGNODE* FindNode(const char *aNodeName, const SGNODE *aCaller);
+    virtual bool AddRefNode( SGNODE* aNode );
+    virtual bool AddChildNode( SGNODE* aNode );
 
     bool GetNormalList( size_t& aListSize, SGVECTOR*& aNormalList );
     void SetNormalList( size_t aListSize, const SGVECTOR* aNormalList );
     void AddNormal( double aXValue, double aYValue, double aZValue );
     void AddNormal( const SGVECTOR& aNormal );
 
-    void ReNameNodes( void );
-    bool WriteVRML( std::ofstream& aFile, bool aReuseFlag );
+    virtual void ReNameNodes( void );
+    virtual bool WriteVRML( std::ofstream& aFile, bool aReuseFlag );
 
-    bool WriteCache( std::ofstream& aFile, SGNODE* parentNode );
-    bool ReadCache( std::ifstream& aFile, SGNODE* parentNode );
+    virtual bool WriteCache( std::ofstream& aFile, SGNODE* parentNode );
+    virtual bool ReadCache( std::ifstream& aFile, SGNODE* parentNode );
 };
 
 #endif  // SG_NORMALS_H
diff --git a/3d-viewer/3d_cache/sg/sg_shape.h b/3d-viewer/3d_cache/sg/sg_shape.h
index 281042e..d6c07b8 100644
--- a/3d-viewer/3d_cache/sg/sg_shape.h
+++ b/3d-viewer/3d_cache/sg/sg_shape.h
@@ -51,8 +51,8 @@ public:
     SGAPPEARANCE* m_RAppearance;
     SGFACESET*    m_RFaceSet;
 
-    void unlinkChildNode( const SGNODE* aNode );
-    void unlinkRefNode( const SGNODE* aNode );
+    virtual void unlinkChildNode( const SGNODE* aNode );
+    virtual void unlinkRefNode( const SGNODE* aNode );
 
 public:
     SGSHAPE( SGNODE* aParent );
@@ -60,15 +60,15 @@ public:
 
     virtual bool SetParent( SGNODE* aParent, bool notify = true );
 
-    SGNODE* FindNode(const char *aNodeName, const SGNODE *aCaller);
-    bool AddRefNode( SGNODE* aNode );
-    bool AddChildNode( SGNODE* aNode );
+    virtual SGNODE* FindNode(const char *aNodeName, const SGNODE *aCaller);
+    virtual bool AddRefNode( SGNODE* aNode );
+    virtual bool AddChildNode( SGNODE* aNode );
 
-    void ReNameNodes( void );
-    bool WriteVRML( std::ofstream& aFile, bool aReuseFlag );
+    virtual void ReNameNodes( void );
+    virtual bool WriteVRML( std::ofstream& aFile, bool aReuseFlag );
 
-    bool WriteCache( std::ofstream& aFile, SGNODE* parentNode );
-    bool ReadCache( std::ifstream& aFile, SGNODE* parentNode );
+    virtual bool WriteCache( std::ofstream& aFile, SGNODE* parentNode );
+    virtual bool ReadCache( std::ifstream& aFile, SGNODE* parentNode );
 
     bool Prepare( const glm::dmat4* aTransform,
         S3D::MATLIST& materials, std::vector< SMESH >& meshes );
diff --git a/3d-viewer/3d_draw.cpp b/3d-viewer/3d_draw.cpp
index 1799dbc..6e80472 100644
--- a/3d-viewer/3d_draw.cpp
+++ b/3d-viewer/3d_draw.cpp
@@ -91,7 +91,7 @@ public:
         m_hasMessage = false;
     }
 
-    REPORTER& Report( const wxString& aText, SEVERITY aSeverity = RPT_UNDEFINED )
+    virtual REPORTER& Report( const wxString& aText, SEVERITY aSeverity = RPT_UNDEFINED )
     {
         if( !aText.IsEmpty() )
             m_hasMessage = true;
diff --git a/3d-viewer/3d_material.h b/3d-viewer/3d_material.h
index 3bff7e6..26e310f 100644
--- a/3d-viewer/3d_material.h
+++ b/3d-viewer/3d_material.h
@@ -66,7 +66,7 @@ public:
     bool 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 ); }
 #endif
 
     /** Get class name
diff --git a/3d-viewer/3d_rendering/3d_render_ogl_legacy/c3d_render_ogl_legacy.h b/3d-viewer/3d_rendering/3d_render_ogl_legacy/c3d_render_ogl_legacy.h
index 2bdd331..08208a3 100644
--- a/3d-viewer/3d_rendering/3d_render_ogl_legacy/c3d_render_ogl_legacy.h
+++ b/3d-viewer/3d_rendering/3d_render_ogl_legacy/c3d_render_ogl_legacy.h
@@ -52,8 +52,8 @@ public:
     ~C3D_RENDER_OGL_LEGACY();
 
     // Imported from C3D_RENDER_BASE
-    void SetCurWindowSize( const wxSize &aSize );
-    void Redraw( bool aIsMoving );
+    virtual void SetCurWindowSize( const wxSize &aSize );
+    virtual void Redraw( bool aIsMoving );
 
 private:
     bool initializeOpenGL();
diff --git a/3d-viewer/3d_rendering/3d_render_raytracing/accelerators/ccontainer.h b/3d-viewer/3d_rendering/3d_render_raytracing/accelerators/ccontainer.h
index 7026d4e..5bf9bf5 100644
--- a/3d-viewer/3d_rendering/3d_render_raytracing/accelerators/ccontainer.h
+++ b/3d-viewer/3d_rendering/3d_render_raytracing/accelerators/ccontainer.h
@@ -76,8 +76,8 @@ private:
 class GLM_ALIGN(CLASS_ALIGNMENT) CCONTAINER : public CGENERICCONTAINER
 {
 public:
-    bool Intersect( const RAY &aRay, HITINFO &aHitInfo ) const;
-    bool IntersectP( const RAY &aRay, float aMaxDistance ) const;
+    virtual bool Intersect( const RAY &aRay, HITINFO &aHitInfo ) const;
+    virtual bool IntersectP( const RAY &aRay, float aMaxDistance ) const;
 };
 
 #endif // _CCONTAINER_H_
diff --git a/3d-viewer/3d_rendering/3d_render_raytracing/accelerators/ccontainer2d.h b/3d-viewer/3d_rendering/3d_render_raytracing/accelerators/ccontainer2d.h
index eda1aa9..12e1a0f 100644
--- a/3d-viewer/3d_rendering/3d_render_raytracing/accelerators/ccontainer2d.h
+++ b/3d-viewer/3d_rendering/3d_render_raytracing/accelerators/ccontainer2d.h
@@ -78,7 +78,7 @@ public:
     CCONTAINER2D();
 
     // Imported from CGENERICCONTAINER2D
-    void GetListObjectsIntersects( const CBBOX2D & aBBox, CONST_LIST_OBJECT2D &aOutList ) const;
+    virtual void GetListObjectsIntersects( const CBBOX2D & aBBox, CONST_LIST_OBJECT2D &aOutList ) const;
 };
 
 
@@ -110,7 +110,7 @@ private:
 public:
 
     // Imported from CGENERICCONTAINER2D
-    void GetListObjectsIntersects( const CBBOX2D & aBBox, CONST_LIST_OBJECT2D &aOutList ) const;
+    virtual void GetListObjectsIntersects( const CBBOX2D & aBBox, CONST_LIST_OBJECT2D &aOutList ) const;
 };
 
 #endif // _CCONTAINER2D_H_
diff --git a/3d-viewer/3d_rendering/3d_render_raytracing/cmaterial.h b/3d-viewer/3d_rendering/3d_render_raytracing/cmaterial.h
index b207ae2..098e5af 100644
--- a/3d-viewer/3d_rendering/3d_render_raytracing/cmaterial.h
+++ b/3d-viewer/3d_rendering/3d_render_raytracing/cmaterial.h
@@ -89,7 +89,7 @@ public:
                            float aTransparency ) :
     CMATERIAL( aAmbient, aEmissive, aSpecular, aShinness, aTransparency ) {}
 
-    SFVEC3F Shade( const RAY &aRay, const HITINFO &aHitInfo, float NdotL, const SFVEC3F &aDiffuseObjColor, const SFVEC3F &aDirToLight, const SFVEC3F &aLightColor, bool aIsInShadow ) const;
+    virtual SFVEC3F Shade( const RAY &aRay, const HITINFO &aHitInfo, float NdotL, const SFVEC3F &aDiffuseObjColor, const SFVEC3F &aDirToLight, const SFVEC3F &aLightColor, bool aIsInShadow ) const;
 };
 
 #endif // _CMATERIAL_H_
diff --git a/3d-viewer/3d_rendering/3d_render_raytracing/shapes2D/cfilledcircle2d.h b/3d-viewer/3d_rendering/3d_render_raytracing/shapes2D/cfilledcircle2d.h
index fc1d7ec..7a41f88 100644
--- a/3d-viewer/3d_rendering/3d_render_raytracing/shapes2D/cfilledcircle2d.h
+++ b/3d-viewer/3d_rendering/3d_render_raytracing/shapes2D/cfilledcircle2d.h
@@ -48,11 +48,11 @@ public:
     CFILLEDCIRCLE2D( const SFVEC2F &aCenter, float aRadius, const BOARD_ITEM &aBoardItem );
 
     // Imported from COBJECT2D
-    bool Overlaps( const CBBOX2D &aBBox ) const;
-    bool Intersects( const CBBOX2D &aBBox ) const;
-    bool Intersect( const RAYSEG2D &aSegRay, float *aOutT, SFVEC2F *aNormalOut ) const;
-    INTERSECTION_RESULT IsBBoxInside( const CBBOX2D &aBBox ) const;
-    bool IsPointInside( const SFVEC2F &aPoint ) const;
+    virtual bool Overlaps( const CBBOX2D &aBBox ) const;
+    virtual bool Intersects( const CBBOX2D &aBBox ) const;
+    virtual bool Intersect( const RAYSEG2D &aSegRay, float *aOutT, SFVEC2F *aNormalOut ) const;
+    virtual INTERSECTION_RESULT IsBBoxInside( const CBBOX2D &aBBox ) const;
+    virtual bool IsPointInside( const SFVEC2F &aPoint ) const;
 };
 
 
diff --git a/3d-viewer/3d_rendering/3d_render_raytracing/shapes2D/cpolygon2d.h b/3d-viewer/3d_rendering/3d_render_raytracing/shapes2D/cpolygon2d.h
index e4a7d8c..616a046 100644
--- a/3d-viewer/3d_rendering/3d_render_raytracing/shapes2D/cpolygon2d.h
+++ b/3d-viewer/3d_rendering/3d_render_raytracing/shapes2D/cpolygon2d.h
@@ -102,11 +102,11 @@ public:
                      const BOARD_ITEM &aBoardItem );
 
     // Imported from COBJECT2D
-    bool Overlaps( const CBBOX2D &aBBox ) const;
-    bool Intersects( const CBBOX2D &aBBox ) const;
-    bool Intersect( const RAYSEG2D &aSegRay, float *aOutT, SFVEC2F *aNormalOut ) const;
-    INTERSECTION_RESULT IsBBoxInside( const CBBOX2D &aBBox ) const;
-    bool IsPointInside( const SFVEC2F &aPoint ) const;
+    virtual bool Overlaps( const CBBOX2D &aBBox ) const;
+    virtual bool Intersects( const CBBOX2D &aBBox ) const;
+    virtual bool Intersect( const RAYSEG2D &aSegRay, float *aOutT, SFVEC2F *aNormalOut ) const;
+    virtual INTERSECTION_RESULT IsBBoxInside( const CBBOX2D &aBBox ) const;
+    virtual bool IsPointInside( const SFVEC2F &aPoint ) const;
 };
 
 
@@ -123,11 +123,11 @@ public:
     CDUMMYBLOCK2D( const CBBOX2D &aBBox, const BOARD_ITEM &aBoardItem );
 
      // Imported from COBJECT2D
-     bool Overlaps( const CBBOX2D &aBBox ) const;
-     bool Intersects( const CBBOX2D &aBBox ) const;
-     bool Intersect( const RAYSEG2D &aSegRay, float *aOutT, SFVEC2F *aNormalOut ) const;
-     INTERSECTION_RESULT IsBBoxInside( const CBBOX2D &aBBox ) const;
-     bool IsPointInside( const SFVEC2F &aPoint ) const;
+     virtual bool Overlaps( const CBBOX2D &aBBox ) const;
+     virtual bool Intersects( const CBBOX2D &aBBox ) const;
+     virtual bool Intersect( const RAYSEG2D &aSegRay, float *aOutT, SFVEC2F *aNormalOut ) const;
+     virtual INTERSECTION_RESULT IsBBoxInside( const CBBOX2D &aBBox ) const;
+     virtual bool IsPointInside( const SFVEC2F &aPoint ) const;
 };
 
 /**
diff --git a/3d-viewer/3d_rendering/3d_render_raytracing/shapes2D/cpolygon4pts2d.h b/3d-viewer/3d_rendering/3d_render_raytracing/shapes2D/cpolygon4pts2d.h
index 3ef3396..733a0f0 100644
--- a/3d-viewer/3d_rendering/3d_render_raytracing/shapes2D/cpolygon4pts2d.h
+++ b/3d-viewer/3d_rendering/3d_render_raytracing/shapes2D/cpolygon4pts2d.h
@@ -62,11 +62,11 @@ public:
     const SFVEC2F &GetN3() const { return m_seg_normal[3]; }
 
     // Imported from COBJECT2D
-    bool Overlaps( const CBBOX2D &aBBox ) const;
-    bool Intersects( const CBBOX2D &aBBox ) const;
-    bool Intersect( const RAYSEG2D &aSegRay, float *aOutT, SFVEC2F *aNormalOut ) const;
-    INTERSECTION_RESULT IsBBoxInside( const CBBOX2D &aBBox ) const;
-    bool IsPointInside( const SFVEC2F &aPoint ) const;
+    virtual bool Overlaps( const CBBOX2D &aBBox ) const;
+    virtual bool Intersects( const CBBOX2D &aBBox ) const;
+    virtual bool Intersect( const RAYSEG2D &aSegRay, float *aOutT, SFVEC2F *aNormalOut ) const;
+    virtual INTERSECTION_RESULT IsBBoxInside( const CBBOX2D &aBBox ) const;
+    virtual bool IsPointInside( const SFVEC2F &aPoint ) const;
 };
 
 
diff --git a/3d-viewer/3d_rendering/3d_render_raytracing/shapes2D/cring2d.h b/3d-viewer/3d_rendering/3d_render_raytracing/shapes2D/cring2d.h
index 7a414b5..5b96ed5 100644
--- a/3d-viewer/3d_rendering/3d_render_raytracing/shapes2D/cring2d.h
+++ b/3d-viewer/3d_rendering/3d_render_raytracing/shapes2D/cring2d.h
@@ -54,11 +54,11 @@ public:
              const BOARD_ITEM &aBoardItem );
 
     // Imported from COBJECT2D
-    bool Overlaps( const CBBOX2D &aBBox ) const;
-    bool Intersects( const CBBOX2D &aBBox ) const;
-    bool Intersect( const RAYSEG2D &aSegRay, float *aOutT, SFVEC2F *aNormalOut ) const;
-    INTERSECTION_RESULT IsBBoxInside( const CBBOX2D &aBBox ) const;
-    bool IsPointInside( const SFVEC2F &aPoint ) const;
+    virtual bool Overlaps( const CBBOX2D &aBBox ) const;
+    virtual bool Intersects( const CBBOX2D &aBBox ) const;
+    virtual bool Intersect( const RAYSEG2D &aSegRay, float *aOutT, SFVEC2F *aNormalOut ) const;
+    virtual INTERSECTION_RESULT IsBBoxInside( const CBBOX2D &aBBox ) const;
+    virtual bool IsPointInside( const SFVEC2F &aPoint ) const;
 };
 
 
diff --git a/3d-viewer/3d_rendering/3d_render_raytracing/shapes2D/croundsegment2d.h b/3d-viewer/3d_rendering/3d_render_raytracing/shapes2D/croundsegment2d.h
index 7431b00..61a61e2 100644
--- a/3d-viewer/3d_rendering/3d_render_raytracing/shapes2D/croundsegment2d.h
+++ b/3d-viewer/3d_rendering/3d_render_raytracing/shapes2D/croundsegment2d.h
@@ -78,11 +78,11 @@ public:
     const SFVEC2F &GetRightDir()  const { return m_rightDir; }
 
     // Imported from COBJECT2D
-    bool Overlaps( const CBBOX2D &aBBox ) const;
-    bool Intersects( const CBBOX2D &aBBox ) const;
-    bool Intersect( const RAYSEG2D &aSegRay, float *aOutT, SFVEC2F *aNormalOut ) const;
-    INTERSECTION_RESULT IsBBoxInside( const CBBOX2D &aBBox ) const;
-    bool IsPointInside( const SFVEC2F &aPoint ) const;
+    virtual bool Overlaps( const CBBOX2D &aBBox ) const;
+    virtual bool Intersects( const CBBOX2D &aBBox ) const;
+    virtual bool Intersect( const RAYSEG2D &aSegRay, float *aOutT, SFVEC2F *aNormalOut ) const;
+    virtual INTERSECTION_RESULT IsBBoxInside( const CBBOX2D &aBBox ) const;
+    virtual bool IsPointInside( const SFVEC2F &aPoint ) const;
 };
 
 
diff --git a/3d-viewer/3d_rendering/3d_render_raytracing/shapes2D/ctriangle2d.h b/3d-viewer/3d_rendering/3d_render_raytracing/shapes2D/ctriangle2d.h
index 34769fc..6a21ca1 100644
--- a/3d-viewer/3d_rendering/3d_render_raytracing/shapes2D/ctriangle2d.h
+++ b/3d-viewer/3d_rendering/3d_render_raytracing/shapes2D/ctriangle2d.h
@@ -60,11 +60,11 @@ public:
     const SFVEC2F &GetP3() const { return p3; }
 
     // Imported from COBJECT2D
-    bool Overlaps( const CBBOX2D &aBBox ) const;
-    bool Intersects( const CBBOX2D &aBBox ) const;
-    bool Intersect( const RAYSEG2D &aSegRay, float *aOutT, SFVEC2F *aNormalOut ) const;
-    INTERSECTION_RESULT IsBBoxInside( const CBBOX2D &aBBox ) const;
-    bool IsPointInside( const SFVEC2F &aPoint ) const;
+    virtual bool Overlaps( const CBBOX2D &aBBox ) const;
+    virtual bool Intersects( const CBBOX2D &aBBox ) const;
+    virtual bool Intersect( const RAYSEG2D &aSegRay, float *aOutT, SFVEC2F *aNormalOut ) const;
+    virtual INTERSECTION_RESULT IsBBoxInside( const CBBOX2D &aBBox ) const;
+    virtual bool IsPointInside( const SFVEC2F &aPoint ) const;
 };
 
 
diff --git a/3d-viewer/3d_rendering/ctrack_ball.h b/3d-viewer/3d_rendering/ctrack_ball.h
index 435af66..b2d705c 100644
--- a/3d-viewer/3d_rendering/ctrack_ball.h
+++ b/3d-viewer/3d_rendering/ctrack_ball.h
@@ -40,15 +40,15 @@ class CTRACK_BALL : public CCAMERA
 
     CTRACK_BALL( float aRangeScale );
 
-    void Drag( const wxPoint &aNewMousePosition );
+    virtual void Drag( const wxPoint &aNewMousePosition );
 
-    void Pan( const wxPoint &aNewMousePosition );
+    virtual void Pan( const wxPoint &aNewMousePosition );
 
-    void Pan( const SFVEC3F &aDeltaOffsetInc );
+    virtual void Pan( const SFVEC3F &aDeltaOffsetInc );
 
-    void SetBoardLookAtPos( const SFVEC3F &aBoardPos );
+    virtual void SetBoardLookAtPos( const SFVEC3F &aBoardPos );
 
-    void Reset();
+    virtual void Reset();
 
 
  private:
diff --git a/3d-viewer/3d_struct.h b/3d-viewer/3d_struct.h
index fc85567..3dcebc2 100644
--- a/3d-viewer/3d_struct.h
+++ b/3d-viewer/3d_struct.h
@@ -107,7 +107,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 ); }
 #endif
 
     /**
@@ -188,7 +188,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 ); }
 #endif
 };
 
diff --git a/3d-viewer/3d_viewer.h b/3d-viewer/3d_viewer.h
index 7898fe0..45c2995 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 );
+    virtual void SaveSettings( wxConfigBase* aCfg );
 
     // 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 a833e87..6ba5f2c 100644
--- a/3d-viewer/dialogs/dialog_3D_view_option.cpp
+++ b/3d-viewer/dialogs/dialog_3D_view_option.cpp
@@ -38,10 +38,10 @@ private:
     void initDialog();
 
     // Event functions:
-    void OnShowAllClick( wxCommandEvent& event );
-    void OnShowNoneClick( wxCommandEvent& event );
-    void OnOKClick( wxCommandEvent& event );
-	void OnCheckRealisticMode( wxCommandEvent& event );
+    virtual void OnShowAllClick( wxCommandEvent& event );
+    virtual void OnShowNoneClick( wxCommandEvent& event );
+    virtual void OnOKClick( wxCommandEvent& event );
+    virtual void OnCheckRealisticMode( wxCommandEvent& event );
 };
 
 
diff --git a/3d-viewer/modelparsers.h b/3d-viewer/modelparsers.h
index 9bba6ce..2fb36de 100644
--- a/3d-viewer/modelparsers.h
+++ b/3d-viewer/modelparsers.h
@@ -96,7 +96,7 @@ public:
     X3D_MODEL_PARSER( S3D_MASTER* aMaster );
     ~X3D_MODEL_PARSER();
 
-    bool Load( const wxString& aFilename );
+    virtual bool Load( const wxString& aFilename );
 
     typedef std::map< wxString, wxString > PROPERTY_MAP;
     typedef std::vector< wxXmlNode* >      NODE_LIST;
@@ -291,7 +291,7 @@ public:
      * @param aVrmlunits_to_3Dunits = the csaling factor to convert the 3D file unit
      * to our internal units.
      */
-    bool Load( const wxString& aFilename );
+    virtual bool Load( const wxString& aFilename );
 };
 
 
diff --git a/bitmap2component/bitmap2cmp_gui.cpp b/bitmap2component/bitmap2cmp_gui.cpp
index 67651ed..b31d9c3 100644
--- a/bitmap2component/bitmap2cmp_gui.cpp
+++ b/bitmap2component/bitmap2cmp_gui.cpp
@@ -87,14 +87,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 contains one component:
@@ -119,9 +119,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 right values are displayed
@@ -141,7 +141,7 @@ private:
     void NegateGreyscaleImage( );
     void ExportFile( FILE* aOutfile, OUTPUT_FMT_ID aFormat );
     void updateImageInfo();
-    void OnFormatChange( wxCommandEvent& event );
+    virtual void OnFormatChange( wxCommandEvent& event );
 };
 
 
@@ -668,9 +668,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 )
         {
@@ -694,7 +694,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 4e0b4ab..6cd5fa5 100644
--- a/common/confirm.cpp
+++ b/common/confirm.cpp
@@ -50,9 +50,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..b490abc 100644
--- a/common/dialogs/dialog_image_editor.h
+++ b/common/dialogs/dialog_image_editor.h
@@ -53,15 +53,15 @@ 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 5127886..08334a9 100644
--- a/common/dialogs/dialog_page_settings.h
+++ b/common/dialogs/dialog_page_settings.h
@@ -73,29 +73,29 @@ private:
     void initDialog();  // Initialisation of member variables
 
     // event handler for button OK
-    void OnOkClick( wxCommandEvent& event );
+    virtual void OnOkClick( 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/dialogs/wx_html_report_panel.h b/common/dialogs/wx_html_report_panel.h
index 03e351f..2291650 100644
--- a/common/dialogs/wx_html_report_panel.h
+++ b/common/dialogs/wx_html_report_panel.h
@@ -59,7 +59,7 @@ public:
     void Clear();
 
     ///> sets the frame label
-    void SetLabel( const wxString& aLabel );
+    virtual void SetLabel( const wxString& aLabel );
 
     ///> Sets the lasy update. If this mode is on, messages are stored but the display
     ///> is not updated (Updating display can be very time consumming if there are many messages)
@@ -94,13 +94,13 @@ private:
     void scrollToBottom();
     void syncCheckboxes();
 
-    void onCheckBoxShowAll( wxCommandEvent& event );
-    void onCheckBoxShowWarnings( wxCommandEvent& event );
-    void onCheckBoxShowErrors( wxCommandEvent& event );
-    void onCheckBoxShowInfos( wxCommandEvent& event );
-    void onCheckBoxShowActions( wxCommandEvent& event );
+    virtual void onCheckBoxShowAll( wxCommandEvent& event );
+    virtual void onCheckBoxShowWarnings( wxCommandEvent& event );
+    virtual void onCheckBoxShowErrors( wxCommandEvent& event );
+    virtual void onCheckBoxShowInfos( wxCommandEvent& event );
+    virtual void onCheckBoxShowActions( wxCommandEvent& event );
 
-    void onBtnSaveToFile( wxCommandEvent& event );
+    virtual void onBtnSaveToFile( wxCommandEvent& event );
 
     ///> copy of the report, stored for filtering
     REPORT_LINES m_report;
diff --git a/common/single_top.cpp b/common/single_top.cpp
index c3dbe05..99f1c33 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;
 
 
@@ -129,7 +129,7 @@ struct APP_SINGLE_TOP : public wxApp
     }
 #endif
 
-    bool OnInit()           // overload wxApp virtual
+    virtual bool OnInit()
     {
         try
         {
@@ -155,7 +155,7 @@ struct APP_SINGLE_TOP : public wxApp
         return false;
     }
 
-    int  OnExit()           // overload wxApp virtual
+    virtual int  OnExit()
     {
         // Fixes segfault when wxPython scripting is enabled.
 #if defined( KICAD_SCRIPTING_WXPYTHON )
@@ -164,7 +164,7 @@ struct APP_SINGLE_TOP : public wxApp
         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 f4cbf7c..658375a 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,22 +89,22 @@ 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, EDA_KEY 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, EDA_KEY aHotKey = 0 );
     void    InstallOptionsDisplay( wxCommandEvent& event );
     MODULE* Get_Module( const wxString& CmpName );
 
     ///> @copydoc EDA_DRAW_FRAME::GetHotKeyDescription()
-    EDA_HOTKEY* GetHotKeyDescription( int aCommand ) const { return NULL; }
+    virtual EDA_HOTKEY* GetHotKeyDescription( int aCommand ) const { return NULL; }
 
     void    Process_Settings( wxCommandEvent& event );
 
     /**
      * 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 dc3d9c4..ed728d0 100644
--- a/cvpcb/cvpcb.cpp
+++ b/cvpcb/cvpcb.cpp
@@ -67,11 +67,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 )
         {
@@ -101,7 +101,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 d62747e..2bc13c4 100644
--- a/cvpcb/cvpcb_mainframe.h
+++ b/cvpcb/cvpcb_mainframe.h
@@ -86,9 +86,9 @@ 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 );
 
-    void KiwayMailIn( KIWAY_EXPRESS& aEvent );      // override virtual from KIWAY_PLAYER
+    virtual void KiwayMailIn( KIWAY_EXPRESS& aEvent );
 
     /**
      * @return a pointer on the Footprint Viewer frame, if exists, or NULL
@@ -212,9 +212,9 @@ public:
      */
     void SaveProjectFile();
 
-    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/dialogs/dialog_config_equfiles.h b/cvpcb/dialogs/dialog_config_equfiles.h
index 1dbbf47..4210d6b 100644
--- a/cvpcb/dialogs/dialog_config_equfiles.h
+++ b/cvpcb/dialogs/dialog_config_equfiles.h
@@ -44,13 +44,13 @@ private:
     void Init();
 
     // Virtual event handlers
-    void OnCloseWindow( wxCloseEvent& event );
-    void OnOkClick( 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 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/cvpcb/listview_classes.h b/cvpcb/listview_classes.h
index c5f2474..8d0410f 100644
--- a/cvpcb/listview_classes.h
+++ b/cvpcb/listview_classes.h
@@ -131,7 +131,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 );
@@ -161,7 +161,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 );
@@ -209,7 +209,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/eeschema/class_libentry.h b/eeschema/class_libentry.h
index b81859e..53863e4 100644
--- a/eeschema/class_libentry.h
+++ b/eeschema/class_libentry.h
@@ -178,7 +178,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 ); }
 #endif
 };
 
@@ -766,7 +766,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 ); }
 #endif
 };
 
diff --git a/eeschema/class_sch_screen.h b/eeschema/class_sch_screen.h
index 2fb4043..79f8a74 100644
--- a/eeschema/class_sch_screen.h
+++ b/eeschema/class_sch_screen.h
@@ -521,7 +521,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;
 #endif
 };
 
diff --git a/eeschema/dialogs/dialog_annotate.cpp b/eeschema/dialogs/dialog_annotate.cpp
index 5c8b002..e8d3cdc 100644
--- a/eeschema/dialogs/dialog_annotate.cpp
+++ b/eeschema/dialogs/dialog_annotate.cpp
@@ -61,9 +61,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 41bd13a..9324bce 100644
--- a/eeschema/dialogs/dialog_bom.cpp
+++ b/eeschema/dialogs/dialog_bom.cpp
@@ -185,16 +185,16 @@ 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 );
-    void OnShowConsoleChanged( 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 );
+    virtual void OnShowConsoleChanged( 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 bea245a..234c121 100644
--- a/eeschema/dialogs/dialog_edit_component_in_schematic.cpp
+++ b/eeschema/dialogs/dialog_edit_component_in_schematic.cpp
@@ -109,18 +109,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 9066894..849273b 100644
--- a/eeschema/dialogs/dialog_edit_label.cpp
+++ b/eeschema/dialogs/dialog_edit_label.cpp
@@ -51,7 +51,7 @@ class DIALOG_LABEL_EDITOR : public DIALOG_LABEL_EDITOR_BASE
 public:
     DIALOG_LABEL_EDITOR( SCH_EDIT_FRAME* parent, SCH_TEXT* aTextItem );
 
-    void SetTitle( const wxString& aTitle )    // OVERRIDE wxTopLevelWindow::SetTitle
+    virtual void SetTitle( const wxString& aTitle )
     {
         // This class is shared for numerous tasks: a couple of
         // single line labels and multi-line text fields.
@@ -76,7 +76,7 @@ public:
     }
 
 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 bb8c768..58c2417 100644
--- a/eeschema/dialogs/dialog_edit_libentry_fields_in_lib.cpp
+++ b/eeschema/dialogs/dialog_edit_libentry_fields_in_lib.cpp
@@ -60,12 +60,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
@@ -74,12 +74,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 d12e47b..7bad85c 100644
--- a/eeschema/dialogs/dialog_edit_one_field.h
+++ b/eeschema/dialogs/dialog_edit_one_field.h
@@ -75,11 +75,11 @@ 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 );
 
     /// @todo Update DIALOG_SHIM to handle this transparently so no matter what mode the
     ///       dialogs is shown, everything is handled without this ugliness.
-    void OnOkClick( wxCommandEvent& aEvent )
+    virtual void OnOkClick( wxCommandEvent& aEvent )
     {
         if( IsQuasiModal() )
             EndQuasiModal( wxID_OK );
@@ -87,7 +87,7 @@ protected:
             EndDialog( wxID_OK );
     }
 
-    void OnCancelClick( wxCommandEvent& event )
+    virtual void OnCancelClick( wxCommandEvent& event )
     {
         if( IsQuasiModal() )
             EndQuasiModal( wxID_CANCEL );
@@ -95,7 +95,7 @@ protected:
             EndDialog( wxID_CANCEL );
     }
 
-    void OnCloseDialog( wxCloseEvent& aEvent )
+    virtual void OnCloseDialog( wxCloseEvent& aEvent )
     {
         if( IsQuasiModal() )
             EndQuasiModal( wxID_CANCEL );
diff --git a/eeschema/dialogs/dialog_eeschema_config.cpp b/eeschema/dialogs/dialog_eeschema_config.cpp
index 07dab49..a3cb58b 100644
--- a/eeschema/dialogs/dialog_eeschema_config.cpp
+++ b/eeschema/dialogs/dialog_eeschema_config.cpp
@@ -65,12 +65,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,
@@ -78,14 +78,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 f493aca..1b095a4 100644
--- a/eeschema/dialogs/dialog_eeschema_options.h
+++ b/eeschema/dialogs/dialog_eeschema_options.h
@@ -56,7 +56,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
@@ -67,19 +67,19 @@ protected:
      *
      * Deletes the selected template fieldname from the template fieldnames data
      */
-    void OnDeleteButtonClick( wxCommandEvent& event );
+    virtual void OnDeleteButtonClick( wxCommandEvent& event );
 
     /**
      * Function TransferDataToWindow
      * Transfer data into the GUI.
      */
-    bool TransferDataToWindow();
+    virtual bool TransferDataToWindow();
 
     /**
      * Function TransferDataFromWindow
      * Transfer data out of the GUI.
      */
-    bool TransferDataFromWindow();
+    virtual bool TransferDataFromWindow();
 
 public:
     /**
@@ -439,7 +439,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 9cce8b1..85ad2d1 100644
--- a/eeschema/dialogs/dialog_erc.h
+++ b/eeschema/dialogs/dialog_erc.h
@@ -58,17 +58,17 @@ 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 );
+    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 );
 
     // Click on a marker info:
-    void OnLeftClickMarkersList( wxHtmlLinkEvent& event );
+    virtual void OnLeftClickMarkersList( wxHtmlLinkEvent& event );
 
     // Double click on a marker info:
-    void OnLeftDblClickMarkersList( wxMouseEvent& event );
+    virtual void OnLeftDblClickMarkersList( wxMouseEvent& 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 dab9d90..18c78c6 100644
--- a/eeschema/dialogs/dialog_lib_edit_pin.h
+++ b/eeschema/dialogs/dialog_lib_edit_pin.h
@@ -46,13 +46,13 @@ public:
     DIALOG_LIB_EDIT_PIN( EDA_DRAW_FRAME* parent, LIB_PIN* aPin );
     ~DIALOG_LIB_EDIT_PIN();
 
-    void OnInitDialog( wxInitDialogEvent& event);
+    virtual void OnInitDialog( wxInitDialogEvent& event);
 
-    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 44dcbdf..8a0b012 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 69cf6c0..15c4be6 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 2a1139c..798ea41 100644
--- a/eeschema/dialogs/dialog_print_using_printer.cpp
+++ b/eeschema/dialogs/dialog_print_using_printer.cpp
@@ -58,11 +58,11 @@ public:
     }
 
 private:
-    void OnCloseWindow( wxCloseEvent& 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 OnPageSetup( wxCommandEvent& event );
+    virtual void OnPrintPreview( wxCommandEvent& event );
+    virtual void OnPrintButtonClick( wxCommandEvent& event );
+    virtual void OnButtonCancelClick( wxCommandEvent& event ) { Close(); }
 
     void initDialog();
     void GetPrintOptions();
@@ -85,10 +85,10 @@ public:
         wxASSERT( aParent != NULL );
         m_parent = aParent;
     }
-    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 );
 };
 
@@ -107,7 +107,7 @@ public:
     {
     }
 
-    bool Show( bool show )      // overload
+    virtual bool Show( bool show )
     {
         bool        ret;
 
diff --git a/eeschema/dialogs/dialog_rescue_each.cpp b/eeschema/dialogs/dialog_rescue_each.cpp
index 054594f..fdc8791 100644
--- a/eeschema/dialogs/dialog_rescue_each.cpp
+++ b/eeschema/dialogs/dialog_rescue_each.cpp
@@ -56,16 +56,16 @@ private:
     RESCUER*        m_Rescuer;
     bool            m_AskShowAgain;
 
-    bool TransferDataToWindow();
-    bool TransferDataFromWindow();
+    virtual bool TransferDataToWindow();
+    virtual bool TransferDataFromWindow();
     void PopulateConflictList();
     void PopulateInstanceList();
-    void OnConflictSelect( wxDataViewEvent& event );
-    void OnNeverShowClick( wxCommandEvent& event );
-    void OnCancelClick( wxCommandEvent& event );
-    void OnHandleCachePreviewRepaint( wxPaintEvent& aRepaintEvent );
-    void OnHandleLibraryPreviewRepaint( wxPaintEvent& aRepaintEvent );
-    void OnDialogResize( wxSizeEvent& aSizeEvent );
+    virtual void OnConflictSelect( wxDataViewEvent& event );
+    virtual void OnNeverShowClick( wxCommandEvent& event );
+    virtual void OnCancelClick( wxCommandEvent& event );
+    virtual void OnHandleCachePreviewRepaint( wxPaintEvent& aRepaintEvent );
+    virtual void OnHandleLibraryPreviewRepaint( wxPaintEvent& aRepaintEvent );
+    virtual void OnDialogResize( wxSizeEvent& aSizeEvent );
     void renderPreview( LIB_PART* aComponent, int aUnit, wxPanel* panel );
 };
 
diff --git a/eeschema/dialogs/dialog_schematic_find.h b/eeschema/dialogs/dialog_schematic_find.h
index 0a86947..5e2b2ee 100644
--- a/eeschema/dialogs/dialog_schematic_find.h
+++ b/eeschema/dialogs/dialog_schematic_find.h
@@ -154,16 +154,16 @@ 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 OnUpdateReplaceAllUI( 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 OnUpdateReplaceAllUI( 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 1c77039..fd290bb 100644
--- a/eeschema/eeschema.cpp
+++ b/eeschema/eeschema.cpp
@@ -64,11 +64,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 )
         {
@@ -117,7 +117,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..2b29a3c 100644
--- a/eeschema/lib_bezier.h
+++ b/eeschema/lib_bezier.h
@@ -42,9 +42,9 @@ 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,
-                      EDA_COLOR_T aColor, GR_DRAWMODE aDrawMode, void* aData,
-                      const TRANSFORM& aTransform );
+    virtual void drawGraphic( EDA_DRAW_PANEL* aPanel, wxDC* aDC, const wxPoint& aOffset,
+                              EDA_COLOR_T aColor, GR_DRAWMODE aDrawMode, void* aData,
+                              const TRANSFORM& aTransform );
 
 public:
     LIB_BEZIER( LIB_PART * aParent );
@@ -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,
-               const TRANSFORM& aTransform );
+    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..ef6d8a9 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,
-                      EDA_COLOR_T aColor, GR_DRAWMODE aDrawMode, void* aData,
-                      const TRANSFORM& aTransform );
+    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,
-               const TRANSFORM& aTransform );
+    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 e1b02a4..da5e908 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..f9b241e 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 ); }
 #endif
 
 private:
diff --git a/eeschema/lib_field.h b/eeschema/lib_field.h
index 1f8f8e7..a35fef9 100644
--- a/eeschema/lib_field.h
+++ b/eeschema/lib_field.h
@@ -70,16 +70,16 @@ class LIB_FIELD : public LIB_ITEM, public EDA_TEXT
      * the m_Text
      * </p>
      */
-    void drawGraphic( EDA_DRAW_PANEL* aPanel, wxDC* aDC, const wxPoint& aOffset,
-                      EDA_COLOR_T aColor, GR_DRAWMODE aDrawMode, void* aData,
-                      const TRANSFORM& aTransform );
+    virtual void drawGraphic( EDA_DRAW_PANEL* aPanel, wxDC* aDC, const wxPoint& aOffset,
+                              EDA_COLOR_T aColor, GR_DRAWMODE aDrawMode, void* aData,
+                              const TRANSFORM& aTransform );
 
     /**
      * Calculate the new circle at \a aPosition when editing.
      *
      * @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,
-               const TRANSFORM& aTransform );
+    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 7c0bb4b..02525f0 100644
--- a/eeschema/lib_pin.h
+++ b/eeschema/lib_pin.h
@@ -88,9 +88,9 @@ class LIB_PIN : public LIB_ITEM
      *      PIN_DANGLING_HIDDEN -- draw the target even if the pin is hidden
      * @param aTransform Transform Matrix (rotation, mirror ..)
      */
-    void drawGraphic( EDA_DRAW_PANEL* aPanel, wxDC* aDC, const wxPoint& aOffset,
-                      EDA_COLOR_T aColor, GR_DRAWMODE aDrawMode, void* aData,
-                      const TRANSFORM& aTransform );
+    virtual void drawGraphic( EDA_DRAW_PANEL* aPanel, wxDC* aDC, const wxPoint& aOffset,
+                              EDA_COLOR_T aColor, GR_DRAWMODE aDrawMode, void* aData,
+                              const TRANSFORM& aTransform );
 
 public:
     LIB_PIN( LIB_PART*      aParent );
@@ -99,29 +99,29 @@ 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;
 #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 );
 
     /* Cannot use a default parameter here as it will not be compatible with the virtual. */
-    const EDA_RECT GetBoundingBox() const { return GetBoundingBox( false ); }
+    virtual const EDA_RECT GetBoundingBox() const { return GetBoundingBox( false ); }
 
     /**
      * Function GetBoundingBox
@@ -230,7 +230,7 @@ public:
      */
     void SetOrientation( int aOrientation );
 
-    void Rotate();
+    virtual void Rotate();
 
     GRAPHIC_PINSHAPE GetShape() const { return m_shape; }
 
@@ -363,7 +363,7 @@ public:
      */
     bool IsPowerConnection() const { return !IsVisible() && GetType() == PIN_POWER_IN; }
 
-    int GetPenSize() const;
+    virtual int GetPenSize() const;
 
     /**
      * Function DrawPinSymbol
@@ -440,32 +440,32 @@ public:
      */
     static int GetOrientationCodeIndex( int aCode );
 
-    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,
-               const TRANSFORM& aTransform );
+    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:
 
@@ -478,7 +478,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..2296d77 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,
-                      EDA_COLOR_T aColor, GR_DRAWMODE aDrawMode, void* aData,
-                      const TRANSFORM& aTransform );
+    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..b667281 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,
-                      EDA_COLOR_T aColor, GR_DRAWMODE aDrawMode, void* aData,
-                      const TRANSFORM& aTransform );
+    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..a53666b 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,
-                      EDA_COLOR_T aColor, GR_DRAWMODE aDrawMode, void* aData,
-                      const TRANSFORM& aTransform );
+    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,
-               const TRANSFORM& aTransform );
+    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 49f569c..62de62f 100644
--- a/eeschema/libeditframe.h
+++ b/eeschema/libeditframe.h
@@ -180,7 +180,7 @@ public:
     void SetRepeatPinStep( int aStep) { m_repeatPinStep = aStep; }
 
 
-    void ReCreateMenuBar();
+    virtual void ReCreateMenuBar();
 
     /**
      * Function EnsureActiveLibExists
@@ -313,27 +313,27 @@ 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();         // Returns the best zoom
+    virtual void OnLeftDClick( wxDC* DC, const wxPoint& MousePos );
 
     ///> @copydoc EDA_DRAW_FRAME::GetHotKeyDescription()
-    EDA_HOTKEY* GetHotKeyDescription( int aCommand ) const;
+    virtual EDA_HOTKEY* GetHotKeyDescription( int aCommand ) const;
 
-    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, EDA_KEY aHotKey = 0 );
+    virtual bool GeneralControl( wxDC* aDC, const wxPoint& aPosition, EDA_KEY 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/netlist_exporters/netlist_exporter_cadstar.h b/eeschema/netlist_exporters/netlist_exporter_cadstar.h
index 909e1bd..222a331 100644
--- a/eeschema/netlist_exporters/netlist_exporter_cadstar.h
+++ b/eeschema/netlist_exporters/netlist_exporter_cadstar.h
@@ -56,7 +56,7 @@ public:
      * Function WriteList
      * writes to specified output file
      */
-    bool WriteNetlist( const wxString& aOutFileName, unsigned aNetlistOptions );
+    virtual bool WriteNetlist( const wxString& aOutFileName, unsigned aNetlistOptions );
 };
 
 #endif
diff --git a/eeschema/netlist_exporters/netlist_exporter_generic.h b/eeschema/netlist_exporters/netlist_exporter_generic.h
index 89d57d5..97a7729 100644
--- a/eeschema/netlist_exporters/netlist_exporter_generic.h
+++ b/eeschema/netlist_exporters/netlist_exporter_generic.h
@@ -63,7 +63,7 @@ public:
      * Function WriteNetlist
      * writes to specified output file
      */
-    bool WriteNetlist( const wxString& aOutFileName, unsigned aNetlistOptions );
+    virtual bool WriteNetlist( const wxString& aOutFileName, unsigned aNetlistOptions );
 
 #define GNL_ALL     ( GNL_LIBRARIES | GNL_COMPONENTS | GNL_PARTS | GNL_HEADER | GNL_NETS )
 
diff --git a/eeschema/netlist_exporters/netlist_exporter_kicad.h b/eeschema/netlist_exporters/netlist_exporter_kicad.h
index 433d12c..0eaeaa6 100644
--- a/eeschema/netlist_exporters/netlist_exporter_kicad.h
+++ b/eeschema/netlist_exporters/netlist_exporter_kicad.h
@@ -47,7 +47,7 @@ public:
      * Function WriteNetlist
      * writes to specified output file
      */
-    bool WriteNetlist( const wxString& aOutFileName, unsigned aNetlistOptions );   // OVERRIDE
+    virtual bool WriteNetlist( const wxString& aOutFileName, unsigned aNetlistOptions );
 
     /**
      * Function Format
diff --git a/eeschema/netlist_exporters/netlist_exporter_orcadpcb2.h b/eeschema/netlist_exporters/netlist_exporter_orcadpcb2.h
index 06fcf10..51fff1f 100644
--- a/eeschema/netlist_exporters/netlist_exporter_orcadpcb2.h
+++ b/eeschema/netlist_exporters/netlist_exporter_orcadpcb2.h
@@ -40,7 +40,7 @@ public:
     {
     }
 
-    bool WriteNetlist( const wxString& aOutFileName, unsigned aNetlistOptions );
+    virtual bool WriteNetlist( const wxString& aOutFileName, unsigned aNetlistOptions );
 };
 
 #endif
diff --git a/eeschema/netlist_exporters/netlist_exporter_pspice.h b/eeschema/netlist_exporters/netlist_exporter_pspice.h
index c57938f..de250af 100644
--- a/eeschema/netlist_exporters/netlist_exporter_pspice.h
+++ b/eeschema/netlist_exporters/netlist_exporter_pspice.h
@@ -44,7 +44,7 @@ public:
      * Function WriteNetlist
      * writes to specified output file
      */
-    bool WriteNetlist( const wxString& aOutFileName, unsigned aNetlistOptions );
+    virtual bool WriteNetlist( const wxString& aOutFileName, unsigned aNetlistOptions );
 };
 
 #endif
diff --git a/eeschema/sch_base_frame.h b/eeschema/sch_base_frame.h
index c99e1a6..13fa6ef 100644
--- a/eeschema/sch_base_frame.h
+++ b/eeschema/sch_base_frame.h
@@ -61,7 +61,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;
 
     /**
      * @return the increment value of the position of an item
@@ -96,31 +96,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..c65761d 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,12 +90,12 @@ 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,
-               GR_DRAWMODE aDrawMode, EDA_COLOR_T aColor = UNSPECIFIED_COLOR );
+    virtual void Draw( EDA_DRAW_PANEL* aPanel, wxDC* aDC, const wxPoint& aOffset,
+                       GR_DRAWMODE aDrawMode, EDA_COLOR_T aColor = UNSPECIFIED_COLOR );
 
     /**
      * Function ReadImageFile
@@ -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;
 #endif
 };
 
diff --git a/eeschema/sch_bus_entry.h b/eeschema/sch_bus_entry.h
index 5de14e6..775a217 100644
--- a/eeschema/sch_bus_entry.h
+++ b/eeschema/sch_bus_entry.h
@@ -60,7 +60,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;
 
@@ -80,53 +80,53 @@ 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,
-               GR_DRAWMODE aDrawMode, EDA_COLOR_T aColor = UNSPECIFIED_COLOR );
+    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 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;
 
-    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 ); }
 #endif
 };
 
@@ -142,18 +142,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;
 };
 
 /**
@@ -168,18 +168,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 81f19a5..b9b6217 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
@@ -350,7 +350,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 );
 
     /**
      * Update the replace string without changing anything else.
@@ -392,7 +392,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 7d64546..585ff75 100644
--- a/eeschema/sch_component.h
+++ b/eeschema/sch_component.h
@@ -137,7 +137,7 @@ public:
 
     ~SCH_COMPONENT() { }
 
-    wxString GetClass() const
+    virtual wxString GetClass() const
     {
         return wxT( "SCH_COMPONENT" );
     }
@@ -150,7 +150,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; }
@@ -202,9 +202,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
@@ -239,7 +239,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
@@ -257,7 +257,7 @@ public:
      */
     void SetTimeStamp( time_t aNewTimeStamp );
 
-    const EDA_RECT GetBoundingBox() const;    // Virtual
+    virtual const EDA_RECT GetBoundingBox() const;
 
     /**
      * Function GetBodyBoundingBox
@@ -367,8 +367,8 @@ public:
     /**
      * Virtual function, from the base class SCH_ITEM::Draw
      */
-    void Draw( EDA_DRAW_PANEL* aPanel, wxDC* aDC, const wxPoint& aOffset,
-               GR_DRAWMODE aDrawMode, EDA_COLOR_T aColor = UNSPECIFIED_COLOR )
+    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 );
     }
@@ -389,7 +389,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;
@@ -440,7 +440,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;
@@ -453,15 +453,15 @@ 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 );
 
     /**
      * Test if the component's dangling state has changed for one given pin index. As
@@ -482,19 +482,19 @@ public:
      * @param aItemList - list of all DANGLING_END_ITEMs to be tested
      * @return true if any pin's state has changed.
      */
-    bool IsDanglingStateChanged( std::vector<DANGLING_END_ITEM>& aItemList );
+    virtual bool IsDanglingStateChanged( std::vector<DANGLING_END_ITEM>& aItemList );
 
     /**
      * Return whether any pin has dangling status. Does NOT update the internal status,
      * only checks the existing status.
      */
-    bool IsDangling() const;
+    virtual bool IsDangling() const;
 
     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
@@ -503,9 +503,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[] );
 
     /**
@@ -518,40 +518,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,
-                         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;
 
     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;
 #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 814876a..9833548 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 IsHorizJustifyFlipped
@@ -120,7 +120,7 @@ public:
         return len == 0 || ( len == 1 && m_Text[0] == wxChar( '~' ) );
     }
 
-    void SwapData( SCH_ITEM* aItem );
+    virtual void SwapData( SCH_ITEM* aItem );
 
     /**
      * Function ImportValues
@@ -130,7 +130,7 @@ public:
      */
     void ImportValues( const LIB_FIELD& aSource );
 
-    int GetPenSize() const;
+    virtual int GetPenSize() const;
 
     /**
      * Function IsVisible
@@ -141,20 +141,20 @@ public:
         return !( m_Attributs & TEXT_NO_VISIBLE );
     }
 
-    void Draw( EDA_DRAW_PANEL* aPanel, wxDC* aDC, const wxPoint& aOffset,
-               GR_DRAWMODE aDrawMode, EDA_COLOR_T aColor = UNSPECIFIED_COLOR );
+    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()
@@ -163,7 +163,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 )
     {
     }
 
@@ -174,34 +174,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 ); }
 #endif
 };
 
diff --git a/eeschema/sch_junction.h b/eeschema/sch_junction.h
index 0e93d84..db39295 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,
-               GR_DRAWMODE aDrawMode, EDA_COLOR_T aColor = UNSPECIFIED_COLOR );
+    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;
 #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..02b9789 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,
-               GR_DRAWMODE aDrawMode, EDA_COLOR_T aColor = UNSPECIFIED_COLOR );
+    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;
 #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 0c534d9..4367017 100644
--- a/eeschema/sch_marker.h
+++ b/eeschema/sch_marker.h
@@ -47,15 +47,15 @@ public:
 
     // Do not create a copy constructor.  The one generated by the compiler is adequate.
 
-    wxString GetClass() const
+    virtual wxString GetClass() const
     {
         return wxT( "SCH_MARKER" );
     }
 
-    void Draw( EDA_DRAW_PANEL* aPanel, wxDC* aDC, const wxPoint& aOffset,
-               GR_DRAWMODE aDraw_mode, EDA_COLOR_T aColor = UNSPECIFIED_COLOR );
+    virtual void Draw( EDA_DRAW_PANEL* aPanel, wxDC* aDC, const wxPoint& aOffset,
+                       GR_DRAWMODE aDraw_mode, EDA_COLOR_T aColor = UNSPECIFIED_COLOR );
 
-    void Plot( PLOTTER* aPlotter )
+    virtual void Plot( PLOTTER* aPlotter )
     {
         // SCH_MARKERs should not be plotted. However, SCH_ITEM will fail an
         // assertion if we do not confirm this by locally implementing a no-op
@@ -63,23 +63,23 @@ public:
         (void) aPlotter;
     }
 
-    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
@@ -91,26 +91,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;
 #endif
 };
 
diff --git a/eeschema/sch_no_connect.h b/eeschema/sch_no_connect.h
index f566304..ee5a978 100644
--- a/eeschema/sch_no_connect.h
+++ b/eeschema/sch_no_connect.h
@@ -46,69 +46,69 @@ 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,
-               GR_DRAWMODE aDrawMode, EDA_COLOR_T aColor = UNSPECIFIED_COLOR );
+    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 GetEndPoints( std::vector< DANGLING_END_ITEM >& aItemList );
+    virtual void GetEndPoints( std::vector< DANGLING_END_ITEM >& aItemList );
 
-    const EDA_RECT GetBoundingBox() const;  // Virtual
+    virtual const EDA_RECT 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 );
 
-    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 ); }
 #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 e899f41..197b5dc 100644
--- a/eeschema/sch_sheet.h
+++ b/eeschema/sch_sheet.h
@@ -96,7 +96,7 @@ public:
 
     ~SCH_SHEET_PIN() { }
 
-    wxString GetClass() const
+    virtual wxString GetClass() const
     {
         return wxT( "SCH_SHEET_PIN" );
     }
@@ -109,10 +109,10 @@ public:
      * and false for items moved with no reference to anchor (usually large items)
      * @return true for a hierarchical sheet pin
      */
-    bool IsMovableFromAnchorPoint() { return true; }
+    virtual bool IsMovableFromAnchorPoint() { return true; }
 
-    void Draw( EDA_DRAW_PANEL* aPanel, wxDC* aDC, const wxPoint& aOffset,
-               GR_DRAWMODE aDrawMode, EDA_COLOR_T aColor = UNSPECIFIED_COLOR );
+    virtual void Draw( EDA_DRAW_PANEL* aPanel, wxDC* aDC, const wxPoint& aOffset,
+                       GR_DRAWMODE aDrawMode, EDA_COLOR_T aColor = UNSPECIFIED_COLOR );
 
     /**
      * Function CreateGraphicShape (virtual)
@@ -120,11 +120,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.
@@ -159,49 +159,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;
 #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;
 };
 
 
@@ -255,7 +255,7 @@ public:
 
     ~SCH_SHEET();
 
-    wxString GetClass() const
+    virtual wxString GetClass() const
     {
         return wxT( "SCH_SHEET" );
     }
@@ -268,7 +268,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; }
 
@@ -309,11 +309,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
@@ -412,12 +412,12 @@ public:
      */
     int GetMinHeight() const;
 
-    int GetPenSize() const;
+    virtual int GetPenSize() const;
 
-    void Draw( EDA_DRAW_PANEL* aPanel, wxDC* aDC, const wxPoint& aOffset,
-               GR_DRAWMODE aDrawMode, EDA_COLOR_T aColor = UNSPECIFIED_COLOR );
+    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
@@ -427,7 +427,7 @@ public:
      */
     wxPoint GetResizePosition() const;
 
-    void SwapData( SCH_ITEM* aItem );
+    virtual void SwapData( SCH_ITEM* aItem );
 
     /**
      * Function ComponentCount
@@ -501,7 +501,7 @@ public:
 
     // Geometric transforms (used in block operations):
 
-    void Move( const wxPoint& aMoveVector )
+    virtual void Move( const wxPoint& aMoveVector )
     {
         m_pos += aMoveVector;
 
@@ -511,17 +511,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.
@@ -542,44 +542,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,
-                         SCH_SHEET_PATH*      aSheetPath );
+    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;
 #endif
 
 protected:
diff --git a/eeschema/sch_text.h b/eeschema/sch_text.h
index da09f77..26501b5 100644
--- a/eeschema/sch_text.h
+++ b/eeschema/sch_text.h
@@ -211,10 +211,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;
 #endif
 };
 
@@ -228,40 +228,40 @@ public:
 
     ~SCH_LABEL() { }
 
-    void Draw( EDA_DRAW_PANEL* panel, wxDC* DC, const wxPoint& offset,
-               GR_DRAWMODE draw_mode, EDA_COLOR_T Color = UNSPECIFIED_COLOR );
+    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; }
 };
 
 
@@ -274,42 +274,42 @@ public:
 
     ~SCH_GLOBALLABEL() { }
 
-    void Draw( EDA_DRAW_PANEL* panel, wxDC* DC, const wxPoint& offset,
-               GR_DRAWMODE draw_mode, EDA_COLOR_T Color = UNSPECIFIED_COLOR );
+    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; }
 };
 
 
@@ -324,42 +324,42 @@ public:
 
     ~SCH_HIERLABEL() { }
 
-    void Draw( EDA_DRAW_PANEL* panel, wxDC* DC, const wxPoint& offset,
-               GR_DRAWMODE draw_mode, EDA_COLOR_T Color = UNSPECIFIED_COLOR );
+    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 9f87acc..4f36b02 100644
--- a/eeschema/schframe.h
+++ b/eeschema/schframe.h
@@ -235,7 +235,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 );
 
@@ -273,7 +273,7 @@ public:
     void Process_Config( wxCommandEvent& event );
     void OnSelectTool( wxCommandEvent& aEvent );
 
-    bool GeneralControl( wxDC* aDC, const wxPoint& aPosition, EDA_KEY aHotKey = 0 );
+    virtual bool GeneralControl( wxDC* aDC, const wxPoint& aPosition, EDA_KEY aHotKey = 0 );
 
     /**
      * Function GetProjectFileParametersList
@@ -291,7 +291,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
@@ -368,21 +368,21 @@ 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();
+    virtual void ReCreateMenuBar();
 
     ///> @copydoc EDA_DRAW_FRAME::GetHotKeyDescription()
-    EDA_HOTKEY* GetHotKeyDescription( int aCommand ) const;
+    virtual EDA_HOTKEY* GetHotKeyDescription( int aCommand ) const;
 
-    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 );
 
     /**
      * Function OnModify
@@ -404,13 +404,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
@@ -687,7 +687,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
@@ -1222,7 +1222,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 4aed862..1e06441 100644
--- a/eeschema/viewlib_frame.h
+++ b/eeschema/viewlib_frame.h
@@ -61,7 +61,7 @@ public:
 
     ~LIB_VIEW_FRAME();
 
-    void OnSize( wxSizeEvent& event );
+    virtual void OnSize( wxSizeEvent& event );
 
     /**
      * Function ReCreateListLib
@@ -74,23 +74,23 @@ 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, EDA_KEY aHotKey = 0 );
+    virtual bool GeneralControl( wxDC* aDC, const wxPoint& aPosition, EDA_KEY aHotKey = 0 );
 
     ///> @copydoc EDA_DRAW_FRAME::GetHotKeyDescription()
-    EDA_HOTKEY* GetHotKeyDescription( int aCommand ) const;
+    virtual EDA_HOTKEY* GetHotKeyDescription( int aCommand ) const;
 
     /**
      * Function OnHotKey
@@ -100,10 +100,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 a filter to display only libraries and/or components
@@ -154,7 +154,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 );
 
 // Private members:
diff --git a/gerbview/class_gbr_layer_box_selector.h b/gerbview/class_gbr_layer_box_selector.h
index 6128bce..d70fd37 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_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..e129a9d 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;
 #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 da89e7a..17e0b80 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 d64bac5..6285301 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 b128869..9524979 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 6bac9ff..8a8656d 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
@@ -306,7 +306,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
@@ -464,11 +464,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 );
@@ -510,7 +510,7 @@ public:
     void                OnQuit( wxCommandEvent& event );
 
     ///> @copydoc EDA_DRAW_FRAME::GetHotKeyDescription()
-    EDA_HOTKEY* GetHotKeyDescription( int aCommand ) const;
+    virtual EDA_HOTKEY* GetHotKeyDescription( int aCommand ) const;
 
     /**
      * Function OnHotKey.
@@ -521,7 +521,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 );
@@ -631,7 +631,7 @@ public:
     bool                LoadExcellonFiles( const wxString& aFileName );
     bool                Read_EXCELLON_File( const wxString& aFullFileName );
 
-    bool                GeneralControl( wxDC* aDC, const wxPoint& aPosition, EDA_KEY aHotKey = 0 );
+    virtual bool        GeneralControl( wxDC* aDC, const wxPoint& aPosition, EDA_KEY 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 fe77668..16737da 100644
--- a/include/class_base_screen.h
+++ b/include/class_base_screen.h
@@ -501,7 +501,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;
 #endif
 };
 
diff --git a/include/class_draw_panel_gal.h b/include/class_draw_panel_gal.h
index cc52294..531c5e5 100644
--- a/include/class_draw_panel_gal.h
+++ b/include/class_draw_panel_gal.h
@@ -112,7 +112,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_worksheet_dataitem.h b/include/class_worksheet_dataitem.h
index 47f72cb..346bcde 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;
 };
 
 
@@ -405,7 +405,7 @@ public:
     /**
      * @return false  (no end point)
      */
-    virtual bool HasEndPoint() { return false; };
+    virtual bool HasEndPoint() { return false; }
 
     virtual int GetPenSizeUi()
     {
diff --git a/include/dialog_env_var_config.h b/include/dialog_env_var_config.h
index 7705e54..7dc387c 100644
--- a/include/dialog_env_var_config.h
+++ b/include/dialog_env_var_config.h
@@ -50,8 +50,8 @@ protected:
 public:
     DIALOG_ENV_VAR_CONFIG( wxWindow* parent, const ENV_VAR_MAP& aEnvVarMap );
 
-    bool TransferDataToWindow();
-    bool TransferDataFromWindow();
+    virtual bool TransferDataToWindow();
+    virtual bool TransferDataFromWindow();
 
     bool ExternalDefsChanged() const { return m_extDefsChanged; }
 
diff --git a/include/dialog_get_component.h b/include/dialog_get_component.h
index 583f10b..5c5314b 100644
--- a/include/dialog_get_component.h
+++ b/include/dialog_get_component.h
@@ -72,9 +72,9 @@ 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..90458d9 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 3107b61..f6f3e5b 100644
--- a/include/dialog_hotkeys_editor.h
+++ b/include/dialog_hotkeys_editor.h
@@ -44,8 +44,8 @@ protected:
 
     WIDGET_HOTKEY_LIST* m_hotkeyListCtrl;
 
-    bool TransferDataToWindow();
-    bool TransferDataFromWindow();
+    virtual bool TransferDataToWindow();
+    virtual bool TransferDataFromWindow();
 
     virtual EDA_BASE_FRAME* GetParent()
     {
@@ -65,7 +65,7 @@ private:
      *
      * @param aEvent is the button press event, unused
      */
-    void ResetClicked( wxCommandEvent& aEvent );
+    virtual void ResetClicked( wxCommandEvent& aEvent );
 
     /**
      * Function DefaultsClicked
@@ -73,7 +73,7 @@ private:
      *
      * @param aEvent is the button press event, unused
      */
-    void DefaultsClicked( wxCommandEvent& aEvent );
+    virtual void DefaultsClicked( wxCommandEvent& aEvent );
 };
 
 /**
diff --git a/include/dialog_shim.h b/include/dialog_shim.h
index 7f294d3..9edc03c 100644
--- a/include/dialog_shim.h
+++ b/include/dialog_shim.h
@@ -85,9 +85,9 @@ public:
 
     bool IsQuasiModal()         { return m_qmodal_showing; }
 
-    bool Show( bool show );     // override wxDialog::Show
+    virtual bool Show( bool show );
 
-    bool Enable( bool enable ); // override wxDialog::Enable virtual
+    virtual bool Enable( bool enable );
 
 protected:
 
diff --git a/include/draw_frame.h b/include/draw_frame.h
index 7765e97..c9f9e07 100644
--- a/include/draw_frame.h
+++ b/include/draw_frame.h
@@ -332,7 +332,7 @@ public:
     void SkipNextLeftButtonReleaseEvent();
 
     ///> @copydoc EDA_BASE_FRAME::WriteHotkeyConfig
-    int WriteHotkeyConfig( struct EDA_HOTKEY_CONFIG* aDescList, wxString* aFullFileName = NULL );
+    virtual int WriteHotkeyConfig( struct EDA_HOTKEY_CONFIG* aDescList, wxString* aFullFileName = NULL );
 
     /**
      * Function GetHotkeyConfig()
@@ -686,9 +686,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 ca21c7d..3a99f18 100644
--- a/include/filter_reader.h
+++ b/include/filter_reader.h
@@ -48,14 +48,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();
     }
@@ -82,14 +82,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..e4f76db 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/gal/opengl/opengl_compositor.h b/include/gal/opengl/opengl_compositor.h
index c06add7..4974fe9 100644
--- a/include/gal/opengl/opengl_compositor.h
+++ b/include/gal/opengl/opengl_compositor.h
@@ -56,7 +56,7 @@ public:
     virtual void SetBuffer( unsigned int aBufferHandle );
 
     /// @copydoc COMPOSITOR::GetBuffer()
-    inline virtual unsigned int GetBuffer() const
+    virtual unsigned int GetBuffer() const
     {
         if( m_currentFbo == DIRECT_RENDERING )
             return DIRECT_RENDERING;
diff --git a/include/geometry/shape_circle.h b/include/geometry/shape_circle.h
index a915ef9..eeb5c26 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_convex.h b/include/geometry/shape_convex.h
index 308a1b3..fb6c3a8 100644
--- a/include/geometry/shape_convex.h
+++ b/include/geometry/shape_convex.h
@@ -56,7 +56,7 @@ public:
        SHAPE( SH_CONVEX ), m_points( aOther.m_points )
     {}
 
-    SHAPE* Clone() const
+    virtual SHAPE* Clone() const
     {
         return new SHAPE_CONVEX( *this );
     }
@@ -71,7 +71,7 @@ public:
     }
 
     /// @copydoc SHAPE::BBox()
-    const BOX2I BBox( int aClearance = 0 ) const
+    virtual const BOX2I BBox( int aClearance = 0 ) const
     {
         return m_points.BBox( aClearance );
     }
@@ -166,17 +166,17 @@ public:
     }
 
     /// @copydoc SHAPE::Collide()
-    bool Collide( const SEG& aSeg, int aClearance = 0 ) const
+    virtual bool Collide( const SEG& aSeg, int aClearance = 0 ) const
     {
         return m_points.Collide( aSeg, aClearance );
     }
 
-    void Move( const VECTOR2I& aVector )
+    virtual void Move( const VECTOR2I& aVector )
     {
         m_points.Move( 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 ae2bf5e..459b684 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()
@@ -261,7 +261,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 );
@@ -280,7 +280,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()
@@ -290,7 +290,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()
@@ -552,10 +552,10 @@ public:
     const VECTOR2I NearestPoint( const SEG& aSeg, int& dist ) const;
 
     /// @copydoc SHAPE::Format()
-    const std::string Format() const;
+    virtual const std::string Format() const;
 
     /// @copydoc SHAPE::Parse()
-    bool Parse( std::stringstream& aStream );
+    virtual bool Parse( std::stringstream& aStream );
 
     bool operator!=( const SHAPE_LINE_CHAIN& aRhs ) const
     {
@@ -573,13 +573,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_poly_set.h b/include/geometry/shape_poly_set.h
index fa61fca..0edd6dd 100644
--- a/include/geometry/shape_poly_set.h
+++ b/include/geometry/shape_poly_set.h
@@ -308,25 +308,25 @@ class SHAPE_POLY_SET : public SHAPE
         void Simplify( POLYGON_MODE aFastMode );
 
         /// @copydoc SHAPE::Format()
-        const std::string Format() const;
+        virtual const std::string Format() const;
 
         /// @copydoc SHAPE::Parse()
-        bool Parse( std::stringstream& aStream );
+        virtual bool Parse( std::stringstream& aStream );
 
         /// @copydoc SHAPE::Move()
-        void Move( const VECTOR2I& aVector );
+        virtual void Move( const VECTOR2I& aVector );
 
         /// @copydoc SHAPE::IsSolid()
-        bool IsSolid() const
+        virtual bool IsSolid() const
         {
             return true;
         }
 
-        const BOX2I BBox( int aClearance = 0 ) const;
+        virtual const BOX2I BBox( int aClearance = 0 ) const;
 
         // fixme: add collision support
-        bool Collide( const VECTOR2I& aP, int aClearance = 0 ) const { return false; }
-        bool Collide( const SEG& aSeg, int aClearance = 0 ) const { return false; }
+        virtual bool Collide( const VECTOR2I& aP, int aClearance = 0 ) const { return false; }
+        virtual bool Collide( const SEG& aSeg, int aClearance = 0 ) const { return false; }
 
 
         ///> Returns true is a given subpolygon contains the point aP. If aSubpolyIndex < 0 (default value),
diff --git a/include/geometry/shape_rect.h b/include/geometry/shape_rect.h
index a1a13dd..6c08fcc 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;
 
     /**
      * Function GetPosition()
@@ -132,12 +132,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 71ed5b1..97198c4 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 + 1 ) / 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 + 1 ) / 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 + 1 ) / 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 10340ac..444f804 100644
--- a/include/kiway.h
+++ b/include/kiway.h
@@ -364,7 +364,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 23a1ef9..74bbd07 100644
--- a/include/kiway_express.h
+++ b/include/kiway_express.h
@@ -62,7 +62,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 eeff8a5..4b9c1bd 100644
--- a/include/kiway_player.h
+++ b/include/kiway_player.h
@@ -205,7 +205,7 @@ public:
     /**
      * Our version of Destroy() which is virtual from wxWidgets
      */
-    bool Destroy();
+    virtual bool Destroy();
 
 protected:
 
diff --git a/include/origin_viewitem.h b/include/origin_viewitem.h
index 02900fb..adfcc4b 100644
--- a/include/origin_viewitem.h
+++ b/include/origin_viewitem.h
@@ -48,18 +48,18 @@ public:
                      MARKER_STYLE aStyle = CIRCLE_X, int aSize = 16,
                      const VECTOR2D& aPosition = VECTOR2D( 0, 0 ) );
 
-    const BOX2I ViewBBox() const;
+    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
     {
         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
@@ -67,7 +67,7 @@ public:
     /** Get class name
      * @return  string "ORIGIN_VIEWITEM"
      */
-    wxString GetClass() const
+    virtual wxString GetClass() const
     {
         return wxT( "ORIGIN_VIEWITEM" );
     }
diff --git a/include/plot_common.h b/include/plot_common.h
index 4b33c3d..e1daeb1 100644
--- a/include/plot_common.h
+++ b/include/plot_common.h
@@ -936,8 +936,8 @@ public:
     virtual void SetDefaultLineWidth( int width );
 
     // RS274X has no dashing, nor colours
-    virtual void SetDash( bool dashed ) {};
-    virtual void SetColor( EDA_COLOR_T color ) {};
+    virtual void SetDash( bool dashed ) {}
+    virtual void SetColor( EDA_COLOR_T color ) {}
     // Currently, aScale and aMirror are not used in gerber plotter
     virtual void SetViewport( const wxPoint& aOffset, double aIusPerDecimil,
                           double aScale, bool aMirror );
diff --git a/include/plugins/3dapi/ifsg_appearance.h b/include/plugins/3dapi/ifsg_appearance.h
index e1ff43a..7b6cce4 100644
--- a/include/plugins/3dapi/ifsg_appearance.h
+++ b/include/plugins/3dapi/ifsg_appearance.h
@@ -38,9 +38,9 @@ public:
     IFSG_APPEARANCE( SGNODE* aParent );
     IFSG_APPEARANCE( IFSG_NODE& aParent );
 
-    bool Attach( SGNODE* aNode );
-    bool NewNode( SGNODE* aParent );
-    bool NewNode( IFSG_NODE& aParent );
+    virtual bool Attach( SGNODE* aNode );
+    virtual bool NewNode( SGNODE* aParent );
+    virtual bool NewNode( IFSG_NODE& aParent );
 
     bool SetEmissive( float aRVal, float aGVal, float aBVal );
     bool SetEmissive( const SGCOLOR* aRGBColor );
diff --git a/include/plugins/3dapi/ifsg_colors.h b/include/plugins/3dapi/ifsg_colors.h
index e93b3cb..ca16c17 100644
--- a/include/plugins/3dapi/ifsg_colors.h
+++ b/include/plugins/3dapi/ifsg_colors.h
@@ -45,9 +45,9 @@ public:
     IFSG_COLORS( SGNODE* aParent );
     IFSG_COLORS( IFSG_NODE& aParent );
 
-    bool Attach( SGNODE* aNode );
-    bool NewNode( SGNODE* aParent );
-    bool NewNode( IFSG_NODE& aParent );
+    virtual bool Attach( SGNODE* aNode );
+    virtual bool NewNode( SGNODE* aParent );
+    virtual bool NewNode( IFSG_NODE& aParent );
 
     bool GetColorList( size_t& aListSize, SGCOLOR*& aColorList );
     bool SetColorList( size_t aListSize, const SGCOLOR* aColorList );
diff --git a/include/plugins/3dapi/ifsg_coordindex.h b/include/plugins/3dapi/ifsg_coordindex.h
index ab6ca86..60d0ff1 100644
--- a/include/plugins/3dapi/ifsg_coordindex.h
+++ b/include/plugins/3dapi/ifsg_coordindex.h
@@ -44,9 +44,9 @@ public:
     IFSG_COORDINDEX( SGNODE* aParent );
     IFSG_COORDINDEX( IFSG_NODE& aParent );
 
-    bool Attach( SGNODE* aNode );
-    bool NewNode( SGNODE* aParent );
-    bool NewNode( IFSG_NODE& aParent );
+    virtual bool Attach( SGNODE* aNode );
+    virtual bool NewNode( SGNODE* aParent );
+    virtual bool NewNode( IFSG_NODE& aParent );
 };
 
 #endif  // IFSG_COORDINDEX_H
diff --git a/include/plugins/3dapi/ifsg_coords.h b/include/plugins/3dapi/ifsg_coords.h
index 428681f..fe24bde 100644
--- a/include/plugins/3dapi/ifsg_coords.h
+++ b/include/plugins/3dapi/ifsg_coords.h
@@ -44,9 +44,9 @@ public:
     IFSG_COORDS( SGNODE* aParent );
     IFSG_COORDS( IFSG_NODE& aParent );
 
-    bool Attach( SGNODE* aNode );
-    bool NewNode( SGNODE* aParent );
-    bool NewNode( IFSG_NODE& aParent );
+    virtual bool Attach( SGNODE* aNode );
+    virtual bool NewNode( SGNODE* aParent );
+    virtual bool NewNode( IFSG_NODE& aParent );
 
     bool GetCoordsList( size_t& aListSize, SGPOINT*& aCoordsList );
     bool SetCoordsList( size_t aListSize, const SGPOINT* aCoordsList );
diff --git a/include/plugins/3dapi/ifsg_faceset.h b/include/plugins/3dapi/ifsg_faceset.h
index 1abd4d7..0e4abe6 100644
--- a/include/plugins/3dapi/ifsg_faceset.h
+++ b/include/plugins/3dapi/ifsg_faceset.h
@@ -44,9 +44,9 @@ public:
     IFSG_FACESET( SGNODE* aParent );
     IFSG_FACESET( IFSG_NODE& aParent );
 
-    bool Attach( SGNODE* aNode );
-    bool NewNode( SGNODE* aParent );
-    bool NewNode( IFSG_NODE& aParent );
+    virtual bool Attach( SGNODE* aNode );
+    virtual bool NewNode( SGNODE* aParent );
+    virtual bool NewNode( IFSG_NODE& aParent );
 
     bool CalcNormals( SGNODE** aPtr );
 };
diff --git a/include/plugins/3dapi/ifsg_normals.h b/include/plugins/3dapi/ifsg_normals.h
index 4befd15..1d89f7a 100644
--- a/include/plugins/3dapi/ifsg_normals.h
+++ b/include/plugins/3dapi/ifsg_normals.h
@@ -44,9 +44,9 @@ public:
     IFSG_NORMALS( SGNODE* aParent );
     IFSG_NORMALS( IFSG_NODE& aParent );
 
-    bool Attach( SGNODE* aNode );
-    bool NewNode( SGNODE* aParent );
-    bool NewNode( IFSG_NODE& aParent );
+    virtual bool Attach( SGNODE* aNode );
+    virtual bool NewNode( SGNODE* aParent );
+    virtual bool NewNode( IFSG_NODE& aParent );
 
     bool GetNormalList( size_t& aListSize, SGVECTOR*& aNormalList );
     bool SetNormalList( size_t aListSize, const SGVECTOR* aNormalList );
diff --git a/include/plugins/3dapi/ifsg_shape.h b/include/plugins/3dapi/ifsg_shape.h
index 0d9ba2f..975769a 100644
--- a/include/plugins/3dapi/ifsg_shape.h
+++ b/include/plugins/3dapi/ifsg_shape.h
@@ -44,9 +44,9 @@ public:
     IFSG_SHAPE( SGNODE* aParent );
     IFSG_SHAPE( IFSG_NODE& aParent );
 
-    bool Attach( SGNODE* aNode );
-    bool NewNode( SGNODE* aParent );
-    bool NewNode( IFSG_NODE& aParent );
+    virtual bool Attach( SGNODE* aNode );
+    virtual bool NewNode( SGNODE* aParent );
+    virtual bool NewNode( IFSG_NODE& aParent );
 };
 
 #endif  // IFSG_SHAPE_H
diff --git a/include/plugins/3dapi/ifsg_transform.h b/include/plugins/3dapi/ifsg_transform.h
index 42bf1e6..b27f8c7 100644
--- a/include/plugins/3dapi/ifsg_transform.h
+++ b/include/plugins/3dapi/ifsg_transform.h
@@ -46,9 +46,9 @@ public:
     // since a transform may own another transform and that construct
     // invites accidental misuse of the copy constructor
 
-    bool Attach( SGNODE* aNode );
-    bool NewNode( SGNODE* aParent );
-    bool NewNode( IFSG_NODE& aParent );
+    virtual bool Attach( SGNODE* aNode );
+    virtual bool NewNode( SGNODE* aParent );
+    virtual bool NewNode( IFSG_NODE& aParent );
 
     bool SetScaleOrientation( const SGVECTOR& aScaleAxis, double aAngle );
     bool SetRotation( const SGVECTOR& aRotationAxis, double aAngle );
diff --git a/include/reporter.h b/include/reporter.h
index a00dd50..3f79d6e 100644
--- a/include/reporter.h
+++ b/include/reporter.h
@@ -105,7 +105,7 @@ public:
     {
     }
 
-    REPORTER& Report( const wxString& aText, SEVERITY aSeverity = RPT_UNDEFINED );
+    virtual REPORTER& Report( const wxString& aText, SEVERITY aSeverity = RPT_UNDEFINED );
 };
 
 
@@ -124,7 +124,7 @@ public:
     {
     }
 
-    REPORTER& Report( const wxString& aText, SEVERITY aSeverity = RPT_UNDEFINED );
+    virtual REPORTER& Report( const wxString& aText, SEVERITY aSeverity = RPT_UNDEFINED );
 };
 
 
@@ -143,7 +143,7 @@ public:
     {
     }
 
-    REPORTER& Report( const wxString& aText, SEVERITY aSeverity = RPT_UNDEFINED );
+    virtual REPORTER& Report( const wxString& aText, SEVERITY aSeverity = RPT_UNDEFINED );
 };
 
 /**
@@ -161,7 +161,7 @@ class NULL_REPORTER : public REPORTER
 
         static REPORTER& GetInstance();
 
-        REPORTER& Report( const wxString& aText, SEVERITY aSeverity = RPT_UNDEFINED );
+        virtual REPORTER& Report( const wxString& aText, SEVERITY aSeverity = RPT_UNDEFINED );
 };
 
 #endif     // _REPORTER_H_
diff --git a/include/richio.h b/include/richio.h
index 78e95d3..11b3efd 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 819cb5e..906bb63 100644
--- a/include/tool/context_menu.h
+++ b/include/tool/context_menu.h
@@ -60,7 +60,7 @@ public:
      * the menu.
      * @param aTitle is the new title.
      */
-    void SetTitle( const wxString& aTitle );
+    virtual void SetTitle( const wxString& aTitle );
 
     /**
      * Function SetIcon()
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 5a05bdd..764a954 100644
--- a/include/view/wx_view_controls.h
+++ b/include/view/wx_view_controls.h
@@ -69,7 +69,7 @@ public:
      *
      * @param aEnabled says whether the option should be enabled or disabled.
      */
-    void SetGrabMouse( bool aEnabled );
+    virtual void SetGrabMouse( bool aEnabled );
 
     /**
      * Function SetAutoPan()
@@ -77,7 +77,7 @@ public:
      *
      * @param aEnabled says whether the option should enabled or disabled.
      */
-    void SetAutoPan( bool aEnabled )
+    virtual void SetAutoPan( bool aEnabled )
     {
         m_autoPanEnabled = aEnabled;
 
@@ -86,17 +86,17 @@ public:
     }
 
     /// @copydoc VIEW_CONTROLS::GetMousePosition()
-    VECTOR2I GetMousePosition() const;
+    virtual VECTOR2I GetMousePosition() const;
 
     /// @copydoc VIEW_CONTROLS::GetCursorPosition()
-    VECTOR2D GetCursorPosition() const;
+    virtual VECTOR2D GetCursorPosition() const;
 
     /// @copydoc VIEW_CONTROLS::CursorWarp()
-    void WarpCursor( const VECTOR2D& aPosition, bool aWorldCoordinates = false,
+    virtual void WarpCursor( const VECTOR2D& aPosition, bool aWorldCoordinates = false,
             bool aWarpView = false ) const;
 
     /// @copydoc VIEW_CONTROLS::CenterOnCursor()
-    void CenterOnCursor() const;
+    virtual void CenterOnCursor() const;
 
     /// Adjusts the scrollbars position to match the current viewport.
     void UpdateScrollbars();
diff --git a/include/worksheet_viewitem.h b/include/worksheet_viewitem.h
index 149f804..23d0aa1 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 81f592e..75d55b7 100644
--- a/include/wxBasePcbFrame.h
+++ b/include/wxBasePcbFrame.h
@@ -129,18 +129,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 );
+    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;                       // overload
-    void SetGridOrigin( const wxPoint& aPoint );                // overload
+    virtual const wxPoint& GetGridOrigin() const;
+    virtual void SetGridOrigin( const wxPoint& 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 GetDesignSettings
@@ -158,7 +158,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 );
@@ -192,12 +192,12 @@ public:
     virtual void ReCreateVToolbar() = 0;
     virtual void OnLeftClick( wxDC* DC, const wxPoint& MousePos ) = 0;
     virtual void OnLeftDClick( wxDC* DC, const wxPoint& MousePos ) = 0;
-    virtual bool OnRightClick( const wxPoint& MousePos, wxMenu* PopMenu )  = 0;
+    virtual bool OnRightClick( const wxPoint& MousePos, wxMenu* PopMenu ) = 0;
     virtual void ReCreateMenuBar();
     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
@@ -211,7 +211,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 );
 
@@ -260,7 +260,7 @@ public:
     BOARD_ITEM* GetCurItem();
 
     ///> @copydoc EDA_DRAW_FRAME::UpdateMsgPanel()
-    void UpdateMsgPanel();
+    virtual void UpdateMsgPanel();
 
     /**
      * Function GetCollectorsGuide
@@ -636,8 +636,8 @@ public:
         return GetScreen()->m_Active_Layer;
     }
 
-    void LoadSettings( wxConfigBase* aCfg );    // override virtual
-    void SaveSettings( wxConfigBase* aCfg );    // override virtual
+    virtual void LoadSettings( wxConfigBase* aCfg );
+    virtual void SaveSettings( wxConfigBase* aCfg );
 
     bool InvokeDialogGrid();
 
@@ -668,13 +668,13 @@ public:
      * Virtual function SetNextGrid()
      * changes the grid size settings to the next one available.
      */
-    void SetNextGrid();
+    virtual void SetNextGrid();
 
     /**
      * Virtual function SetPrevGrid()
      * changes the grid size settings to the previous one available.
      */
-    void SetPrevGrid();
+    virtual void SetPrevGrid();
 
     void ClearSelection();
 
diff --git a/include/wxPcbStruct.h b/include/wxPcbStruct.h
index a850228..3d22ae4 100644
--- a/include/wxPcbStruct.h
+++ b/include/wxPcbStruct.h
@@ -195,7 +195,7 @@ protected:
      * Duplicate selected item if possible and start a move
      * @param aIncrement increment the item number if appropriate
      */
-    void duplicateItems( bool aIncrement ); //override
+    virtual void duplicateItems( bool aIncrement );
 
     // protected so that PCB::IFACE::CreateWindow() is the only factory.
     PCB_EDIT_FRAME( KIWAY* aKiway, wxWindow* aParent );
@@ -232,7 +232,7 @@ public:
      */
     virtual void ExecuteRemoteCommand( const char* cmdline );
 
-    void KiwayMailIn( KIWAY_EXPRESS& aEvent );      // virtual overload from KIWAY_PLAYER
+    virtual void KiwayMailIn( KIWAY_EXPRESS& aEvent );
 
     /**
      * Function ToPlotter
@@ -349,7 +349,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 );
 
     /**
      * Load the current project's file configuration settings which are pertinent
@@ -376,9 +376,9 @@ public:
      */
     PARAM_CFG_ARRAY& GetConfigurationSettings();
 
-    void LoadSettings( wxConfigBase* aCfg );    // override virtual
+    virtual void LoadSettings( wxConfigBase* aCfg );
 
-    void SaveSettings( wxConfigBase* aCfg );    // override virtual
+    virtual void SaveSettings( wxConfigBase* aCfg );
 
     wxConfigBase* GetSettings() { return config(); };
 
@@ -403,7 +403,7 @@ public:
     void SetLastNetListRead( const wxString& aNetListFile );
 
     ///> @copydoc EDA_DRAW_FRAME::GetHotKeyDescription()
-    EDA_HOTKEY* GetHotKeyDescription( int aCommand ) const;
+    virtual EDA_HOTKEY* GetHotKeyDescription( int aCommand ) const;
 
     /**
      * Function OnHotKey.
@@ -414,7 +414,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
@@ -499,7 +499,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 );
@@ -514,13 +514,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
@@ -597,12 +597,12 @@ public:
      * Function Show3D_Frame
      * displays the 3D view of current printed circuit board.
      */
-    void Show3D_Frame( wxCommandEvent& event );
+    virtual void Show3D_Frame( wxCommandEvent& event );
 
     ///> @copydoc EDA_DRAW_FRAME::UseGalCanvas()
-    void UseGalCanvas( bool aEnable );
+    virtual void UseGalCanvas( bool aEnable );
 
-    bool GeneralControl( wxDC* aDC, const wxPoint& aPosition, EDA_KEY aHotKey = 0 );
+    virtual bool GeneralControl( wxDC* aDC, const wxPoint& aPosition, EDA_KEY aHotKey = 0 );
 
     /**
      * Function ShowDesignRulesEditor
@@ -615,8 +615,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
@@ -625,10 +625,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.
@@ -677,7 +677,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
@@ -686,7 +686,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: */
 
@@ -861,7 +861,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
@@ -907,10 +907,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 );
 
     // Drc control
 
@@ -1138,7 +1138,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.
@@ -1288,7 +1288,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
@@ -1666,7 +1666,7 @@ public:
 
     void Begin_Self( wxDC* DC );
 
-    void ShowChangedLanguage();         // override EDA_BASE_FRAME virtual
+    virtual void ShowChangedLanguage();
 
     /**
      * Function UpdateTitle
diff --git a/include/wxstruct.h b/include/wxstruct.h
index a6eb79c..fc29e7e 100644
--- a/include/wxstruct.h
+++ b/include/wxstruct.h
@@ -205,9 +205,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 db1d512..7070a8b 100644
--- a/kicad/class_treeprojectfiles.h
+++ b/kicad/class_treeprojectfiles.h
@@ -56,8 +56,7 @@ public:
     TREEPROJECTFILES( TREE_PROJECT_FRAME* parent );
     ~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 17a7a62..5b18eb0 100644
--- a/kicad/dialogs/dialog_template_selector.h
+++ b/kicad/dialogs/dialog_template_selector.h
@@ -119,10 +119,10 @@ private:
     void replaceCurrentPage();
 
     void onNotebookResize( wxSizeEvent& event );
-    void OnPageChange( wxNotebookEvent& event );
-    void onDirectoryBrowseClicked( wxCommandEvent& event );
-	void onValidatePath( wxCommandEvent& event );
-	void OnHtmlLinkActivated( wxHtmlLinkEvent& event );
+    virtual void OnPageChange( wxNotebookEvent& event );
+    virtual void onDirectoryBrowseClicked( wxCommandEvent& event );
+    virtual void onValidatePath( wxCommandEvent& event );
+    virtual void OnHtmlLinkActivated( wxHtmlLinkEvent& event );
 };
 
 #endif
diff --git a/kicad/kicad.cpp b/kicad/kicad.cpp
index 6dd3677..92ec661 100644
--- a/kicad/kicad.cpp
+++ b/kicad/kicad.cpp
@@ -264,7 +264,7 @@ struct APP_KICAD : public wxApp
     }
 #endif
 
-    bool OnInit()           // overload wxApp virtual
+    virtual bool OnInit()
     {
         // if( Kiways.OnStart( this ) )
         {
@@ -273,7 +273,7 @@ struct APP_KICAD : public wxApp
         return false;
     }
 
-    int  OnExit()           // overload wxApp virtual
+    virtual int  OnExit()
     {
         // Kiways.OnEnd();
 
@@ -282,7 +282,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 16e18d4..c4a75a4 100644
--- a/kicad/kicad.h
+++ b/kicad/kicad.h
@@ -188,7 +188,7 @@ public:
 
     void Process_Config( wxCommandEvent& event );
 
-    void ReCreateMenuBar();
+    virtual void ReCreateMenuBar();
     void RecreateBaseHToolbar();
 
     /**
@@ -221,9 +221,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
@@ -246,7 +246,7 @@ public:
         {
         }
 
-        void OnTerminate( int pid, int status );
+        virtual void OnTerminate( int pid, int status );
     };
 
     /**
@@ -278,11 +278,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 e7ff040..e73dc4d 100644
--- a/kicad/pgm_kicad.h
+++ b/kicad/pgm_kicad.h
@@ -49,9 +49,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_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 c55f9aa..6d17b0a 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 67a5a29..066841b 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 );
@@ -237,7 +237,7 @@ public:
     void                OnQuit( wxCommandEvent& event );
 
     ///> @copydoc EDA_DRAW_FRAME::GetHotKeyDescription()
-    EDA_HOTKEY* GetHotKeyDescription( int aCommand ) const;
+    virtual EDA_HOTKEY* GetHotKeyDescription( int aCommand ) const;
 
     /**
      * Function OnHotKey.
@@ -248,7 +248,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 );
@@ -267,7 +267,7 @@ public:
     void                ToPrinter( wxCommandEvent& event );
 
     void                Files_io( wxCommandEvent& event );
-    bool                GeneralControl( wxDC* aDC, const wxPoint& aPosition, EDA_KEY aHotKey = 0 );
+    virtual bool        GeneralControl( wxDC* aDC, const wxPoint& aPosition, EDA_KEY 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 6a9f970..9ca2972 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 3c685cb..651b725 100644
--- a/pcb_calculator/pcb_calculator.h
+++ b/pcb_calculator/pcb_calculator.h
@@ -78,16 +78,16 @@ 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 );
+    virtual void OnPaintTranslinePanel( wxPaintEvent& event );
+    virtual void OnPaintAttenuatorPanel( wxPaintEvent& event );
 
     // Config read-write, virtual from EDA_BASE_FRAME
-    void LoadSettings( wxConfigBase* aCfg );
-    void SaveSettings( wxConfigBase* aCfg );
+    virtual void LoadSettings( wxConfigBase* aCfg );
+    virtual void SaveSettings( wxConfigBase* aCfg );
 
     // R/W data files:
     bool ReadDataFile();
@@ -124,28 +124,28 @@ private:
      * Called when the user changes the general parameters (i.e., anything that
      * is not one of the controlling values). This update the calculations.
      */
-    void OnTWParametersChanged( wxCommandEvent& event );
+    virtual void OnTWParametersChanged( wxCommandEvent& event );
 
     /**
      * Function OnTWCalculateFromCurrent
      * Called when the user changes the desired maximum current. This sets the
      * current as the controlling value and performs the calculations.
      */
-    void OnTWCalculateFromCurrent( wxCommandEvent& event );
+    virtual void OnTWCalculateFromCurrent( wxCommandEvent& event );
 
     /**
      * Function OnTWCalculateFromExtWidth
      * Called when the user changes the desired external trace width. This sets
      * the external width as the controlling value and performs the calculations.
      */
-    void OnTWCalculateFromExtWidth( wxCommandEvent& event );
+    virtual void OnTWCalculateFromExtWidth( wxCommandEvent& event );
 
     /**
      * Function OnTWCalculateFromIntWidth
      * Called when the user changes the desired internal trace width. This sets
      * the internal width as the controlling value and performs the calculations.
      */
-    void OnTWCalculateFromIntWidth( wxCommandEvent& event );
+    virtual void OnTWCalculateFromIntWidth( wxCommandEvent& event );
 
     /**
      * Function TWCalculateWidth
@@ -177,8 +177,8 @@ private:
     void TWUpdateModeDisplay();
 
     // 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:
@@ -186,42 +186,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
@@ -241,25 +241,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:
@@ -315,7 +315,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 0d95703..8212a73 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 ac348a9..ff68371 100644
--- a/pcb_calculator/transline/c_microstrip.h
+++ b/pcb_calculator/transline/c_microstrip.h
@@ -59,8 +59,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 b4c301f..5fe835c 100644
--- a/pcb_calculator/transline/coax.h
+++ b/pcb_calculator/transline/coax.h
@@ -41,8 +41,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 0d96f45..e53d29f 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 8f2737b..8391b44 100644
--- a/pcb_calculator/transline/microstrip.h
+++ b/pcb_calculator/transline/microstrip.h
@@ -53,8 +53,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 58d5ce4..3eab2a5 100644
--- a/pcb_calculator/transline/rectwaveguide.h
+++ b/pcb_calculator/transline/rectwaveguide.h
@@ -45,8 +45,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 b38b88f..7b3bfcb 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 fdbf2d8..3adc00c 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 4c6db1f..50b5761 100644
--- a/pcbnew/class_board.cpp
+++ b/pcbnew/class_board.cpp
@@ -150,7 +150,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;
@@ -1283,7 +1283,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 ba5241f..0ea9b47 100644
--- a/pcbnew/class_board.h
+++ b/pcbnew/class_board.h
@@ -256,7 +256,7 @@ public:
                m_Track.GetCount() == 0 && m_Zone.GetCount() == 0;
     }
 
-    void Move( const wxPoint& aMoveVector );        // overload
+    virtual void Move( const wxPoint& aMoveVector );
 
     void SetFileFormatVersionAtLoad( int aVersion ) { m_fileFormatVersionAtLoad = aVersion; }
     int GetFileFormatVersionAtLoad()  const { return m_fileFormatVersionAtLoad; }
@@ -870,11 +870,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; }
 
     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.
@@ -884,7 +884,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 );
 
     /**
@@ -911,7 +911,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[] );
 
     /**
@@ -989,13 +989,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 ); }
 #endif
 
 
diff --git a/pcbnew/class_board_connected_item.h b/pcbnew/class_board_connected_item.h
index fea4554..445809f 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 93e5e8b..f804561 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,34 +206,34 @@ 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;
 
 #if defined(DEBUG)
-    virtual void Show( int nestLevel, std::ostream& os ) const { ShowDummy( os ); }    // override
+    virtual void Show( int nestLevel, std::ostream& os ) const { ShowDummy( os ); }
 #endif
 };
 
diff --git a/pcbnew/class_drawsegment.h b/pcbnew/class_drawsegment.h
index 411a5a2..542e137 100644
--- a/pcbnew/class_drawsegment.h
+++ b/pcbnew/class_drawsegment.h
@@ -100,8 +100,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; }
+    virtual const wxPoint& GetPosition() const      { return m_Start; }
 
     /**
      * Function GetStart
@@ -125,7 +125,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;
     const wxPoint& GetArcStart() const      { return m_End; }
     const wxPoint GetArcEnd() const;
 
@@ -183,7 +183,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 );
@@ -195,9 +195,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" );
     }
@@ -249,7 +249,7 @@ public:
     virtual const BOX2I ViewBBox() 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 ); }
 #endif
 };
 
diff --git a/pcbnew/class_edge_mod.h b/pcbnew/class_edge_mod.h
index f7ffcaa..6b0df24 100644
--- a/pcbnew/class_edge_mod.h
+++ b/pcbnew/class_edge_mod.h
@@ -66,7 +66,7 @@ public:
      * This is a footprint shape modification.
      * (should be only called by a footprint editing function)
      */
-    void Move( const wxPoint& aMoveVector );
+    virtual void Move( const wxPoint& aMoveVector );
 
     /**
      * Mirror an edge of the footprint.
@@ -81,7 +81,7 @@ public:
      * This is a footprint shape modification.
      * (should be only called by a footprint editing function )
      */
-    void Rotate( const wxPoint& aRotCentre, double aAngle );
+    virtual void Rotate( const wxPoint& aRotCentre, double aAngle );
 
     /**
      * Flip entity relative to aCentre.
@@ -91,7 +91,7 @@ public:
      * not usual to flip an item alone, without flipping the parent footprint.
      * (consider Mirror for a mirror transform).
      */
-    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; }
@@ -115,25 +115,25 @@ 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;
 
 
 #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 ); }
 #endif
 
     wxPoint m_Start0;       // Start point or center, relative to module origin, orient 0.
diff --git a/pcbnew/class_marker_pcb.h b/pcbnew/class_marker_pcb.h
index e524ae7..b526864 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 )
     {
@@ -98,18 +98,18 @@ public:
         return m_item;
     }
 
-    bool HitTest( const wxPoint& aPosition ) const
+    virtual bool HitTest( const wxPoint& aPosition ) const
     {
         return HitTestMarker( aPosition );
     }
 
-    bool IsOnLayer( LAYER_ID aLayer ) const;
+    virtual bool IsOnLayer( LAYER_ID aLayer ) const;
 
-    void GetMsgPanelInfo( std::vector< MSG_PANEL_ITEM >& aList );
+    virtual void GetMsgPanelInfo( std::vector< MSG_PANEL_ITEM >& aList );
 
-    wxString GetSelectMenuText() const;
+    virtual wxString GetSelectMenuText() const;
 
-    BITMAP_DEF GetMenuImage() const { return  drc_xpm; }
+    virtual BITMAP_DEF GetMenuImage() const { return  drc_xpm; }
 
     ///> @copydoc VIEW_ITEM::ViewBBox()
     virtual const BOX2I ViewBBox() const
@@ -121,7 +121,7 @@ public:
     virtual void ViewGetLayers( int aLayers[], int& aCount ) 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 ); }
 #endif
 
     /** Get class name
diff --git a/pcbnew/class_mire.h b/pcbnew/class_mire.h
index 03bebba..b8a5195 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 ); }
 #endif
 };
 
diff --git a/pcbnew/class_module.h b/pcbnew/class_module.h
index fedc62e..aefd2c4 100644
--- a/pcbnew/class_module.h
+++ b/pcbnew/class_module.h
@@ -145,8 +145,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 +156,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 );
+    virtual const wxPoint& GetPosition() const { return m_Pos; }
 
     void SetOrientation( double newangle );
     double GetOrientation() const { return m_Orient; }
@@ -203,11 +202,11 @@ public:
     void IncrementFlag() { m_arflag += 1; }
     int GetFlag() const { return m_arflag; }
 
-    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 +234,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 +294,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 );
@@ -384,14 +383,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
@@ -452,7 +451,7 @@ public:
      * Implementation of the generic "reference" incrementing interface
      * Increments the numeric suffix, filling any sequence gaps
      */
-    bool IncrementItemReference(); //override
+    virtual bool IncrementItemReference();
 
     /**
      * Function IncrementReference
@@ -547,19 +546,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
@@ -570,7 +569,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;
@@ -651,7 +650,7 @@ public:
     const wxArrayString* GetInitialComments() const { return m_initial_comments; }
 
 #if defined(DEBUG)
-    virtual void Show( int nestLevel, std::ostream& os ) const { ShowDummy( os ); }    // override
+    virtual void Show( int nestLevel, std::ostream& os ) const { ShowDummy( os ); }
 #endif
 
 private:
diff --git a/pcbnew/class_netinfo.h b/pcbnew/class_netinfo.h
index 82ac8d7..44e0197 100644
--- a/pcbnew/class_netinfo.h
+++ b/pcbnew/class_netinfo.h
@@ -517,22 +517,22 @@ public:
         return aItem && PCB_T == aItem->Type();
     }
 
-    wxString GetClass() const
+    virtual wxString GetClass() const
     {
         return wxT( "NETINFO_ITEM" );
     }
 
-    void Show( int nestLevel, std::ostream& os ) const
+    virtual void Show( int nestLevel, std::ostream& os ) const
     {
     }
 
-    const wxPoint& GetPosition() const
+    virtual const wxPoint& GetPosition() const
     {
         static wxPoint dummy(0, 0);
         return dummy;
     }
 
-    void SetPosition( const wxPoint& aPos )
+    virtual void SetPosition( const wxPoint& aPos )
     {
     }
 
@@ -648,7 +648,7 @@ public:
      * @todo we actually could show a NET, simply show all the tracks and
      *       a pads or net name on pad and vias
      */
-    void Draw( EDA_DRAW_PANEL* panel, wxDC* DC, GR_DRAWMODE aDrawMode,
+    virtual void Draw( EDA_DRAW_PANEL* panel, wxDC* DC, GR_DRAWMODE aDrawMode,
                const wxPoint& offset );
 
     /**
@@ -684,7 +684,7 @@ public:
      *
      * @param aList is the list in which to place the  status information.
      */
-    void GetMsgPanelInfo( std::vector< MSG_PANEL_ITEM >& aList );
+    virtual void GetMsgPanelInfo( std::vector< MSG_PANEL_ITEM >& aList );
 
     /**
      * Function Clear
diff --git a/pcbnew/class_pad.h b/pcbnew/class_pad.h
index 19d23eb..ef5a9ba 100644
--- a/pcbnew/class_pad.h
+++ b/pcbnew/class_pad.h
@@ -138,7 +138,7 @@ public:
      * Increments the numeric suffix, filling any sequence gaps and skipping
      * pads that aren't connectable
      */
-    bool IncrementItemReference(); // override
+    virtual bool IncrementItemReference();
 
     /**
      * Function IncrementPadName
@@ -162,8 +162,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; }
+    virtual const wxPoint& GetPosition() const      { return m_Pos; }
 
     void SetY( int y )                          { m_Pos.y = y; }
     void SetX( int x )                          { m_Pos.x = x; }
@@ -187,7 +187,7 @@ public:
     const wxPoint& GetOffset() const            { return m_Offset; }
 
 
-    void Flip( const wxPoint& aCentre );        // Virtual function
+    virtual void Flip( const wxPoint& aCentre );
 
 
     /**
@@ -221,7 +221,7 @@ public:
     void GetOblongDrillGeometry( wxPoint& aStartPoint, wxPoint& aEndPoint, int& aWidth ) const;
 
     void SetLayerSet( LSET aLayerMask )         { m_layerMask = aLayerMask; }
-    LSET GetLayerSet() const                    { return m_layerMask; }
+    virtual LSET GetLayerSet() const   { return m_layerMask; }
 
     void SetAttribute( PAD_ATTR_T aAttribute );
     PAD_ATTR_T GetAttribute() const             { return m_Attribute; }
@@ -268,7 +268,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:
 
@@ -305,7 +305,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 );
 
     /**
@@ -463,22 +463,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();
@@ -493,17 +492,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
@@ -525,7 +524,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.
@@ -564,7 +563,7 @@ public:
     void CopyNetlistSettings( D_PAD* aPad, bool aCopyLocalSettings );
 
 #if defined(DEBUG)
-    virtual void Show( int nestLevel, std::ostream& os ) const { ShowDummy( os ); }    // override
+    virtual void Show( int nestLevel, std::ostream& os ) const { ShowDummy( os ); }
 #endif
 
 
diff --git a/pcbnew/class_pcb_layer_box_selector.h b/pcbnew/class_pcb_layer_box_selector.h
index 196c891..8cf2057 100644
--- a/pcbnew/class_pcb_layer_box_selector.h
+++ b/pcbnew/class_pcb_layer_box_selector.h
@@ -76,7 +76,7 @@ public:
 
     // Reload the Layers names and bitmaps
     // Virtual function
-    void Resync();
+    virtual void Resync();
 
     // Allow (or not) the layers not activated for the current board to be shown
     // in layer selector. Not actavated layers are flagged
@@ -89,15 +89,15 @@ public:
 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 7908d80..7853f4a 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 b1f1d31..8c88533 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,17 +131,17 @@ 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
+    virtual void Show( int nestLevel, std::ostream& os ) const { ShowDummy( os ); }
 #endif
 };
 
diff --git a/pcbnew/class_text_mod.h b/pcbnew/class_text_mod.h
index fbc5f50..a4e59b5 100644
--- a/pcbnew/class_text_mod.h
+++ b/pcbnew/class_text_mod.h
@@ -86,10 +86,10 @@ public:
 
     /// Rotate text, in footprint editor
     /// (for instance in footprint rotation transform)
-    void Rotate( const wxPoint& aOffset, double aAngle );
+    virtual void Rotate( const wxPoint& aOffset, double aAngle );
 
     /// Flip entity during module flip
-    void Flip( const wxPoint& aCentre );
+    virtual void Flip( const wxPoint& aCentre );
 
     /// Mirror text position in footprint edition
     /// the text itself is not mirrored, and the layer not modified,
@@ -98,7 +98,7 @@ public:
     void Mirror( const wxPoint& aCentre, bool aMirrorAroundXAxis );
 
     /// move text in move transform, in footprint editor
-    void Move( const wxPoint& aMoveVector );
+    virtual void Move( const wxPoint& aMoveVector );
 
     /// @deprecated it seems (but the type is used to 'protect'
     //  reference and value from deletion, and for identification)
@@ -122,8 +122,7 @@ public:
      */
     double GetDrawRotation() const;
 
-    // Virtual function
-    const EDA_RECT GetBoundingBox() const;
+    virtual const EDA_RECT GetBoundingBox() const;
 
     ///> Set absolute coordinates.
     void SetDrawCoord();
@@ -141,7 +140,7 @@ public:
      * @param aOffset = draw offset (usually wxPoint(0,0)
      * @param aDrawMode = GR_OR, GR_XOR..
      */
-    void Draw( EDA_DRAW_PANEL* aPanel,
+    virtual void Draw( EDA_DRAW_PANEL* aPanel,
                wxDC*           aDC,
                GR_DRAWMODE     aDrawMode,
                const wxPoint&  aOffset = ZeroOffset );
@@ -160,20 +159,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;
 
@@ -187,7 +186,7 @@ public:
     virtual unsigned int ViewGetLOD( int aLayer ) const;
 
 #if defined(DEBUG)
-    virtual void Show( int nestLevel, std::ostream& os ) const { ShowDummy( os ); }    // override
+    virtual void Show( int nestLevel, std::ostream& os ) const { ShowDummy( os ); }
 #endif
 
 private:
diff --git a/pcbnew/class_track.h b/pcbnew/class_track.h
index fd37d95..569c0e9 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; }
+    virtual const wxPoint& GetPosition() const      { return m_Start; }
 
     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 );
 
     /**
@@ -197,7 +196,7 @@ public:
      */
     bool IsNull();
 
-    void GetMsgPanelInfo( std::vector< MSG_PANEL_ITEM >& aList );
+    virtual void GetMsgPanelInfo( std::vector< MSG_PANEL_ITEM >& aList );
 
     /**
      * Function ShowWidth
@@ -205,7 +204,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[] );
 
 
@@ -268,7 +267,7 @@ public:
      */
     int GetEndSegments( int NbSegm, TRACK** StartTrack, TRACK** EndTrack );
 
-    wxString GetClass() const
+    virtual wxString GetClass() const
     {
         return wxT( "TRACK" );
     }
@@ -297,7 +296,7 @@ public:
     virtual unsigned int ViewGetLOD( int aLayer ) const;
 
 #if defined (DEBUG)
-    virtual void Show( int nestLevel, std::ostream& os ) const { ShowDummy( os ); }    // override
+    virtual void Show( int nestLevel, std::ostream& os ) const { ShowDummy( os ); }
 
     /**
      * Function ShowState
@@ -345,7 +344,7 @@ 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" );
     }
@@ -353,14 +352,14 @@ public:
 
     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 );
@@ -379,10 +378,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;
 
@@ -404,23 +403,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; }
+    virtual void SetPosition( const wxPoint& aPoint ) { m_Start = aPoint;  m_End = aPoint; }
 
     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;
@@ -428,7 +427,7 @@ public:
     virtual void Flip( const wxPoint& aCentre );
 
 #if defined (DEBUG)
-    virtual void Show( int nestLevel, std::ostream& os ) const { ShowDummy( os ); }    // override
+    virtual void Show( int nestLevel, std::ostream& os ) const { ShowDummy( os ); }
 #endif
 
     VIATYPE_T GetViaType() const          { return m_ViaType; }
diff --git a/pcbnew/class_zone.h b/pcbnew/class_zone.h
index 08d1259..ed5a2d2 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;
+    virtual void SetPosition( const wxPoint& aPos ) {}
 
     /**
      * 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
@@ -339,7 +339,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
@@ -366,7 +366,7 @@ public:
      * Move the outlines
      * @param offset = moving vector
      */
-    void Move( const wxPoint& offset );
+    virtual void Move( const wxPoint& offset );
 
     /**
      * Function MoveEdge
@@ -382,7 +382,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
@@ -405,7 +405,7 @@ public:
      * returns the class name.
      * @return wxString
      */
-    wxString GetClass() const
+    virtual wxString GetClass() const
     {
         return wxT( "ZONE_CONTAINER" );
     }
@@ -541,7 +541,7 @@ public:
     void SetDoNotAllowTracks( bool aEnable ) { m_doNotAllowTracks = aEnable; }
 
 #if defined(DEBUG)
-    virtual void Show( int nestLevel, std::ostream& os ) const { ShowDummy( os ); }    // override
+    virtual void Show( int nestLevel, std::ostream& os ) const { ShowDummy( os ); }
 #endif
 
 
diff --git a/pcbnew/collectors.h b/pcbnew/collectors.h
index b2d5c9d..45ff14a 100644
--- a/pcbnew/collectors.h
+++ b/pcbnew/collectors.h
@@ -355,7 +355,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 );
 
 
     /**
@@ -448,7 +448,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];
     }
@@ -462,7 +462,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];
     }
@@ -476,24 +476,24 @@ public:
      * Function IgnoreLockedLayers
      * @return bool - true if should ignore locked layers, else false.
      */
-    bool IgnoreLockedLayers() const                 { return m_IgnoreLockedLayers; }
-    void SetIgnoreLockedLayers( bool ignore )       { m_IgnoreLockedLayers = ignore; }
+    virtual bool IgnoreLockedLayers() const { return m_IgnoreLockedLayers; }
+    void SetIgnoreLockedLayers( bool ignore )        { m_IgnoreLockedLayers = ignore; }
 
 
     /**
      * Function IgnoredNonVisibleLayers
      * @return bool - true if should ignore non-visible layers, else false.
      */
-    bool IgnoreNonVisibleLayers() const             { return m_IgnoreNonVisibleLayers; }
-    void SetIgnoreNonVisibleLayers( bool ignore )   { m_IgnoreLockedLayers = ignore; }
+    virtual bool IgnoreNonVisibleLayers() const { return m_IgnoreNonVisibleLayers; }
+    void SetIgnoreNonVisibleLayers( bool ignore )        { m_IgnoreLockedLayers = ignore; }
 
 
     /**
      * Function GetPreferredLayer
      * @return int - the preferred layer for HitTest()ing.
      */
-    LAYER_ID GetPreferredLayer() const             { return m_PreferredLayer; }
-    void SetPreferredLayer( LAYER_ID aLayer )      { m_PreferredLayer = aLayer; }
+    virtual LAYER_ID GetPreferredLayer() const { return m_PreferredLayer; }
+    void SetPreferredLayer( LAYER_ID aLayer )           { m_PreferredLayer = aLayer; }
 
 
     /**
@@ -501,15 +501,15 @@ public:
      * provides wildcard behavior regarding the preferred layer.
      * @return bool - true if should ignore preferred layer, else false.
      */
-    bool IgnorePreferredLayer() const               { return  m_IgnorePreferredLayer; }
-    void SetIgnorePreferredLayer( bool ignore )     { m_IgnorePreferredLayer = ignore; }
+    virtual bool IgnorePreferredLayer() const { return  m_IgnorePreferredLayer; }
+    void SetIgnorePreferredLayer( bool ignore )        { m_IgnorePreferredLayer = ignore; }
 
 
     /**
      * 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; }
 
 
@@ -519,72 +519,72 @@ public:
      * included.
      * @return bool - true if should include, else false.
      */
-    bool IncludeSecondary() const  { return m_IncludeSecondary; }
-    void SetIncludeSecondary( bool include ) { m_IncludeSecondary = include; }
+    virtual bool IncludeSecondary() const { return m_IncludeSecondary; }
+    void SetIncludeSecondary( bool include )       { m_IncludeSecondary = include; }
 
 
     /**
      * Function IgnoreMTextsMarkedNoShow
      * @return bool - true if MTexts marked as "no show" should be ignored.
      */
-    bool IgnoreMTextsMarkedNoShow() const { return m_IgnoreMTextsMarkedNoShow; }
-    void SetIgnoreMTextsMarkedNoShow( bool ignore ) { m_IgnoreMTextsMarkedNoShow = ignore; }
+    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; }
-    void SetIgnoreMTextsOnBack( bool ignore ) { m_IgnoreMTextsOnBack = ignore; }
+    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; }
-    void SetIgnoreMTextsOnFront( bool ignore ) { m_IgnoreMTextsOnFront = ignore; }
+    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; }
-    void SetIgnoreModulesOnBack( bool ignore ) { m_IgnoreModulesOnBack = ignore; }
+    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; }
-    void SetIgnoreModulesOnFront( bool ignore ) { m_IgnoreModulesOnFront = ignore; }
+    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; }
-    void SetIgnorePadsOnBack(bool ignore) { m_IgnorePadsOnBack = ignore; }
+    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; }
-    void SetIgnorePadsOnFront(bool ignore) { m_IgnorePadsOnFront = ignore; }
+    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; }
-    void SetIgnoreModulesVals(bool ignore) { m_IgnoreModulesVals = ignore; }
+    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; }
-    void SetIgnoreModulesRefs(bool ignore) { m_IgnoreModulesRefs = ignore; }
+    virtual bool IgnoreModulesRefs() const { return m_IgnoreModulesRefs; }
+    void SetIgnoreModulesRefs(bool ignore)          { m_IgnoreModulesRefs = ignore; }
 };
 
 
@@ -623,7 +623,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 e78fb13..8848c20 100644
--- a/pcbnew/dialogs/dialog_SVG_print.cpp
+++ b/pcbnew/dialogs/dialog_SVG_print.cpp
@@ -68,12 +68,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 5e1327f..2b14d02 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 4ff2449..862b236 100644
--- a/pcbnew/dialogs/dialog_create_array.h
+++ b/pcbnew/dialogs/dialog_create_array.h
@@ -284,9 +284,9 @@ public:
         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;
@@ -310,9 +310,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
@@ -344,8 +344,8 @@ private:
     const wxPoint m_originalItemPosition;
 
     // Event callbacks
-    void    OnParameterChanged( wxCommandEvent& event );
-    void    OnOkClick( wxCommandEvent& event );
+    virtual void    OnParameterChanged( 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 9544f92..d68ec69 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 OnAddNetclassClick( wxCommandEvent& event );
-    void OnRemoveNetclassClick( wxCommandEvent& event );
+    virtual void OnNetClassesNameLeftClick( wxGridEvent& event ) { event.Skip(); }
+    virtual void OnNetClassesNameRightClick( wxGridEvent& event ) { event.Skip(); }
+    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 );
 
-    void OnNotebookPageChanged( wxNotebookEvent& event );
+    virtual void OnNotebookPageChanged( wxNotebookEvent& 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 3efd0a9..382e532 100644
--- a/pcbnew/dialogs/dialog_drc.h
+++ b/pcbnew/dialogs/dialog_drc.h
@@ -76,48 +76,48 @@ 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 );
 
     /// handler for activate event, updating data which can be modified outside the dialog
     /// (DRC parameters)
-    void OnActivateDlg( wxActivateEvent& event );
+    virtual void OnActivateDlg( wxActivateEvent& 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 68d65b6..b542f3d 100644
--- a/pcbnew/dialogs/dialog_edit_module_for_BoardEditor.h
+++ b/pcbnew/dialogs/dialog_edit_module_for_BoardEditor.h
@@ -74,26 +74,26 @@ 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 GotoModuleEditor( wxCommandEvent& event );
-    void ExchangeModule( wxCommandEvent& event );
-    void ModuleOrientEvent( wxCommandEvent& event );
-    void Cfg3DPath( wxCommandEvent& event );
+    virtual void GotoModuleEditor( wxCommandEvent& event );
+    virtual void ExchangeModule( wxCommandEvent& event );
+    virtual void ModuleOrientEvent( wxCommandEvent& event );
+    virtual void Cfg3DPath( wxCommandEvent& event );
 
-    bool TransferDataToWindow();
-    bool TransferDataFromWindow();
+    virtual bool TransferDataToWindow();
+    virtual bool TransferDataFromWindow();
 };
 
 
diff --git a/pcbnew/dialogs/dialog_edit_module_for_Modedit.h b/pcbnew/dialogs/dialog_edit_module_for_Modedit.h
index 213f2b8..c8b8ade 100644
--- a/pcbnew/dialogs/dialog_edit_module_for_Modedit.h
+++ b/pcbnew/dialogs/dialog_edit_module_for_Modedit.h
@@ -59,22 +59,22 @@ 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 );
-    void Cfg3DPath( wxCommandEvent& event );
+    virtual void OnCancelClick( wxCommandEvent& event );
+    virtual void OnOkClick( wxCommandEvent& event );
+    virtual void Cfg3DPath( wxCommandEvent& event );
 };
 
 
diff --git a/pcbnew/dialogs/dialog_edit_module_text.h b/pcbnew/dialogs/dialog_edit_module_text.h
index a9f1e79..36d0293 100644
--- a/pcbnew/dialogs/dialog_edit_module_text.h
+++ b/pcbnew/dialogs/dialog_edit_module_text.h
@@ -49,11 +49,11 @@ public:
     ~DialogEditModuleText() {};
 
 protected:
-    bool TransferDataToWindow();
-    bool TransferDataFromWindow();
+    virtual bool TransferDataToWindow();
+    virtual bool TransferDataFromWindow();
 
 private:
-    void ModuleOrientEvent( wxCommandEvent& event );
+    virtual void ModuleOrientEvent( wxCommandEvent& event );
 };
 
 #endif /* DIALOG_EDIT_MODULE_TEXT_H */
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 ad11c4b..4201807 100644
--- a/pcbnew/dialogs/dialog_footprint_wizard_list.h
+++ b/pcbnew/dialogs/dialog_footprint_wizard_list.h
@@ -41,7 +41,7 @@ public:
     FOOTPRINT_WIZARD* GetWizard();
 
 private:
-    void OnCellFpGeneratorClick( wxGridEvent& event );
+    virtual void OnCellFpGeneratorClick( wxGridEvent& 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 1f3b4d6..dbf0b2d 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 )
         {
@@ -501,7 +501,7 @@ private:
 
     //-----<event handlers>----------------------------------
 
-    void onKeyDown( wxKeyEvent& ev )
+    virtual void onKeyDown( wxKeyEvent& ev )
     {
 #if 0
         // send the key to the current grid
@@ -513,13 +513,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 ) )
         {
@@ -532,7 +532,7 @@ private:
         }
     }
 
-    void deleteRowHandler( wxCommandEvent& event )
+    virtual void deleteRowHandler( wxCommandEvent& event )
     {
 #if 1
         int currRow = getCursorRow();
@@ -569,7 +569,7 @@ private:
 #endif
     }
 
-    void moveUpHandler( wxCommandEvent& event )
+    virtual void moveUpHandler( wxCommandEvent& event )
     {
         int curRow = getCursorRow();
         if( curRow >= 1 )
@@ -601,7 +601,7 @@ private:
         }
     }
 
-    void moveDownHandler( wxCommandEvent& event )
+    virtual void moveDownHandler( wxCommandEvent& event )
     {
         FP_TBL_MODEL* tbl = cur_model();
 
@@ -633,7 +633,7 @@ private:
         }
     }
 
-    void optionsEditor( wxCommandEvent& event )
+    virtual void optionsEditor( wxCommandEvent& event )
     {
         FP_TBL_MODEL*   tbl = cur_model();
 
@@ -665,19 +665,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 1484a6f..d9bad9c 100644
--- a/pcbnew/dialogs/dialog_freeroute_exchange.h
+++ b/pcbnew/dialogs/dialog_freeroute_exchange.h
@@ -35,10 +35,10 @@ private:
 
 private:
     // Virtual event handlers
-    void OnExportButtonClick( wxCommandEvent& event );
-    void OnLaunchButtonClick( wxCommandEvent& event );
-    void OnImportButtonClick( wxCommandEvent& event );
-    void OnHelpButtonClick( wxCommandEvent& event );
+    virtual void OnExportButtonClick( wxCommandEvent& event );
+    virtual void OnLaunchButtonClick( wxCommandEvent& event );
+    virtual void OnImportButtonClick( wxCommandEvent& event );
+    virtual void OnHelpButtonClick( wxCommandEvent& event );
 
     void MyInit ( );
     const wxString createDSN_File();
diff --git a/pcbnew/dialogs/dialog_gendrill.h b/pcbnew/dialogs/dialog_gendrill.h
index 85a7087..9d2df51 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_get_footprint_by_name.h b/pcbnew/dialogs/dialog_get_footprint_by_name.h
index 2f4bbf3..b72cdaa 100644
--- a/pcbnew/dialogs/dialog_get_footprint_by_name.h
+++ b/pcbnew/dialogs/dialog_get_footprint_by_name.h
@@ -57,7 +57,7 @@ public:
 
 private:
     // Called when selecting an item from the item list
-	void OnSelectFootprint( wxCommandEvent& aEvent )
+    virtual void OnSelectFootprint( wxCommandEvent& aEvent )
     {
         if( m_choiceFpList->GetSelection() >= 0 )
             m_SearchTextCtrl->SetValue(
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..df52188 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 355d8a5..9ddc0de 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 b7c261c..8a78e34 100644
--- a/pcbnew/dialogs/dialog_graphic_item_properties.cpp
+++ b/pcbnew/dialogs/dialog_graphic_item_properties.cpp
@@ -69,10 +69,10 @@ public:
     ~DIALOG_GRAPHIC_ITEM_PROPERTIES() {};
 
 private:
-    bool TransferDataToWindow();
-    bool TransferDataFromWindow();
+    virtual bool TransferDataToWindow();
+    virtual bool TransferDataFromWindow();
     void OnLayerChoice( wxCommandEvent& event );
-    bool Validate();
+    virtual bool Validate();
 };
 
 DIALOG_GRAPHIC_ITEM_PROPERTIES::DIALOG_GRAPHIC_ITEM_PROPERTIES( PCB_EDIT_FRAME* aParent,
diff --git a/pcbnew/dialogs/dialog_graphic_item_properties_for_Modedit.cpp b/pcbnew/dialogs/dialog_graphic_item_properties_for_Modedit.cpp
index 17106f6..52c964f 100644
--- a/pcbnew/dialogs/dialog_graphic_item_properties_for_Modedit.cpp
+++ b/pcbnew/dialogs/dialog_graphic_item_properties_for_Modedit.cpp
@@ -69,10 +69,10 @@ public:
     ~DIALOG_MODEDIT_FP_BODY_ITEM_PROPERTIES() {};
 
 private:
-    bool TransferDataToWindow();
-    bool TransferDataFromWindow();
+    virtual bool TransferDataToWindow();
+    virtual bool TransferDataFromWindow();
     void OnLayerChoice( wxCommandEvent& event );
-    bool Validate();
+    virtual bool Validate();
 };
 
 DIALOG_MODEDIT_FP_BODY_ITEM_PROPERTIES::DIALOG_MODEDIT_FP_BODY_ITEM_PROPERTIES(
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 b0e08a2..b927343 100644
--- a/pcbnew/dialogs/dialog_keepout_area_properties.cpp
+++ b/pcbnew/dialogs/dialog_keepout_area_properties.cpp
@@ -69,8 +69,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 96585a3..eb849fc 100644
--- a/pcbnew/dialogs/dialog_layers_setup.cpp
+++ b/pcbnew/dialogs/dialog_layers_setup.cpp
@@ -164,12 +164,12 @@ private:
     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();
 
@@ -214,7 +214,7 @@ private:
         m_typeStaticText->Move( offset + (widths[2] - txtz.x)/2, 5 );
     }
 
-    void OnSize( wxSizeEvent& event );
+    virtual void OnSize( wxSizeEvent& event );
 };
 
 
diff --git a/pcbnew/dialogs/dialog_modedit_options.cpp b/pcbnew/dialogs/dialog_modedit_options.cpp
index aaeea3a..705e274 100644
--- a/pcbnew/dialogs/dialog_modedit_options.cpp
+++ b/pcbnew/dialogs/dialog_modedit_options.cpp
@@ -44,8 +44,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 ffd5bc5..74778c3 100644
--- a/pcbnew/dialogs/dialog_move_exact.h
+++ b/pcbnew/dialogs/dialog_move_exact.h
@@ -47,12 +47,12 @@ 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 OnOkClick( 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 958a7e0..821e1a1 100644
--- a/pcbnew/dialogs/dialog_netlist.h
+++ b/pcbnew/dialogs/dialog_netlist.h
@@ -78,19 +78,19 @@ 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 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 124eb28..a60d226 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_pad_properties.h b/pcbnew/dialogs/dialog_pad_properties.h
index 6e8028e..54f3cc6 100644
--- a/pcbnew/dialogs/dialog_pad_properties.h
+++ b/pcbnew/dialogs/dialog_pad_properties.h
@@ -103,26 +103,26 @@ 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 OnPaintShowPanel( wxPaintEvent& event );
+    virtual void OnSetLayers( wxCommandEvent& event );
+    virtual void OnPaintShowPanel( wxPaintEvent& event );
 
     // Called when corner setup value is changed for rounded rect pads
-    void onCornerSizePercentChange( wxCommandEvent& event );
+    virtual void onCornerSizePercentChange( wxCommandEvent& 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.
     /// Automatically fired from the OK button click.
-    bool TransferDataFromWindow();
-    bool TransferDataToWindow();
+    virtual bool TransferDataFromWindow();
+    virtual bool TransferDataToWindow();
 };
 
 #endif      // #ifndef _DIALOG_PAD_PROPERTIES_H_
diff --git a/pcbnew/dialogs/dialog_pcb_text_properties.cpp b/pcbnew/dialogs/dialog_pcb_text_properties.cpp
index a9c09e9..6d85e5f 100644
--- a/pcbnew/dialogs/dialog_pcb_text_properties.cpp
+++ b/pcbnew/dialogs/dialog_pcb_text_properties.cpp
@@ -62,8 +62,8 @@ private:
     wxFloatingPointValidator<double>    m_OrientValidator;
     double              m_OrientValue;
 
-    bool TransferDataToWindow();
-    bool TransferDataFromWindow();
+    virtual bool TransferDataToWindow();
+    virtual bool TransferDataFromWindow();
 };
 
 
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 296463d..90c9774 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 683732b..d61912a 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_select_net_from_list.cpp b/pcbnew/dialogs/dialog_select_net_from_list.cpp
index 9745cfd..6686f70 100644
--- a/pcbnew/dialogs/dialog_select_net_from_list.cpp
+++ b/pcbnew/dialogs/dialog_select_net_from_list.cpp
@@ -61,8 +61,8 @@ public:
     bool GetNetName( wxString& aName );
 
 private:
-    void onCellClick( wxGridEvent& event );
-	void onFilterChange( wxCommandEvent& event );
+    virtual void onCellClick( wxGridEvent& event );
+    virtual void onFilterChange( wxCommandEvent& event );
 
     void buildNetsList();
 };
diff --git a/pcbnew/dialogs/dialog_select_pretty_lib.h b/pcbnew/dialogs/dialog_select_pretty_lib.h
index 0188c19..1e5c3ce 100644
--- a/pcbnew/dialogs/dialog_select_pretty_lib.h
+++ b/pcbnew/dialogs/dialog_select_pretty_lib.h
@@ -51,7 +51,7 @@ public:
 
 private:
     virtual void OnSelectFolder( wxFileDirPickerEvent& event );
-	virtual void OnOKButton( wxCommandEvent& event );
+    virtual void OnOKButton( wxCommandEvent& event );
 };
 
 
diff --git a/pcbnew/dialogs/dialog_set_grid.cpp b/pcbnew/dialogs/dialog_set_grid.cpp
index d894f54..069212f 100644
--- a/pcbnew/dialogs/dialog_set_grid.cpp
+++ b/pcbnew/dialogs/dialog_set_grid.cpp
@@ -58,9 +58,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_properties.h b/pcbnew/dialogs/dialog_track_via_properties.h
index 08fb945..02620b5 100644
--- a/pcbnew/dialogs/dialog_track_via_properties.h
+++ b/pcbnew/dialogs/dialog_track_via_properties.h
@@ -39,11 +39,11 @@ public:
     bool Apply();
 
 private:
-    void onClose( wxCloseEvent& aEvent );
-    void onTrackNetclassCheck( wxCommandEvent& aEvent );
-    void onViaNetclassCheck( wxCommandEvent& aEvent );
-    void onCancelClick( wxCommandEvent& aEvent );
-    void onOkClick( wxCommandEvent& aEvent );
+    virtual void onClose( wxCloseEvent& aEvent );
+    virtual void onTrackNetclassCheck( wxCommandEvent& aEvent );
+    virtual void onViaNetclassCheck( wxCommandEvent& aEvent );
+    virtual void onCancelClick( wxCommandEvent& aEvent );
+    virtual void onOkClick( wxCommandEvent& aEvent );
 
     ///> Checks if the dialog values are correct.
     bool check() const;
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_3DShape_Libs_downloader.h b/pcbnew/dialogs/wizard_3DShape_Libs_downloader.h
index 8ea13f1..932eff5 100644
--- a/pcbnew/dialogs/wizard_3DShape_Libs_downloader.h
+++ b/pcbnew/dialogs/wizard_3DShape_Libs_downloader.h
@@ -65,16 +65,16 @@ public:
     // Wizard event handlers
     void OnSourceCheck( wxCommandEvent& aEvent );
     void OnCheckGithubList( wxCommandEvent& aEvent );
-    void OnPageChanged( wxWizardEvent& aEvent );
-    void OnSelectAll3Dlibs( wxCommandEvent& aEvent );
-    void OnUnselectAll3Dlibs( wxCommandEvent& aEvent );
-    void OnChangeSearch( wxCommandEvent& aEvent );
-    void OnWizardFinished( wxWizardEvent& aEvent );
-    void OnBrowseButtonClick( wxCommandEvent& aEvent );
+    virtual void OnPageChanged( wxWizardEvent& aEvent );
+    virtual void OnSelectAll3Dlibs( wxCommandEvent& aEvent );
+    virtual void OnUnselectAll3Dlibs( wxCommandEvent& aEvent );
+    virtual void OnChangeSearch( wxCommandEvent& aEvent );
+    virtual void OnWizardFinished( wxWizardEvent& aEvent );
+    virtual void OnBrowseButtonClick( wxCommandEvent& aEvent );
     void OnCheckSaveCopy( wxCommandEvent& aEvent );
-	void OnDefault3DPathButtonClick( wxCommandEvent& event );
-	void OnGridLibReviewSize( wxSizeEvent& event );
-    void OnLocalFolderChange( wxCommandEvent& event );
+    virtual void OnDefault3DPathButtonClick( wxCommandEvent& event );
+    virtual void OnGridLibReviewSize( wxSizeEvent& event );
+    virtual void OnLocalFolderChange( wxCommandEvent& event );
 
 protected:
     // Initialization of wizard pages
diff --git a/pcbnew/dialogs/wizard_add_fplib.h b/pcbnew/dialogs/wizard_add_fplib.h
index 94ba00b..bc5b263 100644
--- a/pcbnew/dialogs/wizard_add_fplib.h
+++ b/pcbnew/dialogs/wizard_add_fplib.h
@@ -86,13 +86,13 @@ public:
     void OnSourceCheck( wxCommandEvent& aEvent );
     void OnSelectFiles( wxCommandEvent& aEvent );
     void OnCheckGithubList( wxCommandEvent& aEvent );
-    void OnPageChanged( wxWizardEvent& aEvent );
-    void OnSelectAllGH( wxCommandEvent& aEvent );
-    void OnUnselectAllGH( wxCommandEvent& aEvent );
-    void OnChangeSearch( wxCommandEvent& aEvent );
-    void OnWizardFinished( wxWizardEvent& aEvent );
-    void OnBrowseButtonClick( wxCommandEvent& aEvent );
-    void OnCheckSaveCopy( wxCommandEvent& aEvent );
+    virtual void OnPageChanged( wxWizardEvent& aEvent );
+    virtual void OnSelectAllGH( wxCommandEvent& aEvent );
+    virtual void OnUnselectAllGH( wxCommandEvent& aEvent );
+    virtual void OnChangeSearch( wxCommandEvent& aEvent );
+    virtual void OnWizardFinished( wxWizardEvent& aEvent );
+    virtual void OnBrowseButtonClick( wxCommandEvent& aEvent );
+    virtual void OnCheckSaveCopy( wxCommandEvent& aEvent );
 
     class LIBRARY
     {
diff --git a/pcbnew/dimension.cpp b/pcbnew/dimension.cpp
index db08445..8fd71a4 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/edit.cpp b/pcbnew/edit.cpp
index 84be126..226c8f5 100644
--- a/pcbnew/edit.cpp
+++ b/pcbnew/edit.cpp
@@ -1610,34 +1610,34 @@ public:
 
 private:
 
-    int getNumberOfItemsToArray() const //override
+    virtual int getNumberOfItemsToArray() const
     {
         // only handle single items
         return (m_item != NULL) ? 1 : 0;
     }
 
-    BOARD_ITEM* getNthItemToArray( int n ) const //override
+    virtual BOARD_ITEM* getNthItemToArray( int n ) const
     {
         wxASSERT_MSG( n == 0, "Legacy array tool can only handle a single item" );
         return m_item;
     }
 
-    BOARD* getBoard() const //override
+    virtual BOARD* getBoard() const
     {
         return m_parent.GetBoard();
     }
 
-    MODULE* getModule() const //override
+    virtual MODULE* getModule() const
     {
         return dynamic_cast<MODULE*>( m_item->GetParent() );
     }
 
-    wxPoint getRotationCentre() const //override
+    virtual wxPoint getRotationCentre() const
     {
         return m_item->GetCenter();
     }
 
-    void finalise() // override
+    virtual void finalise()
     {
         m_parent.GetCanvas()->Refresh();
     }
diff --git a/pcbnew/exporters/gen_modules_placefile.cpp b/pcbnew/exporters/gen_modules_placefile.cpp
index 8bc79ab..b7f8b86 100644
--- a/pcbnew/exporters/gen_modules_placefile.cpp
+++ b/pcbnew/exporters/gen_modules_placefile.cpp
@@ -117,8 +117,8 @@ private:
     static int m_fileFormat;
 
 	void initDialog();
-    void OnOutputDirectoryBrowseClicked( wxCommandEvent& event );
-    void OnOKButton( wxCommandEvent& event );
+    virtual void OnOutputDirectoryBrowseClicked( wxCommandEvent& event );
+    virtual void OnOKButton( wxCommandEvent& event );
 
     bool CreateFiles();
 
diff --git a/pcbnew/footprint_wizard_frame.h b/pcbnew/footprint_wizard_frame.h
index 65e6d0d..d2ea99a 100644
--- a/pcbnew/footprint_wizard_frame.h
+++ b/pcbnew/footprint_wizard_frame.h
@@ -74,7 +74,7 @@ public:
 
 private:
 
-    void                OnSize( wxSizeEvent& event );
+    virtual void        OnSize( wxSizeEvent& event );
 
     /**
      * Function ExportSelectedFootprint();
@@ -143,21 +143,21 @@ 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, EDA_KEY aHotKey = 0 );
+    virtual bool        GeneralControl( wxDC* aDC, const wxPoint& aPosition, EDA_KEY aHotKey = 0 );
 
-    void                LoadSettings( wxConfigBase* aCfg ); // override virtual
-    void                SaveSettings( wxConfigBase* aCfg ); // override virtual
+    virtual void        LoadSettings( wxConfigBase* aCfg );
+    virtual void        SaveSettings( wxConfigBase* aCfg );
 
     ///> @copydoc EDA_DRAW_FRAME::GetHotKeyDescription()
-    EDA_HOTKEY* GetHotKeyDescription( int ) const { return NULL; }
+    virtual EDA_HOTKEY* GetHotKeyDescription( int ) const { return NULL; }
 
     /**
      * Function OnActivate
@@ -174,13 +174,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
@@ -195,9 +195,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 3dc10a6..0845fba 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/github/html_link_parser.h b/pcbnew/github/html_link_parser.h
index c18c27e..4e8f52e 100644
--- a/pcbnew/github/html_link_parser.h
+++ b/pcbnew/github/html_link_parser.h
@@ -60,12 +60,12 @@ public:
     {
     }
 
-    wxString GetSupportedTags()
+    virtual wxString GetSupportedTags()
     {
         return "A";
     }
 
-    bool HandleTag(const wxHtmlTag& tag);
+    virtual bool HandleTag(const wxHtmlTag& tag);
 };
 
 /**
@@ -95,12 +95,12 @@ public:
     }
 
     // virtual pure from wxHtmlParser, do nothing here, but needed.
-    void AddText( const wxString& aText ){}
+    virtual void AddText( const wxString& aText ) {}
 
     // Our "AddText" used to store selected text (the url link)
     void AddString( const wxString& aText );
 
-    wxObject* GetProduct()
+    virtual wxObject* GetProduct()
     {
         return NULL;
     }
diff --git a/pcbnew/globaleditpad.cpp b/pcbnew/globaleditpad.cpp
index 3f5cfb5..1c71622 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..59e37dc 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,
-                                      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 );
 
-    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 );
 
-    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 68944f9..8b3e2a6 100644
--- a/pcbnew/import_dxf/dialog_dxf_import.h
+++ b/pcbnew/import_dxf/dialog_dxf_import.h
@@ -55,10 +55,10 @@ private:
     static LAYER_NUM     m_layer;
 
     // Virtual event handlers
-    void OnCancelClick( wxCommandEvent& event ) { event.Skip(); }
-    void OnOKClick( wxCommandEvent& event );
-    void OnBrowseDxfFiles( wxCommandEvent& event );
-    void OriginOptionOnUpdateUI( wxUpdateUIEvent& event );
+    virtual void OnCancelClick( wxCommandEvent& event ) { event.Skip(); }
+    virtual void OnOKClick( wxCommandEvent& event );
+    virtual void OnBrowseDxfFiles( wxCommandEvent& event );
+    virtual void OriginOptionOnUpdateUI( wxUpdateUIEvent& event );
     int  GetPCBGridUnits( void );
     void GetPCBGridOffsets( double &aXOffset, double &aYOffset );
 };
diff --git a/pcbnew/import_dxf/dxf2brd_items.h b/pcbnew/import_dxf/dxf2brd_items.h
index 7951f39..be12d6d 100644
--- a/pcbnew/import_dxf/dxf2brd_items.h
+++ b/pcbnew/import_dxf/dxf2brd_items.h
@@ -124,9 +124,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..51031b6 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,
-                           const PROPERTIES* aProperties = NULL );
+    virtual MODULE* FootprintLoad( const wxString& aLibraryPath, const wxString& aFootprintName,
+                                   const PROPERTIES* aProperties = NULL );
 
-    void FootprintSave( const wxString& aLibraryPath, const MODULE* aFootprint,
-                        const PROPERTIES* aProperties = NULL );
+    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 2216438..96b0a56 100644
--- a/pcbnew/legacy_plugin.h
+++ b/pcbnew/legacy_plugin.h
@@ -67,26 +67,26 @@ 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 );
 
-    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 9d81f48..8eb7c89 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,17 +116,17 @@ 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();
 
     // The Tool Framework initalization, for GAL mode
     void setupTools();
 
-    void ToolOnRightClick( wxCommandEvent& event );
+    virtual void ToolOnRightClick( wxCommandEvent& event );
     void OnSelectOptionToolbar( wxCommandEvent& event );
     void OnConfigurePaths( wxCommandEvent& aEvent );
 
@@ -140,7 +140,7 @@ public:
     void OnSaveLibraryAs( wxCommandEvent& aEvent );
 
     ///> @copydoc EDA_DRAW_FRAME::GetHotKeyDescription()
-    EDA_HOTKEY* GetHotKeyDescription( int aCommand ) const;
+    virtual EDA_HOTKEY* GetHotKeyDescription( int aCommand ) const;
 
     /**
      * Function OnHotKey
@@ -150,7 +150,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 );
 
@@ -165,9 +165,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, EDA_KEY aHotKey = 0 );
+    virtual bool GeneralControl( wxDC* aDC, const wxPoint& aPosition, EDA_KEY aHotKey = 0 );
     void OnVerticalToolbar( wxCommandEvent& aEvent );
 
     void OnUpdateVerticalToolbar( wxUpdateUIEvent& aEvent );
@@ -181,7 +181,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
@@ -301,7 +301,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
@@ -309,7 +309,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;
@@ -492,7 +492,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 );
@@ -545,7 +545,7 @@ private:
      * Duplicate the item under the cursor
      * @param aIncrement increment the number of pad (if that is what is selected)
      */
-    void duplicateItems( bool aIncrement ); //override
+    virtual void duplicateItems( bool aIncrement );
 };
 
 #endif      // MODULE_EDITOR_FRAME_H_
diff --git a/pcbnew/modview_frame.h b/pcbnew/modview_frame.h
index 2e1909b..f92d0bb 100644
--- a/pcbnew/modview_frame.h
+++ b/pcbnew/modview_frame.h
@@ -73,7 +73,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 );
@@ -89,25 +89,25 @@ 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, EDA_KEY aHotKey = 0 );
+    virtual bool GeneralControl( wxDC* aDC, const wxPoint& aPosition, EDA_KEY aHotKey = 0 );
 
     ///> @copydoc EDA_DRAW_FRAME::GetHotKeyDescription()
-    EDA_HOTKEY* GetHotKeyDescription( int aCommand ) const;
+    virtual EDA_HOTKEY* GetHotKeyDescription( int aCommand ) const;
 
     /**
      * Function OnHotKey
@@ -117,10 +117,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
@@ -152,13 +152,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
@@ -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 &) {}
 
     void updateView();
 
diff --git a/pcbnew/pcad2kicadpcb_plugin/pcad_plugin.h b/pcbnew/pcad2kicadpcb_plugin/pcad_plugin.h
index 45ecbd9..61e3fb3 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,
-                          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;
 
     // -----</PUBLIC PLUGIN API>-------------------------------------------------
 
diff --git a/pcbnew/pcad2kicadpcb_plugin/pcb.h b/pcbnew/pcad2kicadpcb_plugin/pcb.h
index 5d566ff..88c0062 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                    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_base_edit_frame.h b/pcbnew/pcb_base_edit_frame.h
index 15332ac..a60edfc 100644
--- a/pcbnew/pcb_base_edit_frame.h
+++ b/pcbnew/pcb_base_edit_frame.h
@@ -101,7 +101,7 @@ public:
     }
 
     ///> @copydoc EDA_DRAW_FRAME::UseGalCanvas()
-    void UseGalCanvas( bool aEnable );
+    virtual void UseGalCanvas( bool aEnable );
 
     ///> @copydoc PCB_BASE_FRAME::SetBoard()
     virtual void SetBoard( BOARD* aBoard );
diff --git a/pcbnew/pcb_draw_panel_gal.h b/pcbnew/pcb_draw_panel_gal.h
index 8483424..8ccaf6f 100644
--- a/pcbnew/pcb_draw_panel_gal.h
+++ b/pcbnew/pcb_draw_panel_gal.h
@@ -78,7 +78,7 @@ public:
     void SyncLayersVisibility( const BOARD* aBoard );
 
     ///> @copydoc EDA_DRAW_PANEL_GAL::GetMsgPanelInfo()
-    void GetMsgPanelInfo( std::vector<MSG_PANEL_ITEM>& aList );
+    virtual void GetMsgPanelInfo( std::vector<MSG_PANEL_ITEM>& aList );
 
 protected:
     ///> Reassigns layer order to the initial settings.
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 bb12ab7..d3b1607 100644
--- a/pcbnew/pcbnew.cpp
+++ b/pcbnew/pcbnew.cpp
@@ -106,11 +106,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;
 
@@ -166,7 +166,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 b388085..5963268 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 72e0530..db7e631 100644
--- a/pcbnew/ratsnest_data.h
+++ b/pcbnew/ratsnest_data.h
@@ -94,7 +94,7 @@ RN_NODE_OR_FILTER operator||( const RN_NODE_FILTER& aFilter1, const RN_NODE_FILT
 ///> 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();
     }
@@ -107,7 +107,7 @@ struct DIFFERENT_TAG : public RN_NODE_FILTER
         m_tag( aTag )
     {}
 
-    bool operator()( const RN_NODE_PTR& aNode ) const
+    virtual bool operator()( const RN_NODE_PTR& aNode ) const
     {
         return aNode->GetTag() != m_tag;
     }
@@ -122,7 +122,7 @@ struct RN_NODE_AND_FILTER : public RN_NODE_FILTER
         m_filter1( aFilter1 ), m_filter2( aFilter2 )
     {}
 
-    bool operator()( const RN_NODE_PTR& aNode ) const
+    virtual bool operator()( const RN_NODE_PTR& aNode ) const
     {
         return m_filter1( aNode ) && m_filter2( aNode );
     }
@@ -138,7 +138,7 @@ struct RN_NODE_OR_FILTER : public RN_NODE_FILTER
         m_filter1( aFilter1 ), m_filter2( aFilter2 )
     {}
 
-    bool operator()( const RN_NODE_PTR& aNode ) const
+    virtual bool operator()( const RN_NODE_PTR& aNode ) const
     {
         return m_filter1( aNode ) || m_filter2( aNode );
     }
diff --git a/pcbnew/ratsnest_viewitem.h b/pcbnew/ratsnest_viewitem.h
index 8898be8..afb9b29 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 075d907..4b6ca6a 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 234ef89..500cce3 100644
--- a/pcbnew/router/pns_diff_pair.h
+++ b/pcbnew/router/pns_diff_pair.h
@@ -340,7 +340,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 9bbed4c..0ea666c 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,14 +121,14 @@ public:
      *
      * Returns the net code of currently routed track.
      */
-    const std::vector<int> CurrentNets() const;
+    virtual const std::vector<int> CurrentNets() const;
 
     /**
      * Function CurrentLayer()
      *
      * Returns the layer of currently routed track.
      */
-    int CurrentLayer() const
+    virtual int CurrentLayer() const
     {
         return m_currentLayer;
     }
@@ -138,14 +138,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()
@@ -154,13 +154,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 eb89e10..8b28015 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,23 +86,23 @@ 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;
 
     /// @copydoc PNS_PLACEMENT_ALGO::CurrentNets()
-    const std::vector<int> CurrentNets() const;
+    virtual const std::vector<int> CurrentNets() const;
 
-    int CurrentLayer() 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 eab4a56..d0d385c 100644
--- a/pcbnew/router/pns_joint.h
+++ b/pcbnew/router/pns_joint.h
@@ -74,7 +74,7 @@ public:
         m_locked = aB.m_locked;
     }
 
-    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 32c0a71..12ff1bb 100644
--- a/pcbnew/router/pns_line.h
+++ b/pcbnew/router/pns_line.h
@@ -107,7 +107,7 @@ public:
     }
 
     ///> Returns the shape of the line
-    const SHAPE* Shape() const
+    virtual const SHAPE* Shape() const
     {
         return &m_line;
     }
@@ -262,8 +262,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 8a1f263..ed6809e 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.
      */
-    const std::vector<int> CurrentNets() const
+    virtual const std::vector<int> CurrentNets() const
     {
         return std::vector<int>( 1, 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,15 +177,15 @@ 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;
 
-    PNS_LOGGER* Logger();
+    virtual PNS_LOGGER* Logger();
 
 
 private:
diff --git a/pcbnew/router/pns_meander_placer.h b/pcbnew/router/pns_meander_placer.h
index b38457e..b820ae9 100644
--- a/pcbnew/router/pns_meander_placer.h
+++ b/pcbnew/router/pns_meander_placer.h
@@ -60,22 +60,22 @@ 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::CurrentNets()
-    const std::vector<int> CurrentNets() const
+    virtual const std::vector<int> CurrentNets() const
     {
         return std::vector<int> (1, m_originLine.Net() );
     }
 
     /// @copydoc PNS_PLACEMENT_ALGO::CurrentLayer()
-    int CurrentLayer() const;
+    virtual int CurrentLayer() const;
 
     /// @copydoc PNS_MEANDER_PLACER_BASE::TuningInfo()
     virtual const wxString TuningInfo() const;
@@ -84,7 +84,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 dbcb165..1c895ac 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 593b3b0..2d9aed7 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 97c9954..0d5747c 100644
--- a/pcbnew/router/pns_via.h
+++ b/pcbnew/router/pns_via.h
@@ -130,14 +130,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 653900d..c271330 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 wxT( "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.h b/pcbnew/router/router_tool.h
index c1bd1a2..1cf8b36 100644
--- a/pcbnew/router/router_tool.h
+++ b/pcbnew/router/router_tool.h
@@ -30,8 +30,8 @@ public:
     ROUTER_TOOL();
     ~ROUTER_TOOL();
 
-    bool Init();
-    void Reset( RESET_REASON aReason );
+    virtual bool Init();
+    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 671d68a..304bdcc 100644
--- a/pcbnew/specctra.h
+++ b/pcbnew/specctra.h
@@ -388,7 +388,7 @@ public:
 
     PARSER( ELEM* aParent );
 
-    void FormatContents( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR );
+    virtual void FormatContents( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR );
 };
 
 
@@ -422,7 +422,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(),
@@ -468,7 +468,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" : "";
 
@@ -501,7 +501,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() );
 
@@ -547,7 +547,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() );
 
@@ -608,7 +608,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" : "";
 
@@ -701,7 +701,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() );
 
@@ -734,7 +734,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" : "";
 
@@ -781,7 +781,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" : "";
 
@@ -863,7 +863,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() );
 
@@ -946,7 +946,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";
 
@@ -1023,7 +1023,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() );
@@ -1077,7 +1077,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 )
         {
@@ -1116,7 +1116,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 );
@@ -1146,7 +1146,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() );
 
@@ -1201,7 +1201,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() );
 
@@ -1275,7 +1275,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() );
@@ -1302,7 +1302,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() );
 
@@ -1350,7 +1350,7 @@ public:
         value = 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)\n", Name(),
                    GetTokenText( value ) );
@@ -1376,7 +1376,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() );
 
@@ -1419,7 +1419,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() )
         {
@@ -1463,7 +1463,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(),
@@ -1507,7 +1507,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 );
@@ -1591,7 +1591,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 );
@@ -1638,7 +1638,7 @@ public:
             i->Format( out, nestLevel );
     }
 
-    UNIT_RES* GetUnits() const
+    virtual UNIT_RES* GetUnits() const
     {
         if( unit )
             return unit;
@@ -1723,7 +1723,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;
 
@@ -1760,7 +1760,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(),
@@ -1771,7 +1771,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 );
@@ -1824,7 +1824,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 );
@@ -1839,7 +1839,7 @@ public:
             i->Format( out, nestLevel );
     }
 
-    UNIT_RES* GetUnits() const
+    virtual UNIT_RES* GetUnits() const
     {
         if( unit )
             return unit;
@@ -1890,7 +1890,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() );
 
@@ -1949,7 +1949,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 )
@@ -2034,7 +2034,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();
 
@@ -2049,7 +2049,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 ) );
@@ -2076,7 +2076,7 @@ public:
     }
 
 
-    UNIT_RES* GetUnits() const
+    virtual UNIT_RES* GetUnits() const
     {
         if( unit )
             return unit;
@@ -2149,7 +2149,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() );
 
@@ -2163,7 +2163,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 );
@@ -2197,7 +2197,7 @@ public:
     }
 
 
-    UNIT_RES* GetUnits() const
+    virtual UNIT_RES* GetUnits() const
     {
         if( unit )
             return unit;
@@ -2392,7 +2392,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 );
@@ -2407,7 +2407,7 @@ public:
             i->Format( out, nestLevel );
     }
 
-    UNIT_RES* GetUnits() const
+    virtual UNIT_RES* GetUnits() const
     {
         if( unit )
             return unit;
@@ -2481,7 +2481,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 ",
@@ -2539,7 +2539,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() );
 
@@ -2622,7 +2622,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 = " ";
@@ -2699,7 +2699,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 );
@@ -2746,7 +2746,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() );
 
@@ -2815,7 +2815,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 );
@@ -2896,7 +2896,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() );
 
@@ -2980,7 +2980,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() );
 
@@ -3106,7 +3106,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 );
@@ -3118,7 +3118,7 @@ public:
             i->Format( out, nestLevel );
     }
 
-    UNIT_RES*  GetUnits() const
+    virtual UNIT_RES*  GetUnits() const
     {
         if( unit )
             return unit;
@@ -3169,7 +3169,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() );
 
@@ -3203,7 +3203,7 @@ public:
         out->Print( nestLevel, ")\n" );
     }
 
-    UNIT_RES*  GetUnits() const
+    virtual UNIT_RES*  GetUnits() const
     {
         if( unit )
             return unit;
@@ -3232,7 +3232,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;
@@ -3276,7 +3276,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 );
@@ -3319,7 +3319,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() );
@@ -3378,7 +3378,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() );
 
@@ -3437,7 +3437,7 @@ public:
 //        delete test_points;
     }
 
-    UNIT_RES*  GetUnits() const
+    virtual UNIT_RES*  GetUnits() const
     {
         if( resolution )
             return resolution;
@@ -3445,7 +3445,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 );
@@ -3508,7 +3508,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 )
         {
@@ -3565,7 +3565,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 fc9aeee..c423f34 100644
--- a/pcbnew/tools/bright_box.h
+++ b/pcbnew/tools/bright_box.h
@@ -47,16 +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
diff --git a/pcbnew/tools/drawing_tool.h b/pcbnew/tools/drawing_tool.h
index 432da1e..1ab9d08 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()
@@ -133,7 +133,7 @@ public:
     }
 
     ///> Sets up handlers for various events.
-    void SetTransitions();
+    virtual void SetTransitions();
 
 private:
     ///> Starts drawing a selected shape (i.e. DRAWSEGMENT).
diff --git a/pcbnew/tools/edit_points.h b/pcbnew/tools/edit_points.h
index c939eca..f27680f 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.cpp b/pcbnew/tools/edit_tool.cpp
index 19f397e..1553397 100644
--- a/pcbnew/tools/edit_tool.cpp
+++ b/pcbnew/tools/edit_tool.cpp
@@ -812,42 +812,42 @@ public:
 
 private:
 
-    int getNumberOfItemsToArray() const //override
+    virtual int getNumberOfItemsToArray() const
     {
         // only handle single items
         return m_selection.Size();
     }
 
-    BOARD_ITEM* getNthItemToArray( int n ) const //override
+    virtual BOARD_ITEM* getNthItemToArray( int n ) const
     {
         return m_selection.Item<BOARD_ITEM>( n );
     }
 
-    BOARD* getBoard() const //override
+    virtual BOARD* getBoard() const
     {
         return m_parent.GetBoard();
     }
 
-    MODULE* getModule() const //override
+    virtual MODULE* getModule() const
     {
         // Remember this is valid and used only in the module editor.
         // in board editor, the parent of items is usually the board.
         return m_editModules ? m_parent.GetBoard()->m_Modules.GetFirst() : NULL;
     }
 
-    wxPoint getRotationCentre() const //override
+    virtual wxPoint getRotationCentre() const
     {
         const VECTOR2I rp = m_selection.GetCenter();
         return wxPoint( rp.x, rp.y );
     }
 
-    void prePushAction( BOARD_ITEM* new_item ) // override
+    virtual void prePushAction( BOARD_ITEM* new_item )
     {
         m_parent.GetToolManager()->RunAction( COMMON_ACTIONS::unselectItem,
                                               true, new_item );
     }
 
-    void postPushAction( BOARD_ITEM* new_item ) //override
+    virtual void postPushAction( BOARD_ITEM* new_item )
     {
         KIGFX::VIEW* view = m_parent.GetToolManager()->GetView();
         if( new_item->Type() == PCB_MODULE_T)
@@ -860,7 +860,7 @@ private:
         m_ratsnest->Update( new_item );
     }
 
-    void finalise() // override
+    virtual void finalise()
     {
         m_ratsnest->Recalculate();
     }
diff --git a/pcbnew/tools/edit_tool.h b/pcbnew/tools/edit_tool.h
index 0c24018..d4feaec 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()
@@ -127,7 +127,7 @@ public:
     }
 
     ///> Sets up handlers for various events.
-    void SetTransitions();
+    virtual void SetTransitions();
 
 private:
     ///> Selection tool used for obtaining selected items
diff --git a/pcbnew/tools/module_tools.h b/pcbnew/tools/module_tools.h
index b2178ba..52762fa 100644
--- a/pcbnew/tools/module_tools.h
+++ b/pcbnew/tools/module_tools.h
@@ -48,10 +48,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()
@@ -101,7 +101,7 @@ public:
     int ModuleEdgeOutlines( const TOOL_EVENT& aEvent );
 
     ///> Sets up handlers for various events.
-    void SetTransitions();
+    virtual void SetTransitions();
 
 private:
     KIGFX::VIEW* m_view;
diff --git a/pcbnew/tools/pcb_editor_control.h b/pcbnew/tools/pcb_editor_control.h
index 51de402..e416b76 100644
--- a/pcbnew/tools/pcb_editor_control.h
+++ b/pcbnew/tools/pcb_editor_control.h
@@ -46,10 +46,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 );
@@ -95,7 +95,7 @@ public:
     int HighlightNetCursor( const TOOL_EVENT& aEvent );
 
     ///> Sets up handlers for various events.
-    void SetTransitions();
+    virtual void SetTransitions();
 
 private:
     ///> Pointer to the currently used edit frame.
diff --git a/pcbnew/tools/pcbnew_control.h b/pcbnew/tools/pcbnew_control.h
index 78374f4..d1fa97a 100644
--- a/pcbnew/tools/pcbnew_control.h
+++ b/pcbnew/tools/pcbnew_control.h
@@ -45,7 +45,7 @@ public:
     ~PCBNEW_CONTROL();
 
     /// @copydoc TOOL_INTERACTIVE::Reset()
-    void Reset( RESET_REASON aReason );
+    virtual void Reset( RESET_REASON aReason );
 
     // View controls
     int ZoomInOut( const TOOL_EVENT& aEvent );
@@ -92,7 +92,7 @@ public:
     int ToBeDone( const TOOL_EVENT& aEvent );
 
     ///> Sets up handlers for various events.
-    void SetTransitions();
+    virtual void SetTransitions();
 
 private:
     ///> Pointer to the currently used edit frame.
diff --git a/pcbnew/tools/picker_tool.h b/pcbnew/tools/picker_tool.h
index 6512d95..0f6b1ed 100644
--- a/pcbnew/tools/picker_tool.h
+++ b/pcbnew/tools/picker_tool.h
@@ -42,7 +42,7 @@ public:
     typedef boost::function<bool(const VECTOR2D&)> CLICK_HANDLER;
 
     ///> @copydoc TOOL_INTERACTIVE::Reset()
-    void Reset( RESET_REASON aReason ) {}
+    virtual void Reset( RESET_REASON aReason ) {}
 
     ///> Main event loop.
     int Main( const TOOL_EVENT& aEvent );
@@ -99,7 +99,7 @@ public:
     }
 
     ///> @copydoc TOOL_INTERACTIVE::SetTransitions();
-    void SetTransitions();
+    virtual void SetTransitions();
 
 private:
     // Tool settings.
diff --git a/pcbnew/tools/placement_tool.h b/pcbnew/tools/placement_tool.h
index db8ec92..abfb520 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()
@@ -78,7 +78,7 @@ public:
     int DistributeVertically( const TOOL_EVENT& aEvent );
 
     ///> Sets up handlers for various events.
-    void SetTransitions();
+    virtual void SetTransitions();
 
 private:
     SELECTION_TOOL* m_selectionTool;
diff --git a/pcbnew/tools/point_editor.h b/pcbnew/tools/point_editor.h
index fc4c6a0..bebf304 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()
@@ -56,7 +56,7 @@ public:
     int OnSelectionChange( const TOOL_EVENT& aEvent );
 
     ///> Sets up handlers for various events.
-    void SetTransitions();
+    virtual void SetTransitions();
 
 private:
     ///> Selection tool used for obtaining selected items
diff --git a/pcbnew/tools/selection_area.h b/pcbnew/tools/selection_area.h
index 737e7be..37dd9f9 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 4e7046c..ad0bf1a 100644
--- a/pcbnew/tools/selection_tool.h
+++ b/pcbnew/tools/selection_tool.h
@@ -118,10 +118,10 @@ public:
     ~SELECTION_TOOL();
 
     /// @copydoc TOOL_BASE::Init()
-    bool Init();
+    virtual bool Init();
 
     /// @copydoc TOOL_BASE::Reset()
-    void Reset( RESET_REASON aReason );
+    virtual void Reset( RESET_REASON aReason );
 
     /**
      * Function Main()
@@ -183,7 +183,7 @@ public:
     static const TOOL_EVENT ClearedEvent;
 
     ///> Sets up handlers for various events.
-    void SetTransitions();
+    virtual void SetTransitions();
 
 private:
     /**
diff --git a/pcbnew/xchgmod.cpp b/pcbnew/xchgmod.cpp
index 649e66d..5fe627f 100644
--- a/pcbnew/xchgmod.cpp
+++ b/pcbnew/xchgmod.cpp
@@ -61,12 +61,12 @@ public:
     ~DIALOG_EXCHANGE_MODULE() { };
 
 private:
-    void OnSelectionClicked( wxCommandEvent& event );
-    void OnOkClick( wxCommandEvent& event );
-    void OnQuit( wxCommandEvent& event );
-    void BrowseAndSelectFootprint( wxCommandEvent& event );
-    void ViewAndSelectFootprint( 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 ViewAndSelectFootprint( wxCommandEvent& event );
+    virtual void RebuildCmpList( wxCommandEvent& event );
     void init();
 
     bool changeCurrentFootprint();
diff --git a/plugins/3d/vrml/v1/vrml1_base.h b/plugins/3d/vrml/v1/vrml1_base.h
index 195fd6a..f5d732d 100644
--- a/plugins/3d/vrml/v1/vrml1_base.h
+++ b/plugins/3d/vrml/v1/vrml1_base.h
@@ -74,9 +74,9 @@ public:
     virtual bool SetName( const std::string& aName );
 
     // functions inherited from WRL1NODE
-    bool Read( WRLPROC& proc, WRL1BASE* aTopNode );
-    bool SetParent( WRL1NODE* aParent, bool doUnlink = true );
-    SGNODE* TranslateToSG( SGNODE* aParent, WRL1STATUS* sp );
+    virtual bool Read( WRLPROC& proc, WRL1BASE* aTopNode );
+    virtual bool SetParent( WRL1NODE* aParent, bool doUnlink = true );
+    virtual SGNODE* TranslateToSG( SGNODE* aParent, WRL1STATUS* sp );
 };
 
 #endif  // VRML1_BASE_H
diff --git a/plugins/3d/vrml/v1/vrml1_coords.h b/plugins/3d/vrml/v1/vrml1_coords.h
index 7b23860..696f09f 100644
--- a/plugins/3d/vrml/v1/vrml1_coords.h
+++ b/plugins/3d/vrml/v1/vrml1_coords.h
@@ -50,10 +50,10 @@ public:
     virtual ~WRL1COORDS();
 
     // functions inherited from WRL1NODE
-    bool Read( WRLPROC& proc, WRL1BASE* aTopNode );
-    bool AddRefNode( WRL1NODE* aNode );
-    bool AddChildNode( WRL1NODE* aNode );
-    SGNODE* TranslateToSG( SGNODE* aParent, WRL1STATUS* sp );
+    virtual bool Read( WRLPROC& proc, WRL1BASE* aTopNode );
+    virtual bool AddRefNode( WRL1NODE* aNode );
+    virtual bool AddChildNode( WRL1NODE* aNode );
+    virtual SGNODE* TranslateToSG( SGNODE* aParent, WRL1STATUS* sp );
 
     void GetCoords( WRLVEC3F*& aCoordList, size_t& aListSize );
 };
diff --git a/plugins/3d/vrml/v1/vrml1_faceset.h b/plugins/3d/vrml/v1/vrml1_faceset.h
index f077a89..36204bd 100644
--- a/plugins/3d/vrml/v1/vrml1_faceset.h
+++ b/plugins/3d/vrml/v1/vrml1_faceset.h
@@ -53,10 +53,10 @@ public:
     virtual ~WRL1FACESET();
 
     // functions inherited from WRL1NODE
-    bool Read( WRLPROC& proc, WRL1BASE* aTopNode );
-    bool AddRefNode( WRL1NODE* aNode );
-    bool AddChildNode( WRL1NODE* aNode );
-    SGNODE* TranslateToSG( SGNODE* aParent, WRL1STATUS* sp );
+    virtual bool Read( WRLPROC& proc, WRL1BASE* aTopNode );
+    virtual bool AddRefNode( WRL1NODE* aNode );
+    virtual bool AddChildNode( WRL1NODE* aNode );
+    virtual SGNODE* TranslateToSG( SGNODE* aParent, WRL1STATUS* sp );
 };
 
 #endif  // VRML1_FACESET_H
diff --git a/plugins/3d/vrml/v1/vrml1_group.h b/plugins/3d/vrml/v1/vrml1_group.h
index fa0957a..58c91d7 100644
--- a/plugins/3d/vrml/v1/vrml1_group.h
+++ b/plugins/3d/vrml/v1/vrml1_group.h
@@ -45,8 +45,8 @@ public:
     virtual ~WRL1GROUP();
 
     // functions inherited from WRL1NODE
-    bool Read( WRLPROC& proc, WRL1BASE* aTopNode );
-    SGNODE* TranslateToSG( SGNODE* aParent, WRL1STATUS* sp );
+    virtual bool Read( WRLPROC& proc, WRL1BASE* aTopNode );
+    virtual SGNODE* TranslateToSG( SGNODE* aParent, WRL1STATUS* sp );
 };
 
 #endif  // VRML1_GROUP_H
diff --git a/plugins/3d/vrml/v1/vrml1_matbinding.h b/plugins/3d/vrml/v1/vrml1_matbinding.h
index 0eea9da..f24cd02 100644
--- a/plugins/3d/vrml/v1/vrml1_matbinding.h
+++ b/plugins/3d/vrml/v1/vrml1_matbinding.h
@@ -49,10 +49,10 @@ public:
     virtual ~WRL1MATBINDING();
 
     // functions inherited from WRL1NODE
-    bool Read( WRLPROC& proc, WRL1BASE* aTopNode );
-    bool AddRefNode( WRL1NODE* aNode );
-    bool AddChildNode( WRL1NODE* aNode );
-    SGNODE* TranslateToSG( SGNODE* aParent, WRL1STATUS* sp );
+    virtual bool Read( WRLPROC& proc, WRL1BASE* aTopNode );
+    virtual bool AddRefNode( WRL1NODE* aNode );
+    virtual bool AddChildNode( WRL1NODE* aNode );
+    virtual SGNODE* TranslateToSG( SGNODE* aParent, WRL1STATUS* sp );
 };
 
 #endif  // VRML1_MATBINDING_H
diff --git a/plugins/3d/vrml/v1/vrml1_material.h b/plugins/3d/vrml/v1/vrml1_material.h
index 50facb1..9f76d4e 100644
--- a/plugins/3d/vrml/v1/vrml1_material.h
+++ b/plugins/3d/vrml/v1/vrml1_material.h
@@ -60,10 +60,10 @@ public:
     virtual ~WRL1MATERIAL();
 
     // functions inherited from WRL1NODE
-    bool Read( WRLPROC& proc, WRL1BASE* aTopNode );
-    bool AddRefNode( WRL1NODE* aNode );
-    bool AddChildNode( WRL1NODE* aNode );
-    SGNODE* TranslateToSG( SGNODE* aParent, WRL1STATUS* sp );
+    virtual bool Read( WRLPROC& proc, WRL1BASE* aTopNode );
+    virtual bool AddRefNode( WRL1NODE* aNode );
+    virtual bool AddChildNode( WRL1NODE* aNode );
+    virtual SGNODE* TranslateToSG( SGNODE* aParent, WRL1STATUS* sp );
 
     /**
      * Function GetAppearance
diff --git a/plugins/3d/vrml/v1/vrml1_separator.h b/plugins/3d/vrml/v1/vrml1_separator.h
index 3e6b3ac..e9ba228 100644
--- a/plugins/3d/vrml/v1/vrml1_separator.h
+++ b/plugins/3d/vrml/v1/vrml1_separator.h
@@ -45,8 +45,8 @@ public:
     virtual ~WRL1SEPARATOR();
 
     // functions inherited from WRL1NODE
-    bool Read( WRLPROC& proc, WRL1BASE* aTopNode );
-    SGNODE* TranslateToSG( SGNODE* aParent, WRL1STATUS* sp );
+    virtual bool Read( WRLPROC& proc, WRL1BASE* aTopNode );
+    virtual SGNODE* TranslateToSG( SGNODE* aParent, WRL1STATUS* sp );
 };
 
 #endif  // VRML1_SEPARATOR_H
diff --git a/plugins/3d/vrml/v1/vrml1_shapehints.h b/plugins/3d/vrml/v1/vrml1_shapehints.h
index f6cd9f2..73df1b4 100644
--- a/plugins/3d/vrml/v1/vrml1_shapehints.h
+++ b/plugins/3d/vrml/v1/vrml1_shapehints.h
@@ -50,10 +50,10 @@ public:
     virtual ~WRL1SHAPEHINTS();
 
     // functions inherited from WRL1NODE
-    bool Read( WRLPROC& proc, WRL1BASE* aTopNode );
-    bool AddRefNode( WRL1NODE* aNode );
-    bool AddChildNode( WRL1NODE* aNode );
-    SGNODE* TranslateToSG( SGNODE* aParent, WRL1STATUS* sp );
+    virtual bool Read( WRLPROC& proc, WRL1BASE* aTopNode );
+    virtual bool AddRefNode( WRL1NODE* aNode );
+    virtual bool AddChildNode( WRL1NODE* aNode );
+    virtual SGNODE* TranslateToSG( SGNODE* aParent, WRL1STATUS* sp );
 };
 
 #endif  // VRML1_SHAPEHINTS_H
diff --git a/plugins/3d/vrml/v1/vrml1_switch.h b/plugins/3d/vrml/v1/vrml1_switch.h
index 605adfe..c1ad2dd 100644
--- a/plugins/3d/vrml/v1/vrml1_switch.h
+++ b/plugins/3d/vrml/v1/vrml1_switch.h
@@ -48,8 +48,8 @@ public:
     virtual ~WRL1SWITCH();
 
     // functions inherited from WRL1NODE
-    bool Read( WRLPROC& proc, WRL1BASE* aTopNode );
-    SGNODE* TranslateToSG( SGNODE* aParent, WRL1STATUS* sp );
+    virtual bool Read( WRLPROC& proc, WRL1BASE* aTopNode );
+    virtual SGNODE* TranslateToSG( SGNODE* aParent, WRL1STATUS* sp );
 };
 
 #endif  // VRML1_SWITCH_H
diff --git a/plugins/3d/vrml/v1/vrml1_transform.h b/plugins/3d/vrml/v1/vrml1_transform.h
index abf724b..f9fc814 100644
--- a/plugins/3d/vrml/v1/vrml1_transform.h
+++ b/plugins/3d/vrml/v1/vrml1_transform.h
@@ -52,10 +52,10 @@ public:
     virtual ~WRL1TRANSFORM();
 
     // functions inherited from WRL1NODE
-    bool Read( WRLPROC& proc, WRL1BASE* aTopNode );
-    bool AddRefNode( WRL1NODE* aNode );
-    bool AddChildNode( WRL1NODE* aNode );
-    SGNODE* TranslateToSG( SGNODE* aParent, WRL1STATUS* sp );
+    virtual bool Read( WRLPROC& proc, WRL1BASE* aTopNode );
+    virtual bool AddRefNode( WRL1NODE* aNode );
+    virtual bool AddChildNode( WRL1NODE* aNode );
+    virtual SGNODE* TranslateToSG( SGNODE* aParent, WRL1STATUS* sp );
 };
 
 #endif  // VRML1_TRANSFORM_H
diff --git a/plugins/3d/vrml/v2/vrml2_appearance.h b/plugins/3d/vrml/v2/vrml2_appearance.h
index 637e59c..5d19a69 100644
--- a/plugins/3d/vrml/v2/vrml2_appearance.h
+++ b/plugins/3d/vrml/v2/vrml2_appearance.h
@@ -51,13 +51,13 @@ private:
     bool checkNodeType( WRL2NODES aType );
 
     // overloads
-    void unlinkChildNode( const WRL2NODE* aNode );
-    void unlinkRefNode( const WRL2NODE* aNode );
+    virtual void unlinkChildNode( const WRL2NODE* aNode );
+    virtual void unlinkRefNode( const WRL2NODE* aNode );
 
 public:
 
     // functions inherited from WRL2NODE
-    bool isDangling( void );
+    virtual bool isDangling( void );
 
 public:
     WRL2APPEARANCE();
@@ -65,10 +65,10 @@ public:
     virtual ~WRL2APPEARANCE();
 
     // functions inherited from WRL2NODE
-    bool Read( WRLPROC& proc, WRL2BASE* aTopNode );
-    bool AddRefNode( WRL2NODE* aNode );
-    bool AddChildNode( WRL2NODE* aNode );
-    SGNODE* TranslateToSG( SGNODE* aParent );
+    virtual bool Read( WRLPROC& proc, WRL2BASE* aTopNode );
+    virtual bool AddRefNode( WRL2NODE* aNode );
+    virtual bool AddChildNode( WRL2NODE* aNode );
+    virtual SGNODE* TranslateToSG( SGNODE* aParent );
 };
 
 #endif  // VRML2_APPEARANCE_H
diff --git a/plugins/3d/vrml/v2/vrml2_base.h b/plugins/3d/vrml/v2/vrml2_base.h
index edfd818..17b9726 100644
--- a/plugins/3d/vrml/v2/vrml2_base.h
+++ b/plugins/3d/vrml/v2/vrml2_base.h
@@ -85,7 +85,7 @@ private:
 public:
 
     // functions inherited from WRL2NODE
-    bool isDangling( void );
+    virtual bool isDangling( void );
 
 public:
     WRL2BASE();
@@ -109,9 +109,9 @@ public:
     virtual bool SetName( const std::string& aName );
 
     // functions inherited from WRL2NODE
-    bool Read( WRLPROC& proc, WRL2BASE* aTopNode );
-    bool SetParent( WRL2NODE* aParent, bool doUnlink = true );
-    SGNODE* TranslateToSG( SGNODE* aParent );
+    virtual bool Read( WRLPROC& proc, WRL2BASE* aTopNode );
+    virtual bool SetParent( WRL2NODE* aParent, bool doUnlink = true );
+    virtual SGNODE* TranslateToSG( SGNODE* aParent );
 };
 
 #endif  // VRML2_BASE_H
diff --git a/plugins/3d/vrml/v2/vrml2_box.h b/plugins/3d/vrml/v2/vrml2_box.h
index 3e4f175..ee04138 100644
--- a/plugins/3d/vrml/v2/vrml2_box.h
+++ b/plugins/3d/vrml/v2/vrml2_box.h
@@ -45,7 +45,7 @@ private:
 public:
 
     // functions inherited from WRL2NODE
-    bool isDangling( void );
+    virtual bool isDangling( void );
 
 public:
     WRL2BOX();
@@ -53,10 +53,10 @@ public:
     virtual ~WRL2BOX();
 
     // functions inherited from WRL2NODE
-    bool Read( WRLPROC& proc, WRL2BASE* aTopNode );
-    bool AddRefNode( WRL2NODE* aNode );
-    bool AddChildNode( WRL2NODE* aNode );
-    SGNODE* TranslateToSG( SGNODE* aParent );
+    virtual bool Read( WRLPROC& proc, WRL2BASE* aTopNode );
+    virtual bool AddRefNode( WRL2NODE* aNode );
+    virtual bool AddChildNode( WRL2NODE* aNode );
+    virtual SGNODE* TranslateToSG( SGNODE* aParent );
 };
 
 #endif  // VRML2_BOX_H
diff --git a/plugins/3d/vrml/v2/vrml2_color.h b/plugins/3d/vrml/v2/vrml2_color.h
index 4792a14..9a73782 100644
--- a/plugins/3d/vrml/v2/vrml2_color.h
+++ b/plugins/3d/vrml/v2/vrml2_color.h
@@ -47,7 +47,7 @@ private:
 public:
 
     // functions inherited from WRL2NODE
-    bool isDangling( void );
+    virtual bool isDangling( void );
 
 public:
     WRL2COLOR();
@@ -55,10 +55,10 @@ public:
     virtual ~WRL2COLOR();
 
     // functions inherited from WRL2NODE
-    bool Read( WRLPROC& proc, WRL2BASE* aTopNode );
-    bool AddRefNode( WRL2NODE* aNode );
-    bool AddChildNode( WRL2NODE* aNode );
-    SGNODE* TranslateToSG( SGNODE* aParent );
+    virtual bool Read( WRLPROC& proc, WRL2BASE* aTopNode );
+    virtual bool AddRefNode( WRL2NODE* aNode );
+    virtual bool AddChildNode( WRL2NODE* aNode );
+    virtual SGNODE* TranslateToSG( SGNODE* aParent );
 
     /**
      * Function HasColors
diff --git a/plugins/3d/vrml/v2/vrml2_coords.h b/plugins/3d/vrml/v2/vrml2_coords.h
index 61c57af..8099e5c 100644
--- a/plugins/3d/vrml/v2/vrml2_coords.h
+++ b/plugins/3d/vrml/v2/vrml2_coords.h
@@ -47,7 +47,7 @@ private:
 public:
 
     // functions inherited from WRL2NODE
-    bool isDangling( void );
+    virtual bool isDangling( void );
 
 public:
     WRL2COORDS();
@@ -55,10 +55,10 @@ public:
     virtual ~WRL2COORDS();
 
     // functions inherited from WRL2NODE
-    bool Read( WRLPROC& proc, WRL2BASE* aTopNode );
-    bool AddRefNode( WRL2NODE* aNode );
-    bool AddChildNode( WRL2NODE* aNode );
-    SGNODE* TranslateToSG( SGNODE* aParent );
+    virtual bool Read( WRLPROC& proc, WRL2BASE* aTopNode );
+    virtual bool AddRefNode( WRL2NODE* aNode );
+    virtual bool AddChildNode( WRL2NODE* aNode );
+    virtual SGNODE* TranslateToSG( SGNODE* aParent );
 
     void GetCoords( WRLVEC3F*& aCoordList, size_t& aListSize );
 };
diff --git a/plugins/3d/vrml/v2/vrml2_faceset.h b/plugins/3d/vrml/v2/vrml2_faceset.h
index c7f7044..ddfed1b 100644
--- a/plugins/3d/vrml/v2/vrml2_faceset.h
+++ b/plugins/3d/vrml/v2/vrml2_faceset.h
@@ -72,12 +72,12 @@ private:
 public:
 
     // functions inherited from WRL2NODE
-    bool isDangling( void );
+    virtual bool isDangling( void );
 
 
     // overloads
-    void unlinkChildNode( const WRL2NODE* aNode );
-    void unlinkRefNode( const WRL2NODE* aNode );
+    virtual void unlinkChildNode( const WRL2NODE* aNode );
+    virtual void unlinkRefNode( const WRL2NODE* aNode );
 
 public:
     WRL2FACESET();
@@ -85,10 +85,10 @@ public:
     virtual ~WRL2FACESET();
 
     // functions inherited from WRL2NODE
-    bool Read( WRLPROC& proc, WRL2BASE* aTopNode );
-    bool AddRefNode( WRL2NODE* aNode );
-    bool AddChildNode( WRL2NODE* aNode );
-    SGNODE* TranslateToSG( SGNODE* aParent );
+    virtual bool Read( WRLPROC& proc, WRL2BASE* aTopNode );
+    virtual bool AddRefNode( WRL2NODE* aNode );
+    virtual bool AddChildNode( WRL2NODE* aNode );
+    virtual SGNODE* TranslateToSG( SGNODE* aParent );
 
     /**
      * Function HasColors
diff --git a/plugins/3d/vrml/v2/vrml2_inline.h b/plugins/3d/vrml/v2/vrml2_inline.h
index d12293a..03ffafc 100644
--- a/plugins/3d/vrml/v2/vrml2_inline.h
+++ b/plugins/3d/vrml/v2/vrml2_inline.h
@@ -48,7 +48,7 @@ private:
 public:
 
     // functions inherited from WRL2NODE
-    bool isDangling( void );
+    virtual bool isDangling( void );
 
 public:
     WRL2INLINE();
@@ -56,10 +56,10 @@ public:
     virtual ~WRL2INLINE();
 
     // functions inherited from WRL2NODE
-    bool Read( WRLPROC& proc, WRL2BASE* aTopNode );
-    bool AddRefNode( WRL2NODE* aNode );
-    bool AddChildNode( WRL2NODE* aNode );
-    SGNODE* TranslateToSG( SGNODE* aParent );
+    virtual bool Read( WRLPROC& proc, WRL2BASE* aTopNode );
+    virtual bool AddRefNode( WRL2NODE* aNode );
+    virtual bool AddChildNode( WRL2NODE* aNode );
+    virtual SGNODE* TranslateToSG( SGNODE* aParent );
 };
 
 #endif  // VRML2_INLINE_H
diff --git a/plugins/3d/vrml/v2/vrml2_lineset.h b/plugins/3d/vrml/v2/vrml2_lineset.h
index 509c4f8..8082b84 100644
--- a/plugins/3d/vrml/v2/vrml2_lineset.h
+++ b/plugins/3d/vrml/v2/vrml2_lineset.h
@@ -61,12 +61,12 @@ private:
 public:
 
     // functions inherited from WRL2NODE
-    bool isDangling( void );
+    virtual bool isDangling( void );
 
 
     // overloads
-    void unlinkChildNode( const WRL2NODE* aNode );
-    void unlinkRefNode( const WRL2NODE* aNode );
+    virtual void unlinkChildNode( const WRL2NODE* aNode );
+    virtual void unlinkRefNode( const WRL2NODE* aNode );
 
 public:
     WRL2LINESET();
@@ -74,10 +74,10 @@ public:
     virtual ~WRL2LINESET();
 
     // functions inherited from WRL2NODE
-    bool Read( WRLPROC& proc, WRL2BASE* aTopNode );
-    bool AddRefNode( WRL2NODE* aNode );
-    bool AddChildNode( WRL2NODE* aNode );
-    SGNODE* TranslateToSG( SGNODE* aParent );
+    virtual bool Read( WRLPROC& proc, WRL2BASE* aTopNode );
+    virtual bool AddRefNode( WRL2NODE* aNode );
+    virtual bool AddChildNode( WRL2NODE* aNode );
+    virtual SGNODE* TranslateToSG( SGNODE* aParent );
 
     /**
      * Function HasColors
diff --git a/plugins/3d/vrml/v2/vrml2_material.h b/plugins/3d/vrml/v2/vrml2_material.h
index c3daa1f..33d19d6 100644
--- a/plugins/3d/vrml/v2/vrml2_material.h
+++ b/plugins/3d/vrml/v2/vrml2_material.h
@@ -52,7 +52,7 @@ private:
 public:
 
     // functions inherited from WRL2NODE
-    bool isDangling( void );
+    virtual bool isDangling( void );
 
 public:
     WRL2MATERIAL();
@@ -60,10 +60,10 @@ public:
     virtual ~WRL2MATERIAL();
 
     // functions inherited from WRL2NODE
-    bool Read( WRLPROC& proc, WRL2BASE* aTopNode );
-    bool AddRefNode( WRL2NODE* aNode );
-    bool AddChildNode( WRL2NODE* aNode );
-    SGNODE* TranslateToSG( SGNODE* aParent );
+    virtual bool Read( WRLPROC& proc, WRL2BASE* aTopNode );
+    virtual bool AddRefNode( WRL2NODE* aNode );
+    virtual bool AddChildNode( WRL2NODE* aNode );
+    virtual SGNODE* TranslateToSG( SGNODE* aParent );
 };
 
 #endif  // VRML2_MATERIAL_H
diff --git a/plugins/3d/vrml/v2/vrml2_norms.h b/plugins/3d/vrml/v2/vrml2_norms.h
index 7eb5a5f..76798b2 100644
--- a/plugins/3d/vrml/v2/vrml2_norms.h
+++ b/plugins/3d/vrml/v2/vrml2_norms.h
@@ -47,7 +47,7 @@ private:
 public:
 
     // functions inherited from WRL2NODE
-    bool isDangling( void );
+    virtual bool isDangling( void );
 
 public:
     WRL2NORMS();
@@ -55,10 +55,10 @@ public:
     virtual ~WRL2NORMS();
 
     // functions inherited from WRL2NODE
-    bool Read( WRLPROC& proc, WRL2BASE* aTopNode );
-    bool AddRefNode( WRL2NODE* aNode );
-    bool AddChildNode( WRL2NODE* aNode );
-    SGNODE* TranslateToSG( SGNODE* aParent );
+    virtual bool Read( WRLPROC& proc, WRL2BASE* aTopNode );
+    virtual bool AddRefNode( WRL2NODE* aNode );
+    virtual bool AddChildNode( WRL2NODE* aNode );
+    virtual SGNODE* TranslateToSG( SGNODE* aParent );
 };
 
 #endif  // VRML2_NORMS_H
diff --git a/plugins/3d/vrml/v2/vrml2_pointset.h b/plugins/3d/vrml/v2/vrml2_pointset.h
index 5390a3f..8067205 100644
--- a/plugins/3d/vrml/v2/vrml2_pointset.h
+++ b/plugins/3d/vrml/v2/vrml2_pointset.h
@@ -56,12 +56,12 @@ private:
 public:
 
     // functions inherited from WRL2NODE
-    bool isDangling( void );
+    virtual bool isDangling( void );
 
 
     // overloads
-    void unlinkChildNode( const WRL2NODE* aNode );
-    void unlinkRefNode( const WRL2NODE* aNode );
+    virtual void unlinkChildNode( const WRL2NODE* aNode );
+    virtual void unlinkRefNode( const WRL2NODE* aNode );
 
 public:
     WRL2POINTSET();
@@ -69,10 +69,10 @@ public:
     virtual ~WRL2POINTSET();
 
     // functions inherited from WRL2NODE
-    bool Read( WRLPROC& proc, WRL2BASE* aTopNode );
-    bool AddRefNode( WRL2NODE* aNode );
-    bool AddChildNode( WRL2NODE* aNode );
-    SGNODE* TranslateToSG( SGNODE* aParent );
+    virtual bool Read( WRLPROC& proc, WRL2BASE* aTopNode );
+    virtual bool AddRefNode( WRL2NODE* aNode );
+    virtual bool AddChildNode( WRL2NODE* aNode );
+    virtual SGNODE* TranslateToSG( SGNODE* aParent );
 
     /**
      * Function HasColors
diff --git a/plugins/3d/vrml/v2/vrml2_shape.h b/plugins/3d/vrml/v2/vrml2_shape.h
index d29885a..38c8016 100644
--- a/plugins/3d/vrml/v2/vrml2_shape.h
+++ b/plugins/3d/vrml/v2/vrml2_shape.h
@@ -50,13 +50,13 @@ private:
     bool checkNodeType( WRL2NODES aType );
 
     // overloads
-    void unlinkChildNode( const WRL2NODE* aNode );
-    void unlinkRefNode( const WRL2NODE* aNode );
+    virtual void unlinkChildNode( const WRL2NODE* aNode );
+    virtual void unlinkRefNode( const WRL2NODE* aNode );
 
 public:
 
     // functions inherited from WRL2NODE
-    bool isDangling( void );
+    virtual bool isDangling( void );
 
 public:
     WRL2SHAPE();
@@ -64,10 +64,10 @@ public:
     virtual ~WRL2SHAPE();
 
     // functions inherited from WRL2NODE
-    bool Read( WRLPROC& proc, WRL2BASE* aTopNode );
-    bool AddRefNode( WRL2NODE* aNode );
-    bool AddChildNode( WRL2NODE* aNode );
-    SGNODE* TranslateToSG( SGNODE* aParent );
+    virtual bool Read( WRLPROC& proc, WRL2BASE* aTopNode );
+    virtual bool AddRefNode( WRL2NODE* aNode );
+    virtual bool AddChildNode( WRL2NODE* aNode );
+    virtual SGNODE* TranslateToSG( SGNODE* aParent );
 };
 
 #endif  // VRML2_SHAPE_H
diff --git a/plugins/3d/vrml/v2/vrml2_switch.h b/plugins/3d/vrml/v2/vrml2_switch.h
index a7edf39..791635b 100644
--- a/plugins/3d/vrml/v2/vrml2_switch.h
+++ b/plugins/3d/vrml/v2/vrml2_switch.h
@@ -48,7 +48,7 @@ private:
 public:
 
     // functions inherited from WRL2NODE
-    bool isDangling( void );
+    virtual bool isDangling( void );
 
 public:
     WRL2SWITCH();
@@ -56,9 +56,9 @@ public:
     virtual ~WRL2SWITCH();
 
     // functions inherited from WRL2NODE
-    bool Read( WRLPROC& proc, WRL2BASE* aTopNode );
-    bool AddRefNode( WRL2NODE* aNode );
-    SGNODE* TranslateToSG( SGNODE* aParent );
+    virtual bool Read( WRLPROC& proc, WRL2BASE* aTopNode );
+    virtual bool AddRefNode( WRL2NODE* aNode );
+    virtual SGNODE* TranslateToSG( SGNODE* aParent );
 };
 
 #endif  // VRML2_SWITCH_H
diff --git a/plugins/3d/vrml/v2/vrml2_transform.h b/plugins/3d/vrml/v2/vrml2_transform.h
index 857064e..b62dac8 100644
--- a/plugins/3d/vrml/v2/vrml2_transform.h
+++ b/plugins/3d/vrml/v2/vrml2_transform.h
@@ -53,7 +53,7 @@ private:
 public:
 
     // functions inherited from WRL2NODE
-    bool isDangling( void );
+    virtual bool isDangling( void );
 
 public:
     WRL2TRANSFORM();
@@ -61,9 +61,9 @@ public:
     virtual ~WRL2TRANSFORM();
 
     // functions inherited from WRL2NODE
-    bool Read( WRLPROC& proc, WRL2BASE* aTopNode );
-    bool AddRefNode( WRL2NODE* aNode );
-    SGNODE* TranslateToSG( SGNODE* aParent );
+    virtual bool Read( WRLPROC& proc, WRL2BASE* aTopNode );
+    virtual bool AddRefNode( WRL2NODE* aNode );
+    virtual SGNODE* TranslateToSG( SGNODE* aParent );
 };
 
 #endif  // VRML2_TRANSFORM_H
diff --git a/plugins/3d/vrml/x3d/x3d_appearance.h b/plugins/3d/vrml/x3d/x3d_appearance.h
index 3ab188b..0419d36 100644
--- a/plugins/3d/vrml/x3d/x3d_appearance.h
+++ b/plugins/3d/vrml/x3d/x3d_appearance.h
@@ -59,11 +59,11 @@ public:
     virtual ~X3DAPP();
 
     // functions inherited from X3DNODE
-    bool Read( wxXmlNode* aNode, X3DNODE* aTopNode, X3D_DICT& aDict );
-    bool SetParent( X3DNODE* aParent, bool doUnlink = true );
-    bool AddChildNode( X3DNODE* aNode );
-    bool AddRefNode( X3DNODE* aNode );
-    SGNODE* TranslateToSG( SGNODE* aParent );
+    virtual bool Read( wxXmlNode* aNode, X3DNODE* aTopNode, X3D_DICT& aDict );
+    virtual bool SetParent( X3DNODE* aParent, bool doUnlink = true );
+    virtual bool AddChildNode( X3DNODE* aNode );
+    virtual bool AddRefNode( X3DNODE* aNode );
+    virtual SGNODE* TranslateToSG( SGNODE* aParent );
 };
 
 #endif  // X3D_APPEARANCE_H
diff --git a/plugins/3d/vrml/x3d/x3d_coords.h b/plugins/3d/vrml/x3d/x3d_coords.h
index 1d8579f..beb449c 100644
--- a/plugins/3d/vrml/x3d/x3d_coords.h
+++ b/plugins/3d/vrml/x3d/x3d_coords.h
@@ -49,11 +49,11 @@ public:
     virtual ~X3DCOORDS();
 
     // functions inherited from X3DNODE
-    bool Read( wxXmlNode* aNode, X3DNODE* aTopNode, X3D_DICT& aDict );
-    bool SetParent( X3DNODE* aParent, bool doUnlink = true );
-    bool AddChildNode( X3DNODE* aNode );
-    bool AddRefNode( X3DNODE* aNode );
-    SGNODE* TranslateToSG( SGNODE* aParent );
+    virtual bool Read( wxXmlNode* aNode, X3DNODE* aTopNode, X3D_DICT& aDict );
+    virtual bool SetParent( X3DNODE* aParent, bool doUnlink = true );
+    virtual bool AddChildNode( X3DNODE* aNode );
+    virtual bool AddRefNode( X3DNODE* aNode );
+    virtual SGNODE* TranslateToSG( SGNODE* aParent );
 
     void GetCoords( WRLVEC3F*& aCoordList, size_t& aListSize );
 };
diff --git a/plugins/3d/vrml/x3d/x3d_ifaceset.h b/plugins/3d/vrml/x3d/x3d_ifaceset.h
index 79dfe13..c9fafd5 100644
--- a/plugins/3d/vrml/x3d/x3d_ifaceset.h
+++ b/plugins/3d/vrml/x3d/x3d_ifaceset.h
@@ -57,11 +57,11 @@ public:
     virtual ~X3DIFACESET();
 
     // functions inherited from X3DNODE
-    bool Read( wxXmlNode* aNode, X3DNODE* aTopNode, X3D_DICT& aDict );
-    bool SetParent( X3DNODE* aParent, bool doUnlink = true );
-    bool AddChildNode( X3DNODE* aNode );
-    bool AddRefNode( X3DNODE* aNode );
-    SGNODE* TranslateToSG( SGNODE* aParent );
+    virtual bool Read( wxXmlNode* aNode, X3DNODE* aTopNode, X3D_DICT& aDict );
+    virtual bool SetParent( X3DNODE* aParent, bool doUnlink = true );
+    virtual bool AddChildNode( X3DNODE* aNode );
+    virtual bool AddRefNode( X3DNODE* aNode );
+    virtual SGNODE* TranslateToSG( SGNODE* aParent );
 };
 
 #endif  // X3D_IFACESET_H
diff --git a/plugins/3d/vrml/x3d/x3d_shape.h b/plugins/3d/vrml/x3d/x3d_shape.h
index 714efb9..6790be4 100644
--- a/plugins/3d/vrml/x3d/x3d_shape.h
+++ b/plugins/3d/vrml/x3d/x3d_shape.h
@@ -50,11 +50,11 @@ public:
     virtual ~X3DSHAPE();
 
     // functions inherited from X3DNODE
-    bool Read( wxXmlNode* aNode, X3DNODE* aTopNode, X3D_DICT& aDict );
-    bool SetParent( X3DNODE* aParent, bool doUnlink = true );
-    bool AddChildNode( X3DNODE* aNode );
-    bool AddRefNode( X3DNODE* aNode );
-    SGNODE* TranslateToSG( SGNODE* aParent );
+    virtual bool Read( wxXmlNode* aNode, X3DNODE* aTopNode, X3D_DICT& aDict );
+    virtual bool SetParent( X3DNODE* aParent, bool doUnlink = true );
+    virtual bool AddChildNode( X3DNODE* aNode );
+    virtual bool AddRefNode( X3DNODE* aNode );
+    virtual SGNODE* TranslateToSG( SGNODE* aParent );
 
     // overrides
     virtual void unlinkChildNode( const X3DNODE* aNode );
diff --git a/plugins/3d/vrml/x3d/x3d_transform.h b/plugins/3d/vrml/x3d/x3d_transform.h
index ca994fa..6aea08f 100644
--- a/plugins/3d/vrml/x3d/x3d_transform.h
+++ b/plugins/3d/vrml/x3d/x3d_transform.h
@@ -58,11 +58,11 @@ public:
     virtual ~X3DTRANSFORM();
 
     // functions inherited from X3DNODE
-    bool Read( wxXmlNode* aNode, X3DNODE* aTopNode, X3D_DICT& aDict );
-    bool SetParent( X3DNODE* aParent, bool doUnlink = true );
-    bool AddChildNode( X3DNODE* aNode );
-    bool AddRefNode( X3DNODE* aNode );
-    SGNODE* TranslateToSG( SGNODE* aParent );
+    virtual bool Read( wxXmlNode* aNode, X3DNODE* aTopNode, X3D_DICT& aDict );
+    virtual bool SetParent( X3DNODE* aParent, bool doUnlink = true );
+    virtual bool AddChildNode( X3DNODE* aNode );
+    virtual bool AddRefNode( X3DNODE* aNode );
+    virtual SGNODE* TranslateToSG( SGNODE* aParent );
 };
 
 #endif  // X3D_TRANSFORM_H
diff --git a/plugins/ldr/3d/pluginldr3D.h b/plugins/ldr/3d/pluginldr3D.h
index c413fcf..1e7421d 100644
--- a/plugins/ldr/3d/pluginldr3D.h
+++ b/plugins/ldr/3d/pluginldr3D.h
@@ -65,11 +65,11 @@ public:
 
 
     // virtuals inherited from KICAD_PLUGIN_LDR
-    bool Open( const wxString& aFullFileName );
+    virtual bool Open( const wxString& aFullFileName );
 
-    void Close( void );
+    virtual void Close( void );
 
-    void GetLoaderVersion( unsigned char* Major, unsigned char* Minor,
+    virtual void GetLoaderVersion( unsigned char* Major, unsigned char* Minor,
         unsigned char* Revision, unsigned char* Patch ) const;
 
 
diff --git a/utils/idftools/dxf2idf.h b/utils/idftools/dxf2idf.h
index bd620a7..3b8e864 100644
--- a/utils/idftools/dxf2idf.h
+++ b/utils/idftools/dxf2idf.h
@@ -54,48 +54,48 @@ private:
     virtual void addPolyline(const DRW_Polyline& data );
 
     // DRW_Interface callbacks unsupported by DXF2IDF
-    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 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 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 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() {}
 };

Follow ups

References