IMO this should be made private and accessible trough a virtual function.