simplified abstract client