client extends observable