refactored GAImpl