add strategy-pattern