void syncFromTemplate(AbstractProject template, AbstractProject implementation) throws IOException {
		if(
				implementation == null ||
				!(implementation instanceof BuildableItemWithBuildWrappers) ||
				!(implementation instanceof Describable) ||
				template == null ||
				!(template instanceof BuildableItemWithBuildWrappers) ||
				!(template instanceof Describable)
			) {
			return;
		}

		ImplementationBuildWrapper implementationBuildWrapper = this;
		TemplateBuildWrapper templateBuildWrapper = BuildWrapperUtils.findBuildWrapper(TemplateBuildWrapper.class, template);
		if(templateBuildWrapper == null) {
			return;
		}

		Map<Pattern, String> propertiesMap = getPropertiesMap(template, implementation, implementationBuildWrapper);

		String oldDescription = implementation.getDescription();
		boolean oldDisabled = implementation.isDisabled();
        Map<TriggerDescriptor, Trigger> oldTriggers = implementation.getTriggers();

        XmlFile implementationXmlFile = replaceConfig(template, implementation, propertiesMap);
		refreshAndSave(template, implementationBuildWrapper, implementationXmlFile, oldDescription, oldDisabled, oldTriggers);
	}