update
now become stateless