working but messy choose