strategy pattern added