public void MoveItem(ItemDefinition itemDefinition, ItemDefinition destination, CallContext context)
        {
            if (DisableSerialization)
            {
                return;
            }

            Assert.ArgumentNotNull(itemDefinition, "itemDefinition");

            var sourceItem      = GetSourceFromDefinition(itemDefinition, true);        // we use cache here because we want the old path present before the move
            var destinationItem = GetSourceFromDefinition(destination);

            if (!_predicate.Includes(destinationItem).IsIncluded)             // if the destination we are moving to is NOT included for serialization, we delete the existing item
            {
                var existingItem = GetExistingSerializedItem(sourceItem.Id);

                if (existingItem != null)
                {
                    existingItem.Delete();
                    _logger.MovedItemToNonIncludedLocation(_serializationProvider.LogName, existingItem);
                }

                return;
            }

            _serializationProvider.MoveSerializedItem(sourceItem, destinationItem);
            _logger.MovedItem(_serializationProvider.LogName, sourceItem, destinationItem);
        }