client logic