implement the strategies