Implemented strategy pattern