make partial update() work + optimize it