Refactor to use diff strategies
Merge branch 'strategies'