complete p.update function