last refactor I promise - keep funcs more terse, better naming