custom choice implementation