Updates from code review

1.  |= for recursive merge
2.  Do not consider empty updates noop without detect_noops