Refactored into a separate .hpp