Client-side implementation