Modify:  add strategy pattern