public void SaveItem(ItemDefinition itemDefinition, ItemChanges changes, CallContext context) { if (DisableSerialization) { return; } Assert.ArgumentNotNull(itemDefinition, "itemDefinition"); Assert.ArgumentNotNull(changes, "changes"); var sourceItem = GetItemWithoutCache(changes.Item); if (!_predicate.Includes(sourceItem).IsIncluded) { return; } string oldName = changes.Renamed ? changes.Properties["name"].OriginalValue.ToString() : string.Empty; if (changes.Renamed && !oldName.Equals(sourceItem.Name, StringComparison.Ordinal)) // it's a rename, in which the name actually changed (template builder will cause 'renames' for the same name!!!) { _serializationProvider.RenameSerializedItem(sourceItem, oldName); _logger.RenamedItem(_serializationProvider.LogName, sourceItem, oldName); } else if (HasConsequentialChanges(changes)) // it's a simple update - but we reject it if only inconsequential fields (last updated, revision) were changed - again, template builder FTW { _serializationProvider.SerializeItem(sourceItem); _logger.SavedItem(_serializationProvider.LogName, sourceItem, "Saved"); } }