Wrap everything in module to avoid global namespace pollution