Same code as geo2, but refactored as independent objects and a launcher for easier maintenance/testing.