backend choice logic