diff --git a/datastore_server/source/java/ch/ethz/sis/openbis/generic/server/dss/plugins/sync/common/MasterDataExtractor.java b/datastore_server/source/java/ch/ethz/sis/openbis/generic/server/dss/plugins/sync/common/MasterDataExtractor.java
index cdadf650d1b4d90d34138c24e83be8cf141f2fd2..a7b6c42e32a675ebdd23dc6d940e47057b999c0f 100644
--- a/datastore_server/source/java/ch/ethz/sis/openbis/generic/server/dss/plugins/sync/common/MasterDataExtractor.java
+++ b/datastore_server/source/java/ch/ethz/sis/openbis/generic/server/dss/plugins/sync/common/MasterDataExtractor.java
@@ -56,13 +56,12 @@ import ch.systemsx.cisd.openbis.generic.server.jython.api.v1.IMasterDataRegistra
 import ch.systemsx.cisd.openbis.generic.server.jython.api.v1.IMaterialTypeImmutable;
 import ch.systemsx.cisd.openbis.generic.server.jython.api.v1.IPropertyTypeImmutable;
 import ch.systemsx.cisd.openbis.generic.server.jython.api.v1.ISampleTypeImmutable;
+import ch.systemsx.cisd.openbis.generic.server.jython.api.v1.IScriptImmutable;
 import ch.systemsx.cisd.openbis.generic.server.jython.api.v1.IVocabularyImmutable;
 import ch.systemsx.cisd.openbis.generic.server.jython.api.v1.IVocabularyTermImmutable;
 import ch.systemsx.cisd.openbis.generic.shared.basic.CodeConverter;
 
 /**
- * 
- *
  * @author Ganime Betul Akin
  */
 public class MasterDataExtractor
@@ -91,9 +90,15 @@ public class MasterDataExtractor
         DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
         DocumentBuilder docBuilder = docFactory.newDocumentBuilder();
         Document doc = docBuilder.newDocument();
-        Element rootElement = doc.createElement("masterData");
+        docFactory.setNamespaceAware(true);
+        Element rootElement = doc.createElementNS("https://sis.id.ethz.ch/software/#openbis/xmdterms/", "xmd:masterData");
+        rootElement.setAttribute("xmlns:xmd", "https://sis.id.ethz.ch/software/#openbis/xmdterms/");
         doc.appendChild(rootElement);
 
+        // append scripts
+        List<IScriptImmutable> scripts = masterDataRegistrationTransaction.listScripts();
+        appendValidationPlugins(doc, rootElement, scripts);
+
         // append file format types
         List<IFileFormatTypeImmutable> fileFormatTypes = masterDataRegistrationTransaction.listFileFormatTypes();
         appendFileFormatTypes(doc, rootElement, fileFormatTypes);
@@ -124,6 +129,12 @@ public class MasterDataExtractor
         TransformerFactory transformerFactory = TransformerFactory.newInstance();
         Transformer transformer = transformerFactory.newTransformer();
         transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
+        transformer.setOutputProperty(OutputKeys.METHOD, "xml");
+        transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
+        transformer.setOutputProperty(OutputKeys.CDATA_SECTION_ELEMENTS,
+                "validationPlugin");
+        transformer.setOutputProperty(OutputKeys.INDENT, "yes");
+
         DOMSource source = new DOMSource(doc);
         StringWriter writer = new StringWriter();
         StreamResult result = new StreamResult(writer);
@@ -131,15 +142,36 @@ public class MasterDataExtractor
         return writer.toString();
     }
 
