Strategy pattern
merged