client functions