CVE-2021-39181: XML Injection (aka Blind XPath Injection) (CWE-91)
value: OpenOlat is a web-based learning management system (LMS). Prior to version 15.3.18, 15.5.3, and 16.0.0, using a prepared import XML file (e.g. a course) any class on the Java classpath can be instantiated, including spring AOP bean factories. This can be used to execute code arbitrary code by the attacker. The attack requires an OpenOlat user account with the authoring role. It can not be exploited by unregistered users. The problem is fixed in versions 15.3.18, 15.5.3, and 16.0.0. There are no known workarounds aside from upgrading.
CWE description: The product does not properly neutralize special elements that are used in XML, allowing attackers to modify the syntax, content, or commands of the XML before it is processed by an end system.
CVSS v3 base score: 8.8
Published: 2021-09-01T20:15Z
Repository: https://github.com/OpenOLAT/OpenOLAT
Language: Java
Files changed: src/main/java/de/bps/course/nodes/ChecklistCourseNode.java, src/main/java/de/bps/olat/portal/links/LinksPortlet.java, src/main/java/de/bps/olat/user/ChangeEMailExecuteController.java, src/main/java/org/olat/admin/landingpages/LandingPagesModule.java, src/main/java/org/olat/core/commons/modules/glossary/GlossaryItemManager.java, src/main/java/org/olat/core/commons/services/doceditor/discovery/manager/DiscoveryXStream.java, src/main/java/org/olat/core/commons/services/license/manager/LicenseXStreamHelper.java, src/main/java/org/olat/core/commons/services/taskexecutor/manager/PersistentTaskDAO.java, src/main/java/org/olat/core/commons/services/vfs/manager/VFSXStream.java, src/main/java/org/olat/core/dispatcher/mapper/manager/MapperDAO.java, src/main/java/org/olat/core/gui/control/navigation/SiteDefinitions.java, src/main/java/org/olat/core/id/context/HistoryManager.java, src/main/java/org/olat/core/util/prefs/db/DbStorage.java, src/main/java/org/olat/core/util/xml/EnhancedXStream.java, src/main/java/org/olat/core/util/xml/XStreamHelper.java, src/main/java/org/olat/course/CourseXStreamAliases.java, src/main/java/org/olat/course/archiver/FormatConfigHelper.java, src/main/java/org/olat/course/assessment/manager/EfficiencyStatementManager.java, src/main/java/org/olat/course/assessment/portfolio/EfficiencyStatementMediaHandler.java, src/main/java/org/olat/course/config/manager/CourseConfigManagerImpl.java, src/main/java/org/olat/course/config/ui/courselayout/CustomConfigManager.java, src/main/java/org/olat/course/nodes/ProjectBrokerCourseNode.java, src/main/java/org/olat/course/nodes/gta/manager/GTAManagerImpl.java, src/main/java/org/olat/group/manager/GroupXStream.java, src/main/java/org/olat/ims/cp/CPManagerImpl.java, src/main/java/org/olat/ims/qti21/manager/QTI21ServiceImpl.java, src/main/java/org/olat/instantMessaging/manager/ChatLogHelper.java, src/main/java/org/olat/modules/ceditor/ContentEditorXStream.java, src/main/java/org/olat/modules/curriculum/manager/CurriculumXStream.java, src/main/java/org/olat/modules/dcompensation/manager/DisadvantageCompensationAuditLogDAO.java, src/main/java/org/olat/modules/forms/model/xml/FormXStream.java, src/main/java/org/olat/modules/lecture/manager/LectureBlockAuditLogDAO.java, src/main/java/org/olat/modules/openmeetings/manager/OpenMeetingsDAO.java, src/main/java/org/olat/modules/portfolio/handler/BinderXStream.java, src/main/java/org/olat/modules/portfolio/manager/MetadataXStream.java, src/main/java/org/olat/modules/portfolio/manager/PortfolioServiceImpl.java, src/main/java/org/olat/modules/qpool/manager/MetadataConverterHelper.java, src/main/java/org/olat/modules/qpool/manager/QuestionItemAuditLogDAO.java, src/main/java/org/olat/modules/quality/analysis/manager/AnalysisPresentationXStream.java, src/main/java/org/olat/modules/reminder/manager/ReminderRulesXStream.java, src/main/java/org/olat/modules/scorm/ScormMainManager.java, src/main/java/org/olat/modules/taxonomy/manager/TaxonomyCompetenceAuditLogDAO.java, src/main/java/org/olat/modules/video/VideoManager.java, src/main/java/org/olat/modules/video/manager/VideoManagerImpl.java, src/main/java/org/olat/modules/video/manager/VideoMetaXStream.java, src/main/java/org/olat/modules/video/manager/VideoXStream.java, src/main/java/org/olat/modules/video/ui/VideoQualityTableFormController.java, src/main/java/org/olat/modules/vitero/manager/ViteroManager.java, src/main/java/org/olat/modules/webFeed/manager/FeedFileStorge.java, src/main/java/org/olat/modules/webFeed/portfolio/BlogEntryMediaController.java, src/main/java/org/olat/registration/RegistrationManager.java, src/main/java/org/olat/repository/RepositoryEntryImportExport.java, src/main/java/org/olat/restapi/repository/course/CourseWebService.java, src/main/java/org/olat/upgrade/OLATUpgrade_11_3_0.java, src/main/java/org/olat/upgrade/OLATUpgrade_12_3_0.java, src/main/java/org/olat/upgrade/OLATUpgrade_15_3_18.java, src/main/java/org/olat/upgrade/UpgradeManager.java, src/main/java/org/olat/upgrade/_spring/upgradeContext.xml, src/main/java/org/olat/user/manager/HomePageConfigManagerImpl.java, src/main/java/org/olat/user/propertyhandlers/UserInterestsPropertyHandler.java, src/test/java/org/olat/core/commons/modules/glossary/GlossaryItemManagerTest.java, src/test/java/org/olat/core/commons/modules/glossary/glossary.xml, src/test/java/org/olat/core/commons/services/taskexecutor/manager/PersistentTaskDAOTest.java, src/test/java/org/olat/core/dispatcher/mapper/MapperDAOTest.java, src/test/java/org/olat/core/util/xml/XMLDigitalSignatureUtilTest.java, src/test/java/org/olat/core/util/xml/XStreamHelperTest.java, src/test/java/org/olat/core/util/xml/xstream_map_alien.xml, src/test/java/org/olat/core/util/xml/xstream_map_strings.xml, src/test/java/org/olat/test/AllTestsJunit4.java, src/test/java/org/olat/test/VFSJavaIOFile.java, src/test/java/org/olat/upgrade/UpgradeManagerTest.java, src/test/java/org/olat/upgrade/installed_database_upgrades.xml, src/test/java/org/olat/upgrade/installed_upgrades.xml
Commit date: 2021-06-21 11:13:50 +0200
Commit message: OO-5548: setup security of XStream by default
Diff: diff --git a/src/main/java/de/bps/course/nodes/ChecklistCourseNode.java b/src/main/java/de/bps/course/nodes/ChecklistCourseNode.java
index c50db4024d..3feac7031b 100644
--- a/src/main/java/de/bps/course/nodes/ChecklistCourseNode.java
+++ b/src/main/java/de/bps/course/nodes/ChecklistCourseNode.java
@@ -307,10 +307,11 @@ public class ChecklistCourseNode extends AbstractAccessableCourseNode {
 	}
 	
 	@Override
 	public void exportNode(File exportDirectory, ICourse course) {
 		XStream xstream = XStreamHelper.createXStreamInstance();
+		XStreamHelper.allowDefaultPackage(xstream);
 		ChecklistManager cm = ChecklistManager.getInstance();
 		Checklist checklist = loadOrCreateChecklist(course.getCourseEnvironment().getCoursePropertyManager());
 		Checklist copy = cm.copyChecklistInRAM(checklist);
 		String exportContent = xstream.toXML(copy);
 		ExportUtil.writeContentToFile(getExportFilename(), exportContent, exportDirectory, WebappHelper.getDefaultCharset());
@@ -326,27 +327,30 @@ public class ChecklistCourseNode extends AbstractAccessableCourseNode {
 		if(importContent == null || importContent.isEmpty()) {
 			return;
 		}
 		
 		XStream xstream = XStreamHelper.createXStreamInstance();
+		XStreamHelper.allowDefaultPackage(xstream);
 		Checklist checklist = (Checklist) xstream.fromXML(importContent);
 		if(checklist != null) {
 			checklist = ChecklistManager.getInstance().copyChecklist(checklist);
 			setChecklistKey(cpm, checklist.getKey());
 		}
 	}
-	
+
 	@Override
 	public boolean archiveNodeData(Locale locale, ICourse course, ArchiveOptions options,
 			ZipOutputStream exportStream, String archivePath, String charset) {
 		String filename = "checklist_"
 				+ StringHelper.transformDisplayNameToFileSystemName(getShortName())
 				+ "_" + Formatter.formatDatetimeFilesystemSave(new Date(System.currentTimeMillis()));
 		filename = ZipUtil.concat(archivePath, filename);
 		
 		Checklist checklist = loadOrCreateChecklist(course.getCourseEnvironment().getCoursePropertyManager());
-		String exportContent = XStreamHelper.createXStreamInstance().toXML(checklist);
+		XStream xstream = XStreamHelper.createXStreamInstance();
+		XStreamHelper.allowDefaultPackage(xstream);
+		String exportContent = xstream.toXML(checklist);
 		try {
 			exportStream.putNextEntry(new ZipEntry(filename));
 			IOUtils.write(exportContent, exportStream, "UTF-8");
 			exportStream.closeEntry();
 		} catch (IOException e) {
diff --git a/src/main/java/de/bps/olat/portal/links/LinksPortlet.java b/src/main/java/de/bps/olat/portal/links/LinksPortlet.java
index 60e9b1559b..598e05f404 100644
--- a/src/main/java/de/bps/olat/portal/links/LinksPortlet.java
+++ b/src/main/java/de/bps/olat/portal/links/LinksPortlet.java
@@ -77,10 +77,19 @@ public class LinksPortlet extends AbstractPortlet {
 	private static final String ELEM_LINK_DESC = "Description";
 	private static final String ELEM_LINK_IDENT = "Identifier";
 	private static final String ELEM_LINK_TARGET = "Target";
 	private static final String ELEM_LINK_LANG = "Language";
 	
+	private static final XStream xstream = XStreamHelper.createXStreamInstance();
+	static {
+		XStreamHelper.allowDefaultPackage(xstream);
+		xstream.alias("LinksPortlet", Map.class);
+		xstream.alias(ELEM_LINK, PortletLink.class);
+		xstream.alias(ELEM_INSTITUTION, PortletInstitution.class);
+		xstream.aliasAttribute(PortletInstitution.class, ATTR_INSTITUTION_NAME, ATTR_INSTITUTION_NAME);
+	}
+	
 	private static HashMap<String, PortletInstitution> content;
 
 	private static File fxConfXStreamFile;
 	private Controller runCtr;
 	
@@ -153,28 +162,17 @@ public class LinksPortlet extends AbstractPortlet {
 			}
 			// lazy migrate to new format
 			saveLinkList(content);
 			FileUtils.copyFileToFile(fxConfFile, new File(fxConfFile + ".bak"), true);
 		} else {
-			XStream xstream = XStreamHelper.createXStreamInstance();
-			xstream.alias("LinksPortlet", Map.class);
-			xstream.alias(ELEM_LINK, PortletLink.class);
-			xstream.alias(ELEM_INSTITUTION, PortletInstitution.class);
-			xstream.aliasAttribute(PortletInstitution.class, ATTR_INSTITUTION_NAME, ATTR_INSTITUTION_NAME);
 			content = (HashMap<String, PortletInstitution>) XStreamHelper.readObject(xstream, fxConfXStreamFile);
 		}		
 	}
 	
-	public static boolean saveLinkList(HashMap<String, PortletInstitution> portletMap){
-		XStream xstream = XStreamHelper.createXStreamInstance();
-		xstream.alias("LinksPortlet", Map.class);
-		xstream.alias(ELEM_LINK, PortletLink.class);
-		xstream.alias(ELEM_INSTITUTION, PortletInstitution.class);
-		xstream.aliasAttribute(PortletInstitution.class, ATTR_INSTITUTION_NAME, ATTR_INSTITUTION_NAME);
-		String output = xstream.toXML(portletMap);
+	public static boolean saveLinkList(Map<String, PortletInstitution> portletMap){
 		XStreamHelper.writeObject(xstream, fxConfXStreamFile, portletMap);
-		return (output.length() != 0);		
+		return true;		
 	}
 	
 	public static PortletLink getLinkByIdentifier(String identifier){
 		for (Iterator<String> iterator = content.keySet().iterator(); iterator.hasNext();) {
 			String inst = iterator.next();
diff --git a/src/main/java/de/bps/olat/user/ChangeEMailExecuteController.java b/src/main/java/de/bps/olat/user/ChangeEMailExecuteController.java
index be3bc63217..9de61c58a6 100644
--- a/src/main/java/de/bps/olat/user/ChangeEMailExecuteController.java
+++ b/src/main/java/de/bps/olat/user/ChangeEMailExecuteController.java
@@ -106,10 +106,11 @@ public class ChangeEMailExecuteController extends ChangeEMailController implemen
 	 * @param wControl
 	 * @return
 	 */
 	public boolean changeEMail(WindowControl wControl) {
 		XStream xml = XStreamHelper.createXStreamInstance();
+		XStreamHelper.allowDefaultPackage(xml);
 		@SuppressWarnings("unchecked")
 		HashMap<String, String> mails = (HashMap<String, String>) xml.fromXML(tempKey.getEmailAddress());
 		
 		Identity identity = securityManager.loadIdentityByKey(tempKey.getIdentityKey());
 		if (identity != null) {
diff --git a/src/main/java/org/olat/admin/landingpages/LandingPagesModule.java b/src/main/java/org/olat/admin/landingpages/LandingPagesModule.java
index 2a209d8abb..e49c2e58ad 100644
--- a/src/main/java/org/olat/admin/landingpages/LandingPagesModule.java
+++ b/src/main/java/org/olat/admin/landingpages/LandingPagesModule.java
@@ -42,10 +42,11 @@ import com.thoughtworks.xstream.XStream;
 public class LandingPagesModule extends AbstractSpringModule {
 	private static final String CONFIG_RULES = "rules";
 	private static final XStream rulesXStream;
 	static {
 		rulesXStream = XStreamHelper.createXStreamInstance();
+		XStreamHelper.allowDefaultPackage(rulesXStream);
 		rulesXStream.alias("rules", Rules.class);
 		rulesXStream.alias("rule", Rule.class);
 	}
 	
 	private Rules rules;
diff --git a/src/main/java/org/olat/core/commons/modules/glossary/GlossaryItemManager.java b/src/main/java/org/olat/core/commons/modules/glossary/GlossaryItemManager.java
index 04d9d54bab..e592f9c0d5 100644
--- a/src/main/java/org/olat/core/commons/modules/glossary/GlossaryItemManager.java
+++ b/src/main/java/org/olat/core/commons/modules/glossary/GlossaryItemManager.java
@@ -77,10 +77,11 @@ public class GlossaryItemManager {
 	public static final String REGISTER_ONOFF = "register.index.enabled";
 	public static final String EDIT_USERS = "edit.by.users.enabled";
 	
 	private static final XStream xstreamReader = XStreamHelper.createXStreamInstance();
 	static {
+		XStreamHelper.allowDefaultPackage(xstreamReader);
 		xstreamReader.alias(XML_GLOSSARY_ITEM_NAME, GlossaryItem.class);
 		xstreamReader.alias(XML_REVISION_NAME, Revision.class);
 	}
 	
 	private static final XStream xstreamWriter = new XStream(new XppDriver() {
@@ -100,10 +101,11 @@ public class GlossaryItemManager {
 			};
 		}
 	});
 	
 	static {
+		XStreamHelper.allowDefaultPackage(xstreamReader);
 		xstreamWriter.alias(XML_GLOSSARY_ITEM_NAME, GlossaryItem.class);
 		xstreamWriter.alias(XML_REVISION_NAME, Revision.class);
 	}
 
 	private CacheWrapper<String, List<GlossaryItem>> glossaryCache;
@@ -227,11 +229,11 @@ public class GlossaryItemManager {
 	 * <!DOCTYPE glossary PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"          "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
 	 * 
 	 * @param glossaryFile
 	 * @param glossaryItemArr
 	 */
-	private void saveToFile(VFSLeaf glossaryFile, List<GlossaryItem> glossaryItemArr) {
+	protected final void saveToFile(VFSLeaf glossaryFile, List<GlossaryItem> glossaryItemArr) {
 		// cdata-tags should be used instead of strings, overwrite writer.
 		glossaryItemArr = removeEmptyGlossaryItems(glossaryItemArr);
 		XStreamHelper.writeObject(xstreamWriter, glossaryFile, glossaryItemArr);
 	}
 
@@ -272,11 +274,11 @@ public class GlossaryItemManager {
 	 * 
 	 * @param glossaryFile
 	 * @return list with GlossaryItem's
 	 */
 	@SuppressWarnings("unchecked")
-	private List<GlossaryItem> loadGlossaryItemListFromFile(VFSLeaf glossaryFile) {
+	protected final List<GlossaryItem> loadGlossaryItemListFromFile(VFSLeaf glossaryFile) {
 		List<GlossaryItem> glossaryItemList = new ArrayList<>();
 		if (glossaryFile == null) { return new ArrayList<>(); }
 		
 		Object glossObj = XStreamHelper.readObject(xstreamReader, glossaryFile);
 		if (glossObj instanceof ArrayList) {
diff --git a/src/main/java/org/olat/core/commons/services/doceditor/discovery/manager/DiscoveryXStream.java b/src/main/java/org/olat/core/commons/services/doceditor/discovery/manager/DiscoveryXStream.java
index d760291a3f..0358cce2ce 100644
--- a/src/main/java/org/olat/core/commons/services/doceditor/discovery/manager/DiscoveryXStream.java
+++ b/src/main/java/org/olat/core/commons/services/doceditor/discovery/manager/DiscoveryXStream.java
@@ -37,11 +37,10 @@ import com.thoughtworks.xstream.security.ExplicitTypePermission;
  */
 class DiscoveryXStream {
 	
 	private static final XStream xstream = XStreamHelper.createXStreamInstance();
 	static {
-		XStream.setupDefaultSecurity(xstream);
 		Class<?>[] types = new Class[] {
 				DiscoveryImpl.class, NetZoneImpl.class, AppImpl.class, ActionImpl.class, ProofKeyImpl.class
 		};
 		xstream.addPermission(new ExplicitTypePermission(types));
 
diff --git a/src/main/java/org/olat/core/commons/services/license/manager/LicenseXStreamHelper.java b/src/main/java/org/olat/core/commons/services/license/manager/LicenseXStreamHelper.java
index 21e51feb87..2ae907eb28 100644
--- a/src/main/java/org/olat/core/commons/services/license/manager/LicenseXStreamHelper.java
+++ b/src/main/java/org/olat/core/commons/services/license/manager/LicenseXStreamHelper.java
@@ -42,10 +42,11 @@ class LicenseXStreamHelper {
 	
 	private static final Logger log = Tracing.createLoggerFor(LicenseXStreamHelper.class);
 	
 	private static final XStream licenseXStream = XStreamHelper.createXStreamInstanceForDBObjects();
 	static {
+		XStreamHelper.allowDefaultPackage(licenseXStream);
 		licenseXStream.alias("license", LicenseImpl.class);
 		licenseXStream.alias("license", ResourceLicenseImpl.class);
 		licenseXStream.alias("licenseType", LicenseTypeImpl.class);
 		licenseXStream.ignoreUnknownElements();
 		licenseXStream.omitField(LicenseImpl.class, "creationDate");
diff --git a/src/main/java/org/olat/core/commons/services/taskexecutor/manager/PersistentTaskDAO.java b/src/main/java/org/olat/core/commons/services/taskexecutor/manager/PersistentTaskDAO.java
index 3a111dc18f..e97087d0aa 100644
--- a/src/main/java/org/olat/core/commons/services/taskexecutor/manager/PersistentTaskDAO.java
+++ b/src/main/java/org/olat/core/commons/services/taskexecutor/manager/PersistentTaskDAO.java
@@ -48,10 +48,13 @@ import com.thoughtworks.xstream.XStream;
  */
 @Service("persistentTaskDao")
 public class PersistentTaskDAO {
 	
 	private static XStream xstream = XStreamHelper.createXStreamInstance();
+	static {
+		XStreamHelper.allowDefaultPackage(xstream);
+	}
 	
 	@Autowired
 	private DB dbInstance;
 
 	public PersistentTask createTask(String name, Serializable task) {
@@ -59,11 +62,11 @@ public class PersistentTaskDAO {
 		Date currentDate = new Date();
 		ptask.setCreationDate(currentDate);
 		ptask.setLastModified(currentDate);
 		ptask.setName(name);
 		ptask.setStatus(TaskStatus.newTask);
-		ptask.setTask(xstream.toXML(task));
+		ptask.setTask(toXML(task));
 		dbInstance.getCurrentEntityManager().persist(ptask);
 		return ptask;
 	}
 	
 	public PersistentTask createTask(String name, Serializable task,
@@ -76,11 +79,11 @@ public class PersistentTaskDAO {
 		ptask.setName(name);
 		ptask.setCreator(creator);
 		ptask.setResource(resource);
 		ptask.setResSubPath(resSubPath);
 		ptask.setStatus(TaskStatus.newTask);
-		ptask.setTask(xstream.toXML(task));
+		ptask.setTask(toXML(task));
 		dbInstance.getCurrentEntityManager().persist(ptask);
 		return ptask;
 	}
 	
 	public List<Long> tasksToDo() {
@@ -187,11 +190,11 @@ public class PersistentTaskDAO {
 		if(ptask != null) {
 			ptask.setLastModified(new Date());
 			ptask.setScheduledDate(scheduledDate);
 			ptask.setStatus(TaskStatus.newTask);
 			ptask.setStatusBeforeEditStr(null);
-			ptask.setTask(xstream.toXML(runnableTask));
+			ptask.setTask(toXML(runnableTask));
 
 			ptask = dbInstance.getCurrentEntityManager().merge(ptask);
 			if(modifier != null) {
 				//add to the list of modifier
 				PersistentTaskModifier mod = new PersistentTaskModifier();
@@ -247,9 +250,14 @@ public class PersistentTaskDAO {
 				.find(PersistentTask.class, task.getKey(), LockModeType.PESSIMISTIC_WRITE);
 		task.setStatus(TaskStatus.failed);
 		dbInstance.commit();
 	}
 	
+	
+	protected static String toXML(Serializable task) {
+		return xstream.toXML(task);
+	}
+	
 	public Runnable deserializeTask(PersistentTask task) {
 		return (Runnable)xstream.fromXML(task.getTask());
 	}
 }
diff --git a/src/main/java/org/olat/core/commons/services/vfs/manager/VFSXStream.java b/src/main/java/org/olat/core/commons/services/vfs/manager/VFSXStream.java
index b144de3173..c79263d97b 100644
--- a/src/main/java/org/olat/core/commons/services/vfs/manager/VFSXStream.java
+++ b/src/main/java/org/olat/core/commons/services/vfs/manager/VFSXStream.java
@@ -51,11 +51,10 @@ import com.thoughtworks.xstream.security.ExplicitTypePermission;
 public class VFSXStream {
 	
 	private static XStream mystream;
 	static {
 		mystream = XStreamHelper.createXStreamInstance();
-		XStream.setupDefaultSecurity(mystream);
 		Class<?>[] types = new Class[] {
 				VersionsFileImpl.class, RevisionFileImpl.class, VFSRevision.class,
 				VFSMetadata.class, VFSMetadataImpl.class, Identity.class, IdentityImpl.class,
 				LicenseType.class, LicenseTypeImpl.class
 			};
diff --git a/src/main/java/org/olat/core/dispatcher/mapper/manager/MapperDAO.java b/src/main/java/org/olat/core/dispatcher/mapper/manager/MapperDAO.java
index 160f96d8e1..c234b86728 100644
--- a/src/main/java/org/olat/core/dispatcher/mapper/manager/MapperDAO.java
+++ b/src/main/java/org/olat/core/dispatcher/mapper/manager/MapperDAO.java
@@ -32,17 +32,24 @@ import org.olat.core.dispatcher.mapper.model.PersistedMapper;
 import org.olat.core.util.StringHelper;
 import org.olat.core.util.xml.XStreamHelper;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import com.thoughtworks.xstream.XStream;
+
 /**
  * 
  * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
  */
 @Service("mapperDao")
 public class MapperDAO {
 	
+	private static final XStream xstream = XStreamHelper.createXStreamInstance();
+	static {
+		XStreamHelper.allowDefaultPackage(xstream);
+	}
+	
 	@Autowired
 	private DB dbInstance;
 	
 	/**
 	 * Persist a mapper on the database.
@@ -64,27 +71,35 @@ public class MapperDAO {
 			cal.add(Calendar.SECOND, expirationTime);
 			m.setExpirationDate(cal.getTime());
 		}
 		m.setOriginalSessionId(sessionId);
 		
-		String configuration = XStreamHelper.createXStreamInstance().toXML(mapper);
+		String configuration = xstream.toXML(mapper);
 		m.setXmlConfiguration(configuration);
 		
 		dbInstance.getCurrentEntityManager().persist(m);
 		return m;
 	}
 	
+	protected static String toXml(Object mapper) {
+		return xstream.toXML(mapper);
+	}
+	
+	public static Object fromXML(String configuration) {
+		return xstream.fromXML(configuration);
+	}
+	
 	/**
 	 * Update a persisted mapper.
 	 * 
 	 * @param mapperId The mapper unique id (uuid)
 	 * @param mapper The mapper itself (serializable)
 	 * @param expirationTime The expiration time in seconds
 	 * @return
 	 */
 	public boolean updateConfiguration(String mapperId, Serializable mapper, int expirationTime) {
-		String configuration = XStreamHelper.createXStreamInstance().toXML(mapper);
+		String configuration = xstream.toXML(mapper);
 		Date currentDate = new Date();
 		Date expirationDate = null;
 		if(expirationTime > 0) {
 			Calendar cal = Calendar.getInstance();
 			cal.setTime(currentDate);
@@ -118,11 +133,11 @@ public class MapperDAO {
 		PersistedMapper pm = mappers.isEmpty() ? null : mappers.get(0);
 		
 		if(pm != null && StringHelper.containsNonWhitespace(pm.getXmlConfiguration())) {
 			String configuration = pm.getXmlConfiguration();
 			
-			Object obj = XStreamHelper.createXStreamInstance().fromXML(configuration);
+			Object obj = xstream.fromXML(configuration);
 			if(obj instanceof Mapper) {
 				return (Mapper)obj;
 			}
 		}
 		return null;
diff --git a/src/main/java/org/olat/core/gui/control/navigation/SiteDefinitions.java b/src/main/java/org/olat/core/gui/control/navigation/SiteDefinitions.java
index 3bc6a1927b..f771304fc3 100644
--- a/src/main/java/org/olat/core/gui/control/navigation/SiteDefinitions.java
+++ b/src/main/java/org/olat/core/gui/control/navigation/SiteDefinitions.java
@@ -75,10 +75,11 @@ public class SiteDefinitions extends AbstractSpringModule {
 	@Autowired
 	private List<SiteDefinition> configurers;
 	
 	private static final XStream xStream = XStreamHelper.createXStreamInstance();
 	static {
+		XStreamHelper.allowDefaultPackage(xStream);
 		xStream.alias("coursesite", CourseSiteConfiguration.class);
 		xStream.alias("languageConfig", LanguageConfiguration.class);
 		xStream.alias("siteconfig", SiteConfiguration.class);
 	}
 	
diff --git a/src/main/java/org/olat/core/id/context/HistoryManager.java b/src/main/java/org/olat/core/id/context/HistoryManager.java
index f217f1e09f..27ccdfeda6 100644
--- a/src/main/java/org/olat/core/id/context/HistoryManager.java
+++ b/src/main/java/org/olat/core/id/context/HistoryManager.java
@@ -55,10 +55,13 @@ public class HistoryManager {
 	private static final Logger log = Tracing.createLoggerFor(HistoryManager.class);
 	
 	private static XStream historyReadStream = XStreamHelper.createXStreamInstance();
 	private static XStream historyWriteStream = XStreamHelper.createXStreamInstance();
 	static {
+		XStreamHelper.allowDefaultPackage(historyReadStream);
+		XStreamHelper.allowDefaultPackage(historyWriteStream);
+		
 		//xstream config
 		historyReadStream.omitField(BusinessGroup.class, "type");
 		historyReadStream.omitField(BusinessGroup.class, "ownerGroup");
 		historyReadStream.omitField(BusinessGroup.class, "partipiciantGroup");
 		historyReadStream.omitField(BusinessGroup.class, "waitingGroup");
diff --git a/src/main/java/org/olat/core/util/prefs/db/DbStorage.java b/src/main/java/org/olat/core/util/prefs/db/DbStorage.java
index 2cd1218f4c..8cac958def 100644
--- a/src/main/java/org/olat/core/util/prefs/db/DbStorage.java
+++ b/src/main/java/org/olat/core/util/prefs/db/DbStorage.java
@@ -55,10 +55,11 @@ public class DbStorage implements PreferencesStorage {
 
 	static final String USER_PROPERTY_KEY = "v2guipreferences";
 	
 	private static final XStream xstream = XStreamHelper.createXStreamInstance();
 	static {
+		XStreamHelper.allowDefaultPackage(xstream);
 		xstream.ignoreUnknownElements();
 	}
 
 	@Override
 	public Preferences getPreferencesFor(Identity identity, boolean useTransientPreferences) {
diff --git a/src/main/java/org/olat/core/util/xml/EnhancedXStream.java b/src/main/java/org/olat/core/util/xml/EnhancedXStream.java
index 9503dd22b2..17f3027bed 100644
--- a/src/main/java/org/olat/core/util/xml/EnhancedXStream.java
+++ b/src/main/java/org/olat/core/util/xml/EnhancedXStream.java
@@ -41,13 +41,13 @@ import com.thoughtworks.xstream.mapper.MapperWrapper;
  * map to standard java collections and convert by import / deserialization the
  * old hibernate 3 collection packages to the new one.
  * 
  * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
  */
-public class EnhancedXStream extends XStream {
+class EnhancedXStream extends XStream {
 
-	public EnhancedXStream(boolean export) {
+	EnhancedXStream(boolean export) {
 		super();
 
 		if (export) {
 			addDefaultImplementation(PersistentList.class, List.class);
 			addDefaultImplementation(PersistentBag.class, List.class);
diff --git a/src/main/java/org/olat/core/util/xml/XStreamHelper.java b/src/main/java/org/olat/core/util/xml/XStreamHelper.java
index 446bc76794..c5a2bf4d72 100644
--- a/src/main/java/org/olat/core/util/xml/XStreamHelper.java
+++ b/src/main/java/org/olat/core/util/xml/XStreamHelper.java
@@ -34,10 +34,11 @@ import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.InputStreamReader;
 import java.io.OutputStream;
 import java.io.OutputStreamWriter;
+import java.nio.charset.StandardCharsets;
 import java.nio.file.Files;
 import java.nio.file.Path;
 
 import org.olat.core.logging.OLATRuntimeException;
 import org.olat.core.util.FileUtils;
@@ -80,14 +81,26 @@ import com.thoughtworks.xstream.XStream;
  * Initial Date: 01.12.2004 <br>
  * 
  * @author Felix Jost, Florian Gnaegi
  */
 public class XStreamHelper {
-	private static final String ENCODING = "UTF-8";
 
-	private static XStream unconfiguredXStream = new XStream();
+	private static final String[] DEFAULT_PACKAGES = new String[] {
+			"org.olat.**",
+			"de.bps.**",
+			"at.ac.uibk.**",
+			"org.hibernate.**"
+		};
+	private static final XStream unconfiguredXStream = new XStream();
+	static {
+		XStream.setupDefaultSecurity(unconfiguredXStream);
+		allowDefaultPackage(unconfiguredXStream);
+	}
 	
+	public static final void allowDefaultPackage(XStream xstream) {
+		xstream.allowTypesByWildcard(DEFAULT_PACKAGES);
+	}
 
 	/**
 	 * Write a an object to an XML file. UTF-8 is used as encoding
 	 * <p>
 	 * This method uses an unconfigured XStream, thus a default mapping which
@@ -226,21 +239,25 @@ public class XStreamHelper {
 	/**
 	 * Factory to create a fresh XStream instance. Use this when reading and
 	 * writing to a configured XML mapping
 	 */
 	public static XStream createXStreamInstance() {
-		return new EnhancedXStream(false);
+		XStream xstream = new EnhancedXStream(false);
+		XStream.setupDefaultSecurity(xstream);
+		return xstream;
 	}
 	
 	/**
 	 * Factory to create a fresh XStream instance. Use this when
 	 * writing, it has more aliases to convert hibernate collections
 	 * to java collections.
 	 * @return
 	 */
 	public static XStream createXStreamInstanceForDBObjects() {
-		return new EnhancedXStream(true);
+		XStream xstream = new EnhancedXStream(true);
+		XStream.setupDefaultSecurity(xstream);
+		return xstream;
 	}
 
 	/**
 	 * Read an object from the given file using the xStream object. It is
 	 * usefull to add field and attribute mappers to the stream.
@@ -300,11 +317,11 @@ public class XStreamHelper {
 	 *            The (configured) xStream.
 	 * @param is
 	 * @return
 	 */
 	public static Object readObject(XStream xStream, InputStream is) {
-		try(InputStreamReader isr = new InputStreamReader(is, ENCODING);) {
+		try(InputStreamReader isr = new InputStreamReader(is, StandardCharsets.UTF_8);) {
 			return xStream.fromXML(isr);
 		} catch (Exception e) {
 			throw new OLATRuntimeException(XStreamHelper.class,
 					"could not read Object from inputstream: " + is, e);
 		}
@@ -316,11 +333,11 @@ public class XStreamHelper {
 	 * @param xStream The XStream deserializer
 	 * @param xml XML in form of a string
 	 * @return
 	 */
 	public static Object readObject(XStream xStream, String xml) {
-		try(InputStream is = new ByteArrayInputStream(xml.getBytes(ENCODING))) {
+		try(InputStream is = new ByteArrayInputStream(xml.getBytes(StandardCharsets.UTF_8))) {
 			return readObject(xStream, is);
 		} catch (Exception e) {
 			throw new OLATRuntimeException(XStreamHelper.class,
 					"could not read Object from string: " + xml, e);
 		} 
@@ -375,13 +392,13 @@ public class XStreamHelper {
 	 * @param os
 	 * @param obj
 	 *            the object to be serialized
 	 */
 	public static void writeObject(XStream xStream, OutputStream os, Object obj) {
-		try(OutputStreamWriter osw = new OutputStreamWriter(os, ENCODING)) {
+		try(OutputStreamWriter osw = new OutputStreamWriter(os, StandardCharsets.UTF_8)) {
 			String data = xStream.toXML(obj);
-			data = "<?xml version=\"1.0\" encoding=\"" + ENCODING + "\"?>\n"
+			data = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
 					+ data; // give a decent header with the encoding used
 			osw.write(data);
 			osw.flush();
 		} catch (Exception e) {
 			throw new OLATRuntimeException(XStreamHelper.class, "Could not write object to stream.", e);
diff --git a/src/main/java/org/olat/course/CourseXStreamAliases.java b/src/main/java/org/olat/course/CourseXStreamAliases.java
index 00ffb21a4d..8dd84ec632 100644
--- a/src/main/java/org/olat/course/CourseXStreamAliases.java
+++ b/src/main/java/org/olat/course/CourseXStreamAliases.java
@@ -93,10 +93,13 @@ public class CourseXStreamAliases {
 	 * Used for reading editortreemodel.xml and runstructure.xml.
 	 * Creates a new XStream with the aliases used in the mentioned xml files.
 	 * @return
 	 */
 	static {
+		XStreamHelper.allowDefaultPackage(readXstream);
+		XStreamHelper.allowDefaultPackage(writeXstream);
+		
 		//write XStream
 		writeXstream.alias("com.frentix.olat.course.nodes.ViteroCourseNode", ViteroCourseNode.class);
 		writeXstream.alias("BookSection", BookSectionImpl.class);
 		//end write XStream
 		
diff --git a/src/main/java/org/olat/course/archiver/FormatConfigHelper.java b/src/main/java/org/olat/course/archiver/FormatConfigHelper.java
index 50e639673e..9c285ec6c1 100644
--- a/src/main/java/org/olat/course/archiver/FormatConfigHelper.java
+++ b/src/main/java/org/olat/course/archiver/FormatConfigHelper.java
@@ -40,11 +40,10 @@ public class FormatConfigHelper {
 	private static final String QTI_EXPORT_ITEM_FORMAT_CONFIG = "QTIExportItemFormatConfig";
 	private static final Logger log = Tracing.createLoggerFor(FormatConfigHelper.class);
 	
 	private static final XStream configXstream = XStreamHelper.createXStreamInstance();
 	static {
-		XStream.setupDefaultSecurity(configXstream);
 		Class<?>[] types = new Class[] { ExportFormat.class };
 		configXstream.addPermission(new ExplicitTypePermission(types));
 		configXstream.alias(QTI_EXPORT_ITEM_FORMAT_CONFIG, ExportFormat.class);
 	}
 
diff --git a/src/main/java/org/olat/course/assessment/manager/EfficiencyStatementManager.java b/src/main/java/org/olat/course/assessment/manager/EfficiencyStatementManager.java
index bc1021cb06..da244b2b81 100644
--- a/src/main/java/org/olat/course/assessment/manager/EfficiencyStatementManager.java
+++ b/src/main/java/org/olat/course/assessment/manager/EfficiencyStatementManager.java
@@ -101,11 +101,22 @@ public class EfficiencyStatementManager implements UserDataDeletable, UserDataEx
 	@Autowired
 	private DB dbInstance;
 	@Autowired
 	private UserManager userManager;
 	
-	private final XStream xstream = XStreamHelper.createXStreamInstance();
+	private static final XStream xstream = XStreamHelper.createXStreamInstance();
+	static {
+		XStreamHelper.allowDefaultPackage(xstream);
+	}
+	
+	public static EfficiencyStatement fromXML(String xml) {
+		return (EfficiencyStatement)xstream.fromXML(xml);
+	}
+	
+	public static String toXML(EfficiencyStatement statement) {
+		return xstream.toXML(statement);
+	}
 
 	/**
 	 * Updates the users efficiency statement for this course. <p>
 	 * Called in AssessmentManager in a <code>doInSync</code> block, toghether with the saveScore.
 	 * @param userCourseEnv
@@ -339,11 +350,11 @@ public class EfficiencyStatementManager implements UserDataDeletable, UserDataEx
 				}
 			}
 		}
 
 		efficiencyProperty.setLastModified(new Date());
-		efficiencyProperty.setStatementXml(xstream.toXML(efficiencyStatement));
+		efficiencyProperty.setStatementXml(toXML(efficiencyStatement));
 	}
 	
 	/**
 	 * LD: Debug method. 
 	 * @param efficiencyStatement
@@ -375,11 +386,11 @@ public class EfficiencyStatementManager implements UserDataDeletable, UserDataEx
 	public EfficiencyStatement getUserEfficiencyStatementByCourseRepositoryEntry(RepositoryEntry courseRepoEntry, Identity identity){
 		UserEfficiencyStatementImpl s = getUserEfficiencyStatementFull(courseRepoEntry, identity);
 		if(s == null || s.getStatementXml() == null) {
 			return null;
 		}
-		return (EfficiencyStatement)xstream.fromXML(s.getStatementXml());
+		return fromXML(s.getStatementXml());
 	}
 	
 	public EfficiencyStatement getUserEfficiencyStatementByResourceKey(Long resourceKey, Identity identity){
 		StringBuilder sb = new StringBuilder(256);
 		sb.append("select statement from effstatementstandalone as statement")
@@ -391,11 +402,11 @@ public class EfficiencyStatementManager implements UserDataDeletable, UserDataEx
 				.setParameter("resourceKey", resourceKey)
 				.getResultList();
 		if(statement.isEmpty() || statement.get(0).getStatementXml() == null) {
 			return null;
 		}
-		return (EfficiencyStatement)xstream.fromXML(statement.get(0).getStatementXml());
+		return fromXML(statement.get(0).getStatementXml());
 	}
 	
 
 	public UserEfficiencyStatementImpl getUserEfficiencyStatementFull(RepositoryEntryRef courseRepoEntry, IdentityRef identity) {
 		StringBuilder sb = new StringBuilder(256);
@@ -530,11 +541,11 @@ public class EfficiencyStatementManager implements UserDataDeletable, UserDataEx
 				.setParameter("key", key)
 				.getResultList();
 		if(statement.isEmpty() || !StringHelper.containsNonWhitespace(statement.get(0).getStatementXml())) {
 			return null;
 		}
-		return (EfficiencyStatement)xstream.fromXML(statement.get(0).getStatementXml());
+		return fromXML(statement.get(0).getStatementXml());
 	}
 	
 	public UserEfficiencyStatementLight getUserEfficiencyStatementLightByKey(Long key) {
 		StringBuilder sb = new StringBuilder();
 		sb.append("select statement from effstatementlight as statement")
@@ -646,11 +657,11 @@ public class EfficiencyStatementManager implements UserDataDeletable, UserDataEx
 				.createQuery(sb.toString(), UserEfficiencyStatementImpl.class)
 				.setParameter("identityKey", identity.getKey())
 				.getResultList();
 		for(UserEfficiencyStatementImpl statement:statements) {
 			if(StringHelper.containsNonWhitespace(statement.getStatementXml())) {
-				EfficiencyStatement s = (EfficiencyStatement)xstream.fromXML(statement.getStatementXml());
+				EfficiencyStatement s = fromXML(statement.getStatementXml());
 				efficiencyStatements.add(s);
 			}
 		}
 		return efficiencyStatements;
 	}
diff --git a/src/main/java/org/olat/course/assessment/portfolio/EfficiencyStatementMediaHandler.java b/src/main/java/org/olat/course/assessment/portfolio/EfficiencyStatementMediaHandler.java
index 097803ac6f..a9ceada48e 100644
--- a/src/main/java/org/olat/course/assessment/portfolio/EfficiencyStatementMediaHandler.java
+++ b/src/main/java/org/olat/course/assessment/portfolio/EfficiencyStatementMediaHandler.java
@@ -35,13 +35,13 @@ import org.olat.core.gui.util.WindowControlMocker;
 import org.olat.core.id.Identity;
 import org.olat.core.logging.Tracing;
 import org.olat.core.logging.activity.ThreadLocalUserActivityLogger;
 import org.olat.core.util.StringHelper;
 import org.olat.core.util.vfs.VFSLeaf;
-import org.olat.core.util.xml.XStreamHelper;
 import org.olat.course.assessment.AssessmentHelper;
 import org.olat.course.assessment.EfficiencyStatement;
+import org.olat.course.assessment.manager.EfficiencyStatementManager;
 import org.olat.course.assessment.model.AssessmentNodeData;
 import org.olat.course.assessment.ui.tool.IdentityAssessmentOverviewController;
 import org.olat.course.certificate.ui.CertificateAndEfficiencyStatementController;
 import org.olat.modules.ceditor.PageElementCategory;
 import org.olat.modules.portfolio.Media;
@@ -55,24 +55,21 @@ import org.olat.modules.portfolio.ui.media.StandardEditMediaController;
 import org.olat.user.manager.ManifestBuilder;
 import org.olat.util.logging.activity.LoggingResourceable;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
-import com.thoughtworks.xstream.XStream;
-
 /**
  * 
  * Initial date: 24.06.2016<br>
  * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
  *
  */
 @Service
 public class EfficiencyStatementMediaHandler extends AbstractMediaHandler {
 	
 	private static final Logger log = Tracing.createLoggerFor(EfficiencyStatementMediaHandler.class);
-	private static final XStream myXStream = XStreamHelper.createXStreamInstance();
-	
+
 	public static final String EFF_MEDIA = "EfficiencyStatement";
 	
 	@Autowired
 	private MediaDAO mediaDao;
 	
@@ -112,11 +109,11 @@ public class EfficiencyStatementMediaHandler extends AbstractMediaHandler {
 	@Override
 	public Media createMedia(String title, String description, Object mediaObject, String businessPath, Identity author) {
 		Media media = null;
 		if (mediaObject instanceof EfficiencyStatement) {
 			EfficiencyStatement statement = (EfficiencyStatement) mediaObject;
-			String xml = myXStream.toXML(statement); 
+			String xml = EfficiencyStatementManager.toXML(statement); 
 			media = mediaDao.createMedia(title, description, xml, EFF_MEDIA, businessPath, null, 90, author);
 			ThreadLocalUserActivityLogger.log(PortfolioLoggingAction.PORTFOLIO_MEDIA_ADDED, getClass(),
 					LoggingResourceable.wrap(media));
 		}
 		return media;
@@ -126,11 +123,11 @@ public class EfficiencyStatementMediaHandler extends AbstractMediaHandler {
 	public Controller getMediaController(UserRequest ureq, WindowControl wControl, Media media, MediaRenderingHints hints) {
 		String statementXml = media.getContent();
 		EfficiencyStatement statement = null;
 		if(StringHelper.containsNonWhitespace(statementXml)) {
 			try {
-				statement = (EfficiencyStatement)myXStream.fromXML(statementXml);
+				statement = EfficiencyStatementManager.fromXML(statementXml);
 			} catch (Exception e) {
 				log.error("Cannot load efficiency statement from artefact", e);
 			}
 		}
 		CertificateAndEfficiencyStatementController ctrl =  new CertificateAndEfficiencyStatementController(wControl, ureq, statement);
@@ -146,11 +143,11 @@ public class EfficiencyStatementMediaHandler extends AbstractMediaHandler {
 	@Override
 	public void export(Media media, ManifestBuilder manifest, File mediaArchiveDirectory, Locale locale) {
 		EfficiencyStatement statement = null;
 		if(StringHelper.containsNonWhitespace(media.getContent())) {
 			try {
-				statement = (EfficiencyStatement)myXStream.fromXML(media.getContent());
+				statement = EfficiencyStatementManager.fromXML(media.getContent());
 			} catch (Exception e) {
 				log.error("Cannot load efficiency statement from artefact", e);
 			}
 		}
 		if(statement != null) {
diff --git a/src/main/java/org/olat/course/config/manager/CourseConfigManagerImpl.java b/src/main/java/org/olat/course/config/manager/CourseConfigManagerImpl.java
index 4a9687cc4f..20476b97d0 100644
--- a/src/main/java/org/olat/course/config/manager/CourseConfigManagerImpl.java
+++ b/src/main/java/org/olat/course/config/manager/CourseConfigManagerImpl.java
@@ -55,11 +55,10 @@ public class CourseConfigManagerImpl implements CourseConfigManager {
 
 	private static final Logger log = Tracing.createLoggerFor(CourseConfigManagerImpl.class);
 	
 	private static final XStream xstream = XStreamHelper.createXStreamInstance();
 	static {
-		XStream.setupDefaultSecurity(xstream);
 		Class<?>[] types = new Class[] {
 				CourseConfig.class, Hashtable.class, HashMap.class
 		};
 		xstream.addPermission(new ExplicitTypePermission(types));
 	}
diff --git a/src/main/java/org/olat/course/config/ui/courselayout/CustomConfigManager.java b/src/main/java/org/olat/course/config/ui/courselayout/CustomConfigManager.java
index 5aba7494ac..92252b578b 100644
--- a/src/main/java/org/olat/course/config/ui/courselayout/CustomConfigManager.java
+++ b/src/main/java/org/olat/course/config/ui/courselayout/CustomConfigManager.java
@@ -55,10 +55,14 @@ import com.thoughtworks.xstream.XStream;
  * @author Roman Haag, roman.haag@frentix.com, http://www.frentix.com
  */
 public class CustomConfigManager {
 	
 	private static final Logger log = Tracing.createLoggerFor(CustomConfigManager.class);
+	private static final XStream xstream = XStreamHelper.createXStreamInstance();
+	static {
+		XStreamHelper.allowDefaultPackage(xstream);
+	}
 	
 	private static final String IFRAME_CSS = "iframe.css";
 	private static final String MAIN_CSS = "main.css";
 	private static final String CUSTOM_CONFIG_XML = "config.xml";
 	private List<AbstractLayoutElement> availableLayoutElements;
@@ -89,12 +93,11 @@ public class CustomConfigManager {
 		VFSLeaf configTarget = (VFSLeaf) themeBase.resolve(CUSTOM_CONFIG_XML);
 		if (configTarget == null) {
 			configTarget = themeBase.createChildLeaf(CUSTOM_CONFIG_XML);
 		} 
 		
-		XStream xStream = XStreamHelper.createXStreamInstance();
-		xStream.toXML(customConfig, configTarget.getOutputStream(false));
+		xstream.toXML(customConfig, configTarget.getOutputStream(false));
 		
 		// compile the css-files
 		StringBuilder sbMain = new StringBuilder();
 		StringBuilder sbIFrame = new StringBuilder();
 		for (Entry<String, Map<String, Object>> iterator : customConfig.entrySet()) {
@@ -185,13 +188,12 @@ public class CustomConfigManager {
 		}
 		VFSLeaf configTarget = (VFSLeaf) themeBase.resolve(CUSTOM_CONFIG_XML);
 		if (configTarget == null) {
 			return defaultConf;
 		}
-		XStream xStream = XStreamHelper.createXStreamInstance();
 		try(InputStream in=configTarget.getInputStream()) {
-			return (Map<String, Map<String, Object>>) xStream.fromXML(in);
+			return (Map<String, Map<String, Object>>) xstream.fromXML(in);
 		} catch(IOException e) {
 			log.error("", e);
 			return defaultConf;
 		}
 	}
diff --git a/src/main/java/org/olat/course/nodes/ProjectBrokerCourseNode.java b/src/main/java/org/olat/course/nodes/ProjectBrokerCourseNode.java
index 78cf13eaa1..ce1cd031ad 100644
--- a/src/main/java/org/olat/course/nodes/ProjectBrokerCourseNode.java
+++ b/src/main/java/org/olat/course/nodes/ProjectBrokerCourseNode.java
@@ -428,10 +428,11 @@ public class ProjectBrokerCourseNode extends AbstractAccessableCourseNode {
 
 			// for the broker prefs
 			File projectBrokerFile = new File(folderNodeData, "projectbroker.xml");
 			if (projectBrokerFile.exists()) {
 				XStream xstream = XStreamHelper.createXStreamInstance();
+				XStreamHelper.allowDefaultPackage(xstream);
 				ProjectGroupManager projectGroupManager = CoreSpringFactory.getImpl(ProjectGroupManager.class);
 				ProjectBrokerConfig brokerConfig = (ProjectBrokerConfig) XStreamHelper.readObject(xstream,
 						projectBrokerFile);
 				if (brokerConfig != null && brokerConfig.getAccountGroupKey() != null) {
 					Long accountGroupKey = envMapper.toGroupKeyFromOriginalKey(brokerConfig.getAccountGroupKey());
@@ -454,10 +455,11 @@ public class ProjectBrokerCourseNode extends AbstractAccessableCourseNode {
 	}
 
 	private void importProject(File projectDir, File projectFile, ProjectBroker projectBroker, ICourse course,
 			CourseEnvironmentMapper envMapper) {
 		XStream xstream = XStreamHelper.createXStreamInstance();
+		XStreamHelper.allowDefaultPackage(xstream);
 		BusinessGroupService bgs = CoreSpringFactory.getImpl(BusinessGroupService.class);
 		CoursePropertyManager cpm = course.getCourseEnvironment().getCoursePropertyManager();
 		ProjectGroupManager projectGroupManager = CoreSpringFactory.getImpl(ProjectGroupManager.class);
 		ProjectBrokerManager projectBrokerManager = CoreSpringFactory.getImpl(ProjectBrokerManager.class);
 
@@ -534,10 +536,11 @@ public class ProjectBrokerCourseNode extends AbstractAccessableCourseNode {
 		CoursePropertyManager cpm = course.getCourseEnvironment().getCoursePropertyManager();
 		ProjectBrokerManager projectBrokerManager = CoreSpringFactory.getImpl(ProjectBrokerManager.class);
 		ProjectBroker pb = projectBrokerManager.getProjectBroker(projectBrokerManager.getProjectBrokerId(cpm, this));
 		ProjectGroupManager projectGroupManager = CoreSpringFactory.getImpl(ProjectGroupManager.class);
 		XStream xstream = XStreamHelper.createXStreamInstance();
+		XStreamHelper.allowDefaultPackage(xstream);
 
 		// folder for the pb node
 		File pbNodeFolder = new File(exportDirectory, getIdent());
 		pbNodeFolder.mkdirs();
 		// for the broker prefs
diff --git a/src/main/java/org/olat/course/nodes/gta/manager/GTAManagerImpl.java b/src/main/java/org/olat/course/nodes/gta/manager/GTAManagerImpl.java
index 84b0acba31..92e5c0b1ab 100644
--- a/src/main/java/org/olat/course/nodes/gta/manager/GTAManagerImpl.java
+++ b/src/main/java/org/olat/course/nodes/gta/manager/GTAManagerImpl.java
@@ -128,10 +128,13 @@ import com.thoughtworks.xstream.XStream;
 public class GTAManagerImpl implements GTAManager, DeletableGroupData {
 	
 	private static final Logger log = Tracing.createLoggerFor(GTAManagerImpl.class);
 	
 	private static final XStream taskDefinitionsXstream = XStreamHelper.createXStreamInstance();
+	static {
+		XStreamHelper.allowDefaultPackage(taskDefinitionsXstream);
+	}
 	
 	@Autowired
 	private DB dbInstance;
 	@Autowired
 	private GTAIdentityMarkDAO gtaMarkDao;
diff --git a/src/main/java/org/olat/group/manager/GroupXStream.java b/src/main/java/org/olat/group/manager/GroupXStream.java
index 333b4252f6..1470d6fbdc 100644
--- a/src/main/java/org/olat/group/manager/GroupXStream.java
+++ b/src/main/java/org/olat/group/manager/GroupXStream.java
@@ -44,12 +44,10 @@ public class GroupXStream {
 	
 	private final XStream xstream;
 	
 	public GroupXStream() {
 		xstream = XStreamHelper.createXStreamInstance();
-		
-		XStream.setupDefaultSecurity(xstream);
 		Class<?>[] types = new Class[] {
 				CollabTools.class, Group.class, Area.class, AreaCollection.class, GroupCollection.class,
 				OLATGroupExport.class, ArrayList.class
 		};
 		xstream.addPermission(new ExplicitTypePermission(types));
diff --git a/src/main/java/org/olat/ims/cp/CPManagerImpl.java b/src/main/java/org/olat/ims/cp/CPManagerImpl.java
index d96798c8cc..df681577d7 100644
--- a/src/main/java/org/olat/ims/cp/CPManagerImpl.java
+++ b/src/main/java/org/olat/ims/cp/CPManagerImpl.java
@@ -79,11 +79,10 @@ public class CPManagerImpl implements CPManager {
 
 	public static final String PACKAGE_CONFIG_FILE_NAME = "CPPackageConfig.xml";
 
 	private static XStream configXstream = XStreamHelper.createXStreamInstance();
 	static {
-		XStream.setupDefaultSecurity(configXstream);
 		Class<?>[] types = new Class[] {
 				CPPackageConfig.class, DeliveryOptions.class
 			};
 		configXstream.addPermission(new ExplicitTypePermission(types));
 		configXstream.alias("packageConfig", CPPackageConfig.class);
diff --git a/src/main/java/org/olat/ims/qti21/manager/QTI21ServiceImpl.java b/src/main/java/org/olat/ims/qti21/manager/QTI21ServiceImpl.java
index d9544a6aca..b4a9559f91 100644
--- a/src/main/java/org/olat/ims/qti21/manager/QTI21ServiceImpl.java
+++ b/src/main/java/org/olat/ims/qti21/manager/QTI21ServiceImpl.java
@@ -192,11 +192,10 @@ public class QTI21ServiceImpl implements QTI21Service, UserDataDeletable, Initia
 	
 	private static final Logger log = Tracing.createLoggerFor(QTI21ServiceImpl.class);
 	
 	private static XStream configXstream = XStreamHelper.createXStreamInstance();
 	static {
-		XStream.setupDefaultSecurity(configXstream);
 		Class<?>[] types = new Class[] {
 				QTI21DeliveryOptions.class, QTI21AssessmentResultsOptions.class
 		};
 		configXstream.addPermission(new ExplicitTypePermission(types));
 		
diff --git a/src/main/java/org/olat/instantMessaging/manager/ChatLogHelper.java b/src/main/java/org/olat/instantMessaging/manager/ChatLogHelper.java
index c4f445088f..6fd2bcc303 100644
--- a/src/main/java/org/olat/instantMessaging/manager/ChatLogHelper.java
+++ b/src/main/java/org/olat/instantMessaging/manager/ChatLogHelper.java
@@ -30,11 +30,10 @@ import java.util.List;
 import java.util.Locale;
 
 import javax.annotation.PostConstruct;
 
 import org.apache.logging.log4j.Logger;
-import org.apache.pdfbox.io.IOUtils;
 import org.olat.basesecurity.IdentityImpl;
 import org.olat.core.gui.media.MediaResource;
 import org.olat.core.gui.translator.Translator;
 import org.olat.core.id.OLATResourceable;
 import org.olat.core.logging.Tracing;
@@ -70,22 +69,20 @@ public class ChatLogHelper {
 	private InstantMessageDAO imDao;
 	
 	@PostConstruct 
 	public void init() {
 		logXStream = XStreamHelper.createXStreamInstance();
+		XStreamHelper.allowDefaultPackage(logXStream);
 		logXStream.alias("message", InstantMessageImpl.class);
 		logXStream.alias("identity", IdentityImpl.class);
 		logXStream.omitField(IdentityImpl.class, "user");
 	}
 	
 	public void archive(OLATResourceable ores, File exportDirectory) {
-		ObjectOutputStream out = null;
-		try {
-			File file = new File(exportDirectory, "chat.xml");
-			Writer writer = new FileWriter(file);
-			out = logXStream.createObjectOutputStream(writer);
-			
+		File file = new File(exportDirectory, "chat.xml");
+		try(Writer writer = new FileWriter(file);
+			ObjectOutputStream out = logXStream.createObjectOutputStream(writer)) {		
 			int counter = 0;
 			List<InstantMessage> messages;
 			do {
 				messages = imDao.getMessages(ores, null, counter, BATCH_SIZE);
 				for(InstantMessage message:messages) {
@@ -93,12 +90,10 @@ public class ChatLogHelper {
 				}
 				counter += messages.size();
 			} while(messages.size() == BATCH_SIZE);
 		} catch (IOException e) {
 			log.error("", e);
-		} finally {
-			IOUtils.closeQuietly(out);
 		}
 	}
 	
 	public MediaResource logMediaResource(OLATResourceable ores, Locale locale) {
 		Translator translator = Util.createPackageTranslator(ChatController.class, locale);
diff --git a/src/main/java/org/olat/modules/ceditor/ContentEditorXStream.java b/src/main/java/org/olat/modules/ceditor/ContentEditorXStream.java
index 20dfc6d431..dda6108af1 100644
--- a/src/main/java/org/olat/modules/ceditor/ContentEditorXStream.java
+++ b/src/main/java/org/olat/modules/ceditor/ContentEditorXStream.java
@@ -45,11 +45,10 @@ import com.thoughtworks.xstream.security.ExplicitTypePermission;
  */
 public class ContentEditorXStream {
 	
 	private static final XStream xstream = XStreamHelper.createXStreamInstance();
 	static {
-		XStream.setupDefaultSecurity(xstream);
 		Class<?>[] types = new Class[] {
 				ImageSettings.class, ImageHorizontalAlignment.class, ImageTitlePosition.class, ImageSize.class,
 				TextSettings.class, ContainerSettings.class, ContainerColumn.class,
 				TableContent.class, TableRow.class, TableColumn.class, TableSettings.class
 		};
diff --git a/src/main/java/org/olat/modules/curriculum/manager/CurriculumXStream.java b/src/main/java/org/olat/modules/curriculum/manager/CurriculumXStream.java
index 50cc86a463..48dd29bec9 100644
--- a/src/main/java/org/olat/modules/curriculum/manager/CurriculumXStream.java
+++ b/src/main/java/org/olat/modules/curriculum/manager/CurriculumXStream.java
@@ -61,11 +61,10 @@ public class CurriculumXStream {
 	
 	private static final Logger log = Tracing.createLoggerFor(BinderXStream.class);
 	private static final XStream xstream = XStreamHelper.createXStreamInstanceForDBObjects();
 	
 	static {
-		XStream.setupDefaultSecurity(xstream);
 		Class<?>[] types = new Class[] {
 				Curriculum.class, CurriculumImpl.class, CurriculumElement.class, CurriculumElementImpl.class,
 				CurriculumElementType.class, CurriculumElementTypeImpl.class, CurriculumElementTypeManagedFlag.class,
 				CurriculumLectures.class, CurriculumCalendars.class, CurriculumLearningProgress.class,
 				CurriculumElementToTaxonomyLevel.class, CurriculumElementToTaxonomyLevelImpl.class,
diff --git a/src/main/java/org/olat/modules/dcompensation/manager/DisadvantageCompensationAuditLogDAO.java b/src/main/java/org/olat/modules/dcompensation/manager/DisadvantageCompensationAuditLogDAO.java
index c5a7d3dac7..3d585a9e04 100644
--- a/src/main/java/org/olat/modules/dcompensation/manager/DisadvantageCompensationAuditLogDAO.java
+++ b/src/main/java/org/olat/modules/dcompensation/manager/DisadvantageCompensationAuditLogDAO.java
@@ -46,10 +46,11 @@ import com.thoughtworks.xstream.XStream;
 @Service
 public class DisadvantageCompensationAuditLogDAO {
 	
 	private static final XStream disadvantageCompensationXStream = XStreamHelper.createXStreamInstanceForDBObjects();
 	static {
+		XStreamHelper.allowDefaultPackage(disadvantageCompensationXStream);
 		disadvantageCompensationXStream.alias("disadvantageCompensation", DisadvantageCompensationImpl.class);
 		disadvantageCompensationXStream.ignoreUnknownElements();
 		
 		disadvantageCompensationXStream.omitField(DisadvantageCompensationImpl.class, "identity");
 		disadvantageCompensationXStream.omitField(DisadvantageCompensationImpl.class, "entry");
diff --git a/src/main/java/org/olat/modules/forms/model/xml/FormXStream.java b/src/main/java/org/olat/modules/forms/model/xml/FormXStream.java
index 5f775446d3..4b27b1c549 100644
--- a/src/main/java/org/olat/modules/forms/model/xml/FormXStream.java
+++ b/src/main/java/org/olat/modules/forms/model/xml/FormXStream.java
@@ -35,11 +35,10 @@ import com.thoughtworks.xstream.security.ExplicitTypePermission;
 public class FormXStream {
 	
 	private static final XStream xstream = XStreamHelper.createXStreamInstance();
 
 	static {
-		XStream.setupDefaultSecurity(xstream);
 		Class<?>[] types = new Class[] { Choice.class,
 				Choices.class, Container.class, Disclaimer.class, FileStoredData.class, FileUpload.class, Form.class,
 				HTMLParagraph.class, HTMLRaw.class, Image.class, ImageSettings.class, InformationType.class,
 				MultipleChoice.class, Rubric.class, ScaleType.class, SessionInformations.class, SingleChoice.class,
 				Slider.class, Spacer.class, StepLabel.class, Table.class, TextInput.class, Title.class };
diff --git a/src/main/java/org/olat/modules/lecture/manager/LectureBlockAuditLogDAO.java b/src/main/java/org/olat/modules/lecture/manager/LectureBlockAuditLogDAO.java
index f151132535..af1fcddb74 100644
--- a/src/main/java/org/olat/modules/lecture/manager/LectureBlockAuditLogDAO.java
+++ b/src/main/java/org/olat/modules/lecture/manager/LectureBlockAuditLogDAO.java
@@ -67,10 +67,11 @@ public class LectureBlockAuditLogDAO {
 	@Autowired
 	private DB dbInstance;
 	
 	private static final XStream lectureBlockXStream = XStreamHelper.createXStreamInstanceForDBObjects();
 	static {
+		XStreamHelper.allowDefaultPackage(lectureBlockXStream);
 		lectureBlockXStream.ignoreUnknownElements();
 		
 		lectureBlockXStream.alias("lectureBlock", LectureBlockImpl.class);
 		lectureBlockXStream.omitField(LectureBlockImpl.class, "entry");
 		lectureBlockXStream.omitField(LectureBlockImpl.class, "teacherGroup");
@@ -83,27 +84,30 @@ public class LectureBlockAuditLogDAO {
 		lectureBlockXStream.omitField(ReasonImpl.class, "description");
 	}
 
 	private static final XStream rollCallXStream = XStreamHelper.createXStreamInstanceForDBObjects();
 	static {
+		XStreamHelper.allowDefaultPackage(rollCallXStream);
 		rollCallXStream.alias("rollcall", LectureBlockRollCallImpl.class);
 		rollCallXStream.ignoreUnknownElements();
 		rollCallXStream.omitField(LectureBlockRollCallImpl.class, "identity");
 		rollCallXStream.omitField(LectureBlockRollCallImpl.class, "lectureBlock");
 		rollCallXStream.omitField(LectureBlockRollCallImpl.class, "lastModified");
 	}
 	
 	private static final XStream summaryXStream = XStreamHelper.createXStreamInstanceForDBObjects();
 	static {
+		XStreamHelper.allowDefaultPackage(summaryXStream);
 		summaryXStream.alias("summary", LectureParticipantSummaryImpl.class);
 		summaryXStream.ignoreUnknownElements();
 		summaryXStream.omitField(LectureParticipantSummaryImpl.class, "identity");
 		summaryXStream.omitField(LectureParticipantSummaryImpl.class, "entry");
 	}
 	
 	private static final XStream absenceNoticeXStream = XStreamHelper.createXStreamInstanceForDBObjects();
 	static {
+		XStreamHelper.allowDefaultPackage(absenceNoticeXStream);
 		absenceNoticeXStream.alias("absenceNotice", AbsenceNoticeImpl.class);
 		absenceNoticeXStream.ignoreUnknownElements();
 		absenceNoticeXStream.omitField(LectureParticipantSummaryImpl.class, "identity");
 		absenceNoticeXStream.omitField(LectureParticipantSummaryImpl.class, "entry");
 		absenceNoticeXStream.alias("identity", IdentityImpl.class);
@@ -111,10 +115,11 @@ public class LectureBlockAuditLogDAO {
 		absenceNoticeXStream.alias("absenceCategory", AbsenceCategoryImpl.class);
 	}
 	
 	private static final XStream absenceNoticeRelationsXStream = XStreamHelper.createXStreamInstanceForDBObjects();
 	static {
+		XStreamHelper.allowDefaultPackage(absenceNoticeRelationsXStream);
 		absenceNoticeRelationsXStream.alias("absenceNoticeRelations", AbsenceNoticeRelationsAuditImpl.class);
 		absenceNoticeRelationsXStream.ignoreUnknownElements();
 		
 		absenceNoticeRelationsXStream.omitField(AbsenceNoticeToLectureBlockImpl.class, "lectureToBlock");
 		absenceNoticeRelationsXStream.omitField(AbsenceNoticeToRepositoryEntry.class, "lectureToEntry");
diff --git a/src/main/java/org/olat/modules/openmeetings/manager/OpenMeetingsDAO.java b/src/main/java/org/olat/modules/openmeetings/manager/OpenMeetingsDAO.java
index a0538e7fdc..2dc2d3d342 100644
--- a/src/main/java/org/olat/modules/openmeetings/manager/OpenMeetingsDAO.java
+++ b/src/main/java/org/olat/modules/openmeetings/manager/OpenMeetingsDAO.java
@@ -52,10 +52,11 @@ public class OpenMeetingsDAO {
 	private XStream xStream;
 	
 	@PostConstruct
 	public void init() {
 		xStream = XStreamHelper.createXStreamInstance();
+		XStreamHelper.allowDefaultPackage(xStream);
 		xStream.alias("room", OpenMeetingsRoom.class);
 		xStream.omitField(OpenMeetingsRoom.class, "property");
 		xStream.omitField(OpenMeetingsRoom.class, "numOfUsers");
 	}
 
diff --git a/src/main/java/org/olat/modules/portfolio/handler/BinderXStream.java b/src/main/java/org/olat/modules/portfolio/handler/BinderXStream.java
index 3eec5e47d6..8e1d5fff70 100644
--- a/src/main/java/org/olat/modules/portfolio/handler/BinderXStream.java
+++ b/src/main/java/org/olat/modules/portfolio/handler/BinderXStream.java
@@ -42,10 +42,13 @@ import com.thoughtworks.xstream.XStream;
  */
 public class BinderXStream {
 	
 	private static final Logger log = Tracing.createLoggerFor(BinderXStream.class);
 	private static final XStream myStream = XStreamHelper.createXStreamInstanceForDBObjects();
+	static {
+		XStreamHelper.allowDefaultPackage(myStream);
+	}
 	
 	public static final Binder copy(Binder binder) {
 		String stringuified = myStream.toXML(binder);
 		return (Binder)myStream.fromXML(stringuified);
 	}
@@ -53,19 +56,19 @@ public class BinderXStream {
 	public static final Binder fromPath(Path path)
 	throws IOException {	
 		try(InputStream inStream = Files.newInputStream(path)) {
 			return (Binder)myStream.fromXML(inStream);
 		} catch (Exception e) {
-			log.error("Cannot import this map: " + path, e);
+			log.error("Cannot import this map: {}", path, e);
 			return null;
 		}
 	}
 	
 	public static final void toStream(Binder binder, ZipOutputStream zout)
 	throws IOException {
 		try(OutputStream out=new ShieldOutputStream(zout)) {
 			myStream.toXML(binder, out);
 		} catch (Exception e) {
-			log.error("Cannot export this map: " + binder, e);
+			log.error("Cannot export this map: {}", binder, e);
 		}
 	}
 }
diff --git a/src/main/java/org/olat/modules/portfolio/manager/MetadataXStream.java b/src/main/java/org/olat/modules/portfolio/manager/MetadataXStream.java
index cee668899d..4cfa12545c 100644
--- a/src/main/java/org/olat/modules/portfolio/manager/MetadataXStream.java
+++ b/src/main/java/org/olat/modules/portfolio/manager/MetadataXStream.java
@@ -32,10 +32,11 @@ import com.thoughtworks.xstream.XStream;
  */
 public class MetadataXStream {
 
 	private static final XStream xstream = XStreamHelper.createXStreamInstance();
 	static {
+		XStreamHelper.allowDefaultPackage(xstream);
 		xstream.alias("citation", org.olat.modules.portfolio.model.CitationXml.class);
 		xstream.aliasType("citation", org.olat.modules.portfolio.model.CitationXml.class);
 	}
 	
 	public static final XStream get() {
diff --git a/src/main/java/org/olat/modules/portfolio/manager/PortfolioServiceImpl.java b/src/main/java/org/olat/modules/portfolio/manager/PortfolioServiceImpl.java
index 7652de7a46..473498e619 100644
--- a/src/main/java/org/olat/modules/portfolio/manager/PortfolioServiceImpl.java
+++ b/src/main/java/org/olat/modules/portfolio/manager/PortfolioServiceImpl.java
@@ -143,11 +143,10 @@ public class PortfolioServiceImpl implements PortfolioService {
 	private static final Logger log = Tracing.createLoggerFor(PortfolioServiceImpl.class);
 	
 	private static XStream configXstream = XStreamHelper.createXStreamInstance();
 	static {
 		configXstream.alias("deliveryOptions", BinderDeliveryOptions.class);
-		XStream.setupDefaultSecurity(configXstream);
 		Class<?>[] types = new Class[] {
 				BinderDeliveryOptions.class
 		};
 		configXstream.addPermission(new ExplicitTypePermission(types));
 	}
diff --git a/src/main/java/org/olat/modules/qpool/manager/MetadataConverterHelper.java b/src/main/java/org/olat/modules/qpool/manager/MetadataConverterHelper.java
index 0e11b05df1..d6ca4f3161 100644
--- a/src/main/java/org/olat/modules/qpool/manager/MetadataConverterHelper.java
+++ b/src/main/java/org/olat/modules/qpool/manager/MetadataConverterHelper.java
@@ -41,11 +41,11 @@ import com.thoughtworks.xstream.XStream;
  */
 public class MetadataConverterHelper {
 	
 	private static XStream metadatXstream = XStreamHelper.createXStreamInstance();
 	static {
-		
+		XStreamHelper.allowDefaultPackage(metadatXstream);
 		metadatXstream.alias("item", QuestionItemImpl.class);
 		metadatXstream.alias("educationalContext", QEducationalContext.class);
 		metadatXstream.alias("itemType", QItemType.class);
 		metadatXstream.alias("license", QLicense.class);
 		metadatXstream.alias("taxonomyLevel", TaxonomyLevelImpl.class);
diff --git a/src/main/java/org/olat/modules/qpool/manager/QuestionItemAuditLogDAO.java b/src/main/java/org/olat/modules/qpool/manager/QuestionItemAuditLogDAO.java
index 09073b295a..a029f89c89 100644
--- a/src/main/java/org/olat/modules/qpool/manager/QuestionItemAuditLogDAO.java
+++ b/src/main/java/org/olat/modules/qpool/manager/QuestionItemAuditLogDAO.java
@@ -50,10 +50,11 @@ public class QuestionItemAuditLogDAO {
 	
 	private static final Logger log = Tracing.createLoggerFor(QuestionItemAuditLogDAO.class);
 	
 	private static final XStream qitemXStream = XStreamHelper.createXStreamInstanceForDBObjects();
 	static {
+		XStreamHelper.allowDefaultPackage(qitemXStream);
 		qitemXStream.alias("questionItem", QuestionItemImpl.class);
 		qitemXStream.alias("taxonomyLevel", TaxonomyLevelImpl.class);
 		qitemXStream.alias("educationalContext", QEducationalContext.class);
 		qitemXStream.alias("type", QItemType.class);
 		qitemXStream.alias("license", QLicense.class);
diff --git a/src/main/java/org/olat/modules/quality/analysis/manager/AnalysisPresentationXStream.java b/src/main/java/org/olat/modules/quality/analysis/manager/AnalysisPresentationXStream.java
index 1bb68209c8..982f6244b7 100644
--- a/src/main/java/org/olat/modules/quality/analysis/manager/AnalysisPresentationXStream.java
+++ b/src/main/java/org/olat/modules/quality/analysis/manager/AnalysisPresentationXStream.java
@@ -48,11 +48,10 @@ public class AnalysisPresentationXStream {
 	
 	private static final Logger log = Tracing.createLoggerFor(AnalysisPresentationXStream.class);
 	
 	private static final XStream xstream = XStreamHelper.createXStreamInstance();
 	static {
-		XStream.setupDefaultSecurity(xstream);
 		Class<?>[] types = new Class[] {
 				MultiGroupBy.class, GroupBy.class, AnalysisSearchParameter.class, QualityDataCollectionRefImpl.class,
 				RepositoryEntryRefImpl.class, IdentityRefImpl.class, OrganisationRefImpl.class, CurriculumRefImpl.class,
 				CurriculumElementRefImpl.class, CurriculumElementTypeRefImpl.class, TaxonomyLevelRefImpl.class };
 		xstream.addPermission(new ExplicitTypePermission(types));
diff --git a/src/main/java/org/olat/modules/reminder/manager/ReminderRulesXStream.java b/src/main/java/org/olat/modules/reminder/manager/ReminderRulesXStream.java
index 7222260345..c058e5919d 100644
--- a/src/main/java/org/olat/modules/reminder/manager/ReminderRulesXStream.java
+++ b/src/main/java/org/olat/modules/reminder/manager/ReminderRulesXStream.java
@@ -36,10 +36,11 @@ import com.thoughtworks.xstream.XStream;
  */
 public class ReminderRulesXStream {
 	
 	private static final XStream ruleXStream = XStreamHelper.createXStreamInstance();
 	static {
+		XStreamHelper.allowDefaultPackage(ruleXStream);
 		ruleXStream.alias("rule", org.olat.modules.reminder.model.ReminderRuleImpl.class);
 		ruleXStream.alias("rules", org.olat.modules.reminder.model.ReminderRules.class);
 		ruleXStream.alias("reminders", org.olat.modules.reminder.model.ImportExportReminders.class);
 		ruleXStream.alias("reminder", org.olat.modules.reminder.model.ImportExportReminder.class);
 	}
diff --git a/src/main/java/org/olat/modules/scorm/ScormMainManager.java b/src/main/java/org/olat/modules/scorm/ScormMainManager.java
index 28fd897399..c00533981f 100644
--- a/src/main/java/org/olat/modules/scorm/ScormMainManager.java
+++ b/src/main/java/org/olat/modules/scorm/ScormMainManager.java
@@ -54,11 +54,10 @@ public class ScormMainManager {
 	public static final String PACKAGE_CONFIG_FILE_NAME = "ScormPackageConfig.xml";
 	
 	private static final Logger log = Tracing.createLoggerFor(ScormMainManager.class);
 	private static XStream configXstream = XStreamHelper.createXStreamInstance();
 	static {
-		XStream.setupDefaultSecurity(configXstream);
 		Class<?>[] types = new Class[] {
 				ScormPackageConfig.class, DeliveryOptions.class
 			};
 		configXstream.addPermission(new ExplicitTypePermission(types));
 		configXstream.alias("packageConfig", ScormPackageConfig.class);
diff --git a/src/main/java/org/olat/modules/taxonomy/manager/TaxonomyCompetenceAuditLogDAO.java b/src/main/java/org/olat/modules/taxonomy/manager/TaxonomyCompetenceAuditLogDAO.java
index 1e0c1c651c..98ff42f0c8 100644
--- a/src/main/java/org/olat/modules/taxonomy/manager/TaxonomyCompetenceAuditLogDAO.java
+++ b/src/main/java/org/olat/modules/taxonomy/manager/TaxonomyCompetenceAuditLogDAO.java
@@ -44,10 +44,11 @@ import com.thoughtworks.xstream.XStream;
 @Service
 public class TaxonomyCompetenceAuditLogDAO {
 	
 	private static final XStream competenceXStream = XStreamHelper.createXStreamInstanceForDBObjects();
 	static {
+		XStreamHelper.allowDefaultPackage(competenceXStream);
 		competenceXStream.alias("competence", TaxonomyCompetenceImpl.class);
 		competenceXStream.alias("taxonomyLevel", TaxonomyLevelImpl.class);
 		competenceXStream.ignoreUnknownElements();
 		competenceXStream.omitField(TaxonomyCompetenceImpl.class, "identity");
 		competenceXStream.omitField(TaxonomyCompetenceImpl.class, "lastModified");
diff --git a/src/main/java/org/olat/modules/video/VideoManager.java b/src/main/java/org/olat/modules/video/VideoManager.java
index 236855fd15..ebb3a292fb 100644
--- a/src/main/java/org/olat/modules/video/VideoManager.java
+++ b/src/main/java/org/olat/modules/video/VideoManager.java
@@ -117,17 +117,10 @@ public interface VideoManager {
 	 * @return true if successfull or false
 	 * @throws IOException
 	 */
 	public boolean getFrame(VFSLeaf video, int frameNumber, VFSLeaf frame) throws IOException;
 
-	/**
-	 * Read the the metdatadata-xml in the videoresource folder
-	 * @param videoResource
-	 * @return
-	 */
-	public VideoMetadata readVideoMetadataFile(OLATResource videoResource);
-
 	/**
 	 * Trigger the transcoding process to generate versions of the video
 	 * 
 	 * @param video
 	 * @return
@@ -487,18 +480,10 @@ public interface VideoManager {
 	 * @param videoTranscoding
 	 * @return 
 	 */
 	public VideoTranscoding retranscodeFailedVideoTranscoding(VideoTranscoding videoTranscoding);
 
-	/**
-	 * Checks if is metadata file valid.
-	 *
-	 * @param videoResource
-	 * @return true, if is metadata file valid
-	 */
-	public boolean isMetadataFileValid(OLATResource videoResource);
-
 	/**
 	 * Checks for master container.
 	 *
 	 * @param videoResource
 	 * @return true, if master container can be resolved
diff --git a/src/main/java/org/olat/modules/video/manager/VideoManagerImpl.java b/src/main/java/org/olat/modules/video/manager/VideoManagerImpl.java
index a8f815463f..0684a45801 100644
--- a/src/main/java/org/olat/modules/video/manager/VideoManagerImpl.java
+++ b/src/main/java/org/olat/modules/video/manager/VideoManagerImpl.java
@@ -76,27 +76,24 @@ import org.olat.core.util.vfs.VFSContainer;
 import org.olat.core.util.vfs.VFSItem;
 import org.olat.core.util.vfs.VFSLeaf;
 import org.olat.core.util.vfs.VFSManager;
 import org.olat.core.util.vfs.VFSStatus;
 import org.olat.core.util.vfs.filters.VFSItemFilter;
-import org.olat.core.util.xml.XStreamHelper;
 import org.olat.fileresource.FileResourceManager;
 import org.olat.fileresource.types.ResourceEvaluation;
 import org.olat.modules.video.VideoFormat;
 import org.olat.modules.video.VideoManager;
 import org.olat.modules.video.VideoMarkers;
 import org.olat.modules.video.VideoMeta;
-import org.olat.modules.video.VideoMetadata;
 import org.olat.modules.video.VideoMetadataSearchParams;
 import org.olat.modules.video.VideoModule;
 import org.olat.modules.video.VideoQuestion;
 import org.olat.modules.video.VideoQuestions;
 import org.olat.modules.video.VideoTranscoding;
 import org.olat.modules.video.model.TranscodingCount;
 import org.olat.modules.video.model.VideoMarkersImpl;
 import org.olat.modules.video.model.VideoMetaImpl;
-import org.olat.modules.video.model.VideoMetadataImpl;
 import org.olat.modules.video.model.VideoQuestionsImpl;
 import org.olat.modules.video.spi.youtube.YoutubeProvider;
 import org.olat.modules.video.spi.youtube.model.YoutubeMetadata;
 import org.olat.modules.video.ui.VideoChapterTableRow;
 import org.olat.repository.RepositoryEntry;
@@ -394,38 +391,10 @@ public class VideoManagerImpl implements VideoManager {
 		}else{
 			return null;
 		}
 	}
 
-	@Override
-	public boolean isMetadataFileValid(OLATResource videoResource) {
-		VFSContainer baseContainer = FileResourceManager.getInstance().getFileResourceRootImpl(videoResource);
-		VFSLeaf metaDataFile = (VFSLeaf) baseContainer.resolve(FILENAME_VIDEO_METADATA_XML);
-		try {
-			VideoMetadata meta = (VideoMetadata) XStreamHelper.readObject(XStreamHelper.createXStreamInstance(), metaDataFile);
-			return meta != null;
-		} catch (Exception e) {
-			return false;
-		}
-	}
-
-	@Override
-	public VideoMetadata readVideoMetadataFile(OLATResource videoResource){
-		VFSContainer baseContainer= FileResourceManager.getInstance().getFileResourceRootImpl(videoResource);
-		VFSLeaf metaDataFile = (VFSLeaf) baseContainer.resolve(FILENAME_VIDEO_METADATA_XML);
-		try {
-			return (VideoMetadata) XStreamHelper.readObject(XStreamHelper.createXStreamInstance(), metaDataFile);
-		} catch (Exception e) {
-			log.error("Error while parsing XStream file for videoResource::{}", videoResource, e);
-			// return an empty, so at least it displays something and not an error
-			VideoMetadata meta =  new VideoMetadataImpl();
-			meta.setWidth(800);
-			meta.setHeight(600);
-			return meta;
-		}
-	}
-
 	@Override
 	public String toPodcastVideoUrl(String url) {
 		try {
 			int index = url.indexOf("/Pages/Viewer.aspx?");
 			if(index >= 0) {
diff --git a/src/main/java/org/olat/modules/video/manager/VideoMetaXStream.java b/src/main/java/org/olat/modules/video/manager/VideoMetaXStream.java
index 38b08563e7..980971fd7e 100644
--- a/src/main/java/org/olat/modules/video/manager/VideoMetaXStream.java
+++ b/src/main/java/org/olat/modules/video/manager/VideoMetaXStream.java
@@ -23,11 +23,13 @@ import java.io.InputStream;
 import java.io.OutputStream;
 
 import org.olat.core.util.vfs.VFSLeaf;
 import org.olat.core.util.xml.XStreamHelper;
 import org.olat.modules.video.VideoMeta;
+import org.olat.modules.video.VideoMetadata;
 import org.olat.modules.video.model.VideoMetaImpl;
+import org.olat.modules.video.model.VideoMetadataImpl;
 
 import com.thoughtworks.xstream.XStream;
 import com.thoughtworks.xstream.security.ExplicitTypePermission;
 
 /**
@@ -38,13 +40,13 @@ import com.thoughtworks.xstream.security.ExplicitTypePermission;
  */
 public class VideoMetaXStream {
 	
 	private static final XStream xstream = XStreamHelper.createXStreamInstance();
 	static {
-		XStream.setupDefaultSecurity(xstream);
 		Class<?>[] types = new Class[] {
-				VideoMeta.class, VideoMetaImpl.class
+				VideoMeta.class, VideoMetaImpl.class,
+				VideoMetadata.class, VideoMetadataImpl.class
 		};
 		xstream.addPermission(new ExplicitTypePermission(types));
 		xstream.ignoreUnknownElements();
 
 		xstream.alias("videoMeta", VideoMetaImpl.class);
diff --git a/src/main/java/org/olat/modules/video/manager/VideoXStream.java b/src/main/java/org/olat/modules/video/manager/VideoXStream.java
index ca88bbfa8d..bb98a89d93 100644
--- a/src/main/java/org/olat/modules/video/manager/VideoXStream.java
+++ b/src/main/java/org/olat/modules/video/manager/VideoXStream.java
@@ -45,11 +45,10 @@ import com.thoughtworks.xstream.security.ExplicitTypePermission;
  */
 public class VideoXStream {
 	
 	private static final XStream xstream = XStreamHelper.createXStreamInstance();
 	static {
-		XStream.setupDefaultSecurity(xstream);
 		Class<?>[] types = new Class[] {
 				VideoMarker.class, VideoMarkerImpl.class, VideoMarkers.class, VideoMarkersImpl.class,
 				VideoQuestion.class, VideoQuestionImpl.class, VideoQuestions.class, VideoQuestionsImpl.class
 		};
 		xstream.addPermission(new ExplicitTypePermission(types));
diff --git a/src/main/java/org/olat/modules/video/ui/VideoQualityTableFormController.java b/src/main/java/org/olat/modules/video/ui/VideoQualityTableFormController.java
index d6f168462b..019ee64cb8 100644
--- a/src/main/java/org/olat/modules/video/ui/VideoQualityTableFormController.java
+++ b/src/main/java/org/olat/modules/video/ui/VideoQualityTableFormController.java
@@ -202,11 +202,10 @@ public class VideoQualityTableFormController extends FormBasicController {
 			// Get the user object from the link to access version object
 			FormLink link = (FormLink) source;
 			VideoTranscoding videoTranscoding = (VideoTranscoding) link.getUserObject();
 			if (videoTranscoding == null) {
 				// this is the master video
-//				VideoMetadata videoMetadata = videoManager.readVideoMetadataFile(videoResource);
 				VideoMeta videoMetadata = videoManager.getVideoMetadata(videoResource);
 				previewVC.contextPut("width", videoMetadata.getWidth());
 				previewVC.contextPut("height", videoMetadata.getHeight());
 				previewVC.contextPut("filename", "video.mp4");
 				VFSContainer container = videoManager.getMasterContainer(videoResource);
diff --git a/src/main/java/org/olat/modules/vitero/manager/ViteroManager.java b/src/main/java/org/olat/modules/vitero/manager/ViteroManager.java
index 611fec5674..cad99fd432 100644
--- a/src/main/java/org/olat/modules/vitero/manager/ViteroManager.java
+++ b/src/main/java/org/olat/modules/vitero/manager/ViteroManager.java
@@ -184,10 +184,11 @@ public class ViteroManager implements UserDataDeletable {
 	}
 	
 	@PostConstruct
 	public void init() {
 		xStream = XStreamHelper.createXStreamInstance();
+		XStreamHelper.allowDefaultPackage(xStream);
 		xStream.alias("vBooking", ViteroBooking.class);
 		xStream.omitField(ViteroBooking.class, "property");
 	}
 	
 	public void setViteroModule(ViteroModule module) {
diff --git a/src/main/java/org/olat/modules/webFeed/manager/FeedFileStorge.java b/src/main/java/org/olat/modules/webFeed/manager/FeedFileStorge.java
index a4ce9f53b2..a4c0be9769 100644
--- a/src/main/java/org/olat/modules/webFeed/manager/FeedFileStorge.java
+++ b/src/main/java/org/olat/modules/webFeed/manager/FeedFileStorge.java
@@ -98,10 +98,11 @@ public class FeedFileStorge {
 	private ImageService imageHelper;
 
 	public FeedFileStorge() {
 		fileResourceManager = FileResourceManager.getInstance();
 		xstream = XStreamHelper.createXStreamInstance();
+		XStreamHelper.allowDefaultPackage(xstream);
 		xstream.alias("feed", FeedImpl.class);
 		xstream.aliasField("type", FeedImpl.class, "resourceableType");
 		xstream.omitField(FeedImpl.class, "id");
 		xstream.omitField(FeedImpl.class, "itemIds");
 		xstream.omitField(FeedImpl.class, "key");
diff --git a/src/main/java/org/olat/modules/webFeed/portfolio/BlogEntryMediaController.java b/src/main/java/org/olat/modules/webFeed/portfolio/BlogEntryMediaController.java
index 57efd0a9d7..40a6d789ba 100644
--- a/src/main/java/org/olat/modules/webFeed/portfolio/BlogEntryMediaController.java
+++ b/src/main/java/org/olat/modules/webFeed/portfolio/BlogEntryMediaController.java
@@ -58,10 +58,11 @@ import com.thoughtworks.xstream.XStream;
  */
 public class BlogEntryMediaController extends BasicController {
 	
 	private static final XStream xstream = XStreamHelper.createXStreamInstance();
 	static {
+		XStreamHelper.allowDefaultPackage(xstream);
 		xstream.alias("item", ItemImpl.class);
 	}
 	
 	@Autowired
 	private PortfolioFileStorage fileStorage;
diff --git a/src/main/java/org/olat/registration/RegistrationManager.java b/src/main/java/org/olat/registration/RegistrationManager.java
index e9b20898ef..93cee5ca9e 100644
--- a/src/main/java/org/olat/registration/RegistrationManager.java
+++ b/src/main/java/org/olat/registration/RegistrationManager.java
@@ -31,10 +31,11 @@ import java.io.IOException;
 import java.io.Writer;
 import java.util.ArrayList;
 import java.util.Calendar;
 import java.util.Collections;
 import java.util.Date;
+import java.util.HashMap;
 import java.util.List;
 import java.util.Locale;
 import java.util.Map;
 import java.util.UUID;
 
@@ -77,10 +78,11 @@ import org.olat.user.UserManager;
 import org.olat.user.manager.ManifestBuilder;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import com.thoughtworks.xstream.XStream;
+import com.thoughtworks.xstream.security.ExplicitTypePermission;
 
 /**
  * Description:
  * 
  * @author Sabina Jeger
@@ -90,11 +92,14 @@ public class RegistrationManager implements UserDataDeletable, UserDataExportabl
 	
 	private static final Logger log = Tracing.createLoggerFor(RegistrationManager.class);
 	
 	private static final XStream xmlXStream = XStreamHelper.createXStreamInstance();
 	static {
-		XStream.setupDefaultSecurity(xmlXStream);
+		Class<?>[] types = new Class[] {
+				HashMap.class
+			};
+		xmlXStream.addPermission(new ExplicitTypePermission(types));
 	}
 
 	private static final int VALID_UNTIL_30_DAYS = 30*24;
 
 	public static final String PW_CHANGE = "PW_CHANGE";
diff --git a/src/main/java/org/olat/repository/RepositoryEntryImportExport.java b/src/main/java/org/olat/repository/RepositoryEntryImportExport.java
index dacf8b033a..2b6febf3ad 100644
--- a/src/main/java/org/olat/repository/RepositoryEntryImportExport.java
+++ b/src/main/java/org/olat/repository/RepositoryEntryImportExport.java
@@ -86,10 +86,11 @@ public class RepositoryEntryImportExport {
 	private static final String PROP_DECRIPTION = "Description";
 	private static final String PROP_INITIALAUTHOR = "InitialAuthor";
 	
 	private static final XStream xstream = XStreamHelper.createXStreamInstance();
 	static {
+		XStreamHelper.allowDefaultPackage(xstream);
 		xstream.alias(PROP_ROOT, RepositoryEntryImport.class);
 		xstream.aliasField(PROP_SOFTKEY, RepositoryEntryImport.class, "softkey");
 		xstream.aliasField(PROP_RESOURCENAME, RepositoryEntryImport.class, "resourcename");
 		xstream.aliasField(PROP_DISPLAYNAME, RepositoryEntryImport.class, "displayname");
 		xstream.aliasField(PROP_DECRIPTION, RepositoryEntryImport.class, "description");
diff --git a/src/main/java/org/olat/restapi/repository/course/CourseWebService.java b/src/main/java/org/olat/restapi/repository/course/CourseWebService.java
index 1e6bb609eb..015e9084f0 100644
--- a/src/main/java/org/olat/restapi/repository/course/CourseWebService.java
+++ b/src/main/java/org/olat/restapi/repository/course/CourseWebService.java
@@ -129,11 +129,13 @@ import io.swagger.v3.oas.annotations.responses.ApiResponse;
  */
 public class CourseWebService {
 
 	private static final Logger log = Tracing.createLoggerFor(CourseWebService.class);
 	private static final XStream myXStream = XStreamHelper.createXStreamInstance();
-
+	static {
+		XStreamHelper.allowDefaultPackage(myXStream);
+	}
 	
 	public static final CacheControl cc = new CacheControl();
 	static {
 		cc.setMaxAge(-1);
 	}
@@ -693,10 +695,11 @@ public class CourseWebService {
 		
 		VFSItem runStructureItem = course.getCourseBaseContainer().resolve("runstructure.xml");
 		Date lastModified = new Date(runStructureItem.getLastModified());
 		Response.ResponseBuilder response = request.evaluatePreconditions(lastModified);
 		if(response == null) {
+			//TODO xstream
 			return Response.ok(myXStream.toXML(course.getRunStructure())).build();
 		}
 		return response.build();	
 	}
 	
diff --git a/src/main/java/org/olat/upgrade/OLATUpgrade_11_3_0.java b/src/main/java/org/olat/upgrade/OLATUpgrade_11_3_0.java
index b11dd50bce..6760681166 100644
--- a/src/main/java/org/olat/upgrade/OLATUpgrade_11_3_0.java
+++ b/src/main/java/org/olat/upgrade/OLATUpgrade_11_3_0.java
@@ -31,15 +31,18 @@ import org.olat.core.commons.services.image.Size;
 import org.olat.core.logging.Tracing;
 import org.olat.core.util.vfs.VFSContainer;
 import org.olat.core.util.vfs.VFSItem;
 import org.olat.core.util.vfs.VFSLeaf;
 import org.olat.core.util.vfs.VFSManager;
+import org.olat.core.util.xml.XStreamHelper;
+import org.olat.fileresource.FileResourceManager;
 import org.olat.fileresource.types.VideoFileResource;
 import org.olat.modules.video.VideoManager;
 import org.olat.modules.video.VideoMetadata;
 import org.olat.modules.video.manager.VideoManagerImpl;
 import org.olat.modules.video.model.VideoMetaImpl;
+import org.olat.modules.video.model.VideoMetadataImpl;
 import org.olat.repository.RepositoryEntry;
 import org.olat.resource.OLATResource;
 import org.springframework.beans.factory.annotation.Autowired;
 
 /**
@@ -49,10 +52,12 @@ import org.springframework.beans.factory.annotation.Autowired;
  *
  */
 public class OLATUpgrade_11_3_0 extends OLATUpgrade {
 
 	private static final Logger log = Tracing.createLoggerFor(OLATUpgrade_11_3_0.class);
+
+	private static final String FILENAME_VIDEO_METADATA_XML = "video_metadata.xml";
 	
 	private static final String VIDEO_XML = "VIDEO XML";
 	private static final String VERSION = "OLAT_11.3.0";
 	
 	@Autowired
@@ -118,12 +123,12 @@ public class OLATUpgrade_11_3_0 extends OLATUpgrade {
 				//log error but return true to proceed
 				return true;
 			}
 			// update track files on file system
 			VFSContainer masterContainer = videoManager.getMasterContainer(videoResource);
-			if (videoManager.isMetadataFileValid(videoResource)) {
-				VideoMetadata metafromXML = videoManager.readVideoMetadataFile(videoResource);
+			if (isMetadataFileValid(videoResource)) {
+				VideoMetadata metafromXML = readVideoMetadataFile(videoResource);
 				for (Entry<String, String> track : metafromXML.getAllTracks().entrySet()) {
 					VFSItem item = masterContainer.resolve(track.getValue());
 					if (item != null && item instanceof VFSLeaf) {
 						String path = VideoManagerImpl.TRACK + track.getKey() + VideoManagerImpl.DOT
 								+ FilenameUtils.getExtension(track.getValue());
@@ -163,6 +168,32 @@ public class OLATUpgrade_11_3_0 extends OLATUpgrade {
 		} catch (Exception e) {
 			log.error("Update Metadata failed",e);
 			return false;
 		}
 	}
+	
+	private boolean isMetadataFileValid(OLATResource videoResource) {
+		VFSContainer baseContainer = FileResourceManager.getInstance().getFileResourceRootImpl(videoResource);
+		VFSLeaf metaDataFile = (VFSLeaf) baseContainer.resolve(FILENAME_VIDEO_METADATA_XML);
+		try {
+			VideoMetadata meta = (VideoMetadata) XStreamHelper.readObject(XStreamHelper.createXStreamInstance(), metaDataFile);
+			return meta != null;
+		} catch (Exception e) {
+			return false;
+		}
+	}
+	
+	private VideoMetadata readVideoMetadataFile(OLATResource videoResource){
+		VFSContainer baseContainer= FileResourceManager.getInstance().getFileResourceRootImpl(videoResource);
+		VFSLeaf metaDataFile = (VFSLeaf) baseContainer.resolve(FILENAME_VIDEO_METADATA_XML);
+		try {
+			return (VideoMetadata) XStreamHelper.readObject(XStreamHelper.createXStreamInstance(), metaDataFile);
+		} catch (Exception e) {
+			log.error("Error while parsing XStream file for videoResource::{}", videoResource, e);
+			// return an empty, so at least it displays something and not an error
+			VideoMetadata meta =  new VideoMetadataImpl();
+			meta.setWidth(800);
+			meta.setHeight(600);
+			return meta;
+		}
+	}
 }
diff --git a/src/main/java/org/olat/upgrade/OLATUpgrade_12_3_0.java b/src/main/java/org/olat/upgrade/OLATUpgrade_12_3_0.java
index 827bee21ba..50835c450b 100644
--- a/src/main/java/org/olat/upgrade/OLATUpgrade_12_3_0.java
+++ b/src/main/java/org/olat/upgrade/OLATUpgrade_12_3_0.java
@@ -235,20 +235,21 @@ public class OLATUpgrade_12_3_0 extends OLATUpgrade {
 		try {
 			VFSLeaf leaf = qpoolService.getRootLeaf(item);
 			Item xmlItem = QTIEditHelper.readItemXml(leaf);
 			return xmlItem.getTitle();
 		} catch (NullPointerException e) {
-			log.warn("Cannot read files from dir: " + item.getDirectory());
+			log.warn("Cannot read files from dir: {}", item.getDirectory());
 		}
 		return null;
 	}
 	
 	private boolean migrateDialogElements(UpgradeManager upgradeManager, UpgradeHistoryData uhd) {
 		boolean allOk = true;
 		if (!uhd.getBooleanDataValue(MIGRATE_DIALOG)) {
 			try {
 				XStream xstream = XStreamHelper.createXStreamInstance();
+				XStreamHelper.allowDefaultPackage(xstream);
 				xstream.alias("org.olat.modules.dialog.DialogPropertyElements", DialogPropertyElements.class);
 				xstream.alias("org.olat.modules.dialog.DialogElement", DialogElement.class);
 
 				List<Property> properties = getProperties();
 				for(Property property:properties) {
diff --git a/src/main/java/org/olat/upgrade/OLATUpgrade_15_3_18.java b/src/main/java/org/olat/upgrade/OLATUpgrade_15_3_18.java
new file mode 100644
index 0000000000..7cc367f878
--- /dev/null
+++ b/src/main/java/org/olat/upgrade/OLATUpgrade_15_3_18.java
@@ -0,0 +1,137 @@
+/**
+ * <a href="http://www.openolat.org">
+ * OpenOLAT - Online Learning and Training</a><br>
+ * <p>
+ * Licensed under the Apache License, Version 2.0 (the "License"); <br>
+ * you may not use this file except in compliance with the License.<br>
+ * You may obtain a copy of the License at the
+ * <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache homepage</a>
+ * <p>
+ * Unless required by applicable law or agreed to in writing,<br>
+ * software distributed under the License is distributed on an "AS IS" BASIS, <br>
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br>
+ * See the License for the specific language governing permissions and <br>
+ * limitations under the License.
+ * <p>
+ * Initial code contributed and copyrighted by<br>
+ * frentix GmbH, http://www.frentix.com
+ * <p>
+ */
+package org.olat.upgrade;
+
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.List;
+
+import org.apache.logging.log4j.Logger;
+import org.olat.core.commons.modules.bc.FolderConfig;
+import org.olat.core.commons.persistence.DB;
+import org.olat.core.commons.persistence.QueryBuilder;
+import org.olat.core.logging.Tracing;
+import org.olat.core.util.xml.XStreamHelper;
+import org.olat.course.CourseXStreamAliases;
+import org.olat.course.PersistingCourseImpl;
+import org.springframework.beans.factory.annotation.Autowired;
+
+import com.thoughtworks.xstream.XStream;
+
+/**
+ * 
+ * Initial date: 18 juin 2021<br>
+ * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
+ *
+ */
+public class OLATUpgrade_15_3_18 extends OLATUpgrade {
+
+	private static final Logger log = Tracing.createLoggerFor(OLATUpgrade_15_3_18.class);
+
+	private static final String VERSION = "OLAT_15.3.18";
+	private static final String OPEN_COURSES = "OPEN COURSES";
+
+	@Autowired
+	private DB dbInstance;
+
+	public OLATUpgrade_15_3_18() {
+		super();
+	}
+	
+	@Override
+	public String getVersion() {
+		return VERSION;
+	}
+	
+	@Override
+	public boolean doPostSystemInitUpgrade(UpgradeManager upgradeManager) {
+		UpgradeHistoryData uhd = upgradeManager.getUpgradesHistory(VERSION);
+		if (uhd == null) {
+			// has never been called, initialize
+			uhd = new UpgradeHistoryData();
+		} else if (uhd.isInstallationComplete()) {
+			return false;
+		}
+		
+		boolean allOk = true;
+		allOk &= openCourse(upgradeManager, uhd);
+
+		uhd.setInstallationComplete(allOk);
+		upgradeManager.setUpgradesHistory(uhd, VERSION);
+		if(allOk) {
+			log.info(Tracing.M_AUDIT, "Finished OLATUpgrade_15_3_18 successfully!");
+		} else {
+			log.info(Tracing.M_AUDIT, "OLATUpgrade_15_3_18 not finished, try to restart OpenOlat!");
+		}
+		return allOk;
+	}
+	
+	private boolean openCourse(UpgradeManager upgradeManager, UpgradeHistoryData uhd) {
+		boolean allOk = true;
+		if (!uhd.getBooleanDataValue(OPEN_COURSES)) {
+			try {
+				Path coursesPath = Paths.get(FolderConfig.getCanonicalRoot(), PersistingCourseImpl.COURSE_ROOT_DIR_NAME);
+				List<Long> resourceIds = getCourseKeys();
+				for(Long resourceId:resourceIds)  {
+					checkCourse(coursesPath, resourceId);
+				}
+			} catch (Exception e) {
+				log.error("", e);
+				allOk = false;
+			}
+			
+			uhd.setBooleanDataValue(OPEN_COURSES, allOk);
+			upgradeManager.setUpgradesHistory(uhd, VERSION);
+		}
+		return allOk;
+	}
+	
+	private void checkCourse(Path coursesPath, Long resourceId) {
+		try {
+			Path coursePath =  coursesPath.resolve(resourceId.toString());
+			Path runStructure = coursePath.resolve(PersistingCourseImpl.RUNSTRUCTURE_XML);
+			Path editorTree = coursePath.resolve(PersistingCourseImpl.EDITORTREEMODEL_XML);
+
+			XStream xstream = CourseXStreamAliases.getReadCourseXStream();
+			if(Files.exists(runStructure)) {
+				XStreamHelper.readObject(xstream, runStructure.toFile());
+			}
+			if(Files.exists(editorTree)) {
+				XStreamHelper.readObject(xstream, editorTree.toFile());
+			}
+		} catch (Exception e) {
+			log.error("Error with course: {}", resourceId, e);
+		}
+	}
+	
+	private List<Long> getCourseKeys() {
+		QueryBuilder sb = new QueryBuilder();
+		sb.append("select ores.resId from repositoryentry v")
+		  .append(" inner join v.olatResource as ores")
+		  .and().append(" ores.resName = 'CourseModule'");
+		
+		List<Long> courseKeys = dbInstance.getCurrentEntityManager()
+				.createQuery(sb.toString(), Long.class)
+				.getResultList();
+		dbInstance.commitAndCloseSession();
+		return courseKeys;
+	}
+}
diff --git a/src/main/java/org/olat/upgrade/UpgradeManager.java b/src/main/java/org/olat/upgrade/UpgradeManager.java
index c3a4700221..6306911180 100644
--- a/src/main/java/org/olat/upgrade/UpgradeManager.java
+++ b/src/main/java/org/olat/upgrade/UpgradeManager.java
@@ -29,24 +29,25 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
 import javax.sql.DataSource;
 
+import org.apache.logging.log4j.Logger;
 import org.olat.core.commons.persistence.DBFactory;
 import org.olat.core.configuration.Initializable;
 import org.olat.core.gui.control.Event;
 import org.olat.core.logging.AssertException;
-import org.apache.logging.log4j.Logger;
 import org.olat.core.logging.StartupException;
 import org.olat.core.logging.Tracing;
 import org.olat.core.util.WebappHelper;
 import org.olat.core.util.event.FrameworkStartedEvent;
 import org.olat.core.util.event.FrameworkStartupEventChannel;
 import org.olat.core.util.event.GenericEventListener;
 import org.olat.core.util.xml.XStreamHelper;
 
 import com.thoughtworks.xstream.XStream;
+import com.thoughtworks.xstream.security.ExplicitTypePermission;
 
 /**
  * 
  * Description:<br>
  * Class to execute upgrade code during system startup. The idea is to
@@ -60,11 +61,17 @@ import com.thoughtworks.xstream.XStream;
  * @author guido
  */
 
 public abstract class UpgradeManager implements Initializable, GenericEventListener {
 	
-	protected final XStream upgradesXStream = XStreamHelper.createXStreamInstance();
+	protected static final XStream upgradesXStream = XStreamHelper.createXStreamInstance();
+	static {
+		Class<?>[] types = new Class[] {
+				UpgradeHistoryData.class
+			};
+		upgradesXStream.addPermission(new ExplicitTypePermission(types));
+	}
 	
 	private static final Logger log = Tracing.createLoggerFor(UpgradeManager.class);
 	
 	protected String INSTALLED_UPGRADES_XML = "installed_upgrades.xml";
 	public static final String SYSTEM_DIR = "system";
@@ -152,25 +159,29 @@ public abstract class UpgradeManager implements Initializable, GenericEventListe
 	}
 
 	/**
 	 * Load all persisted UpgradeHistoryData objects from the fileSystem
 	 */
-	@SuppressWarnings("unchecked")
 	protected void initUpgradesHistories() {
 		File upgradesDir = new File(WebappHelper.getUserDataRoot(), SYSTEM_DIR);
 		File upgradesHistoriesFile = new File(upgradesDir, INSTALLED_UPGRADES_XML);
 		if (upgradesHistoriesFile.exists()) {
-			upgradesHistories = (Map<String, UpgradeHistoryData>)upgradesXStream.fromXML(upgradesHistoriesFile);
+			upgradesHistories = read(upgradesHistoriesFile);
 		} else {
 			if (upgradesHistories == null) {
 				upgradesHistories = new HashMap<>();
 			}
 			needsUpgrade = false; //looks like a new install, no upgrade necessary
 			log.info("This looks like a new install or dropped data, will not do any upgrades.");
 			createUpgradeData();
 		}
 	}
+
+	@SuppressWarnings("unchecked")
+	protected static Map<String, UpgradeHistoryData> read(File file) {
+		return (Map<String, UpgradeHistoryData>)upgradesXStream.fromXML(file);
+	}
 	
 	/**
 	 * create fake upgrade data as this is a new installation
 	 */
 	protected void createUpgradeData() {
diff --git a/src/main/java/org/olat/upgrade/_spring/upgradeContext.xml b/src/main/java/org/olat/upgrade/_spring/upgradeContext.xml
index 865aa135f2..9020957d47 100644
--- a/src/main/java/org/olat/upgrade/_spring/upgradeContext.xml
+++ b/src/main/java/org/olat/upgrade/_spring/upgradeContext.xml
@@ -67,10 +67,11 @@
 				<bean id="upgrade_15_2_3" class="org.olat.upgrade.OLATUpgrade_15_2_2"/>
 				<bean id="upgrade_15_2_3_re" class="org.olat.upgrade.OLATUpgrade_15_2_3"/>
 				<bean id="upgrade_15_2_6" class="org.olat.upgrade.OLATUpgrade_15_2_6"/>
 				<bean id="upgrade_15_3_0" class="org.olat.upgrade.OLATUpgrade_15_3_0"/>
 				<bean id="upgrade_15_3_12" class="org.olat.upgrade.OLATUpgrade_15_3_12"/>
+				<bean id="upgrade_15_3_18" class="org.olat.upgrade.OLATUpgrade_15_3_18"/>
 			</list>
 		</property>
 	</bean>
 	
 </beans>
diff --git a/src/main/java/org/olat/user/manager/HomePageConfigManagerImpl.java b/src/main/java/org/olat/user/manager/HomePageConfigManagerImpl.java
index 189d3a6081..d96417ef27 100644
--- a/src/main/java/org/olat/user/manager/HomePageConfigManagerImpl.java
+++ b/src/main/java/org/olat/user/manager/HomePageConfigManagerImpl.java
@@ -52,11 +52,10 @@ public class HomePageConfigManagerImpl implements HomePageConfigManager {
 
 	private static final Logger log = Tracing.createLoggerFor(HomePageConfigManagerImpl.class);
 	
 	private static XStream homeConfigXStream = XStreamHelper.createXStreamInstance();
 	static {
-		XStream.setupDefaultSecurity(homeConfigXStream);
 		Class<?>[] types = new Class[] {
 				HomePageConfig.class
 		};
 		homeConfigXStream.addPermission(new ExplicitTypePermission(types));
 	}
@@ -83,12 +82,12 @@ public class HomePageConfigManagerImpl implements HomePageConfigManager {
 					if(retVal.resolveVersionIssues()) {
 						saveConfigTo(identity, retVal);
 					}
 				}
 			} catch (Exception e) {
-				log.error("Error while loading homepage config from path::" + configFile.getAbsolutePath() + ", fallback to default configuration",
-						e);
+				log.error("Error while loading homepage config from path::{}, fallback to default configuration",
+						configFile.getAbsolutePath(), e);
 				FileUtils.deleteFile(configFile);
 				retVal = loadAndSaveDefaults(identity);
 				// show message to user
 			}
 		}
diff --git a/src/main/java/org/olat/user/propertyhandlers/UserInterestsPropertyHandler.java b/src/main/java/org/olat/user/propertyhandlers/UserInterestsPropertyHandler.java
index 9a9e57634d..d5c698ea99 100644
--- a/src/main/java/org/olat/user/propertyhandlers/UserInterestsPropertyHandler.java
+++ b/src/main/java/org/olat/user/propertyhandlers/UserInterestsPropertyHandler.java
@@ -62,10 +62,11 @@ public class UserInterestsPropertyHandler extends AbstractUserPropertyHandler {
 
 	public static final String PACKAGE_UINTERESTS = "com.frentix.olat.user";
 	
 	private static final XStream interestsXStream = XStreamHelper.createXStreamInstance();
 	static {
+		XStreamHelper.allowDefaultPackage(interestsXStream);
 		interestsXStream.alias("category", UserInterestsCategory.class);
 		interestsXStream.alias("categories", List.class);
 		interestsXStream.addImplicitCollection(UserInterestsCategory.class, "subcategories");
 		interestsXStream.useAttributeFor(UserInterestsCategory.class, "id");
 	}
diff --git a/src/test/java/org/olat/core/commons/modules/glossary/GlossaryItemManagerTest.java b/src/test/java/org/olat/core/commons/modules/glossary/GlossaryItemManagerTest.java
new file mode 100644
index 0000000000..c00cd578eb
--- /dev/null
+++ b/src/test/java/org/olat/core/commons/modules/glossary/GlossaryItemManagerTest.java
@@ -0,0 +1,94 @@
+/**
+ * <a href="http://www.openolat.org">
+ * OpenOLAT - Online Learning and Training</a><br>
+ * <p>
+ * Licensed under the Apache License, Version 2.0 (the "License"); <br>
+ * you may not use this file except in compliance with the License.<br>
+ * You may obtain a copy of the License at the
+ * <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache homepage</a>
+ * <p>
+ * Unless required by applicable law or agreed to in writing,<br>
+ * software distributed under the License is distributed on an "AS IS" BASIS, <br>
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br>
+ * See the License for the specific language governing permissions and <br>
+ * limitations under the License.
+ * <p>
+ * Initial code contributed and copyrighted by<br>
+ * frentix GmbH, http://www.frentix.com
+ * <p>
+ */
+package org.olat.core.commons.modules.glossary;
+
+import java.io.File;
+import java.net.MalformedURLException;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.UUID;
+
+import org.apache.logging.log4j.Logger;
+import org.junit.Assert;
+import org.junit.Test;
+import org.olat.core.logging.Tracing;
+import org.olat.core.util.WebappHelper;
+import org.olat.core.util.vfs.VFSLeaf;
+import org.olat.test.OlatTestCase;
+import org.olat.test.VFSJavaIOFile;
+import org.springframework.beans.factory.annotation.Autowired;
+
+/**
+ * 
+ * Initial date: 21 juin 2021<br>
+ * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
+ *
+ */
+public class GlossaryItemManagerTest extends OlatTestCase {
+	
+	private static final Logger log = Tracing.createLoggerFor(GlossaryItemManagerTest.class);
+	
+	@Autowired
+	private GlossaryItemManager glossaryItemManager;
+	
+	@Test
+	public void loadGlossaryItemListFromFile() throws URISyntaxException {
+		URL glossaryUrl = GlossaryItemManagerTest.class.getResource("glossary.xml");
+		VFSLeaf glossaryLeaf = new VFSJavaIOFile(glossaryUrl.toURI());
+		List<GlossaryItem> items = glossaryItemManager.loadGlossaryItemListFromFile(glossaryLeaf);
+		Assert.assertNotNull(items);
+	}
+	
+	@Test
+	public void saveToFile() throws URISyntaxException, MalformedURLException{
+		GlossaryItem item = new GlossaryItem("Definition", "This is a definition.");
+		List<String> flexions = new ArrayList<>();
+		flexions.add("Add");
+		flexions.add("Flex");
+		item.setGlossFlexions(flexions);
+		List<URI> uris = new ArrayList<>();
+		uris.add(new URL("https://www.frentix.com").toURI());
+		item.setGlossLinks(uris);
+		List<String> synonyms = new ArrayList<>();
+		synonyms.add("Synonym");
+		item.setGlossSynonyms(synonyms);
+		
+		List<GlossaryItem> items = new ArrayList<>();
+		items.add(item);
+		
+		File glossaryFile = new File(WebappHelper.getTmpDir(), "glossary" + UUID.randomUUID() + ".xml");
+		glossaryFile.getParentFile().mkdirs();
+		VFSLeaf glossaryLeaf = new VFSJavaIOFile(glossaryFile);
+		glossaryItemManager.saveToFile(glossaryLeaf, items);
+		
+		// read the files
+		List<GlossaryItem> savedItems = glossaryItemManager.loadGlossaryItemListFromFile(glossaryLeaf);
+		Assert.assertNotNull(items);
+		Assert.assertEquals(1, savedItems.size());
+		Assert.assertEquals("Definition", savedItems.get(0).getGlossTerm());
+		
+		if(!glossaryFile.delete()) {
+			log.error("Cannot delete: {}", glossaryFile);
+		}
+	}
+}
diff --git a/src/test/java/org/olat/core/commons/modules/glossary/glossary.xml b/src/test/java/org/olat/core/commons/modules/glossary/glossary.xml
new file mode 100644
index 0000000000..6bf5ba5dce
--- /dev/null
+++ b/src/test/java/org/olat/core/commons/modules/glossary/glossary.xml
@@ -0,0 +1,86 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<list>
+  <glossentry>
+    <glossTerm>Forsythie</glossTerm>
+    <glossDef><![CDATA[<p>Die Forsythie, auch Garten-Forsythie, Goldflieder oder Goldglöckchen genannt, ist ein häufig gepflanzter Zierstrauch. Es handelt sich um eine Hybride zweier Arten aus der Gattung der Forsythien. Diese gehört zur Familie der Ölbaumgewächse.</p>]]></glossDef>
+    <glossSynonyms/>
+    <revHistory>
+      <revision>
+        <author>
+          <firstname>Jeremery</firstname>
+          <surname>Johns</surname>
+          <link>[Identity:66027520]</link>
+        </author>
+        <revisionflag>added</revisionflag>
+        <date>22 Mar 2021</date>
+      </revision>
+      <revision>
+        <author>
+          <firstname>Jeremery</firstname>
+          <surname>Johns</surname>
+          <link>[Identity:66027520]</link>
+        </author>
+        <revisionflag>added</revisionflag>
+        <date>22 Mar 2021</date>
+      </revision>
+      <revision>
+        <author>
+          <firstname>Jeremery</firstname>
+          <surname>Johns</surname>
+          <link>[Identity:66027520]</link>
+        </author>
+        <revisionflag>changed</revisionflag>
+        <date>22 Mar 2021</date>
+      </revision>
+    </revHistory>
+  </glossentry>
+  <glossentry>
+    <glossTerm>Kraut- und Braunfäule</glossTerm>
+    <glossDef><![CDATA[<p><img src="https://www.gesal.ch/.imaging/focus/dam/global/pests-diseases/Kraut-Braunfaeule_Tomate.jpg0/jcr:content.jpeg?x&#61;53&amp;y&#61;41&amp;lastModified&#61;Mon&#43;Dec&#43;02&#43;13%3A31%3A13&#43;CET&#43;2019&amp;width&#61;472&amp;height&#61;354" alt=" herb and brown rot - Kraut- und Braunfaeule" width="117" height="88" /></p>
+<p>Kraut- und Braunfäule ist eine Pilzerkrankung, die vor allem im Sommer bei feuchten Witterungsbedingungen auftritt. Bei Tomatenpflanzen erscheinen auf den Blättern graugrüne später braune Flecken, die sich schnell ausbreiten. Die Früchte zeigen schmutzig braune Flecken. Das Fruchtfleisch ist unter den Flecken verhärtet und fault. Die Dauerformen dieses Schadpilzes überdauern im Boden und befallen bei geeigneten Bedingungen (feuchtwarm über 15°C) ab Ende Juni zunächst die bodennahen Blätter.</p>]]></glossDef>
+    <glossSynonyms/>
+    <revHistory>
+      <revision>
+        <author>
+          <firstname>Jeremery</firstname>
+          <surname>Johns</surname>
+          <link>[Identity:66027520]</link>
+        </author>
+        <revisionflag>added</revisionflag>
+        <date>23 Mar 2021</date>
+      </revision>
+    </revHistory>
+  </glossentry>
+  <glossentry>
+    <glossTerm>Test</glossTerm>
+    <glossDef></glossDef>
+    <glossSynonyms/>
+    <revHistory>
+      <revision>
+        <author>
+          <firstname>Jeremery</firstname>
+          <surname>Johns</surname>
+          <link>[Identity:66027520]</link>
+        </author>
+        <revisionflag>added</revisionflag>
+        <date>23 Mar 2021</date>
+      </revision>
+    </revHistory>
+  </glossentry>
+  <glossentry>
+    <glossTerm>Tomatenhaus</glossTerm>
+    <glossDef><![CDATA[<p>Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.</p>]]></glossDef>
+    <glossSynonyms/>
+    <revHistory>
+      <revision>
+        <author>
+          <firstname>Jeremery</firstname>
+          <surname>Johns</surname>
+          <link>[Identity:66027520]</link>
+        </author>
+        <revisionflag>added</revisionflag>
+        <date>24 Mar 2021</date>
+      </revision>
+    </revHistory>
+  </glossentry>
+</list>
\ No newline at end of file
diff --git a/src/test/java/org/olat/core/commons/services/taskexecutor/manager/PersistentTaskDAOTest.java b/src/test/java/org/olat/core/commons/services/taskexecutor/manager/PersistentTaskDAOTest.java
index e26a504372..db75134d5a 100644
--- a/src/test/java/org/olat/core/commons/services/taskexecutor/manager/PersistentTaskDAOTest.java
+++ b/src/test/java/org/olat/core/commons/services/taskexecutor/manager/PersistentTaskDAOTest.java
@@ -34,11 +34,10 @@ import org.olat.core.commons.services.taskexecutor.Task;
 import org.olat.core.commons.services.taskexecutor.TaskStatus;
 import org.olat.core.commons.services.taskexecutor.model.PersistentTask;
 import org.olat.core.id.Identity;
 import org.olat.core.logging.Tracing;
 import org.olat.core.util.WebappHelper;
-import org.olat.core.util.xml.XStreamHelper;
 import org.olat.repository.RepositoryEntry;
 import org.olat.test.JunitTestHelper;
 import org.olat.test.OlatTestCase;
 import org.springframework.beans.factory.annotation.Autowired;
 
@@ -190,22 +189,22 @@ public class PersistentTaskDAOTest extends OlatTestCase  {
 		ptask.setLastModified(new Date());
 		ptask.setName(UUID.randomUUID().toString());
 		ptask.setStatus(TaskStatus.inWork);
 		ptask.setExecutorBootId(UUID.randomUUID().toString());
 		ptask.setExecutorNode(Integer.toString(WebappHelper.getNodeId()));
-		ptask.setTask(XStreamHelper.createXStreamInstance().toXML(new DummyTask()));
+		ptask.setTask(PersistentTaskDAO.toXML(new DummyTask()));
 		dbInstance.getCurrentEntityManager().persist(ptask);
 
 		//simulate a task from an other node
 		PersistentTask alienTask = new PersistentTask();
 		alienTask.setCreationDate(new Date());
 		alienTask.setLastModified(new Date());
 		alienTask.setName(UUID.randomUUID().toString());
 		alienTask.setStatus(TaskStatus.inWork);
 		alienTask.setExecutorBootId(UUID.randomUUID().toString());
 		alienTask.setExecutorNode(Integer.toString(WebappHelper.getNodeId() + 1));
-		alienTask.setTask(XStreamHelper.createXStreamInstance().toXML(new DummyTask()));
+		alienTask.setTask(PersistentTaskDAO.toXML(new DummyTask()));
 		dbInstance.getCurrentEntityManager().persist(alienTask);
 
 		dbInstance.commitAndCloseSession();
 
 		List<Long> todos = persistentTaskDao.tasksToDo();
diff --git a/src/test/java/org/olat/core/dispatcher/mapper/MapperDAOTest.java b/src/test/java/org/olat/core/dispatcher/mapper/MapperDAOTest.java
index 675ad74d65..8cb8fe9a39 100644
--- a/src/test/java/org/olat/core/dispatcher/mapper/MapperDAOTest.java
+++ b/src/test/java/org/olat/core/dispatcher/mapper/MapperDAOTest.java
@@ -25,20 +25,20 @@ import java.util.UUID;
 import org.junit.Assert;
 import org.junit.Test;
 import org.olat.core.commons.persistence.DB;
 import org.olat.core.dispatcher.mapper.manager.MapperDAO;
 import org.olat.core.dispatcher.mapper.model.PersistedMapper;
-import org.olat.core.util.xml.XStreamHelper;
 import org.olat.test.OlatTestCase;
 import org.springframework.beans.factory.annotation.Autowired;
 
 /**
  * 
  * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
  */
 public class MapperDAOTest extends OlatTestCase {
 	
+	
 	@Autowired
 	private MapperDAO mapperDao;
 	@Autowired
 	private DB dbInstance;
 	
@@ -90,11 +90,11 @@ public class MapperDAOTest extends OlatTestCase {
 		PersistedMapper loadedMapper = mapperDao.loadByMapperId(mapperId);
 		Assert.assertNotNull(loadedMapper);
 		Assert.assertEquals(pMapper, loadedMapper);
 		Assert.assertEquals(mapperId, loadedMapper.getMapperId());
 
-		Object objReloaded = XStreamHelper.createXStreamInstance().fromXML(pMapper.getXmlConfiguration());
+		Object objReloaded = MapperDAO.fromXML(pMapper.getXmlConfiguration());
 		Assert.assertTrue(objReloaded instanceof PersistentMapper);
 		PersistentMapper sMapperReloaded = (PersistentMapper)objReloaded;
 		Assert.assertEquals("mapper-to-persist", sMapperReloaded.getKey());
 	}
 	
@@ -109,11 +109,11 @@ public class MapperDAOTest extends OlatTestCase {
 		dbInstance.commitAndCloseSession();
 		
 		//load the mapper
 		PersistedMapper loadedMapper = mapperDao.loadByMapperId(mapperId);
 		Assert.assertNotNull(loadedMapper);
-		Object objReloaded = XStreamHelper.createXStreamInstance().fromXML(pMapper.getXmlConfiguration());
+		Object objReloaded = MapperDAO.fromXML(pMapper.getXmlConfiguration());
 		Assert.assertTrue(objReloaded instanceof PersistentMapper);
 		PersistentMapper sMapperReloaded = (PersistentMapper)objReloaded;
 		Assert.assertEquals("mapper-to-persist-bis", sMapperReloaded.getKey());
 		
 		//update
@@ -123,11 +123,11 @@ public class MapperDAOTest extends OlatTestCase {
 		dbInstance.commitAndCloseSession();
 		
 		//load the updated mapper
 		PersistedMapper loadedMapper2 = mapperDao.loadByMapperId(mapperId);
 		Assert.assertNotNull(loadedMapper2);
-		Object objReloaded2 = XStreamHelper.createXStreamInstance().fromXML(loadedMapper2.getXmlConfiguration());
+		Object objReloaded2 = MapperDAO.fromXML(loadedMapper2.getXmlConfiguration());
 		Assert.assertTrue(objReloaded2 instanceof PersistentMapper);
 		PersistentMapper sMapperReloaded2 = (PersistentMapper)objReloaded2;
 		Assert.assertEquals("mapper-to-update", sMapperReloaded2.getKey());
 	}
 	
@@ -142,11 +142,11 @@ public class MapperDAOTest extends OlatTestCase {
 		dbInstance.commitAndCloseSession();
 		
 		//load the mapper
 		PersistedMapper loadedMapper = mapperDao.loadByMapperId(mapperId);
 		Assert.assertNotNull(loadedMapper);
-		Object objReloaded = XStreamHelper.createXStreamInstance().fromXML(pMapper.getXmlConfiguration());
+		Object objReloaded = MapperDAO.fromXML(pMapper.getXmlConfiguration());
 		Assert.assertTrue(objReloaded instanceof PersistentMapper);
 		PersistentMapper sMapperReloaded = (PersistentMapper)objReloaded;
 		Assert.assertEquals("mapper-to-persist-until", sMapperReloaded.getKey());
 		Assert.assertNotNull(loadedMapper.getExpirationDate());
 		
@@ -157,11 +157,11 @@ public class MapperDAOTest extends OlatTestCase {
 		dbInstance.commitAndCloseSession();
 		
 		//load the updated mapper
 		PersistedMapper loadedMapper2 = mapperDao.loadByMapperId(mapperId);
 		Assert.assertNotNull(loadedMapper2);
-		Object objReloaded2 = XStreamHelper.createXStreamInstance().fromXML(loadedMapper2.getXmlConfiguration());
+		Object objReloaded2 = MapperDAO.fromXML(loadedMapper2.getXmlConfiguration());
 		Assert.assertTrue(objReloaded2 instanceof PersistentMapper);
 		PersistentMapper sMapperReloaded2 = (PersistentMapper)objReloaded2;
 		Assert.assertEquals("mapper-to-update-until", sMapperReloaded2.getKey());
 		Assert.assertNotNull(loadedMapper2.getExpirationDate());
 	}
diff --git a/src/test/java/org/olat/core/util/xml/XMLDigitalSignatureUtilTest.java b/src/test/java/org/olat/core/util/xml/XMLDigitalSignatureUtilTest.java
index 40e680b3d3..ff887ddd74 100644
--- a/src/test/java/org/olat/core/util/xml/XMLDigitalSignatureUtilTest.java
+++ b/src/test/java/org/olat/core/util/xml/XMLDigitalSignatureUtilTest.java
@@ -46,11 +46,11 @@ public class XMLDigitalSignatureUtilTest {
 	 * BouncyCastle is loaded and controller by PersistedProperties.
 	 */
 	@BeforeClass
 	public static void loadBouncyCastle() {
 		new PersistedProperties(event -> {
-			//
+			// do nothing
 		});
 	}
 	
 	/**
 	 * Preliminary test which read the certificate. The method is used in
diff --git a/src/test/java/org/olat/core/util/xml/XStreamHelperTest.java b/src/test/java/org/olat/core/util/xml/XStreamHelperTest.java
new file mode 100644
index 0000000000..6b5fa58a64
--- /dev/null
+++ b/src/test/java/org/olat/core/util/xml/XStreamHelperTest.java
@@ -0,0 +1,84 @@
+/**
+ * <a href="http://www.openolat.org">
+ * OpenOLAT - Online Learning and Training</a><br>
+ * <p>
+ * Licensed under the Apache License, Version 2.0 (the "License"); <br>
+ * you may not use this file except in compliance with the License.<br>
+ * You may obtain a copy of the License at the
+ * <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache homepage</a>
+ * <p>
+ * Unless required by applicable law or agreed to in writing,<br>
+ * software distributed under the License is distributed on an "AS IS" BASIS, <br>
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br>
+ * See the License for the specific language governing permissions and <br>
+ * limitations under the License.
+ * <p>
+ * Initial code contributed and copyrighted by<br>
+ * frentix GmbH, http://www.frentix.com
+ * <p>
+ */
+package org.olat.core.util.xml;
+
+import java.io.File;
+import java.net.URISyntaxException;
+import java.net.URL;
+
+import org.junit.Assert;
+import org.junit.Test;
+import org.olat.core.logging.OLATRuntimeException;
+
+import com.thoughtworks.xstream.converters.ConversionException;
+
+/**
+ * 
+ * Initial date: 18 juin 2021<br>
+ * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
+ *
+ */
+public class XStreamHelperTest {
+	
+	@Test
+	public void readXmlMapAllowed() throws URISyntaxException {
+		URL url = XStreamHelperTest.class.getResource("xstream_map_strings.xml");
+		File file = new File(url.toURI());
+		Object obj = XStreamHelper.createXStreamInstance().fromXML(file);
+		Assert.assertNotNull(obj);
+	}
+	
+	@Test
+	public void readXmlMapDbObjectsAllowed() throws URISyntaxException {
+		URL url = XStreamHelperTest.class.getResource("xstream_map_strings.xml");
+		File file = new File(url.toURI());
+		Object obj = XStreamHelper.createXStreamInstanceForDBObjects().fromXML(file);
+		Assert.assertNotNull(obj);
+	}
+	
+	@Test
+	public void readXmlMapUnconfiguredAllowed() throws URISyntaxException {
+		URL url = XStreamHelperTest.class.getResource("xstream_map_strings.xml");
+		File file = new File(url.toURI());
+		Object obj = XStreamHelper.readObject(file);
+		Assert.assertNotNull(obj);
+	}
+
+	@Test(expected = ConversionException.class)
+	public void readXmlMapNotAllowed() throws URISyntaxException {
+		URL url = XStreamHelperTest.class.getResource("xstream_map_alien.xml");
+		File file = new File(url.toURI());
+		XStreamHelper.createXStreamInstance().fromXML(file);
+	}
+	
+	@Test(expected = ConversionException.class)
+	public void readXmlMapDbObjectsNotAllowed() throws URISyntaxException {
+		URL url = XStreamHelperTest.class.getResource("xstream_map_alien.xml");
+		File file = new File(url.toURI());
+		XStreamHelper.createXStreamInstanceForDBObjects().fromXML(file);
+	}
+	
+	@Test(expected = OLATRuntimeException.class)
+	public void readXmlMapUnconfiguredNotAllowed() throws URISyntaxException {
+		URL url = XStreamHelperTest.class.getResource("xstream_map_alien.xml");
+		File file = new File(url.toURI());
+		XStreamHelper.readObject(file);
+	}
+}
diff --git a/src/test/java/org/olat/core/util/xml/xstream_map_alien.xml b/src/test/java/org/olat/core/util/xml/xstream_map_alien.xml
new file mode 100644
index 0000000000..922ad72d1b
--- /dev/null
+++ b/src/test/java/org/olat/core/util/xml/xstream_map_alien.xml
@@ -0,0 +1,8 @@
+<java.util.HashMap>
+  <entry>
+    <string>Hello</string>
+    <org.springframework.scheduling.quartz.JobDetailFactoryBean>
+    	<name>World</name>
+    </org.springframework.scheduling.quartz.JobDetailFactoryBean>
+  </entry>
+</java.util.HashMap>
\ No newline at end of file
diff --git a/src/test/java/org/olat/core/util/xml/xstream_map_strings.xml b/src/test/java/org/olat/core/util/xml/xstream_map_strings.xml
new file mode 100644
index 0000000000..ce5d6dc535
--- /dev/null
+++ b/src/test/java/org/olat/core/util/xml/xstream_map_strings.xml
@@ -0,0 +1,6 @@
+<java.util.HashMap>
+  <entry>
+    <string>Hello</string>
+    <string>World</string>
+  </entry>
+</java.util.HashMap>
\ No newline at end of file
diff --git a/src/test/java/org/olat/test/AllTestsJunit4.java b/src/test/java/org/olat/test/AllTestsJunit4.java
index 3a32591d7c..12bd35915a 100644
--- a/src/test/java/org/olat/test/AllTestsJunit4.java
+++ b/src/test/java/org/olat/test/AllTestsJunit4.java
@@ -79,10 +79,11 @@ import org.junit.runners.Suite;
 	org.olat.core.util.mail.manager.MailUserDataManagerTest.class,
 	org.olat.core.util.openxml.OpenXmlWorkbookTest.class,
 	org.olat.core.util.openxml.OpenXMLDocumentTest.class,
 	org.olat.core.util.pdf.PdfDocumentTest.class,
 	org.olat.core.util.xml.XMLDigitalSignatureUtilTest.class,
+	org.olat.core.util.xml.XStreamHelperTest.class,
 	org.olat.core.configuration.EDConfigurationTest.class,
 	org.olat.core.id.context.BusinessControlFactoryTest.class,
 	org.olat.core.id.context.HistoryManagerTest.class,
 	org.olat.core.id.IdentityEnvironmentTest.class,
 	org.olat.core.gui.render.VelocityTemplateTest.class,
@@ -98,10 +99,11 @@ import org.junit.runners.Suite;
 	org.olat.commons.calendar.manager.CalendarUserConfigurationDAOTest.class,
 	org.olat.commons.lifecycle.LifeCycleManagerTest.class,
 	org.olat.commons.coordinate.cluster.jms.JMSTest.class,
 	org.olat.commons.coordinate.cluster.lock.LockTest.class,
 	org.olat.commons.coordinate.CoordinatorTest.class,
+	org.olat.core.commons.modules.glossary.GlossaryItemManagerTest.class,
 	org.olat.core.commons.services.csp.manager.CSPManagerTest.class,
 	org.olat.core.commons.services.doceditor.manager.DocEditorIdentityServiceTest.class,
 	org.olat.core.commons.services.doceditor.manager.AccessDAOTest.class,
 	org.olat.core.commons.services.vfs.manager.VFSXStreamTest.class,
 	org.olat.core.commons.services.vfs.manager.VFSMetadataDAOTest.class,
@@ -573,10 +575,11 @@ import org.junit.runners.Suite;
 	 * you like to use them in olat3 you have to copy them to the test source tree of olat3
 	 * as well as the tests on hudson run agains a jar version of olatcore where the test source
 	 * tree is not available
 	 */
 	org.olat.core.commons.services.scheduler.SchedulerTest.class,
-	org.olat.upgrade.UpgradeDefinitionTest.class
+	org.olat.upgrade.UpgradeDefinitionTest.class,
+	org.olat.upgrade.UpgradeManagerTest.class
 })
 public class AllTestsJunit4 {
 	//
 }
diff --git a/src/test/java/org/olat/test/VFSJavaIOFile.java b/src/test/java/org/olat/test/VFSJavaIOFile.java
index 7f9482c8e4..1b8a1acfa5 100644
--- a/src/test/java/org/olat/test/VFSJavaIOFile.java
+++ b/src/test/java/org/olat/test/VFSJavaIOFile.java
@@ -20,16 +20,20 @@
 package org.olat.test;
 
 import java.io.File;
 import java.io.FileInputStream;
 import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
 import java.io.InputStream;
 import java.io.OutputStream;
+import java.net.URI;
 import java.nio.file.Path;
 
+import org.apache.logging.log4j.Logger;
 import org.olat.core.commons.modules.bc.FolderConfig;
 import org.olat.core.commons.services.vfs.VFSMetadata;
+import org.olat.core.logging.Tracing;
 import org.olat.core.util.vfs.JavaIOItem;
 import org.olat.core.util.vfs.VFSConstants;
 import org.olat.core.util.vfs.VFSContainer;
 import org.olat.core.util.vfs.VFSItem;
 import org.olat.core.util.vfs.VFSLeaf;
@@ -42,14 +46,20 @@ import org.olat.core.util.vfs.callbacks.VFSSecurityCallback;
  * 
  * 
  * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
  */
 public class VFSJavaIOFile implements VFSLeaf, JavaIOItem {
+	
+	private static final Logger log = Tracing.createLoggerFor(VFSJavaIOFile.class);
 
 	private final String name;
 	private final File file;
 	
+	public VFSJavaIOFile(URI uri) {
+		this(new File(uri));
+	}
+	
 	public VFSJavaIOFile(File file) {
 		this(file.getName(), file);
 	}
 	
 	public VFSJavaIOFile(String name, File file) {
@@ -187,8 +197,13 @@ public class VFSJavaIOFile implements VFSLeaf, JavaIOItem {
 		return file.length();
 	}
 
 	@Override
 	public OutputStream getOutputStream(boolean append) {
-		return null;
+		try {
+			return new FileOutputStream(file);
+		} catch (FileNotFoundException e) {
+			log.error("", e);
+			return null;
+		}
 	}
 }
\ No newline at end of file
diff --git a/src/test/java/org/olat/upgrade/UpgradeManagerTest.java b/src/test/java/org/olat/upgrade/UpgradeManagerTest.java
new file mode 100644
index 0000000000..7befb31ae9
--- /dev/null
+++ b/src/test/java/org/olat/upgrade/UpgradeManagerTest.java
@@ -0,0 +1,76 @@
+/**
+ * <a href="http://www.openolat.org">
+ * OpenOLAT - Online Learning and Training</a><br>
+ * <p>
+ * Licensed under the Apache License, Version 2.0 (the "License"); <br>
+ * you may not use this file except in compliance with the License.<br>
+ * You may obtain a copy of the License at the
+ * <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache homepage</a>
+ * <p>
+ * Unless required by applicable law or agreed to in writing,<br>
+ * software distributed under the License is distributed on an "AS IS" BASIS, <br>
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br>
+ * See the License for the specific language governing permissions and <br>
+ * limitations under the License.
+ * <p>
+ * Initial code contributed and copyrighted by<br>
+ * frentix GmbH, http://www.frentix.com
+ * <p>
+ */
+package org.olat.upgrade;
+
+import java.io.File;
+import java.net.URL;
+import java.util.Map;
+import java.util.UUID;
+
+import org.apache.logging.log4j.Logger;
+import org.junit.Assert;
+import org.junit.Test;
+import org.olat.core.logging.Tracing;
+import org.olat.core.util.WebappHelper;
+import org.olat.core.util.xml.XStreamHelper;
+
+/**
+ * 
+ * Initial date: 18 juin 2021<br>
+ * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
+ *
+ */
+public class UpgradeManagerTest {
+	
+	private static final Logger log = Tracing.createLoggerFor(UpgradeManagerTest.class);
+	
+	@Test
+	public void readUpgradesXml() throws Exception {
+		URL upgradeUrl = UpgradeManagerTest.class.getResource("installed_upgrades.xml");
+		File upgradeFile = new File(upgradeUrl.toURI());
+		Map<String, UpgradeHistoryData> upgrades = UpgradeManager.read(upgradeFile);
+		Assert.assertNotNull(upgrades);
+		Assert.assertFalse(upgrades.isEmpty());
+	}
+	
+	@Test
+	public void readDatabaseUpgradesXml() throws Exception {
+		URL upgradeUrl = UpgradeManagerTest.class.getResource("installed_database_upgrades.xml");
+		File upgradeFile = new File(upgradeUrl.toURI());
+		Map<String, UpgradeHistoryData> upgrades = UpgradeManager.read(upgradeFile);
+		Assert.assertNotNull(upgrades);
+		Assert.assertFalse(upgrades.isEmpty());
+	}
+	
+	@Test
+	public void writeDatabaseUpgradesXml() throws Exception {
+		URL upgradeUrl = UpgradeManagerTest.class.getResource("installed_database_upgrades.xml");
+		File upgradeFile = new File(upgradeUrl.toURI());
+		Map<String, UpgradeHistoryData> upgrades = UpgradeManager.read(upgradeFile);
+		Assert.assertNotNull(upgrades);
+		Assert.assertFalse(upgrades.isEmpty());
+
+		File savedFile = new File(WebappHelper.getTmpDir(), "upgradeDB-" + UUID.randomUUID() + ".xml");
+		XStreamHelper.writeObject(UpgradeManager.upgradesXStream, savedFile, upgrades);
+		if(!savedFile.delete()) {
+			log.error("Cannot delete: {}", savedFile);
+		}
+	}
+}
diff --git a/src/test/java/org/olat/upgrade/installed_database_upgrades.xml b/src/test/java/org/olat/upgrade/installed_database_upgrades.xml
new file mode 100644
index 0000000000..d904e110d7
--- /dev/null
+++ b/src/test/java/org/olat/upgrade/installed_database_upgrades.xml
@@ -0,0 +1,1179 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<map>
+  <entry>
+    <string>OLAT_11.0.6</string>
+    <org.olat.upgrade.UpgradeHistoryData>
+      <upgradeData>
+        <entry>
+          <string>Database update</string>
+          <boolean>true</boolean>
+        </entry>
+      </upgradeData>
+      <installationComplete>true</installationComplete>
+    </org.olat.upgrade.UpgradeHistoryData>
+  </entry>
+  <entry>
+    <string>OLAT_11.0.0</string>
+    <org.olat.upgrade.UpgradeHistoryData>
+      <upgradeData>
+        <entry>
+          <string>Database update</string>
+          <boolean>true</boolean>
+        </entry>
+      </upgradeData>
+      <installationComplete>true</installationComplete>
+    </org.olat.upgrade.UpgradeHistoryData>
+  </entry>
+  <entry>
+    <string>OLAT_15.3.1</string>
+    <org.olat.upgrade.UpgradeHistoryData>
+      <upgradeData>
+        <entry>
+          <string>Database update</string>
+          <boolean>true</boolean>
+        </entry>
+      </upgradeData>
+      <installationComplete>true</installationComplete>
+    </org.olat.upgrade.UpgradeHistoryData>
+  </entry>
+  <entry>
+    <string>OLAT_15.3.0</string>
+    <org.olat.upgrade.UpgradeHistoryData>
+      <upgradeData>
+        <entry>
+          <string>Database update</string>
+          <boolean>true</boolean>
+        </entry>
+      </upgradeData>
+      <installationComplete>true</installationComplete>
+    </org.olat.upgrade.UpgradeHistoryData>
+  </entry>
+  <entry>
+    <string>OLAT_15.3.2</string>
+    <org.olat.upgrade.UpgradeHistoryData>
+      <upgradeData>
+        <entry>
+          <string>Database update</string>
+          <boolean>true</boolean>
+        </entry>
+      </upgradeData>
+      <installationComplete>true</installationComplete>
+    </org.olat.upgrade.UpgradeHistoryData>
+  </entry>
+  <entry>
+    <string>OLAT_14.2.16</string>
+    <org.olat.upgrade.UpgradeHistoryData>
+      <upgradeData>
+        <entry>
+          <string>Database update</string>
+          <boolean>true</boolean>
+        </entry>
+      </upgradeData>
+      <installationComplete>true</installationComplete>
+    </org.olat.upgrade.UpgradeHistoryData>
+  </entry>
+  <entry>
+    <string>OLAT_14.2.17</string>
+    <org.olat.upgrade.UpgradeHistoryData>
+      <upgradeData>
+        <entry>
+          <string>Database update</string>
+          <boolean>true</boolean>
+        </entry>
+      </upgradeData>
+      <installationComplete>true</installationComplete>
+    </org.olat.upgrade.UpgradeHistoryData>
+  </entry>
+  <entry>
+    <string>OLAT_14.1.0</string>
+    <org.olat.upgrade.UpgradeHistoryData>
+      <upgradeData>
+        <entry>
+          <string>Database update</string>
+          <boolean>true</boolean>
+        </entry>
+      </upgradeData>
+      <installationComplete>true</installationComplete>
+    </org.olat.upgrade.UpgradeHistoryData>
+  </entry>
+  <entry>
+    <string>OLAT_9.2.0</string>
+    <org.olat.upgrade.UpgradeHistoryData>
+      <upgradeData>
+        <entry>
+          <string>Database update</string>
+          <boolean>true</boolean>
+        </entry>
+      </upgradeData>
+      <installationComplete>true</installationComplete>
+    </org.olat.upgrade.UpgradeHistoryData>
+  </entry>
+  <entry>
+    <string>OLAT_14.2.13</string>
+    <org.olat.upgrade.UpgradeHistoryData>
+      <upgradeData>
+        <entry>
+          <string>Database update</string>
+          <boolean>true</boolean>
+        </entry>
+      </upgradeData>
+      <installationComplete>true</installationComplete>
+    </org.olat.upgrade.UpgradeHistoryData>
+  </entry>
+  <entry>
+    <string>OLAT_14.1.3</string>
+    <org.olat.upgrade.UpgradeHistoryData>
+      <upgradeData>
+        <entry>
+          <string>Database update</string>
+          <boolean>true</boolean>
+        </entry>
+      </upgradeData>
+      <installationComplete>true</installationComplete>
+    </org.olat.upgrade.UpgradeHistoryData>
+  </entry>
+  <entry>
+    <string>OLAT_14.1.2</string>
+    <org.olat.upgrade.UpgradeHistoryData>
+      <upgradeData>
+        <entry>
+          <string>Database update</string>
+          <boolean>true</boolean>
+        </entry>
+      </upgradeData>
+      <installationComplete>true</installationComplete>
+    </org.olat.upgrade.UpgradeHistoryData>
+  </entry>
+  <entry>
+    <string>OLAT_14.1.6</string>
+    <org.olat.upgrade.UpgradeHistoryData>
+      <upgradeData>
+        <entry>
+          <string>Database update</string>
+          <boolean>true</boolean>
+        </entry>
+      </upgradeData>
+      <installationComplete>true</installationComplete>
+    </org.olat.upgrade.UpgradeHistoryData>
+  </entry>
+  <entry>
+    <string>OLAT_10.2.0</string>
+    <org.olat.upgrade.UpgradeHistoryData>
+      <upgradeData>
+        <entry>
+          <string>Database update</string>
+          <boolean>true</boolean>
+        </entry>
+      </upgradeData>
+      <installationComplete>true</installationComplete>
+    </org.olat.upgrade.UpgradeHistoryData>
+  </entry>
+  <entry>
+    <string>OLAT_13.3.0</string>
+    <org.olat.upgrade.UpgradeHistoryData>
+      <upgradeData>
+        <entry>
+          <string>Database update</string>
+          <boolean>true</boolean>
+        </entry>
+      </upgradeData>
+      <installationComplete>true</installationComplete>
+    </org.olat.upgrade.UpgradeHistoryData>
+  </entry>
+  <entry>
+    <string>OLAT_12.1.1</string>
+    <org.olat.upgrade.UpgradeHistoryData>
+      <upgradeData>
+        <entry>
+          <string>Database update</string>
+          <boolean>true</boolean>
+        </entry>
+      </upgradeData>
+      <installationComplete>true</installationComplete>
+    </org.olat.upgrade.UpgradeHistoryData>
+  </entry>
+  <entry>
+    <string>OLAT_12.1.0</string>
+    <org.olat.upgrade.UpgradeHistoryData>
+      <upgradeData>
+        <entry>
+          <string>Database update</string>
+          <boolean>true</boolean>
+        </entry>
+      </upgradeData>
+      <installationComplete>true</installationComplete>
+    </org.olat.upgrade.UpgradeHistoryData>
+  </entry>
+  <entry>
+    <string>OLAT_8.1.0</string>
+    <org.olat.upgrade.UpgradeHistoryData>
+      <upgradeData>
+        <entry>
+          <string>Database update</string>
+          <boolean>true</boolean>
+        </entry>
+      </upgradeData>
+      <installationComplete>true</installationComplete>
+    </org.olat.upgrade.UpgradeHistoryData>
+  </entry>
+  <entry>
+    <string>OLAT_12.5.0</string>
+    <org.olat.upgrade.UpgradeHistoryData>
+      <upgradeData>
+        <entry>
+          <string>Database update</string>
+          <boolean>true</boolean>
+        </entry>
+      </upgradeData>
+      <installationComplete>true</installationComplete>
+    </org.olat.upgrade.UpgradeHistoryData>
+  </entry>
+  <entry>
+    <string>OLAT_11.5.1</string>
+    <org.olat.upgrade.UpgradeHistoryData>
+      <upgradeData>
+        <entry>
+          <string>Database update</string>
+          <boolean>true</boolean>
+        </entry>
+      </upgradeData>
+      <installationComplete>true</installationComplete>
+    </org.olat.upgrade.UpgradeHistoryData>
+  </entry>
+  <entry>
+    <string>OLAT_11.5.0</string>
+    <org.olat.upgrade.UpgradeHistoryData>
+      <upgradeData>
+        <entry>
+          <string>Database update</string>
+          <boolean>true</boolean>
+        </entry>
+      </upgradeData>
+      <installationComplete>true</installationComplete>
+    </org.olat.upgrade.UpgradeHistoryData>
+  </entry>
+  <entry>
+    <string>OLAT_9.1.0</string>
+    <org.olat.upgrade.UpgradeHistoryData>
+      <upgradeData>
+        <entry>
+          <string>Database update</string>
+          <boolean>true</boolean>
+        </entry>
+      </upgradeData>
+      <installationComplete>true</installationComplete>
+    </org.olat.upgrade.UpgradeHistoryData>
+  </entry>
+  <entry>
+    <string>OLAT_15.2.0</string>
+    <org.olat.upgrade.UpgradeHistoryData>
+      <upgradeData>
+        <entry>
+          <string>Database update</string>
+          <boolean>true</boolean>
+        </entry>
+      </upgradeData>
+      <installationComplete>true</installationComplete>
+    </org.olat.upgrade.UpgradeHistoryData>
+  </entry>
+  <entry>
+    <string>OLAT_15.2.2</string>
+    <org.olat.upgrade.UpgradeHistoryData>
+      <upgradeData>
+        <entry>
+          <string>Database update</string>
+          <boolean>true</boolean>
+        </entry>
+      </upgradeData>
+      <installationComplete>true</installationComplete>
+    </org.olat.upgrade.UpgradeHistoryData>
+  </entry>
+  <entry>
+    <string>OLAT_15.2.1</string>
+    <org.olat.upgrade.UpgradeHistoryData>
+      <upgradeData>
+        <entry>
+          <string>Database update</string>
+          <boolean>true</boolean>
+        </entry>
+      </upgradeData>
+      <installationComplete>true</installationComplete>
+    </org.olat.upgrade.UpgradeHistoryData>
+  </entry>
+  <entry>
+    <string>OLAT_11.1.0</string>
+    <org.olat.upgrade.UpgradeHistoryData>
+      <upgradeData>
+        <entry>
+          <string>Database update</string>
+          <boolean>true</boolean>
+        </entry>
+      </upgradeData>
+      <installationComplete>true</installationComplete>
+    </org.olat.upgrade.UpgradeHistoryData>
+  </entry>
+  <entry>
+    <string>OLAT_15.2.3</string>
+    <org.olat.upgrade.UpgradeHistoryData>
+      <upgradeData>
+        <entry>
+          <string>Database update</string>
+          <boolean>true</boolean>
+        </entry>
+      </upgradeData>
+      <installationComplete>true</installationComplete>
+    </org.olat.upgrade.UpgradeHistoryData>
+  </entry>
+  <entry>
+    <string>OLAT_15.2.6</string>
+    <org.olat.upgrade.UpgradeHistoryData>
+      <upgradeData>
+        <entry>
+          <string>Database update</string>
+          <boolean>true</boolean>
+        </entry>
+      </upgradeData>
+      <installationComplete>true</installationComplete>
+    </org.olat.upgrade.UpgradeHistoryData>
+  </entry>
+  <entry>
+    <string>OLAT_11.1.2</string>
+    <org.olat.upgrade.UpgradeHistoryData>
+      <upgradeData>
+        <entry>
+          <string>Database update</string>
+          <boolean>true</boolean>
+        </entry>
+      </upgradeData>
+      <installationComplete>true</installationComplete>
+    </org.olat.upgrade.UpgradeHistoryData>
+  </entry>
+  <entry>
+    <string>OLAT_15.2.5</string>
+    <org.olat.upgrade.UpgradeHistoryData>
+      <upgradeData>
+        <entry>
+          <string>Database update</string>
+          <boolean>true</boolean>
+        </entry>
+      </upgradeData>
+      <installationComplete>true</installationComplete>
+    </org.olat.upgrade.UpgradeHistoryData>
+  </entry>
+  <entry>
+    <string>OLAT_10.3.3</string>
+    <org.olat.upgrade.UpgradeHistoryData>
+      <upgradeData>
+        <entry>
+          <string>Database update</string>
+          <boolean>true</boolean>
+        </entry>
+      </upgradeData>
+      <installationComplete>true</installationComplete>
+    </org.olat.upgrade.UpgradeHistoryData>
+  </entry>
+  <entry>
+    <string>OLAT_14.0.1</string>
+    <org.olat.upgrade.UpgradeHistoryData>
+      <upgradeData>
+        <entry>
+          <string>Database update</string>
+          <boolean>true</boolean>
+        </entry>
+      </upgradeData>
+      <installationComplete>true</installationComplete>
+    </org.olat.upgrade.UpgradeHistoryData>
+  </entry>
+  <entry>
+    <string>OLAT_14.0.0</string>
+    <org.olat.upgrade.UpgradeHistoryData>
+      <upgradeData>
+        <entry>
+          <string>Database update</string>
+          <boolean>true</boolean>
+        </entry>
+      </upgradeData>
+      <installationComplete>true</installationComplete>
+    </org.olat.upgrade.UpgradeHistoryData>
+  </entry>
+  <entry>
+    <string>OLAT_11.0.0-user</string>
+    <org.olat.upgrade.UpgradeHistoryData>
+      <upgradeData>
+        <entry>
+          <string>Database update</string>
+          <boolean>true</boolean>
+        </entry>
+      </upgradeData>
+      <installationComplete>true</installationComplete>
+    </org.olat.upgrade.UpgradeHistoryData>
+  </entry>
+  <entry>
+    <string>OLATfx_8.2.0</string>
+    <org.olat.upgrade.UpgradeHistoryData>
+      <upgradeData>
+        <entry>
+          <string>Database update</string>
+          <boolean>true</boolean>
+        </entry>
+      </upgradeData>
+      <installationComplete>true</installationComplete>
+    </org.olat.upgrade.UpgradeHistoryData>
+  </entry>
+  <entry>
+    <string>OLAT_10.3.1</string>
+    <org.olat.upgrade.UpgradeHistoryData>
+      <upgradeData>
+        <entry>
+          <string>Database update</string>
+          <boolean>true</boolean>
+        </entry>
+      </upgradeData>
+      <installationComplete>true</installationComplete>
+    </org.olat.upgrade.UpgradeHistoryData>
+  </entry>
+  <entry>
+    <string>OLAT_10.3.0</string>
+    <org.olat.upgrade.UpgradeHistoryData>
+      <upgradeData>
+        <entry>
+          <string>Database update</string>
+          <boolean>true</boolean>
+        </entry>
+      </upgradeData>
+      <installationComplete>true</installationComplete>
+    </org.olat.upgrade.UpgradeHistoryData>
+  </entry>
+  <entry>
+    <string>OLAT_13.2.0</string>
+    <org.olat.upgrade.UpgradeHistoryData>
+      <upgradeData>
+        <entry>
+          <string>Database update</string>
+          <boolean>true</boolean>
+        </entry>
+      </upgradeData>
+      <installationComplete>true</installationComplete>
+    </org.olat.upgrade.UpgradeHistoryData>
+  </entry>
+  <entry>
+    <string>OLAT_13.2.3</string>
+    <org.olat.upgrade.UpgradeHistoryData>
+      <upgradeData>
+        <entry>
+          <string>Database update</string>
+          <boolean>true</boolean>
+        </entry>
+      </upgradeData>
+      <installationComplete>true</installationComplete>
+    </org.olat.upgrade.UpgradeHistoryData>
+  </entry>
+  <entry>
+    <string>OLAT_12.0.1</string>
+    <org.olat.upgrade.UpgradeHistoryData>
+      <upgradeData>
+        <entry>
+          <string>Database update</string>
+          <boolean>true</boolean>
+        </entry>
+      </upgradeData>
+      <installationComplete>true</installationComplete>
+    </org.olat.upgrade.UpgradeHistoryData>
+  </entry>
+  <entry>
+    <string>OLAT_12.0.0</string>
+    <org.olat.upgrade.UpgradeHistoryData>
+      <upgradeData>
+        <entry>
+          <string>Database update</string>
+          <boolean>true</boolean>
+        </entry>
+      </upgradeData>
+      <installationComplete>true</installationComplete>
+    </org.olat.upgrade.UpgradeHistoryData>
+  </entry>
+  <entry>
+    <string>OLAT_15.3.8</string>
+    <org.olat.upgrade.UpgradeHistoryData>
+      <upgradeData>
+        <entry>
+          <string>Database update</string>
+          <boolean>true</boolean>
+        </entry>
+      </upgradeData>
+      <installationComplete>true</installationComplete>
+    </org.olat.upgrade.UpgradeHistoryData>
+  </entry>
+  <entry>
+    <string>OLAT_8.2.0</string>
+    <org.olat.upgrade.UpgradeHistoryData>
+      <upgradeData>
+        <entry>
+          <string>Database update</string>
+          <boolean>true</boolean>
+        </entry>
+      </upgradeData>
+      <installationComplete>true</installationComplete>
+    </org.olat.upgrade.UpgradeHistoryData>
+  </entry>
+  <entry>
+    <string>OLAT_12.4.1</string>
+    <org.olat.upgrade.UpgradeHistoryData>
+      <upgradeData>
+        <entry>
+          <string>Database update</string>
+          <boolean>true</boolean>
+        </entry>
+      </upgradeData>
+      <installationComplete>true</installationComplete>
+    </org.olat.upgrade.UpgradeHistoryData>
+  </entry>
+  <entry>
+    <string>OLAT_12.4.0</string>
+    <org.olat.upgrade.UpgradeHistoryData>
+      <upgradeData>
+        <entry>
+          <string>Database update</string>
+          <boolean>true</boolean>
+        </entry>
+      </upgradeData>
+      <installationComplete>true</installationComplete>
+    </org.olat.upgrade.UpgradeHistoryData>
+  </entry>
+  <entry>
+    <string>OLAT_9.0.0</string>
+    <org.olat.upgrade.UpgradeHistoryData>
+      <upgradeData>
+        <entry>
+          <string>Database update</string>
+          <boolean>true</boolean>
+        </entry>
+      </upgradeData>
+      <installationComplete>true</installationComplete>
+    </org.olat.upgrade.UpgradeHistoryData>
+  </entry>
+  <entry>
+    <string>OLAT_15.1.0</string>
+    <org.olat.upgrade.UpgradeHistoryData>
+      <upgradeData>
+        <entry>
+          <string>Database update</string>
+          <boolean>true</boolean>
+        </entry>
+      </upgradeData>
+      <installationComplete>true</installationComplete>
+    </org.olat.upgrade.UpgradeHistoryData>
+  </entry>
+  <entry>
+    <string>OLAT_11.2.0</string>
+    <org.olat.upgrade.UpgradeHistoryData>
+      <upgradeData>
+        <entry>
+          <string>Database update</string>
+          <boolean>true</boolean>
+        </entry>
+      </upgradeData>
+      <installationComplete>true</installationComplete>
+    </org.olat.upgrade.UpgradeHistoryData>
+  </entry>
+  <entry>
+    <string>OLAT_15.5.1</string>
+    <org.olat.upgrade.UpgradeHistoryData>
+      <upgradeData>
+        <entry>
+          <string>Database update</string>
+          <boolean>true</boolean>
+        </entry>
+      </upgradeData>
+      <installationComplete>true</installationComplete>
+    </org.olat.upgrade.UpgradeHistoryData>
+  </entry>
+  <entry>
+    <string>OLAT_15.5.0</string>
+    <org.olat.upgrade.UpgradeHistoryData>
+      <upgradeData>
+        <entry>
+          <string>Database update</string>
+          <boolean>true</boolean>
+        </entry>
+      </upgradeData>
+      <installationComplete>true</installationComplete>
+    </org.olat.upgrade.UpgradeHistoryData>
+  </entry>
+  <entry>
+    <string>OLAT_10.0.0</string>
+    <org.olat.upgrade.UpgradeHistoryData>
+      <upgradeData>
+        <entry>
+          <string>Database update</string>
+          <boolean>true</boolean>
+        </entry>
+      </upgradeData>
+      <installationComplete>true</installationComplete>
+    </org.olat.upgrade.UpgradeHistoryData>
+  </entry>
+  <entry>
+    <string>OLAT_9.4.0</string>
+    <org.olat.upgrade.UpgradeHistoryData>
+      <upgradeData>
+        <entry>
+          <string>Database update</string>
+          <boolean>true</boolean>
+        </entry>
+      </upgradeData>
+      <installationComplete>true</installationComplete>
+    </org.olat.upgrade.UpgradeHistoryData>
+  </entry>
+  <entry>
+    <string>OLATfx_8.1.0</string>
+    <org.olat.upgrade.UpgradeHistoryData>
+      <upgradeData>
+        <entry>
+          <string>Database update</string>
+          <boolean>true</boolean>
+        </entry>
+      </upgradeData>
+      <installationComplete>true</installationComplete>
+    </org.olat.upgrade.UpgradeHistoryData>
+  </entry>
+  <entry>
+    <string>OLAT_10.4.0</string>
+    <org.olat.upgrade.UpgradeHistoryData>
+      <upgradeData>
+        <entry>
+          <string>Database update</string>
+          <boolean>true</boolean>
+        </entry>
+      </upgradeData>
+      <installationComplete>true</installationComplete>
+    </org.olat.upgrade.UpgradeHistoryData>
+  </entry>
+  <entry>
+    <string>OLAT_13.1.1</string>
+    <org.olat.upgrade.UpgradeHistoryData>
+      <upgradeData>
+        <entry>
+          <string>Database update</string>
+          <boolean>true</boolean>
+        </entry>
+      </upgradeData>
+      <installationComplete>true</installationComplete>
+    </org.olat.upgrade.UpgradeHistoryData>
+  </entry>
+  <entry>
+    <string>OLAT_13.1.0</string>
+    <org.olat.upgrade.UpgradeHistoryData>
+      <upgradeData>
+        <entry>
+          <string>Database update</string>
+          <boolean>true</boolean>
+        </entry>
+      </upgradeData>
+      <installationComplete>true</installationComplete>
+    </org.olat.upgrade.UpgradeHistoryData>
+  </entry>
+  <entry>
+    <string>OLAT_7.1.2</string>
+    <org.olat.upgrade.UpgradeHistoryData>
+      <upgradeData>
+        <entry>
+          <string>Database update</string>
+          <boolean>true</boolean>
+        </entry>
+      </upgradeData>
+      <installationComplete>true</installationComplete>
+    </org.olat.upgrade.UpgradeHistoryData>
+  </entry>
+  <entry>
+    <string>OLAT_7.1.1</string>
+    <org.olat.upgrade.UpgradeHistoryData>
+      <upgradeData>
+        <entry>
+          <string>Database update</string>
+          <boolean>true</boolean>
+        </entry>
+      </upgradeData>
+      <installationComplete>true</installationComplete>
+    </org.olat.upgrade.UpgradeHistoryData>
+  </entry>
+  <entry>
+    <string>OLAT_7.1.0</string>
+    <org.olat.upgrade.UpgradeHistoryData>
+      <upgradeData>
+        <entry>
+          <string>Database update</string>
+          <boolean>true</boolean>
+        </entry>
+      </upgradeData>
+      <installationComplete>true</installationComplete>
+    </org.olat.upgrade.UpgradeHistoryData>
+  </entry>
+  <entry>
+    <string>OLAT_8.3.0</string>
+    <org.olat.upgrade.UpgradeHistoryData>
+      <upgradeData>
+        <entry>
+          <string>Database update</string>
+          <boolean>true</boolean>
+        </entry>
+      </upgradeData>
+      <installationComplete>true</installationComplete>
+    </org.olat.upgrade.UpgradeHistoryData>
+  </entry>
+  <entry>
+    <string>OLAT_13.0.0.beta1</string>
+    <org.olat.upgrade.UpgradeHistoryData>
+      <upgradeData>
+        <entry>
+          <string>Database update</string>
+          <boolean>true</boolean>
+        </entry>
+      </upgradeData>
+      <installationComplete>true</installationComplete>
+    </org.olat.upgrade.UpgradeHistoryData>
+  </entry>
+  <entry>
+    <string>OLAT_13.0.0.beta10</string>
+    <org.olat.upgrade.UpgradeHistoryData>
+      <upgradeData>
+        <entry>
+          <string>Database update</string>
+          <boolean>true</boolean>
+        </entry>
+      </upgradeData>
+      <installationComplete>true</installationComplete>
+    </org.olat.upgrade.UpgradeHistoryData>
+  </entry>
+  <entry>
+    <string>OLAT_13.0.0.beta4</string>
+    <org.olat.upgrade.UpgradeHistoryData>
+      <upgradeData>
+        <entry>
+          <string>Database update</string>
+          <boolean>true</boolean>
+        </entry>
+      </upgradeData>
+      <installationComplete>true</installationComplete>
+    </org.olat.upgrade.UpgradeHistoryData>
+  </entry>
+  <entry>
+    <string>OLAT_13.0.0.beta6</string>
+    <org.olat.upgrade.UpgradeHistoryData>
+      <upgradeData>
+        <entry>
+          <string>Database update</string>
+          <boolean>true</boolean>
+        </entry>
+      </upgradeData>
+      <installationComplete>true</installationComplete>
+    </org.olat.upgrade.UpgradeHistoryData>
+  </entry>
+  <entry>
+    <string>OLAT_15.pre.8</string>
+    <org.olat.upgrade.UpgradeHistoryData>
+      <upgradeData>
+        <entry>
+          <string>Database update</string>
+          <boolean>true</boolean>
+        </entry>
+      </upgradeData>
+      <installationComplete>true</installationComplete>
+    </org.olat.upgrade.UpgradeHistoryData>
+  </entry>
+  <entry>
+    <string>OLAT_13.0.0.beta8</string>
+    <org.olat.upgrade.UpgradeHistoryData>
+      <upgradeData>
+        <entry>
+          <string>Database update</string>
+          <boolean>true</boolean>
+        </entry>
+      </upgradeData>
+      <installationComplete>true</installationComplete>
+    </org.olat.upgrade.UpgradeHistoryData>
+  </entry>
+  <entry>
+    <string>OLAT_15.pre.6</string>
+    <org.olat.upgrade.UpgradeHistoryData>
+      <upgradeData>
+        <entry>
+          <string>Database update</string>
+          <boolean>true</boolean>
+        </entry>
+      </upgradeData>
+      <installationComplete>true</installationComplete>
+    </org.olat.upgrade.UpgradeHistoryData>
+  </entry>
+  <entry>
+    <string>OLAT_13.0.0.beta7</string>
+    <org.olat.upgrade.UpgradeHistoryData>
+      <upgradeData>
+        <entry>
+          <string>Database update</string>
+          <boolean>true</boolean>
+        </entry>
+      </upgradeData>
+      <installationComplete>true</installationComplete>
+    </org.olat.upgrade.UpgradeHistoryData>
+  </entry>
+  <entry>
+    <string>OLAT_15.pre.7</string>
+    <org.olat.upgrade.UpgradeHistoryData>
+      <upgradeData>
+        <entry>
+          <string>Database update</string>
+          <boolean>true</boolean>
+        </entry>
+      </upgradeData>
+      <installationComplete>true</installationComplete>
+    </org.olat.upgrade.UpgradeHistoryData>
+  </entry>
+  <entry>
+    <string>OLAT_12.3.0</string>
+    <org.olat.upgrade.UpgradeHistoryData>
+      <upgradeData>
+        <entry>
+          <string>Database update</string>
+          <boolean>true</boolean>
+        </entry>
+      </upgradeData>
+      <installationComplete>true</installationComplete>
+    </org.olat.upgrade.UpgradeHistoryData>
+  </entry>
+  <entry>
+    <string>OLAT_15.pre.4</string>
+    <org.olat.upgrade.UpgradeHistoryData>
+      <upgradeData>
+        <entry>
+          <string>Database update</string>
+          <boolean>true</boolean>
+        </entry>
+      </upgradeData>
+      <installationComplete>true</installationComplete>
+    </org.olat.upgrade.UpgradeHistoryData>
+  </entry>
+  <entry>
+    <string>OLAT_13.0.0.beta9</string>
+    <org.olat.upgrade.UpgradeHistoryData>
+      <upgradeData>
+        <entry>
+          <string>Database update</string>
+          <boolean>true</boolean>
+        </entry>
+      </upgradeData>
+      <installationComplete>true</installationComplete>
+    </org.olat.upgrade.UpgradeHistoryData>
+  </entry>
+  <entry>
+    <string>OLAT_15.pre.5</string>
+    <org.olat.upgrade.UpgradeHistoryData>
+      <upgradeData>
+        <entry>
+          <string>Database update</string>
+          <boolean>true</boolean>
+        </entry>
+      </upgradeData>
+      <installationComplete>true</installationComplete>
+    </org.olat.upgrade.UpgradeHistoryData>
+  </entry>
+  <entry>
+    <string>OLAT_15.2.7</string>
+    <org.olat.upgrade.UpgradeHistoryData>
+      <upgradeData>
+        <entry>
+          <string>Database update</string>
+          <boolean>true</boolean>
+        </entry>
+      </upgradeData>
+      <installationComplete>true</installationComplete>
+    </org.olat.upgrade.UpgradeHistoryData>
+  </entry>
+  <entry>
+    <string>OLAT_15.pre.3</string>
+    <org.olat.upgrade.UpgradeHistoryData>
+      <upgradeData>
+        <entry>
+          <string>Database update</string>
+          <boolean>true</boolean>
+        </entry>
+      </upgradeData>
+      <installationComplete>true</installationComplete>
+    </org.olat.upgrade.UpgradeHistoryData>
+  </entry>
+  <entry>
+    <string>OLAT_15.pre.0</string>
+    <org.olat.upgrade.UpgradeHistoryData>
+      <upgradeData>
+        <entry>
+          <string>Database update</string>
+          <boolean>true</boolean>
+        </entry>
+      </upgradeData>
+      <installationComplete>true</installationComplete>
+    </org.olat.upgrade.UpgradeHistoryData>
+  </entry>
+  <entry>
+    <string>OLAT_12.5.24</string>
+    <org.olat.upgrade.UpgradeHistoryData>
+      <upgradeData>
+        <entry>
+          <string>Database update</string>
+          <boolean>true</boolean>
+        </entry>
+      </upgradeData>
+      <installationComplete>true</installationComplete>
+    </org.olat.upgrade.UpgradeHistoryData>
+  </entry>
+  <entry>
+    <string>OLAT_15.0.2</string>
+    <org.olat.upgrade.UpgradeHistoryData>
+      <upgradeData>
+        <entry>
+          <string>Database update</string>
+          <boolean>true</boolean>
+        </entry>
+      </upgradeData>
+      <installationComplete>true</installationComplete>
+    </org.olat.upgrade.UpgradeHistoryData>
+  </entry>
+  <entry>
+    <string>OLAT_15.4.0</string>
+    <org.olat.upgrade.UpgradeHistoryData>
+      <upgradeData>
+        <entry>
+          <string>Database update</string>
+          <boolean>true</boolean>
+        </entry>
+      </upgradeData>
+      <installationComplete>true</installationComplete>
+    </org.olat.upgrade.UpgradeHistoryData>
+  </entry>
+  <entry>
+    <string>OLAT_15.0.3</string>
+    <org.olat.upgrade.UpgradeHistoryData>
+      <upgradeData>
+        <entry>
+          <string>Database update</string>
+          <boolean>true</boolean>
+        </entry>
+      </upgradeData>
+      <installationComplete>true</installationComplete>
+    </org.olat.upgrade.UpgradeHistoryData>
+  </entry>
+  <entry>
+    <string>OLAT_15.4.2</string>
+    <org.olat.upgrade.UpgradeHistoryData>
+      <upgradeData>
+        <entry>
+          <string>Database update</string>
+          <boolean>true</boolean>
+        </entry>
+      </upgradeData>
+      <installationComplete>true</installationComplete>
+    </org.olat.upgrade.UpgradeHistoryData>
+  </entry>
+  <entry>
+    <string>OLAT_15.4.1</string>
+    <org.olat.upgrade.UpgradeHistoryData>
+      <upgradeData>
+        <entry>
+          <string>Database update</string>
+          <boolean>true</boolean>
+        </entry>
+      </upgradeData>
+      <installationComplete>true</installationComplete>
+    </org.olat.upgrade.UpgradeHistoryData>
+  </entry>
+  <entry>
+    <string>OLAT_11.3.0</string>
+    <org.olat.upgrade.UpgradeHistoryData>
+      <upgradeData>
+        <entry>
+          <string>Database update</string>
+          <boolean>true</boolean>
+        </entry>
+      </upgradeData>
+      <installationComplete>true</installationComplete>
+    </org.olat.upgrade.UpgradeHistoryData>
+  </entry>
+  <entry>
+    <string>OLAT_10.5.8</string>
+    <org.olat.upgrade.UpgradeHistoryData>
+      <upgradeData>
+        <entry>
+          <string>Database update</string>
+          <boolean>true</boolean>
+        </entry>
+      </upgradeData>
+      <installationComplete>true</installationComplete>
+    </org.olat.upgrade.UpgradeHistoryData>
+  </entry>
+  <entry>
+    <string>OLAT_10.5.7</string>
+    <org.olat.upgrade.UpgradeHistoryData>
+      <upgradeData>
+        <entry>
+          <string>Database update</string>
+          <boolean>true</boolean>
+        </entry>
+      </upgradeData>
+      <installationComplete>true</installationComplete>
+    </org.olat.upgrade.UpgradeHistoryData>
+  </entry>
+  <entry>
+    <string>OLAT_10.5.5</string>
+    <org.olat.upgrade.UpgradeHistoryData>
+      <upgradeData>
+        <entry>
+          <string>Database update</string>
+          <boolean>true</boolean>
+        </entry>
+      </upgradeData>
+      <installationComplete>true</installationComplete>
+    </org.olat.upgrade.UpgradeHistoryData>
+  </entry>
+  <entry>
+    <string>OLAT_10.1.0</string>
+    <org.olat.upgrade.UpgradeHistoryData>
+      <upgradeData>
+        <entry>
+          <string>Database update</string>
+          <boolean>true</boolean>
+        </entry>
+      </upgradeData>
+      <installationComplete>true</installationComplete>
+    </org.olat.upgrade.UpgradeHistoryData>
+  </entry>
+  <entry>
+    <string>OLAT_14.2.0</string>
+    <org.olat.upgrade.UpgradeHistoryData>
+      <upgradeData>
+        <entry>
+          <string>Database update</string>
+          <boolean>true</boolean>
+        </entry>
+      </upgradeData>
+      <installationComplete>true</installationComplete>
+    </org.olat.upgrade.UpgradeHistoryData>
+  </entry>
+  <entry>
+    <string>OLAT_10.5.0</string>
+    <org.olat.upgrade.UpgradeHistoryData>
+      <upgradeData>
+        <entry>
+          <string>Database update</string>
+          <boolean>true</boolean>
+        </entry>
+      </upgradeData>
+      <installationComplete>true</installationComplete>
+    </org.olat.upgrade.UpgradeHistoryData>
+  </entry>
+  <entry>
+    <string>OLAT_14.2.7</string>
+    <org.olat.upgrade.UpgradeHistoryData>
+      <upgradeData>
+        <entry>
+          <string>Database update</string>
+          <boolean>true</boolean>
+        </entry>
+      </upgradeData>
+      <installationComplete>true</installationComplete>
+    </org.olat.upgrade.UpgradeHistoryData>
+  </entry>
+  <entry>
+    <string>OLAT_14.2.6</string>
+    <org.olat.upgrade.UpgradeHistoryData>
+      <upgradeData>
+        <entry>
+          <string>Database update</string>
+          <boolean>true</boolean>
+        </entry>
+      </upgradeData>
+      <installationComplete>true</installationComplete>
+    </org.olat.upgrade.UpgradeHistoryData>
+  </entry>
+  <entry>
+    <string>OLAT_14.2.5</string>
+    <org.olat.upgrade.UpgradeHistoryData>
+      <upgradeData>
+        <entry>
+          <string>Database update</string>
+          <boolean>true</boolean>
+        </entry>
+      </upgradeData>
+      <installationComplete>true</installationComplete>
+    </org.olat.upgrade.UpgradeHistoryData>
+  </entry>
+  <entry>
+    <string>OLAT_12.5.14</string>
+    <org.olat.upgrade.UpgradeHistoryData>
+      <upgradeData>
+        <entry>
+          <string>Database update</string>
+          <boolean>true</boolean>
+        </entry>
+      </upgradeData>
+      <installationComplete>true</installationComplete>
+    </org.olat.upgrade.UpgradeHistoryData>
+  </entry>
+  <entry>
+    <string>OLAT_13.0.0</string>
+    <org.olat.upgrade.UpgradeHistoryData>
+      <upgradeData>
+        <entry>
+          <string>Database update</string>
+          <boolean>true</boolean>
+        </entry>
+      </upgradeData>
+      <installationComplete>true</installationComplete>
+    </org.olat.upgrade.UpgradeHistoryData>
+  </entry>
+  <entry>
+    <string>OLAT_8.4.0</string>
+    <org.olat.upgrade.UpgradeHistoryData>
+      <upgradeData>
+        <entry>
+          <string>Database update</string>
+          <boolean>true</boolean>
+        </entry>
+      </upgradeData>
+      <installationComplete>true</installationComplete>
+    </org.olat.upgrade.UpgradeHistoryData>
+  </entry>
+  <entry>
+    <string>OLAT_12.2.0</string>
+    <org.olat.upgrade.UpgradeHistoryData>
+      <upgradeData>
+        <entry>
+          <string>Database update</string>
+          <boolean>true</boolean>
+        </entry>
+      </upgradeData>
+      <installationComplete>true</installationComplete>
+    </org.olat.upgrade.UpgradeHistoryData>
+  </entry>
+  <entry>
+    <string>OLAT_8.0.0</string>
+    <org.olat.upgrade.UpgradeHistoryData>
+      <upgradeData>
+        <entry>
+          <string>Database update</string>
+          <boolean>true</boolean>
+        </entry>
+      </upgradeData>
+      <installationComplete>true</installationComplete>
+    </org.olat.upgrade.UpgradeHistoryData>
+  </entry>
+  <entry>
+    <string>OLAT_8.0.2</string>
+    <org.olat.upgrade.UpgradeHistoryData>
+      <upgradeData>
+        <entry>
+          <string>Database update</string>
+          <boolean>true</boolean>
+        </entry>
+      </upgradeData>
+      <installationComplete>true</installationComplete>
+    </org.olat.upgrade.UpgradeHistoryData>
+  </entry>
+</map>
\ No newline at end of file
diff --git a/src/test/java/org/olat/upgrade/installed_upgrades.xml b/src/test/java/org/olat/upgrade/installed_upgrades.xml
new file mode 100644
index 0000000000..abb989214f
--- /dev/null
+++ b/src/test/java/org/olat/upgrade/installed_upgrades.xml
@@ -0,0 +1,954 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<map>
+  <entry>
+    <string>OLAT_11.0.6</string>
+    <org.olat.upgrade.UpgradeHistoryData>
+      <upgradeData>
+        <entry>
+          <string>RECERTIFICATION DATE</string>
+          <boolean>true</boolean>
+        </entry>
+      </upgradeData>
+      <installationComplete>true</installationComplete>
+    </org.olat.upgrade.UpgradeHistoryData>
+  </entry>
+  <entry>
+    <string>OLAT_9.0.0</string>
+    <org.olat.upgrade.UpgradeHistoryData>
+      <upgradeData>
+        <entry>
+          <string>Database update</string>
+          <boolean>true</boolean>
+        </entry>
+      </upgradeData>
+      <installationComplete>true</installationComplete>
+    </org.olat.upgrade.UpgradeHistoryData>
+  </entry>
+  <entry>
+    <string>OLAT_15.1.0</string>
+    <org.olat.upgrade.UpgradeHistoryData>
+      <upgradeData>
+        <entry>
+          <string>ADD BIG BLUE BUTTON URL TO CALENDAR</string>
+          <boolean>true</boolean>
+        </entry>
+        <entry>
+          <string>MIGRATE USER LIFECYCLE</string>
+          <boolean>true</boolean>
+        </entry>
+      </upgradeData>
+      <installationComplete>true</installationComplete>
+    </org.olat.upgrade.UpgradeHistoryData>
+  </entry>
+  <entry>
+    <string>OLAT_11.0.0</string>
+    <org.olat.upgrade.UpgradeHistoryData>
+      <upgradeData>
+        <entry>
+          <string>ASSESSMENT PROPERTY TABLE</string>
+          <boolean>true</boolean>
+        </entry>
+        <entry>
+          <string>EFFICIENCY STATEMENT TABLE</string>
+          <boolean>true</boolean>
+        </entry>
+        <entry>
+          <string>PORTFOLIO SETTINGS</string>
+          <boolean>true</boolean>
+        </entry>
+      </upgradeData>
+      <installationComplete>true</installationComplete>
+    </org.olat.upgrade.UpgradeHistoryData>
+  </entry>
+  <entry>
+    <string>OLAT_15.3.0</string>
+    <org.olat.upgrade.UpgradeHistoryData>
+      <upgradeData>
+        <entry>
+          <string>RESET FAILED THUMBNAILS</string>
+          <boolean>true</boolean>
+        </entry>
+        <entry>
+          <string>MIGRATE ONLYOFFICE CONFIGS</string>
+          <boolean>true</boolean>
+        </entry>
+      </upgradeData>
+      <installationComplete>true</installationComplete>
+    </org.olat.upgrade.UpgradeHistoryData>
+  </entry>
+  <entry>
+    <string>OLAT_11.0.2</string>
+    <org.olat.upgrade.UpgradeHistoryData>
+      <upgradeData>
+        <entry>
+          <string>PORTFOLIO v2 USER TOOL</string>
+          <boolean>true</boolean>
+        </entry>
+      </upgradeData>
+      <installationComplete>true</installationComplete>
+    </org.olat.upgrade.UpgradeHistoryData>
+  </entry>
+  <entry>
+    <string>OLAT_15.5.1</string>
+    <org.olat.upgrade.UpgradeHistoryData>
+      <upgradeData>
+        <entry>
+          <string>ADD MISSING ENTRY TECHNICAL TYPE</string>
+          <boolean>true</boolean>
+        </entry>
+        <entry>
+          <string>COPY PORTFOLIO PAGE EDITABLE FLAG</string>
+          <boolean>true</boolean>
+        </entry>
+      </upgradeData>
+      <installationComplete>true</installationComplete>
+    </org.olat.upgrade.UpgradeHistoryData>
+  </entry>
+  <entry>
+    <string>OLAT_11.4.0</string>
+    <org.olat.upgrade.UpgradeHistoryData>
+      <upgradeData>
+        <entry>
+          <string>GROUP INFO MESSAGE</string>
+          <boolean>true</boolean>
+        </entry>
+      </upgradeData>
+      <installationComplete>true</installationComplete>
+    </org.olat.upgrade.UpgradeHistoryData>
+  </entry>
+  <entry>
+    <string>OLAT_11.2.1</string>
+    <org.olat.upgrade.UpgradeHistoryData>
+      <upgradeData>
+        <entry>
+          <string>STATUS OLD TASK ELEMENT</string>
+          <boolean>true</boolean>
+        </entry>
+      </upgradeData>
+      <installationComplete>true</installationComplete>
+    </org.olat.upgrade.UpgradeHistoryData>
+  </entry>
+  <entry>
+    <string>OLAT_14.1.0</string>
+    <org.olat.upgrade.UpgradeHistoryData>
+      <upgradeData>
+        <entry>
+          <string>SET MS ORES TYPE NAME</string>
+          <boolean>true</boolean>
+        </entry>
+      </upgradeData>
+      <installationComplete>true</installationComplete>
+    </org.olat.upgrade.UpgradeHistoryData>
+  </entry>
+  <entry>
+    <string>OLAT_15.2.8.fx</string>
+    <org.olat.upgrade.UpgradeHistoryData>
+      <upgradeData>
+        <entry>
+          <string>RESET FAILED PDF THUMBNAILS</string>
+          <boolean>true</boolean>
+        </entry>
+      </upgradeData>
+      <installationComplete>true</installationComplete>
+    </org.olat.upgrade.UpgradeHistoryData>
+  </entry>
+  <entry>
+    <string>OLAT_10.0.0</string>
+    <org.olat.upgrade.UpgradeHistoryData>
+      <upgradeData>
+        <entry>
+          <string>Database update</string>
+          <boolean>true</boolean>
+        </entry>
+      </upgradeData>
+      <installationComplete>true</installationComplete>
+    </org.olat.upgrade.UpgradeHistoryData>
+  </entry>
+  <entry>
+    <string>OLAT_9.4.0</string>
+    <org.olat.upgrade.UpgradeHistoryData>
+      <upgradeData>
+        <entry>
+          <string>Database update</string>
+          <boolean>true</boolean>
+        </entry>
+      </upgradeData>
+      <installationComplete>true</installationComplete>
+    </org.olat.upgrade.UpgradeHistoryData>
+  </entry>
+  <entry>
+    <string>OLAT_14.2.10</string>
+    <org.olat.upgrade.UpgradeHistoryData>
+      <upgradeData>
+        <entry>
+          <string>VIDEO VFS METADATA</string>
+          <boolean>true</boolean>
+        </entry>
+      </upgradeData>
+      <installationComplete>true</installationComplete>
+    </org.olat.upgrade.UpgradeHistoryData>
+  </entry>
+  <entry>
+    <string>OLAT_10.4.0</string>
+    <org.olat.upgrade.UpgradeHistoryData>
+      <upgradeData>
+        <entry>
+          <string>Calendar user configurations</string>
+          <boolean>true</boolean>
+        </entry>
+        <entry>
+          <string>Imported calendars</string>
+          <boolean>true</boolean>
+        </entry>
+        <entry>
+          <string>Calendar tokens</string>
+          <boolean>true</boolean>
+        </entry>
+        <entry>
+          <string>Imported calendars url</string>
+          <boolean>true</boolean>
+        </entry>
+      </upgradeData>
+      <installationComplete>true</installationComplete>
+    </org.olat.upgrade.UpgradeHistoryData>
+  </entry>
+  <entry>
+    <string>OLAT_10.0.3</string>
+    <org.olat.upgrade.UpgradeHistoryData>
+      <upgradeData>
+        <entry>
+          <string>Database update</string>
+          <boolean>true</boolean>
+        </entry>
+      </upgradeData>
+      <installationComplete>true</installationComplete>
+    </org.olat.upgrade.UpgradeHistoryData>
+  </entry>
+  <entry>
+    <string>OLAT_13.1.0</string>
+    <org.olat.upgrade.UpgradeHistoryData>
+      <upgradeData>
+        <entry>
+          <string>CLEAN META PATH ERRORS</string>
+          <boolean>true</boolean>
+        </entry>
+        <entry>
+          <string>CLEAN META FORUM</string>
+          <boolean>true</boolean>
+        </entry>
+        <entry>
+          <string>CLEAN META HOMEPAGES</string>
+          <boolean>true</boolean>
+        </entry>
+        <entry>
+          <string>CLEAN META TMP</string>
+          <boolean>true</boolean>
+        </entry>
+        <entry>
+          <string>CLEAN META RESOURCES</string>
+          <boolean>true</boolean>
+        </entry>
+        <entry>
+          <string>CLEAN META CTS</string>
+          <boolean>true</boolean>
+        </entry>
+        <entry>
+          <string>CLEAN META COURSES</string>
+          <boolean>true</boolean>
+        </entry>
+        <entry>
+          <string>CLEAN META HOMES</string>
+          <boolean>true</boolean>
+        </entry>
+      </upgradeData>
+      <installationComplete>true</installationComplete>
+    </org.olat.upgrade.UpgradeHistoryData>
+  </entry>
+  <entry>
+    <string>OLAT_7.1.1</string>
+    <org.olat.upgrade.UpgradeHistoryData>
+      <upgradeData>
+        <entry>
+          <string>Database update</string>
+          <boolean>true</boolean>
+        </entry>
+      </upgradeData>
+      <installationComplete>true</installationComplete>
+    </org.olat.upgrade.UpgradeHistoryData>
+  </entry>
+  <entry>
+    <string>OLAT_7.1.0</string>
+    <org.olat.upgrade.UpgradeHistoryData>
+      <upgradeData>
+        <entry>
+          <string>Database update</string>
+          <boolean>true</boolean>
+        </entry>
+      </upgradeData>
+      <installationComplete>true</installationComplete>
+    </org.olat.upgrade.UpgradeHistoryData>
+  </entry>
+  <entry>
+    <string>OLAT_8.3.0</string>
+    <org.olat.upgrade.UpgradeHistoryData>
+      <upgradeData>
+        <entry>
+          <string>Database update</string>
+          <boolean>true</boolean>
+        </entry>
+      </upgradeData>
+      <installationComplete>true</installationComplete>
+    </org.olat.upgrade.UpgradeHistoryData>
+  </entry>
+  <entry>
+    <string>OLAT_13.0.0.beta1</string>
+    <org.olat.upgrade.UpgradeHistoryData>
+      <upgradeData>
+        <entry>
+          <string>MIGRATE TEMP KEY VALID UNTIL</string>
+          <boolean>true</boolean>
+        </entry>
+        <entry>
+          <string>MIGRATE QUALITY DATA COLLECTION TO ORGANISATION</string>
+          <boolean>true</boolean>
+        </entry>
+      </upgradeData>
+      <installationComplete>true</installationComplete>
+    </org.olat.upgrade.UpgradeHistoryData>
+  </entry>
+  <entry>
+    <string>OLAT_13.0.0.beta10</string>
+    <org.olat.upgrade.UpgradeHistoryData>
+      <upgradeData>
+        <entry>
+          <string>MIGRATE BOOKABLE</string>
+          <boolean>true</boolean>
+        </entry>
+      </upgradeData>
+      <installationComplete>true</installationComplete>
+    </org.olat.upgrade.UpgradeHistoryData>
+  </entry>
+  <entry>
+    <string>OLAT_15.pre.8</string>
+    <org.olat.upgrade.UpgradeHistoryData>
+      <upgradeData>
+        <entry>
+          <string>DELETE PORTFOLIO V1</string>
+          <boolean>true</boolean>
+        </entry>
+      </upgradeData>
+      <installationComplete>true</installationComplete>
+    </org.olat.upgrade.UpgradeHistoryData>
+  </entry>
+  <entry>
+    <string>OLAT_13.3.0</string>
+    <org.olat.upgrade.UpgradeHistoryData>
+      <upgradeData>
+        <entry>
+          <string>MIGRATE FILE METADATA</string>
+          <boolean>true</boolean>
+        </entry>
+        <entry>
+          <string>MIGRATE LIBRARY CONFIGURATION</string>
+          <boolean>true</boolean>
+        </entry>
+        <entry>
+          <string>MOVE REPO IMAGES</string>
+          <boolean>true</boolean>
+        </entry>
+        <entry>
+          <string>MIGRATE CURRICULUM ROLES</string>
+          <boolean>true</boolean>
+        </entry>
+      </upgradeData>
+      <installationComplete>true</installationComplete>
+    </org.olat.upgrade.UpgradeHistoryData>
+  </entry>
+  <entry>
+    <string>OLAT_15.pre.6</string>
+    <org.olat.upgrade.UpgradeHistoryData>
+      <upgradeData>
+        <entry>
+          <string>CATALOG ORDER INDEX</string>
+          <boolean>true</boolean>
+        </entry>
+      </upgradeData>
+      <installationComplete>true</installationComplete>
+    </org.olat.upgrade.UpgradeHistoryData>
+  </entry>
+  <entry>
+    <string>OLAT_13.0.0.beta7</string>
+    <org.olat.upgrade.UpgradeHistoryData>
+      <upgradeData>
+        <entry>
+          <string>MIGRATE SURVEY SERIES</string>
+          <boolean>true</boolean>
+        </entry>
+      </upgradeData>
+      <installationComplete>true</installationComplete>
+    </org.olat.upgrade.UpgradeHistoryData>
+  </entry>
+  <entry>
+    <string>OLAT_12.3.0</string>
+    <org.olat.upgrade.UpgradeHistoryData>
+      <upgradeData>
+        <entry>
+          <string>MIGRATE QPOOL TITLE</string>
+          <boolean>true</boolean>
+        </entry>
+        <entry>
+          <string>MIGRATE DIALOG ELEMENTS</string>
+          <boolean>true</boolean>
+        </entry>
+        <entry>
+          <string>MOVE DOC POOL INFOS PAGE</string>
+          <boolean>true</boolean>
+        </entry>
+      </upgradeData>
+      <installationComplete>true</installationComplete>
+    </org.olat.upgrade.UpgradeHistoryData>
+  </entry>
+  <entry>
+    <string>OLAT_15.pre.4</string>
+    <org.olat.upgrade.UpgradeHistoryData>
+      <upgradeData>
+        <entry>
+          <string>CATALOG ORDER INDEX</string>
+          <boolean>true</boolean>
+        </entry>
+      </upgradeData>
+      <installationComplete>true</installationComplete>
+    </org.olat.upgrade.UpgradeHistoryData>
+  </entry>
+  <entry>
+    <string>OLAT_13.0.0.beta9</string>
+    <org.olat.upgrade.UpgradeHistoryData>
+      <upgradeData>
+        <entry>
+          <string>MIGRATE BOOKABLE</string>
+          <boolean>true</boolean>
+        </entry>
+      </upgradeData>
+      <installationComplete>true</installationComplete>
+    </org.olat.upgrade.UpgradeHistoryData>
+  </entry>
+  <entry>
+    <string>OLAT_15.pre.5</string>
+    <org.olat.upgrade.UpgradeHistoryData>
+      <upgradeData>
+        <entry>
+          <string>CATALOG ORDER INDEX</string>
+          <boolean>true</boolean>
+        </entry>
+      </upgradeData>
+      <installationComplete>true</installationComplete>
+    </org.olat.upgrade.UpgradeHistoryData>
+  </entry>
+  <entry>
+    <string>OLAT_15.pre.0</string>
+    <org.olat.upgrade.UpgradeHistoryData>
+      <upgradeData>
+        <entry>
+          <string>INIT ASESSMENT ENTRY ROOT</string>
+          <boolean>true</boolean>
+        </entry>
+      </upgradeData>
+      <installationComplete>true</installationComplete>
+    </org.olat.upgrade.UpgradeHistoryData>
+  </entry>
+  <entry>
+    <string>OLAT_8.1.0</string>
+    <org.olat.upgrade.UpgradeHistoryData>
+      <upgradeData>
+        <entry>
+          <string>Database update</string>
+          <boolean>true</boolean>
+        </entry>
+      </upgradeData>
+      <installationComplete>true</installationComplete>
+    </org.olat.upgrade.UpgradeHistoryData>
+  </entry>
+  <entry>
+    <string>OLAT_12.5.3</string>
+    <org.olat.upgrade.UpgradeHistoryData>
+      <upgradeData>
+        <entry>
+          <string>MIGRATE WEB FEED</string>
+          <boolean>true</boolean>
+        </entry>
+      </upgradeData>
+      <installationComplete>true</installationComplete>
+    </org.olat.upgrade.UpgradeHistoryData>
+  </entry>
+  <entry>
+    <string>OLAT_15.hammed</string>
+    <org.olat.upgrade.UpgradeHistoryData>
+      <upgradeData>
+        <entry>
+          <string>CLEANUP CERTIFICATES</string>
+          <boolean>true</boolean>
+        </entry>
+      </upgradeData>
+      <installationComplete>true</installationComplete>
+    </org.olat.upgrade.UpgradeHistoryData>
+  </entry>
+  <entry>
+    <string>OLAT_15.2.0</string>
+    <org.olat.upgrade.UpgradeHistoryData>
+      <upgradeData>
+        <entry>
+          <string>MIGRATE USER PROPERTY</string>
+          <boolean>true</boolean>
+        </entry>
+        <entry>
+          <string>MIGRATE USER NAME</string>
+          <boolean>true</boolean>
+        </entry>
+      </upgradeData>
+      <installationComplete>true</installationComplete>
+    </org.olat.upgrade.UpgradeHistoryData>
+  </entry>
+  <entry>
+    <string>OLAT_15.2.2</string>
+    <org.olat.upgrade.UpgradeHistoryData>
+      <upgradeData>
+        <entry>
+          <string>MIGRATE CATALOG SORTING</string>
+          <boolean>true</boolean>
+        </entry>
+      </upgradeData>
+      <installationComplete>true</installationComplete>
+    </org.olat.upgrade.UpgradeHistoryData>
+  </entry>
+  <entry>
+    <string>OLAT_15.4.0</string>
+    <org.olat.upgrade.UpgradeHistoryData>
+      <upgradeData>
+        <entry>
+          <string>INIT VFS MODIFIED BY</string>
+          <boolean>true</boolean>
+        </entry>
+        <entry>
+          <string>INIT ENTRY TECHNICAL TYPE</string>
+          <boolean>true</boolean>
+        </entry>
+      </upgradeData>
+      <installationComplete>true</installationComplete>
+    </org.olat.upgrade.UpgradeHistoryData>
+  </entry>
+  <entry>
+    <string>OLAT_15.0.3</string>
+    <org.olat.upgrade.UpgradeHistoryData>
+      <upgradeData>
+        <entry>
+          <string>ASSESSMENT LAST ATTEMPTS</string>
+          <boolean>true</boolean>
+        </entry>
+      </upgradeData>
+      <installationComplete>true</installationComplete>
+    </org.olat.upgrade.UpgradeHistoryData>
+  </entry>
+  <entry>
+    <string>OLAT_15.2.3</string>
+    <org.olat.upgrade.UpgradeHistoryData>
+      <upgradeData>
+        <entry>
+          <string>CLEAN UP REPOSITORY ENTRY TO GROUP RELATION</string>
+          <boolean>true</boolean>
+        </entry>
+      </upgradeData>
+      <installationComplete>true</installationComplete>
+    </org.olat.upgrade.UpgradeHistoryData>
+  </entry>
+  <entry>
+    <string>OLAT_15.2.6</string>
+    <org.olat.upgrade.UpgradeHistoryData>
+      <upgradeData>
+        <entry>
+          <string>CLEAN UP APPOINTMENT ORGANIZERS</string>
+          <boolean>true</boolean>
+        </entry>
+      </upgradeData>
+      <installationComplete>true</installationComplete>
+    </org.olat.upgrade.UpgradeHistoryData>
+  </entry>
+  <entry>
+    <string>OLAT_11.3.0</string>
+    <org.olat.upgrade.UpgradeHistoryData>
+      <upgradeData>
+        <entry>
+          <string>VIDEO XML</string>
+          <boolean>true</boolean>
+        </entry>
+      </upgradeData>
+      <installationComplete>true</installationComplete>
+    </org.olat.upgrade.UpgradeHistoryData>
+  </entry>
+  <entry>
+    <string>OLAT_15.pre.6.ae</string>
+    <org.olat.upgrade.UpgradeHistoryData>
+      <upgradeData>
+        <entry>
+          <string>CONDITION COURSES COMPLETION</string>
+          <boolean>true</boolean>
+        </entry>
+      </upgradeData>
+      <installationComplete>true</installationComplete>
+    </org.olat.upgrade.UpgradeHistoryData>
+  </entry>
+  <entry>
+    <string>OLAT_15.3.12</string>
+    <org.olat.upgrade.UpgradeHistoryData>
+      <upgradeData>
+        <entry>
+          <string>DELETE APPOINTMENT USER RESTRICTIONS</string>
+          <boolean>true</boolean>
+        </entry>
+      </upgradeData>
+      <installationComplete>true</installationComplete>
+    </org.olat.upgrade.UpgradeHistoryData>
+  </entry>
+  <entry>
+    <string>OLAT_14.0.0</string>
+    <org.olat.upgrade.UpgradeHistoryData>
+      <upgradeData>
+        <entry>
+          <string>MIGRATE FILE METADATA</string>
+          <boolean>true</boolean>
+        </entry>
+        <entry>
+          <string>MIGRATE LIBRARY CONFIGURATION</string>
+          <boolean>true</boolean>
+        </entry>
+        <entry>
+          <string>MOVE REPO IMAGES</string>
+          <boolean>true</boolean>
+        </entry>
+        <entry>
+          <string>MIGRATE CURRICULUM ROLES</string>
+          <boolean>true</boolean>
+        </entry>
+      </upgradeData>
+      <installationComplete>true</installationComplete>
+    </org.olat.upgrade.UpgradeHistoryData>
+  </entry>
+  <entry>
+    <string>OLAT_10.1.0</string>
+    <org.olat.upgrade.UpgradeHistoryData>
+      <upgradeData>
+        <entry>
+          <string>Database update</string>
+          <boolean>true</boolean>
+        </entry>
+      </upgradeData>
+      <installationComplete>true</installationComplete>
+    </org.olat.upgrade.UpgradeHistoryData>
+  </entry>
+  <entry>
+    <string>OLAT_12.5.17</string>
+    <org.olat.upgrade.UpgradeHistoryData>
+      <upgradeData>
+        <entry>
+          <string>UPDATE COURSE STATS</string>
+          <boolean>true</boolean>
+        </entry>
+      </upgradeData>
+      <installationComplete>true</installationComplete>
+    </org.olat.upgrade.UpgradeHistoryData>
+  </entry>
+  <entry>
+    <string>OLAT_14.0.5</string>
+    <org.olat.upgrade.UpgradeHistoryData>
+      <upgradeData>
+        <entry>
+          <string>UPDATE UNKOWN VIDEO FORMAT</string>
+          <boolean>true</boolean>
+        </entry>
+      </upgradeData>
+      <installationComplete>true</installationComplete>
+    </org.olat.upgrade.UpgradeHistoryData>
+  </entry>
+  <entry>
+    <string>OLAT_14.0.3</string>
+    <org.olat.upgrade.UpgradeHistoryData>
+      <upgradeData>
+        <entry>
+          <string>PASSWORD SYNTAX CHECK TYPO</string>
+          <boolean>true</boolean>
+        </entry>
+      </upgradeData>
+      <installationComplete>true</installationComplete>
+    </org.olat.upgrade.UpgradeHistoryData>
+  </entry>
+  <entry>
+    <string>OLAT_14.2.0</string>
+    <org.olat.upgrade.UpgradeHistoryData>
+      <upgradeData>
+        <entry>
+          <string>TRANSFER INFOS NOTIFICATIONS NOT DESIRED</string>
+          <boolean>true</boolean>
+        </entry>
+        <entry>
+          <string>DATA COLLECTION ORGANISATIONS</string>
+          <boolean>true</boolean>
+        </entry>
+        <entry>
+          <string>LIVE STREAM LAUNCHES</string>
+          <boolean>true</boolean>
+        </entry>
+      </upgradeData>
+      <installationComplete>true</installationComplete>
+    </org.olat.upgrade.UpgradeHistoryData>
+  </entry>
+  <entry>
+    <string>OLAT_14.2.7</string>
+    <org.olat.upgrade.UpgradeHistoryData>
+      <upgradeData>
+        <entry>
+          <string>BIGBLUEBUTTON SERVER TO DB</string>
+          <boolean>true</boolean>
+        </entry>
+      </upgradeData>
+      <installationComplete>true</installationComplete>
+    </org.olat.upgrade.UpgradeHistoryData>
+  </entry>
+  <entry>
+    <string>OLAT_14.2.6</string>
+    <org.olat.upgrade.UpgradeHistoryData>
+      <upgradeData>
+        <entry>
+          <string>DELETE COURSE EXPORT DIRECTORY</string>
+          <boolean>true</boolean>
+        </entry>
+        <entry>
+          <string>DELETE DOWNLOAD ZIP</string>
+          <boolean>true</boolean>
+        </entry>
+      </upgradeData>
+      <installationComplete>true</installationComplete>
+    </org.olat.upgrade.UpgradeHistoryData>
+  </entry>
+  <entry>
+    <string>OLAT_10.3.0</string>
+    <org.olat.upgrade.UpgradeHistoryData>
+      <upgradeData>
+        <entry>
+          <string>Clean export folder</string>
+          <boolean>true</boolean>
+        </entry>
+      </upgradeData>
+      <installationComplete>true</installationComplete>
+    </org.olat.upgrade.UpgradeHistoryData>
+  </entry>
+  <entry>
+    <string>OLAT_13.0.0</string>
+    <org.olat.upgrade.UpgradeHistoryData>
+      <upgradeData>
+        <entry>
+          <string>PORTFOLIO EVALUATION FORM</string>
+          <boolean>true</boolean>
+        </entry>
+        <entry>
+          <string>MIGRATE ROLE</string>
+          <boolean>true</boolean>
+        </entry>
+        <entry>
+          <string>LECTURES SEND APPEAL DATES</string>
+          <boolean>true</boolean>
+        </entry>
+        <entry>
+          <string>MIGRATE ADMIN SITE SECURITY CALLBACK</string>
+          <boolean>true</boolean>
+        </entry>
+        <entry>
+          <string>MIGRATE REPO ENTRY TO DEF ORG</string>
+          <boolean>true</boolean>
+        </entry>
+        <entry>
+          <string>MIGRATE LUCENE 7.5</string>
+          <boolean>true</boolean>
+        </entry>
+        <entry>
+          <string>MIGRATE INVITEE</string>
+          <boolean>true</boolean>
+        </entry>
+        <entry>
+          <string>MIGRATE REPO ENTRY ACCESS</string>
+          <boolean>true</boolean>
+        </entry>
+      </upgradeData>
+      <installationComplete>true</installationComplete>
+    </org.olat.upgrade.UpgradeHistoryData>
+  </entry>
+  <entry>
+    <string>OLAT_13.2.0</string>
+    <org.olat.upgrade.UpgradeHistoryData>
+      <upgradeData>
+        <entry>
+          <string>UPDATE CURRICULUM CHILDREN</string>
+          <boolean>true</boolean>
+        </entry>
+      </upgradeData>
+      <installationComplete>true</installationComplete>
+    </org.olat.upgrade.UpgradeHistoryData>
+  </entry>
+  <entry>
+    <string>OLAT_7.0.2</string>
+    <org.olat.upgrade.UpgradeHistoryData>
+      <upgradeData/>
+      <installationComplete>true</installationComplete>
+    </org.olat.upgrade.UpgradeHistoryData>
+  </entry>
+  <entry>
+    <string>OLAT_7.0.1</string>
+    <org.olat.upgrade.UpgradeHistoryData>
+      <upgradeData>
+        <entry>
+          <string>Database update</string>
+          <boolean>true</boolean>
+        </entry>
+      </upgradeData>
+      <installationComplete>true</installationComplete>
+    </org.olat.upgrade.UpgradeHistoryData>
+  </entry>
+  <entry>
+    <string>OLAT_8.4.0</string>
+    <org.olat.upgrade.UpgradeHistoryData>
+      <upgradeData>
+        <entry>
+          <string>Database update</string>
+          <boolean>true</boolean>
+        </entry>
+      </upgradeData>
+      <installationComplete>true</installationComplete>
+    </org.olat.upgrade.UpgradeHistoryData>
+  </entry>
+  <entry>
+    <string>OLAT_13.2.8</string>
+    <org.olat.upgrade.UpgradeHistoryData>
+      <upgradeData>
+        <entry>
+          <string>GUEST COURSE NODES PASSWORDS</string>
+          <boolean>true</boolean>
+        </entry>
+      </upgradeData>
+      <installationComplete>true</installationComplete>
+    </org.olat.upgrade.UpgradeHistoryData>
+  </entry>
+  <entry>
+    <string>OLAT_13.2.4</string>
+    <org.olat.upgrade.UpgradeHistoryData>
+      <upgradeData>
+        <entry>
+          <string>ORPHAN IDENTITIES</string>
+          <boolean>true</boolean>
+        </entry>
+      </upgradeData>
+      <installationComplete>true</installationComplete>
+    </org.olat.upgrade.UpgradeHistoryData>
+  </entry>
+  <entry>
+    <string>OLAT_8.4.5</string>
+    <org.olat.upgrade.UpgradeHistoryData>
+      <upgradeData>
+        <entry>
+          <string>Database update</string>
+          <boolean>true</boolean>
+        </entry>
+      </upgradeData>
+      <installationComplete>true</installationComplete>
+    </org.olat.upgrade.UpgradeHistoryData>
+  </entry>
+  <entry>
+    <string>OLAT_12.2.0</string>
+    <org.olat.upgrade.UpgradeHistoryData>
+      <upgradeData>
+        <entry>
+          <string>MIGRATE QPOOL TAXONOMY</string>
+          <boolean>true</boolean>
+        </entry>
+        <entry>
+          <string>MAIL CONFIG SPLITTING</string>
+          <boolean>true</boolean>
+        </entry>
+        <entry>
+          <string>KEEP INTERNAL MAIL DISABLED</string>
+          <boolean>true</boolean>
+        </entry>
+      </upgradeData>
+      <installationComplete>true</installationComplete>
+    </org.olat.upgrade.UpgradeHistoryData>
+  </entry>
+  <entry>
+    <string>OLAT_15.3.6</string>
+    <org.olat.upgrade.UpgradeHistoryData>
+      <upgradeData>
+        <entry>
+          <string>MIGRATE BIGBLUEBUTTON JOIN FLAG</string>
+          <boolean>true</boolean>
+        </entry>
+      </upgradeData>
+      <installationComplete>true</installationComplete>
+    </org.olat.upgrade.UpgradeHistoryData>
+  </entry>
+  <entry>
+    <string>OLAT_12.0.0</string>
+    <org.olat.upgrade.UpgradeHistoryData>
+      <upgradeData>
+        <entry>
+          <string>LAST USER MODIFICATION</string>
+          <boolean>true</boolean>
+        </entry>
+        <entry>
+          <string>USER PROPERTY CONTEXT RENAME</string>
+          <boolean>true</boolean>
+        </entry>
+        <entry>
+          <string>FEED XML TO DB</string>
+          <boolean>true</boolean>
+        </entry>
+      </upgradeData>
+      <installationComplete>true</installationComplete>
+    </org.olat.upgrade.UpgradeHistoryData>
+  </entry>
+  <entry>
+    <string>OLAT_8.2.0</string>
+    <org.olat.upgrade.UpgradeHistoryData>
+      <upgradeData>
+        <entry>
+          <string>Database update</string>
+          <boolean>true</boolean>
+        </entry>
+      </upgradeData>
+      <installationComplete>true</installationComplete>
+    </org.olat.upgrade.UpgradeHistoryData>
+  </entry>
+  <entry>
+    <string>OLAT_12.4.1</string>
+    <org.olat.upgrade.UpgradeHistoryData>
+      <upgradeData>
+        <entry>
+          <string>MIGRATE PASSWORD HISTORY</string>
+          <boolean>true</boolean>
+        </entry>
+        <entry>
+          <string>MIGRATE CHANGE PASSWORD</string>
+          <boolean>true</boolean>
+        </entry>
+      </upgradeData>
+      <installationComplete>true</installationComplete>
+    </org.olat.upgrade.UpgradeHistoryData>
+  </entry>
+  <entry>
+    <string>OLAT_12.4.0</string>
+    <org.olat.upgrade.UpgradeHistoryData>
+      <upgradeData>
+        <entry>
+          <string>MIGRATE QPOOL LICENSE</string>
+          <boolean>true</boolean>
+        </entry>
+      </upgradeData>
+      <installationComplete>true</installationComplete>
+    </org.olat.upgrade.UpgradeHistoryData>
+  </entry>
+</map>
\ No newline at end of file

Vulnerable code: 	
		String exportContent = XStreamHelper.createXStreamInstance().toXML(checklist);
			XStream xstream = XStreamHelper.createXStreamInstance();
			xstream.alias("LinksPortlet", Map.class);
			xstream.alias(ELEM_LINK, PortletLink.class);
			xstream.alias(ELEM_INSTITUTION, PortletInstitution.class);
			xstream.aliasAttribute(PortletInstitution.class, ATTR_INSTITUTION_NAME, ATTR_INSTITUTION_NAME);
	public static boolean saveLinkList(HashMap<String, PortletInstitution> portletMap){
		XStream xstream = XStreamHelper.createXStreamInstance();
		xstream.alias("LinksPortlet", Map.class);
		xstream.alias(ELEM_LINK, PortletLink.class);
		xstream.alias(ELEM_INSTITUTION, PortletInstitution.class);
		xstream.aliasAttribute(PortletInstitution.class, ATTR_INSTITUTION_NAME, ATTR_INSTITUTION_NAME);
		String output = xstream.toXML(portletMap);
		return (output.length() != 0);		
	private void saveToFile(VFSLeaf glossaryFile, List<GlossaryItem> glossaryItemArr) {
	private List<GlossaryItem> loadGlossaryItemListFromFile(VFSLeaf glossaryFile) {
		XStream.setupDefaultSecurity(xstream);
		ptask.setTask(xstream.toXML(task));
		ptask.setTask(xstream.toXML(task));
			ptask.setTask(xstream.toXML(runnableTask));
		XStream.setupDefaultSecurity(mystream);
		String configuration = XStreamHelper.createXStreamInstance().toXML(mapper);
		String configuration = XStreamHelper.createXStreamInstance().toXML(mapper);
			Object obj = XStreamHelper.createXStreamInstance().fromXML(configuration);
public class EnhancedXStream extends XStream {
	public EnhancedXStream(boolean export) {
	private static final String ENCODING = "UTF-8";
	private static XStream unconfiguredXStream = new XStream();
		return new EnhancedXStream(false);
		return new EnhancedXStream(true);
		try(InputStreamReader isr = new InputStreamReader(is, ENCODING);) {
		try(InputStream is = new ByteArrayInputStream(xml.getBytes(ENCODING))) {
		try(OutputStreamWriter osw = new OutputStreamWriter(os, ENCODING)) {
			data = "<?xml version=\"1.0\" encoding=\"" + ENCODING + "\"?>\n"
		XStream.setupDefaultSecurity(configXstream);
	private final XStream xstream = XStreamHelper.createXStreamInstance();
		efficiencyProperty.setStatementXml(xstream.toXML(efficiencyStatement));
		return (EfficiencyStatement)xstream.fromXML(s.getStatementXml());
		return (EfficiencyStatement)xstream.fromXML(statement.get(0).getStatementXml());
		return (EfficiencyStatement)xstream.fromXML(statement.get(0).getStatementXml());
				EfficiencyStatement s = (EfficiencyStatement)xstream.fromXML(statement.getStatementXml());
import org.olat.core.util.xml.XStreamHelper;
import com.thoughtworks.xstream.XStream;

	private static final XStream myXStream = XStreamHelper.createXStreamInstance();
	
			String xml = myXStream.toXML(statement); 
				statement = (EfficiencyStatement)myXStream.fromXML(statementXml);
				statement = (EfficiencyStatement)myXStream.fromXML(media.getContent());
		XStream.setupDefaultSecurity(xstream);
		XStream xStream = XStreamHelper.createXStreamInstance();
		xStream.toXML(customConfig, configTarget.getOutputStream(false));
		XStream xStream = XStreamHelper.createXStreamInstance();
			return (Map<String, Map<String, Object>>) xStream.fromXML(in);
		
		XStream.setupDefaultSecurity(xstream);
		XStream.setupDefaultSecurity(configXstream);
		XStream.setupDefaultSecurity(configXstream);
import org.apache.pdfbox.io.IOUtils;
		ObjectOutputStream out = null;
		try {
			File file = new File(exportDirectory, "chat.xml");
			Writer writer = new FileWriter(file);
			out = logXStream.createObjectOutputStream(writer);
			
		} finally {
			IOUtils.closeQuietly(out);
		XStream.setupDefaultSecurity(xstream);
		XStream.setupDefaultSecurity(xstream);
		XStream.setupDefaultSecurity(xstream);
			log.error("Cannot import this map: " + path, e);
			log.error("Cannot export this map: " + binder, e);
		XStream.setupDefaultSecurity(configXstream);
		
		XStream.setupDefaultSecurity(xstream);
		XStream.setupDefaultSecurity(configXstream);
	/**
	 * Read the the metdatadata-xml in the videoresource folder
	 * @param videoResource
	 * @return
	 */
	public VideoMetadata readVideoMetadataFile(OLATResource videoResource);

	/**
	 * Checks if is metadata file valid.
	 *
	 * @param videoResource
	 * @return true, if is metadata file valid
	 */
	public boolean isMetadataFileValid(OLATResource videoResource);

import org.olat.core.util.xml.XStreamHelper;
import org.olat.modules.video.VideoMetadata;
import org.olat.modules.video.model.VideoMetadataImpl;
	@Override
	public boolean isMetadataFileValid(OLATResource videoResource) {
		VFSContainer baseContainer = FileResourceManager.getInstance().getFileResourceRootImpl(videoResource);
		VFSLeaf metaDataFile = (VFSLeaf) baseContainer.resolve(FILENAME_VIDEO_METADATA_XML);
		try {
			VideoMetadata meta = (VideoMetadata) XStreamHelper.readObject(XStreamHelper.createXStreamInstance(), metaDataFile);
			return meta != null;
		} catch (Exception e) {
			return false;
		}
	}

	@Override
	public VideoMetadata readVideoMetadataFile(OLATResource videoResource){
		VFSContainer baseContainer= FileResourceManager.getInstance().getFileResourceRootImpl(videoResource);
		VFSLeaf metaDataFile = (VFSLeaf) baseContainer.resolve(FILENAME_VIDEO_METADATA_XML);
		try {
			return (VideoMetadata) XStreamHelper.readObject(XStreamHelper.createXStreamInstance(), metaDataFile);
		} catch (Exception e) {
			log.error("Error while parsing XStream file for videoResource::{}", videoResource, e);
			// return an empty, so at least it displays something and not an error
			VideoMetadata meta =  new VideoMetadataImpl();
			meta.setWidth(800);
			meta.setHeight(600);
			return meta;
		}
	}

		XStream.setupDefaultSecurity(xstream);
				VideoMeta.class, VideoMetaImpl.class
		XStream.setupDefaultSecurity(xstream);
//				VideoMetadata videoMetadata = videoManager.readVideoMetadataFile(videoResource);
		XStream.setupDefaultSecurity(xmlXStream);

			if (videoManager.isMetadataFileValid(videoResource)) {
				VideoMetadata metafromXML = videoManager.readVideoMetadataFile(videoResource);
			log.warn("Cannot read files from dir: " + item.getDirectory());
import org.apache.logging.log4j.Logger;
	protected final XStream upgradesXStream = XStreamHelper.createXStreamInstance();
	@SuppressWarnings("unchecked")
			upgradesHistories = (Map<String, UpgradeHistoryData>)upgradesXStream.fromXML(upgradesHistoriesFile);
		XStream.setupDefaultSecurity(homeConfigXStream);
				log.error("Error while loading homepage config from path::" + configFile.getAbsolutePath() + ", fallback to default configuration",
						e);
import org.olat.core.util.xml.XStreamHelper;
		ptask.setTask(XStreamHelper.createXStreamInstance().toXML(new DummyTask()));
		alienTask.setTask(XStreamHelper.createXStreamInstance().toXML(new DummyTask()));
import org.olat.core.util.xml.XStreamHelper;
		Object objReloaded = XStreamHelper.createXStreamInstance().fromXML(pMapper.getXmlConfiguration());
		Object objReloaded = XStreamHelper.createXStreamInstance().fromXML(pMapper.getXmlConfiguration());
		Object objReloaded2 = XStreamHelper.createXStreamInstance().fromXML(loadedMapper2.getXmlConfiguration());
		Object objReloaded = XStreamHelper.createXStreamInstance().fromXML(pMapper.getXmlConfiguration());
		Object objReloaded2 = XStreamHelper.createXStreamInstance().fromXML(loadedMapper2.getXmlConfiguration());
			//
	org.olat.upgrade.UpgradeDefinitionTest.class
		return null;
Fixed code: 		XStreamHelper.allowDefaultPackage(xstream);
		XStreamHelper.allowDefaultPackage(xstream);

		XStream xstream = XStreamHelper.createXStreamInstance();
		XStreamHelper.allowDefaultPackage(xstream);
		String exportContent = xstream.toXML(checklist);
	private static final XStream xstream = XStreamHelper.createXStreamInstance();
	static {
		XStreamHelper.allowDefaultPackage(xstream);
		xstream.alias("LinksPortlet", Map.class);
		xstream.alias(ELEM_LINK, PortletLink.class);
		xstream.alias(ELEM_INSTITUTION, PortletInstitution.class);
		xstream.aliasAttribute(PortletInstitution.class, ATTR_INSTITUTION_NAME, ATTR_INSTITUTION_NAME);
	}
	
	public static boolean saveLinkList(Map<String, PortletInstitution> portletMap){
		return true;		
		XStreamHelper.allowDefaultPackage(xml);
		XStreamHelper.allowDefaultPackage(rulesXStream);
		XStreamHelper.allowDefaultPackage(xstreamReader);
		XStreamHelper.allowDefaultPackage(xstreamReader);
	protected final void saveToFile(VFSLeaf glossaryFile, List<GlossaryItem> glossaryItemArr) {
	protected final List<GlossaryItem> loadGlossaryItemListFromFile(VFSLeaf glossaryFile) {
		XStreamHelper.allowDefaultPackage(licenseXStream);
	static {
		XStreamHelper.allowDefaultPackage(xstream);
	}
		ptask.setTask(toXML(task));
		ptask.setTask(toXML(task));
			ptask.setTask(toXML(runnableTask));
	
	protected static String toXML(Serializable task) {
		return xstream.toXML(task);
	}
	
import com.thoughtworks.xstream.XStream;

	private static final XStream xstream = XStreamHelper.createXStreamInstance();
	static {
		XStreamHelper.allowDefaultPackage(xstream);
	}
	
		String configuration = xstream.toXML(mapper);
	protected static String toXml(Object mapper) {
		return xstream.toXML(mapper);
	}
	
	public static Object fromXML(String configuration) {
		return xstream.fromXML(configuration);
	}
	
		String configuration = xstream.toXML(mapper);
			Object obj = xstream.fromXML(configuration);
		XStreamHelper.allowDefaultPackage(xStream);
		XStreamHelper.allowDefaultPackage(historyReadStream);
		XStreamHelper.allowDefaultPackage(historyWriteStream);
		
		XStreamHelper.allowDefaultPackage(xstream);
class EnhancedXStream extends XStream {
	EnhancedXStream(boolean export) {
import java.nio.charset.StandardCharsets;
	private static final String[] DEFAULT_PACKAGES = new String[] {
			"org.olat.**",
			"de.bps.**",
			"at.ac.uibk.**",
			"org.hibernate.**"
		};
	private static final XStream unconfiguredXStream = new XStream();
	static {
		XStream.setupDefaultSecurity(unconfiguredXStream);
		allowDefaultPackage(unconfiguredXStream);
	}
	public static final void allowDefaultPackage(XStream xstream) {
		xstream.allowTypesByWildcard(DEFAULT_PACKAGES);
	}
		XStream xstream = new EnhancedXStream(false);
		XStream.setupDefaultSecurity(xstream);
		return xstream;
		XStream xstream = new EnhancedXStream(true);
		XStream.setupDefaultSecurity(xstream);
		return xstream;
		try(InputStreamReader isr = new InputStreamReader(is, StandardCharsets.UTF_8);) {
		try(InputStream is = new ByteArrayInputStream(xml.getBytes(StandardCharsets.UTF_8))) {
		try(OutputStreamWriter osw = new OutputStreamWriter(os, StandardCharsets.UTF_8)) {
			data = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
		XStreamHelper.allowDefaultPackage(readXstream);
		XStreamHelper.allowDefaultPackage(writeXstream);
		
	private static final XStream xstream = XStreamHelper.createXStreamInstance();
	static {
		XStreamHelper.allowDefaultPackage(xstream);
	}
	
	public static EfficiencyStatement fromXML(String xml) {
		return (EfficiencyStatement)xstream.fromXML(xml);
	}
	
	public static String toXML(EfficiencyStatement statement) {
		return xstream.toXML(statement);
	}
		efficiencyProperty.setStatementXml(toXML(efficiencyStatement));
		return fromXML(s.getStatementXml());
		return fromXML(statement.get(0).getStatementXml());
		return fromXML(statement.get(0).getStatementXml());
				EfficiencyStatement s = fromXML(statement.getStatementXml());
import org.olat.course.assessment.manager.EfficiencyStatementManager;

			String xml = EfficiencyStatementManager.toXML(statement); 
				statement = EfficiencyStatementManager.fromXML(statementXml);
				statement = EfficiencyStatementManager.fromXML(media.getContent());
	private static final XStream xstream = XStreamHelper.createXStreamInstance();
	static {
		XStreamHelper.allowDefaultPackage(xstream);
	}
		xstream.toXML(customConfig, configTarget.getOutputStream(false));
			return (Map<String, Map<String, Object>>) xstream.fromXML(in);
				XStreamHelper.allowDefaultPackage(xstream);
		XStreamHelper.allowDefaultPackage(xstream);
		XStreamHelper.allowDefaultPackage(xstream);
	static {
		XStreamHelper.allowDefaultPackage(taskDefinitionsXstream);
	}
		XStreamHelper.allowDefaultPackage(logXStream);
		File file = new File(exportDirectory, "chat.xml");
		try(Writer writer = new FileWriter(file);
			ObjectOutputStream out = logXStream.createObjectOutputStream(writer)) {		
		XStreamHelper.allowDefaultPackage(disadvantageCompensationXStream);
		XStreamHelper.allowDefaultPackage(lectureBlockXStream);
		XStreamHelper.allowDefaultPackage(rollCallXStream);
		XStreamHelper.allowDefaultPackage(summaryXStream);
		XStreamHelper.allowDefaultPackage(absenceNoticeXStream);
		XStreamHelper.allowDefaultPackage(absenceNoticeRelationsXStream);
		XStreamHelper.allowDefaultPackage(xStream);
	static {
		XStreamHelper.allowDefaultPackage(myStream);
	}
			log.error("Cannot import this map: {}", path, e);
			log.error("Cannot export this map: {}", binder, e);
		XStreamHelper.allowDefaultPackage(xstream);
		XStreamHelper.allowDefaultPackage(metadatXstream);
		XStreamHelper.allowDefaultPackage(qitemXStream);
		XStreamHelper.allowDefaultPackage(ruleXStream);
		XStreamHelper.allowDefaultPackage(competenceXStream);
import org.olat.modules.video.VideoMetadata;
import org.olat.modules.video.model.VideoMetadataImpl;
				VideoMeta.class, VideoMetaImpl.class,
				VideoMetadata.class, VideoMetadataImpl.class
		XStreamHelper.allowDefaultPackage(xStream);
		XStreamHelper.allowDefaultPackage(xstream);
		XStreamHelper.allowDefaultPackage(xstream);
import java.util.HashMap;
import com.thoughtworks.xstream.security.ExplicitTypePermission;
		Class<?>[] types = new Class[] {
				HashMap.class
			};
		xmlXStream.addPermission(new ExplicitTypePermission(types));
		XStreamHelper.allowDefaultPackage(xstream);
	static {
		XStreamHelper.allowDefaultPackage(myXStream);
	}
			//TODO xstream
import org.olat.core.util.xml.XStreamHelper;
import org.olat.fileresource.FileResourceManager;
import org.olat.modules.video.model.VideoMetadataImpl;

	private static final String FILENAME_VIDEO_METADATA_XML = "video_metadata.xml";
			if (isMetadataFileValid(videoResource)) {
				VideoMetadata metafromXML = readVideoMetadataFile(videoResource);
	
	private boolean isMetadataFileValid(OLATResource videoResource) {
		VFSContainer baseContainer = FileResourceManager.getInstance().getFileResourceRootImpl(videoResource);
		VFSLeaf metaDataFile = (VFSLeaf) baseContainer.resolve(FILENAME_VIDEO_METADATA_XML);
		try {
			VideoMetadata meta = (VideoMetadata) XStreamHelper.readObject(XStreamHelper.createXStreamInstance(), metaDataFile);
			return meta != null;
		} catch (Exception e) {
			return false;
		}
	}
	
	private VideoMetadata readVideoMetadataFile(OLATResource videoResource){
		VFSContainer baseContainer= FileResourceManager.getInstance().getFileResourceRootImpl(videoResource);
		VFSLeaf metaDataFile = (VFSLeaf) baseContainer.resolve(FILENAME_VIDEO_METADATA_XML);
		try {
			return (VideoMetadata) XStreamHelper.readObject(XStreamHelper.createXStreamInstance(), metaDataFile);
		} catch (Exception e) {
			log.error("Error while parsing XStream file for videoResource::{}", videoResource, e);
			// return an empty, so at least it displays something and not an error
			VideoMetadata meta =  new VideoMetadataImpl();
			meta.setWidth(800);
			meta.setHeight(600);
			return meta;
		}
	}
			log.warn("Cannot read files from dir: {}", item.getDirectory());
				XStreamHelper.allowDefaultPackage(xstream);
/**
 * <a href="http://www.openolat.org">
 * OpenOLAT - Online Learning and Training</a><br>
 * <p>
 * Licensed under the Apache License, Version 2.0 (the "License"); <br>
 * you may not use this file except in compliance with the License.<br>
 * You may obtain a copy of the License at the
 * <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache homepage</a>
 * <p>
 * Unless required by applicable law or agreed to in writing,<br>
 * software distributed under the License is distributed on an "AS IS" BASIS, <br>
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br>
 * See the License for the specific language governing permissions and <br>
 * limitations under the License.
 * <p>
 * Initial code contributed and copyrighted by<br>
 * frentix GmbH, http://www.frentix.com
 * <p>
 */
package org.olat.upgrade;

import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.List;

import org.apache.logging.log4j.Logger;
import org.olat.core.commons.modules.bc.FolderConfig;
import org.olat.core.commons.persistence.DB;
import org.olat.core.commons.persistence.QueryBuilder;
import org.olat.core.logging.Tracing;
import org.olat.core.util.xml.XStreamHelper;
import org.olat.course.CourseXStreamAliases;
import org.olat.course.PersistingCourseImpl;
import org.springframework.beans.factory.annotation.Autowired;

import com.thoughtworks.xstream.XStream;

/**
 * 
 * Initial date: 18 juin 2021<br>
 * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
 *
 */
public class OLATUpgrade_15_3_18 extends OLATUpgrade {

	private static final Logger log = Tracing.createLoggerFor(OLATUpgrade_15_3_18.class);

	private static final String VERSION = "OLAT_15.3.18";
	private static final String OPEN_COURSES = "OPEN COURSES";

	@Autowired
	private DB dbInstance;

	public OLATUpgrade_15_3_18() {
		super();
	}
	
	@Override
	public String getVersion() {
		return VERSION;
	}
	
	@Override
	public boolean doPostSystemInitUpgrade(UpgradeManager upgradeManager) {
		UpgradeHistoryData uhd = upgradeManager.getUpgradesHistory(VERSION);
		if (uhd == null) {
			// has never been called, initialize
			uhd = new UpgradeHistoryData();
		} else if (uhd.isInstallationComplete()) {
			return false;
		}
		
		boolean allOk = true;
		allOk &= openCourse(upgradeManager, uhd);

		uhd.setInstallationComplete(allOk);
		upgradeManager.setUpgradesHistory(uhd, VERSION);
		if(allOk) {
			log.info(Tracing.M_AUDIT, "Finished OLATUpgrade_15_3_18 successfully!");
		} else {
			log.info(Tracing.M_AUDIT, "OLATUpgrade_15_3_18 not finished, try to restart OpenOlat!");
		}
		return allOk;
	}
	
	private boolean openCourse(UpgradeManager upgradeManager, UpgradeHistoryData uhd) {
		boolean allOk = true;
		if (!uhd.getBooleanDataValue(OPEN_COURSES)) {
			try {
				Path coursesPath = Paths.get(FolderConfig.getCanonicalRoot(), PersistingCourseImpl.COURSE_ROOT_DIR_NAME);
				List<Long> resourceIds = getCourseKeys();
				for(Long resourceId:resourceIds)  {
					checkCourse(coursesPath, resourceId);
				}
			} catch (Exception e) {
				log.error("", e);
				allOk = false;
			}
			
			uhd.setBooleanDataValue(OPEN_COURSES, allOk);
			upgradeManager.setUpgradesHistory(uhd, VERSION);
		}
		return allOk;
	}
	
	private void checkCourse(Path coursesPath, Long resourceId) {
		try {
			Path coursePath =  coursesPath.resolve(resourceId.toString());
			Path runStructure = coursePath.resolve(PersistingCourseImpl.RUNSTRUCTURE_XML);
			Path editorTree = coursePath.resolve(PersistingCourseImpl.EDITORTREEMODEL_XML);

			XStream xstream = CourseXStreamAliases.getReadCourseXStream();
			if(Files.exists(runStructure)) {
				XStreamHelper.readObject(xstream, runStructure.toFile());
			}
			if(Files.exists(editorTree)) {
				XStreamHelper.readObject(xstream, editorTree.toFile());
			}
		} catch (Exception e) {
			log.error("Error with course: {}", resourceId, e);
		}
	}
	
	private List<Long> getCourseKeys() {
		QueryBuilder sb = new QueryBuilder();
		sb.append("select ores.resId from repositoryentry v")
		  .append(" inner join v.olatResource as ores")
		  .and().append(" ores.resName = 'CourseModule'");
		
		List<Long> courseKeys = dbInstance.getCurrentEntityManager()
				.createQuery(sb.toString(), Long.class)
				.getResultList();
		dbInstance.commitAndCloseSession();
		return courseKeys;
	}
}
import org.apache.logging.log4j.Logger;
import com.thoughtworks.xstream.security.ExplicitTypePermission;
	protected static final XStream upgradesXStream = XStreamHelper.createXStreamInstance();
	static {
		Class<?>[] types = new Class[] {
				UpgradeHistoryData.class
			};
		upgradesXStream.addPermission(new ExplicitTypePermission(types));
	}
			upgradesHistories = read(upgradesHistoriesFile);

	@SuppressWarnings("unchecked")
	protected static Map<String, UpgradeHistoryData> read(File file) {
		return (Map<String, UpgradeHistoryData>)upgradesXStream.fromXML(file);
	}
				<bean id="upgrade_15_3_18" class="org.olat.upgrade.OLATUpgrade_15_3_18"/>
				log.error("Error while loading homepage config from path::{}, fallback to default configuration",
						configFile.getAbsolutePath(), e);
		XStreamHelper.allowDefaultPackage(interestsXStream);
/**
 * <a href="http://www.openolat.org">
 * OpenOLAT - Online Learning and Training</a><br>
 * <p>
 * Licensed under the Apache License, Version 2.0 (the "License"); <br>
 * you may not use this file except in compliance with the License.<br>
 * You may obtain a copy of the License at the
 * <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache homepage</a>
 * <p>
 * Unless required by applicable law or agreed to in writing,<br>
 * software distributed under the License is distributed on an "AS IS" BASIS, <br>
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br>
 * See the License for the specific language governing permissions and <br>
 * limitations under the License.
 * <p>
 * Initial code contributed and copyrighted by<br>
 * frentix GmbH, http://www.frentix.com
 * <p>
 */
package org.olat.core.commons.modules.glossary;

import java.io.File;
import java.net.MalformedURLException;
import java.net.URI;
import java.net.URISyntaxException;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;

import org.apache.logging.log4j.Logger;
import org.junit.Assert;
import org.junit.Test;
import org.olat.core.logging.Tracing;
import org.olat.core.util.WebappHelper;
import org.olat.core.util.vfs.VFSLeaf;
import org.olat.test.OlatTestCase;
import org.olat.test.VFSJavaIOFile;
import org.springframework.beans.factory.annotation.Autowired;

/**
 * 
 * Initial date: 21 juin 2021<br>
 * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
 *
 */
public class GlossaryItemManagerTest extends OlatTestCase {
	
	private static final Logger log = Tracing.createLoggerFor(GlossaryItemManagerTest.class);
	
	@Autowired
	private GlossaryItemManager glossaryItemManager;
	
	@Test
	public void loadGlossaryItemListFromFile() throws URISyntaxException {
		URL glossaryUrl = GlossaryItemManagerTest.class.getResource("glossary.xml");
		VFSLeaf glossaryLeaf = new VFSJavaIOFile(glossaryUrl.toURI());
		List<GlossaryItem> items = glossaryItemManager.loadGlossaryItemListFromFile(glossaryLeaf);
		Assert.assertNotNull(items);
	}
	
	@Test
	public void saveToFile() throws URISyntaxException, MalformedURLException{
		GlossaryItem item = new GlossaryItem("Definition", "This is a definition.");
		List<String> flexions = new ArrayList<>();
		flexions.add("Add");
		flexions.add("Flex");
		item.setGlossFlexions(flexions);
		List<URI> uris = new ArrayList<>();
		uris.add(new URL("https://www.frentix.com").toURI());
		item.setGlossLinks(uris);
		List<String> synonyms = new ArrayList<>();
		synonyms.add("Synonym");
		item.setGlossSynonyms(synonyms);
		
		List<GlossaryItem> items = new ArrayList<>();
		items.add(item);
		
		File glossaryFile = new File(WebappHelper.getTmpDir(), "glossary" + UUID.randomUUID() + ".xml");
		glossaryFile.getParentFile().mkdirs();
		VFSLeaf glossaryLeaf = new VFSJavaIOFile(glossaryFile);
		glossaryItemManager.saveToFile(glossaryLeaf, items);
		
		// read the files
		List<GlossaryItem> savedItems = glossaryItemManager.loadGlossaryItemListFromFile(glossaryLeaf);
		Assert.assertNotNull(items);
		Assert.assertEquals(1, savedItems.size());
		Assert.assertEquals("Definition", savedItems.get(0).getGlossTerm());
		
		if(!glossaryFile.delete()) {
			log.error("Cannot delete: {}", glossaryFile);
		}
	}
}
<?xml version="1.0" encoding="UTF-8"?>
<list>
  <glossentry>
    <glossTerm>Forsythie</glossTerm>
    <glossDef><![CDATA[<p>Die Forsythie, auch Garten-Forsythie, Goldflieder oder Goldglöckchen genannt, ist ein häufig gepflanzter Zierstrauch. Es handelt sich um eine Hybride zweier Arten aus der Gattung der Forsythien. Diese gehört zur Familie der Ölbaumgewächse.</p>]]></glossDef>
    <glossSynonyms/>
    <revHistory>
      <revision>
        <author>
          <firstname>Jeremery</firstname>
          <surname>Johns</surname>
          <link>[Identity:66027520]</link>
        </author>
        <revisionflag>added</revisionflag>
        <date>22 Mar 2021</date>
      </revision>
      <revision>
        <author>
          <firstname>Jeremery</firstname>
          <surname>Johns</surname>
          <link>[Identity:66027520]</link>
        </author>
        <revisionflag>added</revisionflag>
        <date>22 Mar 2021</date>
      </revision>
      <revision>
        <author>
          <firstname>Jeremery</firstname>
          <surname>Johns</surname>
          <link>[Identity:66027520]</link>
        </author>
        <revisionflag>changed</revisionflag>
        <date>22 Mar 2021</date>
      </revision>
    </revHistory>
  </glossentry>
  <glossentry>
    <glossTerm>Kraut- und Braunfäule</glossTerm>
    <glossDef><![CDATA[<p><img src="https://www.gesal.ch/.imaging/focus/dam/global/pests-diseases/Kraut-Braunfaeule_Tomate.jpg0/jcr:content.jpeg?x&#61;53&amp;y&#61;41&amp;lastModified&#61;Mon&#43;Dec&#43;02&#43;13%3A31%3A13&#43;CET&#43;2019&amp;width&#61;472&amp;height&#61;354" alt=" herb and brown rot - Kraut- und Braunfaeule" width="117" height="88" /></p>
<p>Kraut- und Braunfäule ist eine Pilzerkrankung, die vor allem im Sommer bei feuchten Witterungsbedingungen auftritt. Bei Tomatenpflanzen erscheinen auf den Blättern graugrüne später braune Flecken, die sich schnell ausbreiten. Die Früchte zeigen schmutzig braune Flecken. Das Fruchtfleisch ist unter den Flecken verhärtet und fault. Die Dauerformen dieses Schadpilzes überdauern im Boden und befallen bei geeigneten Bedingungen (feuchtwarm über 15°C) ab Ende Juni zunächst die bodennahen Blätter.</p>]]></glossDef>
    <glossSynonyms/>
    <revHistory>
      <revision>
        <author>
          <firstname>Jeremery</firstname>
          <surname>Johns</surname>
          <link>[Identity:66027520]</link>
        </author>
        <revisionflag>added</revisionflag>
        <date>23 Mar 2021</date>
      </revision>
    </revHistory>
  </glossentry>
  <glossentry>
    <glossTerm>Test</glossTerm>
    <glossDef></glossDef>
    <glossSynonyms/>
    <revHistory>
      <revision>
        <author>
          <firstname>Jeremery</firstname>
          <surname>Johns</surname>
          <link>[Identity:66027520]</link>
        </author>
        <revisionflag>added</revisionflag>
        <date>23 Mar 2021</date>
      </revision>
    </revHistory>
  </glossentry>
  <glossentry>
    <glossTerm>Tomatenhaus</glossTerm>
    <glossDef><![CDATA[<p>Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.</p>]]></glossDef>
    <glossSynonyms/>
    <revHistory>
      <revision>
        <author>
          <firstname>Jeremery</firstname>
          <surname>Johns</surname>
          <link>[Identity:66027520]</link>
        </author>
        <revisionflag>added</revisionflag>
        <date>24 Mar 2021</date>
      </revision>
    </revHistory>
  </glossentry>
</list>
		ptask.setTask(PersistentTaskDAO.toXML(new DummyTask()));
		alienTask.setTask(PersistentTaskDAO.toXML(new DummyTask()));
	
		Object objReloaded = MapperDAO.fromXML(pMapper.getXmlConfiguration());
		Object objReloaded = MapperDAO.fromXML(pMapper.getXmlConfiguration());
		Object objReloaded2 = MapperDAO.fromXML(loadedMapper2.getXmlConfiguration());
		Object objReloaded = MapperDAO.fromXML(pMapper.getXmlConfiguration());
		Object objReloaded2 = MapperDAO.fromXML(loadedMapper2.getXmlConfiguration());
			// do nothing
/**
 * <a href="http://www.openolat.org">
 * OpenOLAT - Online Learning and Training</a><br>
 * <p>
 * Licensed under the Apache License, Version 2.0 (the "License"); <br>
 * you may not use this file except in compliance with the License.<br>
 * You may obtain a copy of the License at the
 * <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache homepage</a>
 * <p>
 * Unless required by applicable law or agreed to in writing,<br>
 * software distributed under the License is distributed on an "AS IS" BASIS, <br>
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br>
 * See the License for the specific language governing permissions and <br>
 * limitations under the License.
 * <p>
 * Initial code contributed and copyrighted by<br>
 * frentix GmbH, http://www.frentix.com
 * <p>
 */
package org.olat.core.util.xml;

import java.io.File;
import java.net.URISyntaxException;
import java.net.URL;

import org.junit.Assert;
import org.junit.Test;
import org.olat.core.logging.OLATRuntimeException;

import com.thoughtworks.xstream.converters.ConversionException;

/**
 * 
 * Initial date: 18 juin 2021<br>
 * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
 *
 */
public class XStreamHelperTest {
	
	@Test
	public void readXmlMapAllowed() throws URISyntaxException {
		URL url = XStreamHelperTest.class.getResource("xstream_map_strings.xml");
		File file = new File(url.toURI());
		Object obj = XStreamHelper.createXStreamInstance().fromXML(file);
		Assert.assertNotNull(obj);
	}
	
	@Test
	public void readXmlMapDbObjectsAllowed() throws URISyntaxException {
		URL url = XStreamHelperTest.class.getResource("xstream_map_strings.xml");
		File file = new File(url.toURI());
		Object obj = XStreamHelper.createXStreamInstanceForDBObjects().fromXML(file);
		Assert.assertNotNull(obj);
	}
	
	@Test
	public void readXmlMapUnconfiguredAllowed() throws URISyntaxException {
		URL url = XStreamHelperTest.class.getResource("xstream_map_strings.xml");
		File file = new File(url.toURI());
		Object obj = XStreamHelper.readObject(file);
		Assert.assertNotNull(obj);
	}

	@Test(expected = ConversionException.class)
	public void readXmlMapNotAllowed() throws URISyntaxException {
		URL url = XStreamHelperTest.class.getResource("xstream_map_alien.xml");
		File file = new File(url.toURI());
		XStreamHelper.createXStreamInstance().fromXML(file);
	}
	
	@Test(expected = ConversionException.class)
	public void readXmlMapDbObjectsNotAllowed() throws URISyntaxException {
		URL url = XStreamHelperTest.class.getResource("xstream_map_alien.xml");
		File file = new File(url.toURI());
		XStreamHelper.createXStreamInstanceForDBObjects().fromXML(file);
	}
	
	@Test(expected = OLATRuntimeException.class)
	public void readXmlMapUnconfiguredNotAllowed() throws URISyntaxException {
		URL url = XStreamHelperTest.class.getResource("xstream_map_alien.xml");
		File file = new File(url.toURI());
		XStreamHelper.readObject(file);
	}
}
<java.util.HashMap>
  <entry>
    <string>Hello</string>
    <org.springframework.scheduling.quartz.JobDetailFactoryBean>
    	<name>World</name>
    </org.springframework.scheduling.quartz.JobDetailFactoryBean>
  </entry>
</java.util.HashMap>
<java.util.HashMap>
  <entry>
    <string>Hello</string>
    <string>World</string>
  </entry>
</java.util.HashMap>
	org.olat.core.util.xml.XStreamHelperTest.class,
	org.olat.core.commons.modules.glossary.GlossaryItemManagerTest.class,
	org.olat.upgrade.UpgradeDefinitionTest.class,
	org.olat.upgrade.UpgradeManagerTest.class
import java.io.FileOutputStream;
import java.net.URI;
import org.apache.logging.log4j.Logger;
import org.olat.core.logging.Tracing;
	
	private static final Logger log = Tracing.createLoggerFor(VFSJavaIOFile.class);
	public VFSJavaIOFile(URI uri) {
		this(new File(uri));
	}
	
		try {
			return new FileOutputStream(file);
		} catch (FileNotFoundException e) {
			log.error("", e);
			return null;
		}
/**
 * <a href="http://www.openolat.org">
 * OpenOLAT - Online Learning and Training</a><br>
 * <p>
 * Licensed under the Apache License, Version 2.0 (the "License"); <br>
 * you may not use this file except in compliance with the License.<br>
 * You may obtain a copy of the License at the
 * <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache homepage</a>
 * <p>
 * Unless required by applicable law or agreed to in writing,<br>
 * software distributed under the License is distributed on an "AS IS" BASIS, <br>
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br>
 * See the License for the specific language governing permissions and <br>
 * limitations under the License.
 * <p>
 * Initial code contributed and copyrighted by<br>
 * frentix GmbH, http://www.frentix.com
 * <p>
 */
package org.olat.upgrade;

import java.io.File;
import java.net.URL;
import java.util.Map;
import java.util.UUID;

import org.apache.logging.log4j.Logger;
import org.junit.Assert;
import org.junit.Test;
import org.olat.core.logging.Tracing;
import org.olat.core.util.WebappHelper;
import org.olat.core.util.xml.XStreamHelper;

/**
 * 
 * Initial date: 18 juin 2021<br>
 * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
 *
 */
public class UpgradeManagerTest {
	
	private static final Logger log = Tracing.createLoggerFor(UpgradeManagerTest.class);
	
	@Test
	public void readUpgradesXml() throws Exception {
		URL upgradeUrl = UpgradeManagerTest.class.getResource("installed_upgrades.xml");
		File upgradeFile = new File(upgradeUrl.toURI());
		Map<String, UpgradeHistoryData> upgrades = UpgradeManager.read(upgradeFile);
		Assert.assertNotNull(upgrades);
		Assert.assertFalse(upgrades.isEmpty());
	}
	
	@Test
	public void readDatabaseUpgradesXml() throws Exception {
		URL upgradeUrl = UpgradeManagerTest.class.getResource("installed_database_upgrades.xml");
		File upgradeFile = new File(upgradeUrl.toURI());
		Map<String, UpgradeHistoryData> upgrades = UpgradeManager.read(upgradeFile);
		Assert.assertNotNull(upgrades);
		Assert.assertFalse(upgrades.isEmpty());
	}
	
	@Test
	public void writeDatabaseUpgradesXml() throws Exception {
		URL upgradeUrl = UpgradeManagerTest.class.getResource("installed_database_upgrades.xml");
		File upgradeFile = new File(upgradeUrl.toURI());
		Map<String, UpgradeHistoryData> upgrades = UpgradeManager.read(upgradeFile);
		Assert.assertNotNull(upgrades);
		Assert.assertFalse(upgrades.isEmpty());

		File savedFile = new File(WebappHelper.getTmpDir(), "upgradeDB-" + UUID.randomUUID() + ".xml");
		XStreamHelper.writeObject(UpgradeManager.upgradesXStream, savedFile, upgrades);
		if(!savedFile.delete()) {
			log.error("Cannot delete: {}", savedFile);
		}
	}
}
<?xml version="1.0" encoding="UTF-8"?>
<map>
  <entry>
    <string>OLAT_11.0.6</string>
    <org.olat.upgrade.UpgradeHistoryData>
      <upgradeData>
        <entry>
          <string>Database update</string>
          <boolean>true</boolean>
        </entry>
      </upgradeData>
      <installationComplete>true</installationComplete>
    </org.olat.upgrade.UpgradeHistoryData>
  </entry>
  <entry>
    <string>OLAT_11.0.0</string>
    <org.olat.upgrade.UpgradeHistoryData>
      <upgradeData>
        <entry>
          <string>Database update</string>
          <boolean>true</boolean>
        </entry>
      </upgradeData>
      <installationComplete>true</installationComplete>
    </org.olat.upgrade.UpgradeHistoryData>
  </entry>
  <entry>
    <string>OLAT_15.3.1</string>
    <org.olat.upgrade.UpgradeHistoryData>
      <upgradeData>
        <entry>
          <string>Database update</string>
          <boolean>true</boolean>
        </entry>
      </upgradeData>
      <installationComplete>true</installationComplete>
    </org.olat.upgrade.UpgradeHistoryData>
  </entry>
  <entry>
    <string>OLAT_15.3.0</string>
    <org.olat.upgrade.UpgradeHistoryData>
      <upgradeData>
        <entry>
          <string>Database update</string>
          <boolean>true</boolean>
        </entry>
      </upgradeData>
      <installationComplete>true</installationComplete>
    </org.olat.upgrade.UpgradeHistoryData>
  </entry>
  <entry>
    <string>OLAT_15.3.2</string>
    <org.olat.upgrade.UpgradeHistoryData>
      <upgradeData>
        <entry>
          <string>Database update</string>
          <boolean>true</boolean>
        </entry>
      </upgradeData>
      <installationComplete>true</installationComplete>
    </org.olat.upgrade.UpgradeHistoryData>
  </entry>
  <entry>
    <string>OLAT_14.2.16</string>
    <org.olat.upgrade.UpgradeHistoryData>
      <upgradeData>
        <entry>
          <string>Database update</string>
          <boolean>true</boolean>
        </entry>
      </upgradeData>
      <installationComplete>true</installationComplete>
    </org.olat.upgrade.UpgradeHistoryData>
  </entry>
  <entry>
    <string>OLAT_14.2.17</string>
    <org.olat.upgrade.UpgradeHistoryData>
      <upgradeData>
        <entry>
          <string>Database update</string>
          <boolean>true</boolean>
        </entry>
      </upgradeData>
      <installationComplete>true</installationComplete>
    </org.olat.upgrade.UpgradeHistoryData>
  </entry>
  <entry>
    <string>OLAT_14.1.0</string>
    <org.olat.upgrade.UpgradeHistoryData>
      <upgradeData>
        <entry>
          <string>Database update</string>
          <boolean>true</boolean>
        </entry>
      </upgradeData>
      <installationComplete>true</installationComplete>
    </org.olat.upgrade.UpgradeHistoryData>
  </entry>
  <entry>
    <string>OLAT_9.2.0</string>
    <org.olat.upgrade.UpgradeHistoryData>
      <upgradeData>
        <entry>
          <string>Database update</string>
          <boolean>true</boolean>
        </entry>
      </upgradeData>
      <installationComplete>true</installationComplete>
    </org.olat.upgrade.UpgradeHistoryData>
  </entry>
  <entry>
    <string>OLAT_14.2.13</string>
    <org.olat.upgrade.UpgradeHistoryData>
      <upgradeData>
        <entry>
          <string>Database update</string>
          <boolean>true</boolean>
        </entry>
      </upgradeData>
      <installationComplete>true</installationComplete>
    </org.olat.upgrade.UpgradeHistoryData>
  </entry>
  <entry>
    <string>OLAT_14.1.3</string>
    <org.olat.upgrade.UpgradeHistoryData>
      <upgradeData>
        <entry>
          <string>Database update</string>
          <boolean>true</boolean>
        </entry>
      </upgradeData>
      <installationComplete>true</installationComplete>
    </org.olat.upgrade.UpgradeHistoryData>
  </entry>
  <entry>
    <string>OLAT_14.1.2</string>
    <org.olat.upgrade.UpgradeHistoryData>
      <upgradeData>
        <entry>
          <string>Database update</string>
          <boolean>true</boolean>
        </entry>
      </upgradeData>
      <installationComplete>true</installationComplete>
    </org.olat.upgrade.UpgradeHistoryData>
  </entry>
  <entry>
    <string>OLAT_14.1.6</string>
    <org.olat.upgrade.UpgradeHistoryData>
      <upgradeData>
        <entry>
          <string>Database update</string>
          <boolean>true</boolean>
        </entry>
      </upgradeData>
      <installationComplete>true</installationComplete>
    </org.olat.upgrade.UpgradeHistoryData>
  </entry>
  <entry>
    <string>OLAT_10.2.0</string>
    <org.olat.upgrade.UpgradeHistoryData>
      <upgradeData>
        <entry>
          <string>Database update</string>
          <boolean>true</boolean>
        </entry>
      </upgradeData>
      <installationComplete>true</installationComplete>
    </org.olat.upgrade.UpgradeHistoryData>
  </entry>
  <entry>
    <string>OLAT_13.3.0</string>
    <org.olat.upgrade.UpgradeHistoryData>
      <upgradeData>
        <entry>
          <string>Database update</string>
          <boolean>true</boolean>
        </entry>
      </upgradeData>
      <installationComplete>true</installationComplete>
    </org.olat.upgrade.UpgradeHistoryData>
  </entry>
  <entry>
    <string>OLAT_12.1.1</string>
    <org.olat.upgrade.UpgradeHistoryData>
      <upgradeData>
        <entry>
          <string>Database update</string>
          <boolean>true</boolean>
        </entry>
      </upgradeData>
      <installationComplete>true</installationComplete>
    </org.olat.upgrade.UpgradeHistoryData>
  </entry>
  <entry>
    <string>OLAT_12.1.0</string>
    <org.olat.upgrade.UpgradeHistoryData>
      <upgradeData>
        <entry>
          <string>Database update</string>
          <boolean>true</boolean>
        </entry>
      </upgradeData>
      <installationComplete>true</installationComplete>
    </org.olat.upgrade.UpgradeHistoryData>
  </entry>
  <entry>
    <string>OLAT_8.1.0</string>
    <org.olat.upgrade.UpgradeHistoryData>
      <upgradeData>
        <entry>
          <string>Database update</string>
          <boolean>true</boolean>
        </entry>
      </upgradeData>
      <installationComplete>true</installationComplete>
    </org.olat.upgrade.UpgradeHistoryData>
  </entry>
  <entry>
    <string>OLAT_12.5.0</string>
    <org.olat.upgrade.UpgradeHistoryData>
      <upgradeData>
        <entry>
          <string>Database update</string>
          <boolean>true</boolean>
        </entry>
      </upgradeData>
      <installationComplete>true</installationComplete>
    </org.olat.upgrade.UpgradeHistoryData>
  </entry>
  <entry>
    <string>OLAT_11.5.1</string>
    <org.olat.upgrade.UpgradeHistoryData>
      <upgradeData>
        <entry>
          <string>Database update</string>
          <boolean>true</boolean>
        </entry>
      </upgradeData>
      <installationComplete>true</installationComplete>
    </org.olat.upgrade.UpgradeHistoryData>
  </entry>
  <entry>
    <string>OLAT_11.5.0</string>
    <org.olat.upgrade.UpgradeHistoryData>
      <upgradeData>
        <entry>
          <string>Database update</string>
          <boolean>true</boolean>
        </entry>
      </upgradeData>
      <installationComplete>true</installationComplete>
    </org.olat.upgrade.UpgradeHistoryData>
  </entry>
  <entry>
    <string>OLAT_9.1.0</string>
    <org.olat.upgrade.UpgradeHistoryData>
      <upgradeData>
        <entry>
          <string>Database update</string>
          <boolean>true</boolean>
        </entry>
      </upgradeData>
      <installationComplete>true</installationComplete>
    </org.olat.upgrade.UpgradeHistoryData>
  </entry>
  <entry>
    <string>OLAT_15.2.0</string>
    <org.olat.upgrade.UpgradeHistoryData>
      <upgradeData>
        <entry>
          <string>Database update</string>
          <boolean>true</boolean>
        </entry>
      </upgradeData>
      <installationComplete>true</installationComplete>
    </org.olat.upgrade.UpgradeHistoryData>
  </entry>
  <entry>
    <string>OLAT_15.2.2</string>
    <org.olat.upgrade.UpgradeHistoryData>
      <upgradeData>
        <entry>
          <string>Database update</string>
          <boolean>true</boolean>
        </entry>
      </upgradeData>
      <installationComplete>true</installationComplete>
    </org.olat.upgrade.UpgradeHistoryData>
  </entry>
  <entry>
    <string>OLAT_15.2.1</string>
    <org.olat.upgrade.UpgradeHistoryData>
      <upgradeData>
        <entry>
          <string>Database update</string>
          <boolean>true</boolean>
        </entry>
      </upgradeData>
      <installationComplete>true</installationComplete>
    </org.olat.upgrade.UpgradeHistoryData>
  </entry>
  <entry>
    <string>OLAT_11.1.0</string>
    <org.olat.upgrade.UpgradeHistoryData>
      <upgradeData>
        <entry>
          <string>Database update</string>
          <boolean>true</boolean>
        </entry>
      </upgradeData>
      <installationComplete>true</installationComplete>
    </org.olat.upgrade.UpgradeHistoryData>
  </entry>
  <entry>
    <string>OLAT_15.2.3</string>
    <org.olat.upgrade.UpgradeHistoryData>
      <upgradeData>
        <entry>
          <string>Database update</string>
          <boolean>true</boolean>
        </entry>
      </upgradeData>
      <installationComplete>true</installationComplete>
    </org.olat.upgrade.UpgradeHistoryData>
  </entry>
  <entry>
    <string>OLAT_15.2.6</string>
    <org.olat.upgrade.UpgradeHistoryData>
      <upgradeData>
        <entry>
          <string>Database update</string>
          <boolean>true</boolean>
        </entry>
      </upgradeData>
      <installationComplete>true</installationComplete>
    </org.olat.upgrade.UpgradeHistoryData>
  </entry>
  <entry>
    <string>OLAT_11.1.2</string>
    <org.olat.upgrade.UpgradeHistoryData>
      <upgradeData>
        <entry>
          <string>Database update</string>
          <boolean>true</boolean>
        </entry>
      </upgradeData>
      <installationComplete>true</installationComplete>
    </org.olat.upgrade.UpgradeHistoryData>
  </entry>
  <entry>
    <string>OLAT_15.2.5</string>
    <org.olat.upgrade.UpgradeHistoryData>
      <upgradeData>
        <entry>
          <string>Database update</string>
          <boolean>true</boolean>
        </entry>
      </upgradeData>
      <installationComplete>true</installationComplete>
    </org.olat.upgrade.UpgradeHistoryData>
  </entry>
  <entry>
    <string>OLAT_10.3.3</string>
    <org.olat.upgrade.UpgradeHistoryData>
      <upgradeData>
        <entry>
          <string>Database update</string>
          <boolean>true</boolean>
        </entry>
      </upgradeData>
      <installationComplete>true</installationComplete>
    </org.olat.upgrade.UpgradeHistoryData>
  </entry>
  <entry>
    <string>OLAT_14.0.1</string>
    <org.olat.upgrade.UpgradeHistoryData>
      <upgradeData>
        <entry>
          <string>Database update</string>
          <boolean>true</boolean>
        </entry>
      </upgradeData>
      <installationComplete>true</installationComplete>
    </org.olat.upgrade.UpgradeHistoryData>
  </entry>
  <entry>
    <string>OLAT_14.0.0</string>
    <org.olat.upgrade.UpgradeHistoryData>
      <upgradeData>
        <entry>
          <string>Database update</string>
          <boolean>true</boolean>
        </entry>
      </upgradeData>
      <installationComplete>true</installationComplete>
    </org.olat.upgrade.UpgradeHistoryData>
  </entry>
  <entry>
    <string>OLAT_11.0.0-user</string>
    <org.olat.upgrade.UpgradeHistoryData>
      <upgradeData>
        <entry>
          <string>Database update</string>
          <boolean>true</boolean>
        </entry>
      </upgradeData>
      <installationComplete>true</installationComplete>
    </org.olat.upgrade.UpgradeHistoryData>
  </entry>
  <entry>
    <string>OLATfx_8.2.0</string>
    <org.olat.upgrade.UpgradeHistoryData>
      <upgradeData>
        <entry>
          <string>Database update</string>
          <boolean>true</boolean>
        </entry>
      </upgradeData>
      <installationComplete>true</installationComplete>
    </org.olat.upgrade.UpgradeHistoryData>
  </entry>
  <entry>
    <string>OLAT_10.3.1</string>
    <org.olat.upgrade.UpgradeHistoryData>
      <upgradeData>
        <entry>
          <string>Database update</string>
          <boolean>true</boolean>
        </entry>
      </upgradeData>
      <installationComplete>true</installationComplete>
    </org.olat.upgrade.UpgradeHistoryData>
  </entry>
  <entry>
    <string>OLAT_10.3.0</string>
    <org.olat.upgrade.UpgradeHistoryData>
      <upgradeData>
        <entry>
          <string>Database update</string>
          <boolean>true</boolean>
        </entry>
      </upgradeData>
      <installationComplete>true</installationComplete>
    </org.olat.upgrade.UpgradeHistoryData>
  </entry>
  <entry>
    <string>OLAT_13.2.0</string>
    <org.olat.upgrade.UpgradeHistoryData>
      <upgradeData>
        <entry>
          <string>Database update</string>
          <boolean>true</boolean>
        </entry>
      </upgradeData>
      <installationComplete>true</installationComplete>
    </org.olat.upgrade.UpgradeHistoryData>
  </entry>
  <entry>
    <string>OLAT_13.2.3</string>
    <org.olat.upgrade.UpgradeHistoryData>
      <upgradeData>
        <entry>
          <string>Database update</string>
          <boolean>true</boolean>
        </entry>
      </upgradeData>
      <installationComplete>true</installationComplete>
    </org.olat.upgrade.UpgradeHistoryData>
  </entry>
  <entry>
    <string>OLAT_12.0.1</string>
    <org.olat.upgrade.UpgradeHistoryData>
      <upgradeData>
        <entry>
          <string>Database update</string>
          <boolean>true</boolean>
        </entry>
      </upgradeData>
      <installationComplete>true</installationComplete>
    </org.olat.upgrade.UpgradeHistoryData>
  </entry>
  <entry>
    <string>OLAT_12.0.0</string>
    <org.olat.upgrade.UpgradeHistoryData>
      <upgradeData>
        <entry>
          <string>Database update</string>
          <boolean>true</boolean>
        </entry>
      </upgradeData>
      <installationComplete>true</installationComplete>
    </org.olat.upgrade.UpgradeHistoryData>
  </entry>
  <entry>
    <string>OLAT_15.3.8</string>
    <org.olat.upgrade.UpgradeHistoryData>
      <upgradeData>
        <entry>
          <string>Database update</string>
          <boolean>true</boolean>
        </entry>
      </upgradeData>
      <installationComplete>true</installationComplete>
    </org.olat.upgrade.UpgradeHistoryData>
  </entry>
  <entry>
    <string>OLAT_8.2.0</string>
    <org.olat.upgrade.UpgradeHistoryData>
      <upgradeData>
        <entry>
          <string>Database update</string>
          <boolean>true</boolean>
        </entry>
      </upgradeData>
      <installationComplete>true</installationComplete>
    </org.olat.upgrade.UpgradeHistoryData>
  </entry>
  <entry>
    <string>OLAT_12.4.1</string>
    <org.olat.upgrade.UpgradeHistoryData>
      <upgradeData>
        <entry>
          <string>Database update</string>
          <boolean>true</boolean>
        </entry>
      </upgradeData>
      <installationComplete>true</installationComplete>
    </org.olat.upgrade.UpgradeHistoryData>
  </entry>
  <entry>
    <string>OLAT_12.4.0</string>
    <org.olat.upgrade.UpgradeHistoryData>
      <upgradeData>
        <entry>
          <string>Database update</string>
          <boolean>true</boolean>
        </entry>
      </upgradeData>
      <installationComplete>true</installationComplete>
    </org.olat.upgrade.UpgradeHistoryData>
  </entry>
  <entry>
    <string>OLAT_9.0.0</string>
    <org.olat.upgrade.UpgradeHistoryData>
      <upgradeData>
        <entry>
          <string>Database update</string>
          <boolean>true</boolean>
        </entry>
      </upgradeData>
      <installationComplete>true</installationComplete>
    </org.olat.upgrade.UpgradeHistoryData>
  </entry>
  <entry>
    <string>OLAT_15.1.0</string>
    <org.olat.upgrade.UpgradeHistoryData>
      <upgradeData>
        <entry>
          <string>Database update</string>
          <boolean>true</boolean>
        </entry>
      </upgradeData>
      <installationComplete>true</installationComplete>
    </org.olat.upgrade.UpgradeHistoryData>
  </entry>
  <entry>
    <string>OLAT_11.2.0</string>
    <org.olat.upgrade.UpgradeHistoryData>
      <upgradeData>
        <entry>
          <string>Database update</string>
          <boolean>true</boolean>
        </entry>
      </upgradeData>
      <installationComplete>true</installationComplete>
    </org.olat.upgrade.UpgradeHistoryData>
  </entry>
  <entry>
    <string>OLAT_15.5.1</string>
    <org.olat.upgrade.UpgradeHistoryData>
      <upgradeData>
        <entry>
          <string>Database update</string>
          <boolean>true</boolean>
        </entry>
      </upgradeData>
      <installationComplete>true</installationComplete>
    </org.olat.upgrade.UpgradeHistoryData>
  </entry>
  <entry>
    <string>OLAT_15.5.0</string>
    <org.olat.upgrade.UpgradeHistoryData>
      <upgradeData>
        <entry>
          <string>Database update</string>
          <boolean>true</boolean>
        </entry>
      </upgradeData>
      <installationComplete>true</installationComplete>
    </org.olat.upgrade.UpgradeHistoryData>
  </entry>
  <entry>
    <string>OLAT_10.0.0</string>
    <org.olat.upgrade.UpgradeHistoryData>
      <upgradeData>
        <entry>
          <string>Database update</string>
          <boolean>true</boolean>
        </entry>
      </upgradeData>
      <installationComplete>true</installationComplete>
    </org.olat.upgrade.UpgradeHistoryData>
  </entry>
  <entry>
    <string>OLAT_9.4.0</string>
    <org.olat.upgrade.UpgradeHistoryData>
      <upgradeData>
        <entry>
          <string>Database update</string>
          <boolean>true</boolean>
        </entry>
      </upgradeData>
      <installationComplete>true</installationComplete>
    </org.olat.upgrade.UpgradeHistoryData>
  </entry>
  <entry>
    <string>OLATfx_8.1.0</string>
    <org.olat.upgrade.UpgradeHistoryData>
      <upgradeData>
        <entry>
          <string>Database update</string>
          <boolean>true</boolean>
        </entry>
      </upgradeData>
      <installationComplete>true</installationComplete>
    </org.olat.upgrade.UpgradeHistoryData>
  </entry>
  <entry>
    <string>OLAT_10.4.0</string>
    <org.olat.upgrade.UpgradeHistoryData>
      <upgradeData>
        <entry>
          <string>Database update</string>
          <boolean>true</boolean>
        </entry>
      </upgradeData>
      <installationComplete>true</installationComplete>
    </org.olat.upgrade.UpgradeHistoryData>
  </entry>
  <entry>
    <string>OLAT_13.1.1</string>
    <org.olat.upgrade.UpgradeHistoryData>
      <upgradeData>
        <entry>
          <string>Database update</string>
          <boolean>true</boolean>
        </entry>
      </upgradeData>
      <installationComplete>true</installationComplete>
    </org.olat.upgrade.UpgradeHistoryData>
  </entry>
  <entry>
    <string>OLAT_13.1.0</string>
    <org.olat.upgrade.UpgradeHistoryData>
      <upgradeData>
        <entry>
          <string>Database update</string>
          <boolean>true</boolean>
        </entry>
      </upgradeData>
      <installationComplete>true</installationComplete>
    </org.olat.upgrade.UpgradeHistoryData>
  </entry>
  <entry>
    <string>OLAT_7.1.2</string>
    <org.olat.upgrade.UpgradeHistoryData>
      <upgradeData>
        <entry>
          <string>Database update</string>
          <boolean>true</boolean>
        </entry>
      </upgradeData>
      <installationComplete>true</installationComplete>
    </org.olat.upgrade.UpgradeHistoryData>
  </entry>
  <entry>
    <string>OLAT_7.1.1</string>
    <org.olat.upgrade.UpgradeHistoryData>
      <upgradeData>
        <entry>
          <string>Database update</string>
          <boolean>true</boolean>
        </entry>
      </upgradeData>
      <installationComplete>true</installationComplete>
    </org.olat.upgrade.UpgradeHistoryData>
  </entry>
  <entry>
    <string>OLAT_7.1.0</string>
    <org.olat.upgrade.UpgradeHistoryData>
      <upgradeData>
        <entry>
          <string>Database update</string>
          <boolean>true</boolean>
        </entry>
      </upgradeData>
      <installationComplete>true</installationComplete>
    </org.olat.upgrade.UpgradeHistoryData>
  </entry>
  <entry>
    <string>OLAT_8.3.0</string>
    <org.olat.upgrade.UpgradeHistoryData>
      <upgradeData>
        <entry>
          <string>Database update</string>
          <boolean>true</boolean>
        </entry>
      </upgradeData>
      <installationComplete>true</installationComplete>
    </org.olat.upgrade.UpgradeHistoryData>
  </entry>
  <entry>
    <string>OLAT_13.0.0.beta1</string>
    <org.olat.upgrade.UpgradeHistoryData>
      <upgradeData>
        <entry>
          <string>Database update</string>
          <boolean>true</boolean>
        </entry>
      </upgradeData>
      <installationComplete>true</installationComplete>
    </org.olat.upgrade.UpgradeHistoryData>
  </entry>
  <entry>
    <string>OLAT_13.0.0.beta10</string>
    <org.olat.upgrade.UpgradeHistoryData>
      <upgradeData>
        <entry>
          <string>Database update</string>
          <boolean>true</boolean>
        </entry>
      </upgradeData>
      <installationComplete>true</installationComplete>
    </org.olat.upgrade.UpgradeHistoryData>
  </entry>
  <entry>
    <string>OLAT_13.0.0.beta4</string>
    <org.olat.upgrade.UpgradeHistoryData>
      <upgradeData>
        <entry>
          <string>Database update</string>
          <boolean>true</boolean>
        </entry>
      </upgradeData>
      <installationComplete>true</installationComplete>
    </org.olat.upgrade.UpgradeHistoryData>
  </entry>
  <entry>
    <string>OLAT_13.0.0.beta6</string>
    <org.olat.upgrade.UpgradeHistoryData>
      <upgradeData>
        <entry>
          <string>Database update</string>
          <boolean>true</boolean>
        </entry>
      </upgradeData>
      <installationComplete>true</installationComplete>
    </org.olat.upgrade.UpgradeHistoryData>
  </entry>
  <entry>
    <string>OLAT_15.pre.8</string>
    <org.olat.upgrade.UpgradeHistoryData>
      <upgradeData>
        <entry>
          <string>Database update</string>
          <boolean>true</boolean>
        </entry>
      </upgradeData>
      <installationComplete>true</installationComplete>
    </org.olat.upgrade.UpgradeHistoryData>
  </entry>
  <entry>
    <string>OLAT_13.0.0.beta8</string>
    <org.olat.upgrade.UpgradeHistoryData>
      <upgradeData>
        <entry>
          <string>Database update</string>
          <boolean>true</boolean>
        </entry>
      </upgradeData>
      <installationComplete>true</installationComplete>
    </org.olat.upgrade.UpgradeHistoryData>
  </entry>
  <entry>
    <string>OLAT_15.pre.6</string>
    <org.olat.upgrade.UpgradeHistoryData>
      <upgradeData>
        <entry>
          <string>Database update</string>
          <boolean>true</boolean>
        </entry>
      </upgradeData>
      <installationComplete>true</installationComplete>
    </org.olat.upgrade.UpgradeHistoryData>
  </entry>
  <entry>
    <string>OLAT_13.0.0.beta7</string>
    <org.olat.upgrade.UpgradeHistoryData>
      <upgradeData>
        <entry>
          <string>Database update</string>
          <boolean>true</boolean>
        </entry>
      </upgradeData>
      <installationComplete>true</installationComplete>
    </org.olat.upgrade.UpgradeHistoryData>
  </entry>
  <entry>
    <string>OLAT_15.pre.7</string>
    <org.olat.upgrade.UpgradeHistoryData>
      <upgradeData>
        <entry>
          <string>Database update</string>
          <boolean>true</boolean>
        </entry>
      </upgradeData>
      <installationComplete>true</installationComplete>
    </org.olat.upgrade.UpgradeHistoryData>
  </entry>
  <entry>
    <string>OLAT_12.3.0</string>
    <org.olat.upgrade.UpgradeHistoryData>
      <upgradeData>
        <entry>
          <string>Database update</string>
          <boolean>true</boolean>
        </entry>
      </upgradeData>
      <installationComplete>true</installationComplete>
    </org.olat.upgrade.UpgradeHistoryData>
  </entry>
  <entry>
    <string>OLAT_15.pre.4</string>
    <org.olat.upgrade.UpgradeHistoryData>
      <upgradeData>
        <entry>
          <string>Database update</string>
          <boolean>true</boolean>
        </entry>
      </upgradeData>
      <installationComplete>true</installationComplete>
    </org.olat.upgrade.UpgradeHistoryData>
  </entry>
  <entry>
    <string>OLAT_13.0.0.beta9</string>
    <org.olat.upgrade.UpgradeHistoryData>
      <upgradeData>
        <entry>
          <string>Database update</string>
          <boolean>true</boolean>
        </entry>
      </upgradeData>
      <installationComplete>true</installationComplete>
    </org.olat.upgrade.UpgradeHistoryData>
  </entry>
  <entry>
    <string>OLAT_15.pre.5</string>
    <org.olat.upgrade.UpgradeHistoryData>
      <upgradeData>
        <entry>
          <string>Database update</string>
          <boolean>true</boolean>
        </entry>
      </upgradeData>
      <installationComplete>true</installationComplete>
    </org.olat.upgrade.UpgradeHistoryData>
  </entry>
  <entry>
    <string>OLAT_15.2.7</string>
    <org.olat.upgrade.UpgradeHistoryData>
      <upgradeData>
        <entry>
          <string>Database update</string>
          <boolean>true</boolean>
        </entry>
      </upgradeData>
      <installationComplete>true</installationComplete>
    </org.olat.upgrade.UpgradeHistoryData>
  </entry>
  <entry>
    <string>OLAT_15.pre.3</string>
    <org.olat.upgrade.UpgradeHistoryData>
      <upgradeData>
        <entry>
          <string>Database update</string>
          <boolean>true</boolean>
        </entry>
      </upgradeData>
      <installationComplete>true</installationComplete>
    </org.olat.upgrade.UpgradeHistoryData>
  </entry>
  <entry>
    <string>OLAT_15.pre.0</string>
    <org.olat.upgrade.UpgradeHistoryData>
      <upgradeData>
        <entry>
          <string>Database update</string>
          <boolean>true</boolean>
        </entry>
      </upgradeData>
      <installationComplete>true</installationComplete>
    </org.olat.upgrade.UpgradeHistoryData>
  </entry>
  <entry>
    <string>OLAT_12.5.24</string>
    <org.olat.upgrade.UpgradeHistoryData>
      <upgradeData>
        <entry>
          <string>Database update</string>
          <boolean>true</boolean>
        </entry>
      </upgradeData>
      <installationComplete>true</installationComplete>
    </org.olat.upgrade.UpgradeHistoryData>
  </entry>
  <entry>
    <string>OLAT_15.0.2</string>
    <org.olat.upgrade.UpgradeHistoryData>
      <upgradeData>
        <entry>
          <string>Database update</string>
          <boolean>true</boolean>
        </entry>
      </upgradeData>
      <installationComplete>true</installationComplete>
    </org.olat.upgrade.UpgradeHistoryData>
  </entry>
  <entry>
    <string>OLAT_15.4.0</string>
    <org.olat.upgrade.UpgradeHistoryData>
      <upgradeData>
        <entry>
          <string>Database update</string>
          <boolean>true</boolean>
        </entry>
      </upgradeData>
      <installationComplete>true</installationComplete>
    </org.olat.upgrade.UpgradeHistoryData>
  </entry>
  <entry>
    <string>OLAT_15.0.3</string>
    <org.olat.upgrade.UpgradeHistoryData>
      <upgradeData>
        <entry>
          <string>Database update</string>
          <boolean>true</boolean>
        </entry>
      </upgradeData>
      <installationComplete>true</installationComplete>
    </org.olat.upgrade.UpgradeHistoryData>
  </entry>
  <entry>
    <string>OLAT_15.4.2</string>
    <org.olat.upgrade.UpgradeHistoryData>
      <upgradeData>
        <entry>
          <string>Database update</string>
          <boolean>true</boolean>
        </entry>
      </upgradeData>
      <installationComplete>true</installationComplete>
    </org.olat.upgrade.UpgradeHistoryData>
  </entry>
  <entry>
    <string>OLAT_15.4.1</string>
    <org.olat.upgrade.UpgradeHistoryData>
      <upgradeData>
        <entry>
          <string>Database update</string>
          <boolean>true</boolean>
        </entry>
      </upgradeData>
      <installationComplete>true</installationComplete>
    </org.olat.upgrade.UpgradeHistoryData>
  </entry>
  <entry>
    <string>OLAT_11.3.0</string>
    <org.olat.upgrade.UpgradeHistoryData>
      <upgradeData>
        <entry>
          <string>Database update</string>
          <boolean>true</boolean>
        </entry>
      </upgradeData>
      <installationComplete>true</installationComplete>
    </org.olat.upgrade.UpgradeHistoryData>
  </entry>
  <entry>
    <string>OLAT_10.5.8</string>
    <org.olat.upgrade.UpgradeHistoryData>
      <upgradeData>
        <entry>
          <string>Database update</string>
          <boolean>true</boolean>
        </entry>
      </upgradeData>
      <installationComplete>true</installationComplete>
    </org.olat.upgrade.UpgradeHistoryData>
  </entry>
  <entry>
    <string>OLAT_10.5.7</string>
    <org.olat.upgrade.UpgradeHistoryData>
      <upgradeData>
        <entry>
          <string>Database update</string>
          <boolean>true</boolean>
        </entry>
      </upgradeData>
      <installationComplete>true</installationComplete>
    </org.olat.upgrade.UpgradeHistoryData>
  </entry>
  <entry>
    <string>OLAT_10.5.5</string>
    <org.olat.upgrade.UpgradeHistoryData>
      <upgradeData>
        <entry>
          <string>Database update</string>
          <boolean>true</boolean>
        </entry>
      </upgradeData>
      <installationComplete>true</installationComplete>
    </org.olat.upgrade.UpgradeHistoryData>
  </entry>
  <entry>
    <string>OLAT_10.1.0</string>
    <org.olat.upgrade.UpgradeHistoryData>
      <upgradeData>
        <entry>
          <string>Database update</string>
          <boolean>true</boolean>
        </entry>
      </upgradeData>
      <installationComplete>true</installationComplete>
    </org.olat.upgrade.UpgradeHistoryData>
  </entry>
  <entry>
    <string>OLAT_14.2.0</string>
    <org.olat.upgrade.UpgradeHistoryData>
      <upgradeData>
        <entry>
          <string>Database update</string>
          <boolean>true</boolean>
        </entry>
      </upgradeData>
      <installationComplete>true</installationComplete>
    </org.olat.upgrade.UpgradeHistoryData>
  </entry>
  <entry>
    <string>OLAT_10.5.0</string>
    <org.olat.upgrade.UpgradeHistoryData>
      <upgradeData>
        <entry>
          <string>Database update</string>
          <boolean>true</boolean>
        </entry>
      </upgradeData>
      <installationComplete>true</installationComplete>
    </org.olat.upgrade.UpgradeHistoryData>
  </entry>
  <entry>
    <string>OLAT_14.2.7</string>
    <org.olat.upgrade.UpgradeHistoryData>
      <upgradeData>
        <entry>
          <string>Database update</string>
          <boolean>true</boolean>
        </entry>
      </upgradeData>
      <installationComplete>true</installationComplete>
    </org.olat.upgrade.UpgradeHistoryData>
  </entry>
  <entry>
    <string>OLAT_14.2.6</string>
    <org.olat.upgrade.UpgradeHistoryData>
      <upgradeData>
        <entry>
          <string>Database update</string>
          <boolean>true</boolean>
        </entry>
      </upgradeData>
      <installationComplete>true</installationComplete>
    </org.olat.upgrade.UpgradeHistoryData>
  </entry>
  <entry>
    <string>OLAT_14.2.5</string>
    <org.olat.upgrade.UpgradeHistoryData>
      <upgradeData>
        <entry>
          <string>Database update</string>
          <boolean>true</boolean>
        </entry>
      </upgradeData>
      <installationComplete>true</installationComplete>
    </org.olat.upgrade.UpgradeHistoryData>
  </entry>
  <entry>
    <string>OLAT_12.5.14</string>
    <org.olat.upgrade.UpgradeHistoryData>
      <upgradeData>
        <entry>
          <string>Database update</string>
          <boolean>true</boolean>
        </entry>
      </upgradeData>
      <installationComplete>true</installationComplete>
    </org.olat.upgrade.UpgradeHistoryData>
  </entry>
  <entry>
    <string>OLAT_13.0.0</string>
    <org.olat.upgrade.UpgradeHistoryData>
      <upgradeData>
        <entry>
          <string>Database update</string>
          <boolean>true</boolean>
        </entry>
      </upgradeData>
      <installationComplete>true</installationComplete>
    </org.olat.upgrade.UpgradeHistoryData>
  </entry>
  <entry>
    <string>OLAT_8.4.0</string>
    <org.olat.upgrade.UpgradeHistoryData>
      <upgradeData>
        <entry>
          <string>Database update</string>
          <boolean>true</boolean>
        </entry>
      </upgradeData>
      <installationComplete>true</installationComplete>
    </org.olat.upgrade.UpgradeHistoryData>
  </entry>
  <entry>
    <string>OLAT_12.2.0</string>
    <org.olat.upgrade.UpgradeHistoryData>
      <upgradeData>
        <entry>
          <string>Database update</string>
          <boolean>true</boolean>
        </entry>
      </upgradeData>
      <installationComplete>true</installationComplete>
    </org.olat.upgrade.UpgradeHistoryData>
  </entry>
  <entry>
    <string>OLAT_8.0.0</string>
    <org.olat.upgrade.UpgradeHistoryData>
      <upgradeData>
        <entry>
          <string>Database update</string>
          <boolean>true</boolean>
        </entry>
      </upgradeData>
      <installationComplete>true</installationComplete>
    </org.olat.upgrade.UpgradeHistoryData>
  </entry>
  <entry>
    <string>OLAT_8.0.2</string>
    <org.olat.upgrade.UpgradeHistoryData>
      <upgradeData>
        <entry>
          <string>Database update</string>
          <boolean>true</boolean>
        </entry>
      </upgradeData>
      <installationComplete>true</installationComplete>
    </org.olat.upgrade.UpgradeHistoryData>
  </entry>
</map>
<?xml version="1.0" encoding="UTF-8"?>
<map>
  <entry>
    <string>OLAT_11.0.6</string>
    <org.olat.upgrade.UpgradeHistoryData>
      <upgradeData>
        <entry>
          <string>RECERTIFICATION DATE</string>
          <boolean>true</boolean>
        </entry>
      </upgradeData>
      <installationComplete>true</installationComplete>
    </org.olat.upgrade.UpgradeHistoryData>
  </entry>
  <entry>
    <string>OLAT_9.0.0</string>
    <org.olat.upgrade.UpgradeHistoryData>
      <upgradeData>
        <entry>
          <string>Database update</string>
          <boolean>true</boolean>
        </entry>
      </upgradeData>
      <installationComplete>true</installationComplete>
    </org.olat.upgrade.UpgradeHistoryData>
  </entry>
  <entry>
    <string>OLAT_15.1.0</string>
    <org.olat.upgrade.UpgradeHistoryData>
      <upgradeData>
        <entry>
          <string>ADD BIG BLUE BUTTON URL TO CALENDAR</string>
          <boolean>true</boolean>
        </entry>
        <entry>
          <string>MIGRATE USER LIFECYCLE</string>
          <boolean>true</boolean>
        </entry>
      </upgradeData>
      <installationComplete>true</installationComplete>
    </org.olat.upgrade.UpgradeHistoryData>
  </entry>
  <entry>
    <string>OLAT_11.0.0</string>
    <org.olat.upgrade.UpgradeHistoryData>
      <upgradeData>
        <entry>
          <string>ASSESSMENT PROPERTY TABLE</string>
          <boolean>true</boolean>
        </entry>
        <entry>
          <string>EFFICIENCY STATEMENT TABLE</string>
          <boolean>true</boolean>
        </entry>
        <entry>
          <string>PORTFOLIO SETTINGS</string>
          <boolean>true</boolean>
        </entry>
      </upgradeData>
      <installationComplete>true</installationComplete>
    </org.olat.upgrade.UpgradeHistoryData>
  </entry>
  <entry>
    <string>OLAT_15.3.0</string>
    <org.olat.upgrade.UpgradeHistoryData>
      <upgradeData>
        <entry>
          <string>RESET FAILED THUMBNAILS</string>
          <boolean>true</boolean>
        </entry>
        <entry>
          <string>MIGRATE ONLYOFFICE CONFIGS</string>
          <boolean>true</boolean>
        </entry>
      </upgradeData>
      <installationComplete>true</installationComplete>
    </org.olat.upgrade.UpgradeHistoryData>
  </entry>
  <entry>
    <string>OLAT_11.0.2</string>
    <org.olat.upgrade.UpgradeHistoryData>
      <upgradeData>
        <entry>
          <string>PORTFOLIO v2 USER TOOL</string>
          <boolean>true</boolean>
        </entry>
      </upgradeData>
      <installationComplete>true</installationComplete>
    </org.olat.upgrade.UpgradeHistoryData>
  </entry>
  <entry>
    <string>OLAT_15.5.1</string>
    <org.olat.upgrade.UpgradeHistoryData>
      <upgradeData>
        <entry>
          <string>ADD MISSING ENTRY TECHNICAL TYPE</string>
          <boolean>true</boolean>
        </entry>
        <entry>
          <string>COPY PORTFOLIO PAGE EDITABLE FLAG</string>
          <boolean>true</boolean>
        </entry>
      </upgradeData>
      <installationComplete>true</installationComplete>
    </org.olat.upgrade.UpgradeHistoryData>
  </entry>
  <entry>
    <string>OLAT_11.4.0</string>
    <org.olat.upgrade.UpgradeHistoryData>
      <upgradeData>
        <entry>
          <string>GROUP INFO MESSAGE</string>
          <boolean>true</boolean>
        </entry>
      </upgradeData>
      <installationComplete>true</installationComplete>
    </org.olat.upgrade.UpgradeHistoryData>
  </entry>
  <entry>
    <string>OLAT_11.2.1</string>
    <org.olat.upgrade.UpgradeHistoryData>
      <upgradeData>
        <entry>
          <string>STATUS OLD TASK ELEMENT</string>
          <boolean>true</boolean>
        </entry>
      </upgradeData>
      <installationComplete>true</installationComplete>
    </org.olat.upgrade.UpgradeHistoryData>
  </entry>
  <entry>
    <string>OLAT_14.1.0</string>
    <org.olat.upgrade.UpgradeHistoryData>
      <upgradeData>
        <entry>
          <string>SET MS ORES TYPE NAME</string>
          <boolean>true</boolean>
        </entry>
      </upgradeData>
      <installationComplete>true</installationComplete>
    </org.olat.upgrade.UpgradeHistoryData>
  </entry>
  <entry>
    <string>OLAT_15.2.8.fx</string>
    <org.olat.upgrade.UpgradeHistoryData>
      <upgradeData>
        <entry>
          <string>RESET FAILED PDF THUMBNAILS</string>
          <boolean>true</boolean>
        </entry>
      </upgradeData>
      <installationComplete>true</installationComplete>
    </org.olat.upgrade.UpgradeHistoryData>
  </entry>
  <entry>
    <string>OLAT_10.0.0</string>
    <org.olat.upgrade.UpgradeHistoryData>
      <upgradeData>
        <entry>
          <string>Database update</string>
          <boolean>true</boolean>
        </entry>
      </upgradeData>
      <installationComplete>true</installationComplete>
    </org.olat.upgrade.UpgradeHistoryData>
  </entry>
  <entry>
    <string>OLAT_9.4.0</string>
    <org.olat.upgrade.UpgradeHistoryData>
      <upgradeData>
        <entry>
          <string>Database update</string>
          <boolean>true</boolean>
        </entry>
      </upgradeData>
      <installationComplete>true</installationComplete>
    </org.olat.upgrade.UpgradeHistoryData>
  </entry>
  <entry>
    <string>OLAT_14.2.10</string>
    <org.olat.upgrade.UpgradeHistoryData>
      <upgradeData>
        <entry>
          <string>VIDEO VFS METADATA</string>
          <boolean>true</boolean>
        </entry>
      </upgradeData>
      <installationComplete>true</installationComplete>
    </org.olat.upgrade.UpgradeHistoryData>
  </entry>
  <entry>
    <string>OLAT_10.4.0</string>
    <org.olat.upgrade.UpgradeHistoryData>
      <upgradeData>
        <entry>
          <string>Calendar user configurations</string>
          <boolean>true</boolean>
        </entry>
        <entry>
          <string>Imported calendars</string>
          <boolean>true</boolean>
        </entry>
        <entry>
          <string>Calendar tokens</string>
          <boolean>true</boolean>
        </entry>
        <entry>
          <string>Imported calendars url</string>
          <boolean>true</boolean>
        </entry>
      </upgradeData>
      <installationComplete>true</installationComplete>
    </org.olat.upgrade.UpgradeHistoryData>
  </entry>
  <entry>
    <string>OLAT_10.0.3</string>
    <org.olat.upgrade.UpgradeHistoryData>
      <upgradeData>
        <entry>
          <string>Database update</string>
          <boolean>true</boolean>
        </entry>
      </upgradeData>
      <installationComplete>true</installationComplete>
    </org.olat.upgrade.UpgradeHistoryData>
  </entry>
  <entry>
    <string>OLAT_13.1.0</string>
    <org.olat.upgrade.UpgradeHistoryData>
      <upgradeData>
        <entry>
          <string>CLEAN META PATH ERRORS</string>
          <boolean>true</boolean>
        </entry>
        <entry>
          <string>CLEAN META FORUM</string>
          <boolean>true</boolean>
        </entry>
        <entry>
          <string>CLEAN META HOMEPAGES</string>
          <boolean>true</boolean>
        </entry>
        <entry>
          <string>CLEAN META TMP</string>
          <boolean>true</boolean>
        </entry>
        <entry>
          <string>CLEAN META RESOURCES</string>
          <boolean>true</boolean>
        </entry>
        <entry>
          <string>CLEAN META CTS</string>
          <boolean>true</boolean>
        </entry>
        <entry>
          <string>CLEAN META COURSES</string>
          <boolean>true</boolean>
        </entry>
        <entry>
          <string>CLEAN META HOMES</string>
          <boolean>true</boolean>
        </entry>
      </upgradeData>
      <installationComplete>true</installationComplete>
    </org.olat.upgrade.UpgradeHistoryData>
  </entry>
  <entry>
    <string>OLAT_7.1.1</string>
    <org.olat.upgrade.UpgradeHistoryData>
      <upgradeData>
        <entry>
          <string>Database update</string>
          <boolean>true</boolean>
        </entry>
      </upgradeData>
      <installationComplete>true</installationComplete>
    </org.olat.upgrade.UpgradeHistoryData>
  </entry>
  <entry>
    <string>OLAT_7.1.0</string>
    <org.olat.upgrade.UpgradeHistoryData>
      <upgradeData>
        <entry>
          <string>Database update</string>
          <boolean>true</boolean>
        </entry>
      </upgradeData>
      <installationComplete>true</installationComplete>
    </org.olat.upgrade.UpgradeHistoryData>
  </entry>
  <entry>
    <string>OLAT_8.3.0</string>
    <org.olat.upgrade.UpgradeHistoryData>
      <upgradeData>
        <entry>
          <string>Database update</string>
          <boolean>true</boolean>
        </entry>
      </upgradeData>
      <installationComplete>true</installationComplete>
    </org.olat.upgrade.UpgradeHistoryData>
  </entry>
  <entry>
    <string>OLAT_13.0.0.beta1</string>
    <org.olat.upgrade.UpgradeHistoryData>
      <upgradeData>
        <entry>
          <string>MIGRATE TEMP KEY VALID UNTIL</string>
          <boolean>true</boolean>
        </entry>
        <entry>
          <string>MIGRATE QUALITY DATA COLLECTION TO ORGANISATION</string>
          <boolean>true</boolean>
        </entry>
      </upgradeData>
      <installationComplete>true</installationComplete>
    </org.olat.upgrade.UpgradeHistoryData>
  </entry>
  <entry>
    <string>OLAT_13.0.0.beta10</string>
    <org.olat.upgrade.UpgradeHistoryData>
      <upgradeData>
        <entry>
          <string>MIGRATE BOOKABLE</string>
          <boolean>true</boolean>
        </entry>
      </upgradeData>
      <installationComplete>true</installationComplete>
    </org.olat.upgrade.UpgradeHistoryData>
  </entry>
  <entry>
    <string>OLAT_15.pre.8</string>
    <org.olat.upgrade.UpgradeHistoryData>
      <upgradeData>
        <entry>
          <string>DELETE PORTFOLIO V1</string>
          <boolean>true</boolean>
        </entry>
      </upgradeData>
      <installationComplete>true</installationComplete>
    </org.olat.upgrade.UpgradeHistoryData>
  </entry>
  <entry>
    <string>OLAT_13.3.0</string>
    <org.olat.upgrade.UpgradeHistoryData>
      <upgradeData>
        <entry>
          <string>MIGRATE FILE METADATA</string>
          <boolean>true</boolean>
        </entry>
        <entry>
          <string>MIGRATE LIBRARY CONFIGURATION</string>
          <boolean>true</boolean>
        </entry>
        <entry>
          <string>MOVE REPO IMAGES</string>
          <boolean>true</boolean>
        </entry>
        <entry>
          <string>MIGRATE CURRICULUM ROLES</string>
          <boolean>true</boolean>
        </entry>
      </upgradeData>
      <installationComplete>true</installationComplete>
    </org.olat.upgrade.UpgradeHistoryData>
  </entry>
  <entry>
    <string>OLAT_15.pre.6</string>
    <org.olat.upgrade.UpgradeHistoryData>
      <upgradeData>
        <entry>
          <string>CATALOG ORDER INDEX</string>
          <boolean>true</boolean>
        </entry>
      </upgradeData>
      <installationComplete>true</installationComplete>
    </org.olat.upgrade.UpgradeHistoryData>
  </entry>
  <entry>
    <string>OLAT_13.0.0.beta7</string>
    <org.olat.upgrade.UpgradeHistoryData>
      <upgradeData>
        <entry>
          <string>MIGRATE SURVEY SERIES</string>
          <boolean>true</boolean>
        </entry>
      </upgradeData>
      <installationComplete>true</installationComplete>
    </org.olat.upgrade.UpgradeHistoryData>
  </entry>
  <entry>
    <string>OLAT_12.3.0</string>
    <org.olat.upgrade.UpgradeHistoryData>
      <upgradeData>
        <entry>
          <string>MIGRATE QPOOL TITLE</string>
          <boolean>true</boolean>
        </entry>
        <entry>
          <string>MIGRATE DIALOG ELEMENTS</string>
          <boolean>true</boolean>
        </entry>
        <entry>
          <string>MOVE DOC POOL INFOS PAGE</string>
          <boolean>true</boolean>
        </entry>
      </upgradeData>
      <installationComplete>true</installationComplete>
    </org.olat.upgrade.UpgradeHistoryData>
  </entry>
  <entry>
    <string>OLAT_15.pre.4</string>
    <org.olat.upgrade.UpgradeHistoryData>
      <upgradeData>
        <entry>
          <string>CATALOG ORDER INDEX</string>
          <boolean>true</boolean>
        </entry>
      </upgradeData>
      <installationComplete>true</installationComplete>
    </org.olat.upgrade.UpgradeHistoryData>
  </entry>
  <entry>
    <string>OLAT_13.0.0.beta9</string>
    <org.olat.upgrade.UpgradeHistoryData>
      <upgradeData>
        <entry>
          <string>MIGRATE BOOKABLE</string>
          <boolean>true</boolean>
        </entry>
      </upgradeData>
      <installationComplete>true</installationComplete>
    </org.olat.upgrade.UpgradeHistoryData>
  </entry>
  <entry>
    <string>OLAT_15.pre.5</string>
    <org.olat.upgrade.UpgradeHistoryData>
      <upgradeData>
        <entry>
          <string>CATALOG ORDER INDEX</string>
          <boolean>true</boolean>
        </entry>
      </upgradeData>
      <installationComplete>true</installationComplete>
    </org.olat.upgrade.UpgradeHistoryData>
  </entry>
  <entry>
    <string>OLAT_15.pre.0</string>
    <org.olat.upgrade.UpgradeHistoryData>
      <upgradeData>
        <entry>
          <string>INIT ASESSMENT ENTRY ROOT</string>
          <boolean>true</boolean>
        </entry>
      </upgradeData>
      <installationComplete>true</installationComplete>
    </org.olat.upgrade.UpgradeHistoryData>
  </entry>
  <entry>
    <string>OLAT_8.1.0</string>
    <org.olat.upgrade.UpgradeHistoryData>
      <upgradeData>
        <entry>
          <string>Database update</string>
          <boolean>true</boolean>
        </entry>
      </upgradeData>
      <installationComplete>true</installationComplete>
    </org.olat.upgrade.UpgradeHistoryData>
  </entry>
  <entry>
    <string>OLAT_12.5.3</string>
    <org.olat.upgrade.UpgradeHistoryData>
      <upgradeData>
        <entry>
          <string>MIGRATE WEB FEED</string>
          <boolean>true</boolean>
        </entry>
      </upgradeData>
      <installationComplete>true</installationComplete>
    </org.olat.upgrade.UpgradeHistoryData>
  </entry>
  <entry>
    <string>OLAT_15.hammed</string>
    <org.olat.upgrade.UpgradeHistoryData>
      <upgradeData>
        <entry>
          <string>CLEANUP CERTIFICATES</string>
          <boolean>true</boolean>
        </entry>
      </upgradeData>
      <installationComplete>true</installationComplete>
    </org.olat.upgrade.UpgradeHistoryData>
  </entry>
  <entry>
    <string>OLAT_15.2.0</string>
    <org.olat.upgrade.UpgradeHistoryData>
      <upgradeData>
        <entry>
          <string>MIGRATE USER PROPERTY</string>
          <boolean>true</boolean>
        </entry>
        <entry>
          <string>MIGRATE USER NAME</string>
          <boolean>true</boolean>
        </entry>
      </upgradeData>
      <installationComplete>true</installationComplete>
    </org.olat.upgrade.UpgradeHistoryData>
  </entry>
  <entry>
    <string>OLAT_15.2.2</string>
    <org.olat.upgrade.UpgradeHistoryData>
      <upgradeData>
        <entry>
          <string>MIGRATE CATALOG SORTING</string>
          <boolean>true</boolean>
        </entry>
      </upgradeData>
      <installationComplete>true</installationComplete>
    </org.olat.upgrade.UpgradeHistoryData>
  </entry>
  <entry>
    <string>OLAT_15.4.0</string>
    <org.olat.upgrade.UpgradeHistoryData>
      <upgradeData>
        <entry>
          <string>INIT VFS MODIFIED BY</string>
          <boolean>true</boolean>
        </entry>
        <entry>
          <string>INIT ENTRY TECHNICAL TYPE</string>
          <boolean>true</boolean>
        </entry>
      </upgradeData>
      <installationComplete>true</installationComplete>
    </org.olat.upgrade.UpgradeHistoryData>
  </entry>
  <entry>
    <string>OLAT_15.0.3</string>
    <org.olat.upgrade.UpgradeHistoryData>
      <upgradeData>
        <entry>
          <string>ASSESSMENT LAST ATTEMPTS</string>
          <boolean>true</boolean>
        </entry>
      </upgradeData>
      <installationComplete>true</installationComplete>
    </org.olat.upgrade.UpgradeHistoryData>
  </entry>
  <entry>
    <string>OLAT_15.2.3</string>
    <org.olat.upgrade.UpgradeHistoryData>
      <upgradeData>
        <entry>
          <string>CLEAN UP REPOSITORY ENTRY TO GROUP RELATION</string>
          <boolean>true</boolean>
        </entry>
      </upgradeData>
      <installationComplete>true</installationComplete>
    </org.olat.upgrade.UpgradeHistoryData>
  </entry>
  <entry>
    <string>OLAT_15.2.6</string>
    <org.olat.upgrade.UpgradeHistoryData>
      <upgradeData>
        <entry>
          <string>CLEAN UP APPOINTMENT ORGANIZERS</string>
          <boolean>true</boolean>
        </entry>
      </upgradeData>
      <installationComplete>true</installationComplete>
    </org.olat.upgrade.UpgradeHistoryData>
  </entry>
  <entry>
    <string>OLAT_11.3.0</string>
    <org.olat.upgrade.UpgradeHistoryData>
      <upgradeData>
        <entry>
          <string>VIDEO XML</string>
          <boolean>true</boolean>
        </entry>
      </upgradeData>
      <installationComplete>true</installationComplete>
    </org.olat.upgrade.UpgradeHistoryData>
  </entry>
  <entry>
    <string>OLAT_15.pre.6.ae</string>
    <org.olat.upgrade.UpgradeHistoryData>
      <upgradeData>
        <entry>
          <string>CONDITION COURSES COMPLETION</string>
          <boolean>true</boolean>
        </entry>
      </upgradeData>
      <installationComplete>true</installationComplete>
    </org.olat.upgrade.UpgradeHistoryData>
  </entry>
  <entry>
    <string>OLAT_15.3.12</string>
    <org.olat.upgrade.UpgradeHistoryData>
      <upgradeData>
        <entry>
          <string>DELETE APPOINTMENT USER RESTRICTIONS</string>
          <boolean>true</boolean>
        </entry>
      </upgradeData>
      <installationComplete>true</installationComplete>
    </org.olat.upgrade.UpgradeHistoryData>
  </entry>
  <entry>
    <string>OLAT_14.0.0</string>
    <org.olat.upgrade.UpgradeHistoryData>
      <upgradeData>
        <entry>
          <string>MIGRATE FILE METADATA</string>
          <boolean>true</boolean>
        </entry>
        <entry>
          <string>MIGRATE LIBRARY CONFIGURATION</string>
          <boolean>true</boolean>
        </entry>
        <entry>
          <string>MOVE REPO IMAGES</string>
          <boolean>true</boolean>
        </entry>
        <entry>
          <string>MIGRATE CURRICULUM ROLES</string>
          <boolean>true</boolean>
        </entry>
      </upgradeData>
      <installationComplete>true</installationComplete>
    </org.olat.upgrade.UpgradeHistoryData>
  </entry>
  <entry>
    <string>OLAT_10.1.0</string>
    <org.olat.upgrade.UpgradeHistoryData>
      <upgradeData>
        <entry>
          <string>Database update</string>
          <boolean>true</boolean>
        </entry>
      </upgradeData>
      <installationComplete>true</installationComplete>
    </org.olat.upgrade.UpgradeHistoryData>
  </entry>
  <entry>
    <string>OLAT_12.5.17</string>
    <org.olat.upgrade.UpgradeHistoryData>
      <upgradeData>
        <entry>
          <string>UPDATE COURSE STATS</string>
          <boolean>true</boolean>
        </entry>
      </upgradeData>
      <installationComplete>true</installationComplete>
    </org.olat.upgrade.UpgradeHistoryData>
  </entry>
  <entry>
    <string>OLAT_14.0.5</string>
    <org.olat.upgrade.UpgradeHistoryData>
      <upgradeData>
        <entry>
          <string>UPDATE UNKOWN VIDEO FORMAT</string>
          <boolean>true</boolean>
        </entry>
      </upgradeData>
      <installationComplete>true</installationComplete>
    </org.olat.upgrade.UpgradeHistoryData>
  </entry>
  <entry>
    <string>OLAT_14.0.3</string>
    <org.olat.upgrade.UpgradeHistoryData>
      <upgradeData>
        <entry>
          <string>PASSWORD SYNTAX CHECK TYPO</string>
          <boolean>true</boolean>
        </entry>
      </upgradeData>
      <installationComplete>true</installationComplete>
    </org.olat.upgrade.UpgradeHistoryData>
  </entry>
  <entry>
    <string>OLAT_14.2.0</string>
    <org.olat.upgrade.UpgradeHistoryData>
      <upgradeData>
        <entry>
          <string>TRANSFER INFOS NOTIFICATIONS NOT DESIRED</string>
          <boolean>true</boolean>
        </entry>
        <entry>
          <string>DATA COLLECTION ORGANISATIONS</string>
          <boolean>true</boolean>
        </entry>
        <entry>
          <string>LIVE STREAM LAUNCHES</string>
          <boolean>true</boolean>
        </entry>
      </upgradeData>
      <installationComplete>true</installationComplete>
    </org.olat.upgrade.UpgradeHistoryData>
  </entry>
  <entry>
    <string>OLAT_14.2.7</string>
    <org.olat.upgrade.UpgradeHistoryData>
      <upgradeData>
        <entry>
          <string>BIGBLUEBUTTON SERVER TO DB</string>
          <boolean>true</boolean>
        </entry>
      </upgradeData>
      <installationComplete>true</installationComplete>
    </org.olat.upgrade.UpgradeHistoryData>
  </entry>
  <entry>
    <string>OLAT_14.2.6</string>
    <org.olat.upgrade.UpgradeHistoryData>
      <upgradeData>
        <entry>
          <string>DELETE COURSE EXPORT DIRECTORY</string>
          <boolean>true</boolean>
        </entry>
        <entry>
          <string>DELETE DOWNLOAD ZIP</string>
          <boolean>true</boolean>
        </entry>
      </upgradeData>
      <installationComplete>true</installationComplete>
    </org.olat.upgrade.UpgradeHistoryData>
  </entry>
  <entry>
    <string>OLAT_10.3.0</string>
    <org.olat.upgrade.UpgradeHistoryData>
      <upgradeData>
        <entry>
          <string>Clean export folder</string>
          <boolean>true</boolean>
        </entry>
      </upgradeData>
      <installationComplete>true</installationComplete>
    </org.olat.upgrade.UpgradeHistoryData>
  </entry>
  <entry>
    <string>OLAT_13.0.0</string>
    <org.olat.upgrade.UpgradeHistoryData>
      <upgradeData>
        <entry>
          <string>PORTFOLIO EVALUATION FORM</string>
          <boolean>true</boolean>
        </entry>
        <entry>
          <string>MIGRATE ROLE</string>
          <boolean>true</boolean>
        </entry>
        <entry>
          <string>LECTURES SEND APPEAL DATES</string>
          <boolean>true</boolean>
        </entry>
        <entry>
          <string>MIGRATE ADMIN SITE SECURITY CALLBACK</string>
          <boolean>true</boolean>
        </entry>
        <entry>
          <string>MIGRATE REPO ENTRY TO DEF ORG</string>
          <boolean>true</boolean>
        </entry>
        <entry>
          <string>MIGRATE LUCENE 7.5</string>
          <boolean>true</boolean>
        </entry>
        <entry>
          <string>MIGRATE INVITEE</string>
          <boolean>true</boolean>
        </entry>
        <entry>
          <string>MIGRATE REPO ENTRY ACCESS</string>
          <boolean>true</boolean>
        </entry>
      </upgradeData>
      <installationComplete>true</installationComplete>
    </org.olat.upgrade.UpgradeHistoryData>
  </entry>
  <entry>
    <string>OLAT_13.2.0</string>
    <org.olat.upgrade.UpgradeHistoryData>
      <upgradeData>
        <entry>
          <string>UPDATE CURRICULUM CHILDREN</string>
          <boolean>true</boolean>
        </entry>
      </upgradeData>
      <installationComplete>true</installationComplete>
    </org.olat.upgrade.UpgradeHistoryData>
  </entry>
  <entry>
    <string>OLAT_7.0.2</string>
    <org.olat.upgrade.UpgradeHistoryData>
      <upgradeData/>
      <installationComplete>true</installationComplete>
    </org.olat.upgrade.UpgradeHistoryData>
  </entry>
  <entry>
    <string>OLAT_7.0.1</string>
    <org.olat.upgrade.UpgradeHistoryData>
      <upgradeData>
        <entry>
          <string>Database update</string>
          <boolean>true</boolean>
        </entry>
      </upgradeData>
      <installationComplete>true</installationComplete>
    </org.olat.upgrade.UpgradeHistoryData>
  </entry>
  <entry>
    <string>OLAT_8.4.0</string>
    <org.olat.upgrade.UpgradeHistoryData>
      <upgradeData>
        <entry>
          <string>Database update</string>
          <boolean>true</boolean>
        </entry>
      </upgradeData>
      <installationComplete>true</installationComplete>
    </org.olat.upgrade.UpgradeHistoryData>
  </entry>
  <entry>
    <string>OLAT_13.2.8</string>
    <org.olat.upgrade.UpgradeHistoryData>
      <upgradeData>
        <entry>
          <string>GUEST COURSE NODES PASSWORDS</string>
          <boolean>true</boolean>
        </entry>
      </upgradeData>
      <installationComplete>true</installationComplete>
    </org.olat.upgrade.UpgradeHistoryData>
  </entry>
  <entry>
    <string>OLAT_13.2.4</string>
    <org.olat.upgrade.UpgradeHistoryData>
      <upgradeData>
        <entry>
          <string>ORPHAN IDENTITIES</string>
          <boolean>true</boolean>
        </entry>
      </upgradeData>
      <installationComplete>true</installationComplete>
    </org.olat.upgrade.UpgradeHistoryData>
  </entry>
  <entry>
    <string>OLAT_8.4.5</string>
    <org.olat.upgrade.UpgradeHistoryData>
      <upgradeData>
        <entry>
          <string>Database update</string>
          <boolean>true</boolean>
        </entry>
      </upgradeData>
      <installationComplete>true</installationComplete>
    </org.olat.upgrade.UpgradeHistoryData>
  </entry>
  <entry>
    <string>OLAT_12.2.0</string>
    <org.olat.upgrade.UpgradeHistoryData>
      <upgradeData>
        <entry>
          <string>MIGRATE QPOOL TAXONOMY</string>
          <boolean>true</boolean>
        </entry>
        <entry>
          <string>MAIL CONFIG SPLITTING</string>
          <boolean>true</boolean>
        </entry>
        <entry>
          <string>KEEP INTERNAL MAIL DISABLED</string>
          <boolean>true</boolean>
        </entry>
      </upgradeData>
      <installationComplete>true</installationComplete>
    </org.olat.upgrade.UpgradeHistoryData>
  </entry>
  <entry>
    <string>OLAT_15.3.6</string>
    <org.olat.upgrade.UpgradeHistoryData>
      <upgradeData>
        <entry>
          <string>MIGRATE BIGBLUEBUTTON JOIN FLAG</string>
          <boolean>true</boolean>
        </entry>
      </upgradeData>
      <installationComplete>true</installationComplete>
    </org.olat.upgrade.UpgradeHistoryData>
  </entry>
  <entry>
    <string>OLAT_12.0.0</string>
    <org.olat.upgrade.UpgradeHistoryData>
      <upgradeData>
        <entry>
          <string>LAST USER MODIFICATION</string>
          <boolean>true</boolean>
        </entry>
        <entry>
          <string>USER PROPERTY CONTEXT RENAME</string>
          <boolean>true</boolean>
        </entry>
        <entry>
          <string>FEED XML TO DB</string>
          <boolean>true</boolean>
        </entry>
      </upgradeData>
      <installationComplete>true</installationComplete>
    </org.olat.upgrade.UpgradeHistoryData>
  </entry>
  <entry>
    <string>OLAT_8.2.0</string>
    <org.olat.upgrade.UpgradeHistoryData>
      <upgradeData>
        <entry>
          <string>Database update</string>
          <boolean>true</boolean>
        </entry>
      </upgradeData>
      <installationComplete>true</installationComplete>
    </org.olat.upgrade.UpgradeHistoryData>
  </entry>
  <entry>
    <string>OLAT_12.4.1</string>
    <org.olat.upgrade.UpgradeHistoryData>
      <upgradeData>
        <entry>
          <string>MIGRATE PASSWORD HISTORY</string>
          <boolean>true</boolean>
        </entry>
        <entry>
          <string>MIGRATE CHANGE PASSWORD</string>
          <boolean>true</boolean>
        </entry>
      </upgradeData>
      <installationComplete>true</installationComplete>
    </org.olat.upgrade.UpgradeHistoryData>
  </entry>
  <entry>
    <string>OLAT_12.4.0</string>
    <org.olat.upgrade.UpgradeHistoryData>
      <upgradeData>
        <entry>
          <string>MIGRATE QPOOL LICENSE</string>
          <boolean>true</boolean>
        </entry>
      </upgradeData>
      <installationComplete>true</installationComplete>
    </org.olat.upgrade.UpgradeHistoryData>
  </entry>
</map>