update based on SPO