Refactored a bit using strategy and moving math utils, more OOD friendly
now.