much better update behavior