need deep object dirty check