refactor logic for all uber types