Proper method overloading with some general refactoring