re-factored much of swimmer logic