some messy interactive utils