Client framework