checkmark 3 of 4; it's ugly, but maybe I'll have time to refactor later