prefer struct to pair for typing