refactored into App object to avoid polluting global namespace