+    private void appendValidationPlugins(Document doc, Element rootElement, List<IScriptImmutable> scripts)
+    {
+        if (scripts.size() > 0)
+        {
+            Element pluginsElement = doc.createElement("xmd:validationPlugins");
+            rootElement.appendChild(pluginsElement);
+            for (IScriptImmutable script : scripts)
+            {
+                Element pluginElement = doc.createElement("xmd:validationPlugin");
+                pluginElement.setAttribute("code", script.getCode());
+                pluginElement.setAttribute("name", script.getName());
+                pluginElement.setAttribute("description", script.getDescription());
+                pluginElement.setAttribute("type", script.getScriptType());
+                pluginElement.setAttribute("entityKind", script.getEntity());
+
+                pluginElement.appendChild(doc.createCDATASection(script.getScript()));
+                pluginsElement.appendChild(pluginElement);
+            }
+        }
+    }
+
     private void appendFileFormatTypes(Document doc, Element rootElement, List<IFileFormatTypeImmutable> fileFormatTypes)
     {
         if (fileFormatTypes.size() > 0)
         {
-            Element fileFormatTypesElement = doc.createElement("fileFormatTypes");
+            Element fileFormatTypesElement = doc.createElement("xmd:fileFormatTypes");
             rootElement.appendChild(fileFormatTypesElement);
             for (IFileFormatTypeImmutable fileFormatType : fileFormatTypes)
             {
-                Element fileFormatTypeElement = doc.createElement("fileFormatType");
+                Element fileFormatTypeElement = doc.createElement("xmd:fileFormatType");
                 fileFormatTypeElement.setAttribute("code", fileFormatType.getCode());
                 fileFormatTypeElement.setAttribute("description", fileFormatType.getDescription());
                 fileFormatTypesElement.appendChild(fileFormatTypeElement);
@@ -151,7 +183,7 @@ public class MasterDataExtractor
     {
         if (propertyTypes.size() > 0)
         {
-            Element propertyTypesElement = doc.createElement("propertyTypes");
+            Element propertyTypesElement = doc.createElement("xmd:propertyTypes");
             rootElement.appendChild(propertyTypesElement);
             for (IPropertyTypeImmutable propertyTypeImmutable : propertyTypes)
             {
@@ -159,7 +191,7 @@ public class MasterDataExtractor
                         (propertyTypeImmutable.isInternalNamespace()
                         && propertyTypeImmutable.getCode().startsWith(INTERNAL_NAMESPACE_PREFIX)) ? CodeConverter.tryToDatabase(propertyTypeImmutable
                                 .getCode()) : propertyTypeImmutable.getCode();
-                Element propertyTypeElement = doc.createElement("propertyType");
+                Element propertyTypeElement = doc.createElement("xmd:propertyType");
                 propertyTypeElement.setAttribute("code", code);
                 propertyTypeElement.setAttribute("label", propertyTypeImmutable.getLabel());
                 propertyTypeElement.setAttribute("dataType", propertyTypeImmutable.getDataType().name());
@@ -170,7 +202,8 @@ public class MasterDataExtractor
                 {
                     propertyTypeElement.setAttribute("vocabulary", propertyTypeImmutable.getVocabulary().getCode());
                 }
-                else if (propertyTypeImmutable.getDataType().name().equals(DataType.MATERIAL.name())) {
+                else if (propertyTypeImmutable.getDataType().name().equals(DataType.MATERIAL.name()))
+                {
                     if (propertyTypeImmutable.getMaterialType() != null)
                     {
                         propertyTypeElement.setAttribute("material", propertyTypeImmutable.getMaterialType().getCode());
@@ -190,14 +223,14 @@ public class MasterDataExtractor
     {
         if (vocabularies.size() > 0)
         {
-            Element vocabsElement = doc.createElement("controlledVocabularies");
+            Element vocabsElement = doc.createElement("xmd:controlledVocabularies");
             rootElement.appendChild(vocabsElement);
             for (IVocabularyImmutable vocabImmutable : vocabularies)
             {
-                Element vocabElement = doc.createElement("controlledVocabulary");
+                Element vocabElement = doc.createElement("xmd:controlledVocabulary");
                 String code = vocabImmutable.isInternalNamespace()
                         && vocabImmutable.getCode().startsWith(INTERNAL_NAMESPACE_PREFIX) ? CodeConverter.tryToDatabase(vocabImmutable.getCode())
-                                : vocabImmutable.getCode();
+                        : vocabImmutable.getCode();
                 vocabElement.setAttribute("code", code);
                 vocabElement.setAttribute("description", vocabImmutable.getDescription());
                 vocabElement.setAttribute("urlTemplate", vocabImmutable.getUrlTemplate());
@@ -225,12 +258,12 @@ public class MasterDataExtractor
     {
         if (materialTypes.size() > 0)
         {
-            Element materialTypesElement = doc.createElement("materialTypes");
+            Element materialTypesElement = doc.createElement("xmd:materialTypes");
             rootElement.appendChild(materialTypesElement);
             Map<String, List<PropertyAssignment>> materialTypeCodePropAssignmentMap = loadMaterialTypesUsingV3WithPropertyAssignments();
             for (IMaterialTypeImmutable matType : materialTypes)
             {
-                Element matTypeElement = getEntityTypeXML(doc, matType, "materialType");
+                Element matTypeElement = getEntityTypeXML(doc, matType, "xmd:materialType");
                 matTypeElement.setAttribute("description", matType.getDescription());
                 // TODO validation script
                 materialTypesElement.appendChild(matTypeElement);
@@ -244,12 +277,12 @@ public class MasterDataExtractor
     {
         if (dataSetTypes.size() > 0)
         {
-            Element dataSetTypesElement = doc.createElement("dataSetTypes");
+            Element dataSetTypesElement = doc.createElement("xmd:dataSetTypes");
             rootElement.appendChild(dataSetTypesElement);
             Map<String, List<PropertyAssignment>> dsTypeCodePropAssignmentMap = loadDataSetTypesUsingV3WithPropertyAssignments();
             for (IDataSetTypeImmutable dsType : dataSetTypes)
             {
-                Element dsTypeElement = getEntityTypeXML(doc, dsType, "dataSetType");
+                Element dsTypeElement = getEntityTypeXML(doc, dsType, "xmd:dataSetType");
                 dsTypeElement.setAttribute("description", dsType.getDescription());
                 dsTypeElement.setAttribute("dataSetKind", dsType.getDataSetKind());
                 dsTypeElement.setAttribute("mainDataSetPattern", dsType.getMainDataSetPattern());
@@ -267,12 +300,12 @@ public class MasterDataExtractor
     {
         if (experimentTypes.size() > 0)
         {
-            Element experimentTypesElement = doc.createElement("collectionTypes");
+            Element experimentTypesElement = doc.createElement("xmd:collectionTypes");
             rootElement.appendChild(experimentTypesElement);
             Map<String, List<PropertyAssignment>> expTypeCodePropAssignmentMap = loadExperimentTypesUsingV3WithPropertyAssignments();
             for (IExperimentTypeImmutable expType : experimentTypes)
             {
-                Element experimentTypeElement = getEntityTypeXML(doc, expType, "collectionType");
+                Element experimentTypeElement = getEntityTypeXML(doc, expType, "xmd:collectionType");
                 experimentTypeElement.setAttribute("description", expType.getDescription());
                 // TODO validation script?
                 experimentTypesElement.appendChild(experimentTypeElement);
@@ -286,13 +319,13 @@ public class MasterDataExtractor
     {
         if (sampleTypes.size() > 0)
         {
-            Element sampleTypesElement = doc.createElement("objectTypes");
+            Element sampleTypesElement = doc.createElement("xmd:objectTypes");
             rootElement.appendChild(sampleTypesElement);
 
             Map<String, List<PropertyAssignment>> sampleTypeCodePropAssignmentMap = loadSampleTypesUsingV3WithPropertyAssignments();
             for (ISampleTypeImmutable sampleType : sampleTypes)
             {
-                Element sampleTypeElement = getEntityTypeXML(doc, sampleType, "objectType");
+                Element sampleTypeElement = getEntityTypeXML(doc, sampleType, "xmd:objectType");
                 sampleTypeElement.setAttribute("description", sampleType.getDescription());
                 sampleTypeElement.setAttribute("listable", String.valueOf(sampleType.isListable()));
                 sampleTypeElement.setAttribute("showContainer", String.valueOf(sampleType.isShowContainer()));
@@ -318,10 +351,10 @@ public class MasterDataExtractor
 
     private Element getPropertyAssignmentXML(Document doc, List<PropertyAssignment> propertyAssignments)
     {
-        Element propertyAssignmentsElement = doc.createElement("propertyAssignments");
+        Element propertyAssignmentsElement = doc.createElement("xmd:propertyAssignments");
         for (PropertyAssignment propAssignment : propertyAssignments)
         {
-            Element propertyAssignmentElement = doc.createElement("propertyAssignment");
+            Element propertyAssignmentElement = doc.createElement("xmd:propertyAssignment");
             propertyAssignmentsElement.appendChild(propertyAssignmentElement);
             propertyAssignmentElement.setAttribute("propertyTypeCode", CodeConverter.tryToBusinessLayer(propAssignment.getPropertyType().getCode(),
                     propAssignment.getPropertyType().isInternalNameSpace()));