use better compare for avoid setting properties that are already in sync