this would read easier if you didn't pass a `tuple`