Make sure we can do code re-use even if strategy option is a object
Code review; Named all anon functions; Added error messages; Added comments