diff --git a/core-plugin-openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/plugin/excelimport/ImportDatasetTypesTest.java b/core-plugin-openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/plugin/excelimport/ImportDatasetTypesTest.java
index bf607e4745614b3ce160f5beeade93dac21b4ba8..8a8e72a44a2d43da7f1c8bd2bcd0f16fcf2ae437 100644
--- a/core-plugin-openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/plugin/excelimport/ImportDatasetTypesTest.java
+++ b/core-plugin-openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/plugin/excelimport/ImportDatasetTypesTest.java
@@ -128,7 +128,7 @@ public class ImportDatasetTypesTest extends AbstractImportTest
         DataSetType rawData = TestUtils.getDatasetType(v3api, sessionToken, "RAW_DATA");
 
         // THEN
-        assertEquals(rawData.getValidationPlugin().getName().toUpperCase(), "RAW_DATA.VALID");
+        assertEquals(rawData.getValidationPlugin().getName().toUpperCase(), "VALID");
     }
 
     @Test
diff --git a/core-plugin-openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/plugin/excelimport/ImportExperimentTypesTest.java b/core-plugin-openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/plugin/excelimport/ImportExperimentTypesTest.java
index 843e6c02e72f27794f013002bc82bdaf7bb71bb5..0a41185be852cd875c31242d1026701a9b197b87 100644
--- a/core-plugin-openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/plugin/excelimport/ImportExperimentTypesTest.java
+++ b/core-plugin-openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/plugin/excelimport/ImportExperimentTypesTest.java
@@ -156,7 +156,7 @@ public class ImportExperimentTypesTest extends AbstractImportTest
         ExperimentType collection = TestUtils.getExperimentType(v3api, sessionToken, "COLLECTION");
 
         // THEN
-        assertEquals(collection.getValidationPlugin().getName().toUpperCase(), "COLLECTION.VALID");
+        assertEquals(collection.getValidationPlugin().getName().toUpperCase(), "VALID");
     }
 
     @Test(expectedExceptions = UserFailureException.class, expectedExceptionsMessageRegExp = "(?s).*Mandatory field is missing or empty: Code.*")
diff --git a/core-plugin-openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/plugin/excelimport/ImportSampleTypesTest.java b/core-plugin-openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/plugin/excelimport/ImportSampleTypesTest.java
index e2a4cf0ee6a3ac9bf5a6fc3df82480b12e4f17eb..8fc777dc686d7b933ff3ed3108b5c7aefb24e0f5 100644
--- a/core-plugin-openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/plugin/excelimport/ImportSampleTypesTest.java
+++ b/core-plugin-openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/plugin/excelimport/ImportSampleTypesTest.java
@@ -185,7 +185,7 @@ public class ImportSampleTypesTest extends AbstractImportTest
 
         // GIVEN
         final String[] sessionWorkspaceFilePaths = uploadToAsSessionWorkspace(sessionToken,
-                FilenameUtils.concat(FILES_DIR, SAMPLE_TYPES_WITH_DYNAMIC_SCRIPT), FilenameUtils.concat(FILES_DIR, DYNAMIC_SCRIPT));
+                FilenameUtils.concat(FILES_DIR, SAMPLE_TYPES_WITH_DYNAMIC_SCRIPT), FilenameUtils.concat(FILES_DIR, DYNAMIC_SCRIPT), FilenameUtils.concat(FILES_DIR, VALIDATION_SCRIPT));
         TestUtils.createFrom(v3api, sessionToken, Paths.get(sessionWorkspaceFilePaths[0]));
 
         // WHEN
@@ -194,7 +194,7 @@ public class ImportSampleTypesTest extends AbstractImportTest
         // THEN
         final Plugin dynamicScript = antibody.getPropertyAssignments().get(0).getPlugin();
         assertNotNull(dynamicScript);
-        assertEquals(dynamicScript.getName().toUpperCase(), "$NAME.DYNAMIC");
+        assertEquals(dynamicScript.getName().toUpperCase(), "DYNAMIC");
         assertEquals(dynamicScript.getScript(), "def calculate():\n    return 1");
         assertEquals(dynamicScript.getPluginType(), PluginType.DYNAMIC_PROPERTY);
     }
@@ -214,7 +214,7 @@ public class ImportSampleTypesTest extends AbstractImportTest
         // THEN
         Plugin validationScript = antibody.getValidationPlugin();
         assertNotNull(validationScript);
-        assertEquals(validationScript.getName().toUpperCase(), "ANTIBODY.VALID");
+        assertEquals(validationScript.getName().toUpperCase(), "VALID");
         assertEquals(validationScript.getScript(), "def validate(entity, isNew):\n  if isNew:\n    return");
         assertEquals(validationScript.getPluginType(), PluginType.ENTITY_VALIDATION);
     }
diff --git a/core-plugin-openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/plugin/excelimport/test_files/sample_types/with_dynamic_script.xls b/core-plugin-openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/plugin/excelimport/test_files/sample_types/with_dynamic_script.xls
index 59ad19a0a9394856024903b37ec0b635d4f5ff77..22c17615e2d7b0e6247156a0162f1d4b40fd514b 100644
Binary files a/core-plugin-openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/plugin/excelimport/test_files/sample_types/with_dynamic_script.xls and b/core-plugin-openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/plugin/excelimport/test_files/sample_types/with_dynamic_script.xls differ
diff --git a/server-application-server/source/java/ch/ethz/sis/openbis/generic/server/xls/importer/helper/DatasetTypeImportHelper.java b/server-application-server/source/java/ch/ethz/sis/openbis/generic/server/xls/importer/helper/DatasetTypeImportHelper.java
index e7087238d59e7aaddfd685449c6345b28cdda3c1..08be8b83d45c4c8a96d7ff8df4880a6f540ee939 100644
--- a/server-application-server/source/java/ch/ethz/sis/openbis/generic/server/xls/importer/helper/DatasetTypeImportHelper.java
+++ b/server-application-server/source/java/ch/ethz/sis/openbis/generic/server/xls/importer/helper/DatasetTypeImportHelper.java
@@ -18,9 +18,11 @@ package ch.ethz.sis.openbis.generic.server.xls.importer.helper;
 import java.util.List;
 import java.util.Map;
 
+import ch.ethz.sis.openbis.generic.asapi.v3.dto.dataset.DataSetType;
 import ch.ethz.sis.openbis.generic.asapi.v3.dto.dataset.create.DataSetTypeCreation;
 import ch.ethz.sis.openbis.generic.asapi.v3.dto.dataset.fetchoptions.DataSetTypeFetchOptions;
 import ch.ethz.sis.openbis.generic.asapi.v3.dto.dataset.update.DataSetTypeUpdate;
+import ch.ethz.sis.openbis.generic.asapi.v3.dto.entitytype.create.IEntityTypeCreation;
 import ch.ethz.sis.openbis.generic.asapi.v3.dto.entitytype.id.EntityTypePermId;
 import ch.ethz.sis.openbis.generic.asapi.v3.dto.plugin.id.PluginPermId;
 import ch.ethz.sis.openbis.generic.server.xls.importer.ImportOptions;
@@ -129,10 +131,9 @@ public class DatasetTypeImportHelper extends BasicImportHelper
         DataSetTypeCreation creation = new DataSetTypeCreation();
         creation.setCode(code);
         creation.setDescription(description);
-        if (validationScript != null && !validationScript.isEmpty())
-        {
-            creation.setValidationPluginId(new PluginPermId(ImportUtils.getScriptName(creation.getCode(), validationScript)));
-        }
+
+        creation.setValidationPluginId(ImportUtils.getScriptId(validationScript, null));
+
         creation.setManagedInternally(ImportUtils.isInternalNamespace(creation.getCode()));
 
         delayedExecutor.createDataSetType(creation, page, line);
@@ -157,10 +158,11 @@ public class DatasetTypeImportHelper extends BasicImportHelper
                 update.setDescription(description);
             }
         }
-        if (validationScript != null && !validationScript.isEmpty())
-        {
-            update.setValidationPluginId(new PluginPermId(ImportUtils.getScriptName(code, validationScript)));
-        }
+
+        DataSetTypeFetchOptions dataSetTypeFetchOptions = new DataSetTypeFetchOptions();
+        dataSetTypeFetchOptions.withValidationPlugin();
+        DataSetType dataSetType = delayedExecutor.getDataSetType(new EntityTypePermId(code), dataSetTypeFetchOptions);
+        update.setValidationPluginId(ImportUtils.getScriptId(validationScript, dataSetType.getValidationPlugin()));
 
         delayedExecutor.updateDataSetType(update, page, line);
     }
diff --git a/server-application-server/source/java/ch/ethz/sis/openbis/generic/server/xls/importer/helper/ExperimentTypeImportHelper.java b/server-application-server/source/java/ch/ethz/sis/openbis/generic/server/xls/importer/helper/ExperimentTypeImportHelper.java
index 7b816377c5b8d3c8bd41202afeb49d9dce30a11c..239f82a16c6a6aaeaa94f261edb54edf41cc13e1 100644
--- a/server-application-server/source/java/ch/ethz/sis/openbis/generic/server/xls/importer/helper/ExperimentTypeImportHelper.java
+++ b/server-application-server/source/java/ch/ethz/sis/openbis/generic/server/xls/importer/helper/ExperimentTypeImportHelper.java
@@ -18,7 +18,10 @@ package ch.ethz.sis.openbis.generic.server.xls.importer.helper;
 import java.util.List;
 import java.util.Map;
 
+import ch.ethz.sis.openbis.generic.asapi.v3.dto.dataset.DataSetType;
+import ch.ethz.sis.openbis.generic.asapi.v3.dto.dataset.fetchoptions.DataSetTypeFetchOptions;
 import ch.ethz.sis.openbis.generic.asapi.v3.dto.entitytype.id.EntityTypePermId;
+import ch.ethz.sis.openbis.generic.asapi.v3.dto.experiment.ExperimentType;
 import ch.ethz.sis.openbis.generic.asapi.v3.dto.experiment.create.ExperimentTypeCreation;
 import ch.ethz.sis.openbis.generic.asapi.v3.dto.experiment.fetchoptions.ExperimentTypeFetchOptions;
 import ch.ethz.sis.openbis.generic.asapi.v3.dto.experiment.update.ExperimentTypeUpdate;
@@ -130,10 +133,7 @@ public class ExperimentTypeImportHelper extends BasicImportHelper
 
         creation.setCode(code);
         creation.setDescription(description);
-        if (validationScript != null && !validationScript.isEmpty())
-        {
-            creation.setValidationPluginId(new PluginPermId(ImportUtils.getScriptName(creation.getCode(), validationScript)));
-        }
+        creation.setValidationPluginId(ImportUtils.getScriptId(validationScript, null));
         creation.setManagedInternally(ImportUtils.isInternalNamespace(creation.getCode()));
 
         delayedExecutor.createExperimentType(creation, page, line);
@@ -160,10 +160,10 @@ public class ExperimentTypeImportHelper extends BasicImportHelper
             }
         }
 
-        if (validationScript != null && !validationScript.isEmpty())
-        {
-            update.setValidationPluginId(new PluginPermId(ImportUtils.getScriptName(code, validationScript)));
-        }
+        ExperimentTypeFetchOptions experimentTypeFetchOptions = new ExperimentTypeFetchOptions();
+        experimentTypeFetchOptions.withValidationPlugin();
+        ExperimentType experimentType = delayedExecutor.getExperimentType(new EntityTypePermId(code), experimentTypeFetchOptions);
+        update.setValidationPluginId(ImportUtils.getScriptId(validationScript, experimentType.getValidationPlugin()));
 
         delayedExecutor.updateExperimentType(update, page, line);
     }
diff --git a/server-application-server/source/java/ch/ethz/sis/openbis/generic/server/xls/importer/helper/PropertyAssignmentImportHelper.java b/server-application-server/source/java/ch/ethz/sis/openbis/generic/server/xls/importer/helper/PropertyAssignmentImportHelper.java
index 3df6ecc3f32b9ef06b27d87447398f6456bfe0b6..078f578e5df00a376d3c3e521185bbc5490799aa 100644
--- a/server-application-server/source/java/ch/ethz/sis/openbis/generic/server/xls/importer/helper/PropertyAssignmentImportHelper.java
+++ b/server-application-server/source/java/ch/ethz/sis/openbis/generic/server/xls/importer/helper/PropertyAssignmentImportHelper.java
@@ -15,11 +15,7 @@
  */
 package ch.ethz.sis.openbis.generic.server.xls.importer.helper;
 
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
+import java.util.*;
 import java.util.stream.Collectors;
 
 import ch.ethz.sis.openbis.generic.asapi.v3.dto.common.interfaces.IEntityType;
@@ -33,6 +29,7 @@ import ch.ethz.sis.openbis.generic.asapi.v3.dto.entitytype.id.IEntityTypeId;
 import ch.ethz.sis.openbis.generic.asapi.v3.dto.experiment.ExperimentType;
 import ch.ethz.sis.openbis.generic.asapi.v3.dto.experiment.fetchoptions.ExperimentTypeFetchOptions;
 import ch.ethz.sis.openbis.generic.asapi.v3.dto.experiment.update.ExperimentTypeUpdate;
+import ch.ethz.sis.openbis.generic.asapi.v3.dto.plugin.Plugin;
 import ch.ethz.sis.openbis.generic.asapi.v3.dto.plugin.id.PluginPermId;
 import ch.ethz.sis.openbis.generic.asapi.v3.dto.property.PropertyAssignment;
 import ch.ethz.sis.openbis.generic.asapi.v3.dto.property.PropertyType;
@@ -98,7 +95,7 @@ public class PropertyAssignmentImportHelper extends BasicImportHelper
 
     private ImportTypes importTypes;
 
-    private Set<String> existingCodes;
+    private HashMap<String, Plugin> existingDynamicPluginsByPropertyCode;
 
     Map<String, Integer> beforeVersions;
 
@@ -115,6 +112,7 @@ public class PropertyAssignmentImportHelper extends BasicImportHelper
         this.delayedExecutor = delayedExecutor;
         this.attributeValidator = new AttributeValidator<>(Attribute.class);
         this.beforeVersions = beforeVersions;
+        this.existingDynamicPluginsByPropertyCode = new HashMap<>();
     }
 
     @Override protected ImportTypes getTypeName()
@@ -136,6 +134,7 @@ public class PropertyAssignmentImportHelper extends BasicImportHelper
         if (version == null || version.isEmpty()) {
             return true;
         } else {
+            Set<String> existingCodes = existingDynamicPluginsByPropertyCode.keySet();
             return !existingCodes.contains(code) || VersionUtils.isNewVersion(version, VersionUtils.getStoredVersion(beforeVersions, ImportTypes.PROPERTY_TYPE.getType(), code));
         }
     }
@@ -169,13 +168,15 @@ public class PropertyAssignmentImportHelper extends BasicImportHelper
         creation.setPatternType(patternType);
         creation.setManagedInternally(Boolean.parseBoolean(internalAssignment));
 
-        if (script != null && !script.isEmpty())
+        ListUpdateValue newAssignments = new ListUpdateValue();
+        Set<String> existingCodes = existingDynamicPluginsByPropertyCode.keySet();
+        PluginPermId scriptId = ImportUtils.getScriptId(script,
+                existingDynamicPluginsByPropertyCode.get(code));
+        if (scriptId != null)
         {
-            creation.setPluginId(new PluginPermId(ImportUtils.getScriptName(code, script)));
+            creation.setPluginId(scriptId);
         }
-
-        ListUpdateValue newAssignments = new ListUpdateValue();
-        if (!this.existingCodes.contains(creation.getPropertyTypeId().toString()))
+        if (!existingCodes.contains(code))
         {
             // Add property assignment
             newAssignments.add(creation);
@@ -183,9 +184,6 @@ public class PropertyAssignmentImportHelper extends BasicImportHelper
             // Update property assignment
             ArrayList<PropertyAssignmentCreation> propertyAssignmentsForUpdate = getPropertyAssignmentsForUpdate();
             int index = indexOf(creation.getPropertyTypeId(), propertyAssignmentsForUpdate);
-            if (creation.getPluginId() == null && propertyAssignmentsForUpdate.get(index).getPluginId() != null) { // If the property has been made dynamic on the system
-                creation.setPluginId(propertyAssignmentsForUpdate.get(index).getPluginId()); // Keep the property dynamic
-            }
             propertyAssignmentsForUpdate.set(index, creation);
             newAssignments.set(propertyAssignmentsForUpdate.toArray());
         }
@@ -272,30 +270,34 @@ public class PropertyAssignmentImportHelper extends BasicImportHelper
         createObject(header, values, page, line);
     }
 
-    private Set<String> generateExistingCodes(IEntityTypeId permId)
+    private void generateExistingCodes(IEntityTypeId permId)
     {
         switch (importTypes)
         {
             case EXPERIMENT_TYPE:
                 ExperimentTypeFetchOptions experimentFetchOptions = new ExperimentTypeFetchOptions();
                 experimentFetchOptions.withPropertyAssignments().withPropertyType();
+                experimentFetchOptions.withPropertyAssignments().withPlugin();
                 ExperimentType experimentType = delayedExecutor.getExperimentType(permId, experimentFetchOptions);
-                return experimentType.getPropertyAssignments().stream().map(PropertyAssignment::getPropertyType).map(PropertyType::getCode)
-                        .collect(Collectors.toSet());
+                assignExisting(experimentType.getPropertyAssignments());
+                break;
             case SAMPLE_TYPE:
                 SampleTypeFetchOptions sampleTypeFetchOptions = new SampleTypeFetchOptions();
                 sampleTypeFetchOptions.withPropertyAssignments().withPropertyType();
+                sampleTypeFetchOptions.withPropertyAssignments().withPlugin();
                 SampleType sampleType = delayedExecutor.getSampleType(permId, sampleTypeFetchOptions);
-                return sampleType.getPropertyAssignments().stream().map(PropertyAssignment::getPropertyType).map(PropertyType::getCode)
-                        .collect(Collectors.toSet());
+                assignExisting(sampleType.getPropertyAssignments());
+                break;
             case DATASET_TYPE:
                 DataSetTypeFetchOptions dataSetTypeFetchOptions = new DataSetTypeFetchOptions();
                 dataSetTypeFetchOptions.withPropertyAssignments().withPropertyType();
+                dataSetTypeFetchOptions.withPropertyAssignments().withPlugin();
                 DataSetType dataSetType = delayedExecutor.getDataSetType(permId, dataSetTypeFetchOptions);
-                return dataSetType.getPropertyAssignments().stream().map(PropertyAssignment::getPropertyType).map(PropertyType::getCode)
-                        .collect(Collectors.toSet());
+                assignExisting(dataSetType.getPropertyAssignments());
+                break;
             default:
-                return new HashSet<>();
+                existingDynamicPluginsByPropertyCode = new HashMap<>();
+            break;
         }
     }
 
@@ -324,7 +326,7 @@ public class PropertyAssignmentImportHelper extends BasicImportHelper
                 break;
         }
 
-        this.existingCodes = generateExistingCodes(this.permId);
+        generateExistingCodes(this.permId);
         super.importBlock(page, pageIndex, start + 2, end);
     }
 
@@ -332,4 +334,12 @@ public class PropertyAssignmentImportHelper extends BasicImportHelper
     {
         throw new IllegalStateException("This method should have never been called.");
     }
+
+    private void assignExisting(List<PropertyAssignment> propertyAssignments)
+    {
+        existingDynamicPluginsByPropertyCode = new HashMap<>();
+        for (PropertyAssignment propertyAssignment: propertyAssignments) {
+            existingDynamicPluginsByPropertyCode.put(propertyAssignment.getPropertyType().getCode(), propertyAssignment.getPlugin());
+        }
+    }
 }
diff --git a/server-application-server/source/java/ch/ethz/sis/openbis/generic/server/xls/importer/helper/SampleTypeImportHelper.java b/server-application-server/source/java/ch/ethz/sis/openbis/generic/server/xls/importer/helper/SampleTypeImportHelper.java
index 91f624ebce1a80442b2343af412a7d43128ed96f..035ac58b8c08c15baf160b59ae101aa69c121fd2 100644
--- a/server-application-server/source/java/ch/ethz/sis/openbis/generic/server/xls/importer/helper/SampleTypeImportHelper.java
+++ b/server-application-server/source/java/ch/ethz/sis/openbis/generic/server/xls/importer/helper/SampleTypeImportHelper.java
@@ -19,7 +19,10 @@ import java.util.List;
 import java.util.Map;
 
 import ch.ethz.sis.openbis.generic.asapi.v3.dto.entitytype.id.EntityTypePermId;
+import ch.ethz.sis.openbis.generic.asapi.v3.dto.experiment.ExperimentType;
+import ch.ethz.sis.openbis.generic.asapi.v3.dto.experiment.fetchoptions.ExperimentTypeFetchOptions;
 import ch.ethz.sis.openbis.generic.asapi.v3.dto.plugin.id.PluginPermId;
+import ch.ethz.sis.openbis.generic.asapi.v3.dto.sample.SampleType;
 import ch.ethz.sis.openbis.generic.asapi.v3.dto.sample.create.SampleTypeCreation;
 import ch.ethz.sis.openbis.generic.asapi.v3.dto.sample.fetchoptions.SampleTypeFetchOptions;
 import ch.ethz.sis.openbis.generic.asapi.v3.dto.sample.update.SampleTypeUpdate;
@@ -141,10 +144,7 @@ public class SampleTypeImportHelper extends BasicImportHelper
         creation.setCode(code);
         creation.setDescription(description);
         creation.setAutoGeneratedCode(Boolean.parseBoolean(autoGenerateCodes));
-        if (validationScript != null && !validationScript.isEmpty())
-        {
-            creation.setValidationPluginId(new PluginPermId(ImportUtils.getScriptName(creation.getCode(), validationScript)));
-        }
+        creation.setValidationPluginId(ImportUtils.getScriptId(validationScript, null));
         if (generatedCodePrefix != null && !generatedCodePrefix.isEmpty())
         {
             creation.setGeneratedCodePrefix(generatedCodePrefix);
@@ -176,10 +176,12 @@ public class SampleTypeImportHelper extends BasicImportHelper
             }
         }
         update.setAutoGeneratedCode(Boolean.parseBoolean(autoGenerateCodes));
-        if (validationScript != null && !validationScript.isEmpty())
-        {
-            update.setValidationPluginId(new PluginPermId(ImportUtils.getScriptName(code, validationScript)));
-        }
+
+        SampleTypeFetchOptions sampleTypeFetchOptions = new SampleTypeFetchOptions();
+        sampleTypeFetchOptions.withValidationPlugin();
+        SampleType sampleType = delayedExecutor.getSampleType(new EntityTypePermId(code), sampleTypeFetchOptions);
+
+        update.setValidationPluginId(ImportUtils.getScriptId(validationScript, sampleType.getValidationPlugin()));
         if (generatedCodePrefix != null && !generatedCodePrefix.isEmpty())
         {
             update.setGeneratedCodePrefix(generatedCodePrefix);
diff --git a/server-application-server/source/java/ch/ethz/sis/openbis/generic/server/xls/importer/helper/ScriptImportHelper.java b/server-application-server/source/java/ch/ethz/sis/openbis/generic/server/xls/importer/helper/ScriptImportHelper.java
index bec20f48cd5d0425d7f225554bc4695264c5d477..57d4e92dc8845ff07a0e7eebb82781d2501dc690 100644
--- a/server-application-server/source/java/ch/ethz/sis/openbis/generic/server/xls/importer/helper/ScriptImportHelper.java
+++ b/server-application-server/source/java/ch/ethz/sis/openbis/generic/server/xls/importer/helper/ScriptImportHelper.java
@@ -19,6 +19,7 @@ import java.io.File;
 import java.util.List;
 import java.util.Map;
 
+import ch.ethz.sis.openbis.generic.asapi.v3.dto.plugin.Plugin;
 import ch.ethz.sis.openbis.generic.asapi.v3.dto.plugin.PluginType;
 import ch.ethz.sis.openbis.generic.asapi.v3.dto.plugin.create.PluginCreation;
 import ch.ethz.sis.openbis.generic.asapi.v3.dto.plugin.fetchoptions.PluginFetchOptions;
@@ -31,6 +32,11 @@ import ch.ethz.sis.openbis.generic.server.xls.importer.enums.ImportTypes;
 import ch.ethz.sis.openbis.generic.server.xls.importer.enums.ScriptTypes;
 import ch.ethz.sis.openbis.generic.server.xls.importer.utils.ImportUtils;
 
+import static ch.ethz.sis.openbis.generic.asapi.v3.dto.plugin.PluginType.DYNAMIC_PROPERTY;
+import static ch.ethz.sis.openbis.generic.asapi.v3.dto.plugin.PluginType.ENTITY_VALIDATION;
+import static ch.ethz.sis.openbis.generic.server.xls.importer.enums.ScriptTypes.DYNAMIC_SCRIPT;
+import static ch.ethz.sis.openbis.generic.server.xls.importer.enums.ScriptTypes.VALIDATION_SCRIPT;
+
 public class ScriptImportHelper extends BasicImportHelper
 {
     private static final String OWNER_CODE = "Code";
@@ -53,25 +59,19 @@ public class ScriptImportHelper extends BasicImportHelper
         return ImportTypes.SCRIPT;
     }
 
-    private String getScriptName(Map<String, Integer> header, List<String> values)
+    private PluginPermId getScriptId(Map<String, Integer> header, List<String> values)
     {
-        String code = getValueByColumnName(header, values, OWNER_CODE);
         String script = getValueByColumnName(header, values, scriptType.getColumnName());
-        if (script == null || script.isEmpty())
-        {
-            return null;
-        }
-        return ImportUtils.getScriptName(code, script);
+        return ImportUtils.getScriptId(script, null);
     }
 
     @Override protected boolean isObjectExist(Map<String, Integer> header, List<String> values)
     {
-        String scriptName = getScriptName(header, values);
+        PluginPermId script = getScriptId(header, values);
 
-        if (scriptName != null && !scriptName.isEmpty())
+        if (script != null)
         {
-            PluginPermId permId = new PluginPermId(scriptName);
-            return delayedExecutor.getPlugin(permId, new PluginFetchOptions()) != null;
+            return delayedExecutor.getPlugin(script, new PluginFetchOptions()) != null;
         }
 
         return false;
@@ -87,15 +87,15 @@ public class ScriptImportHelper extends BasicImportHelper
             if (script != null)
             {
                 PluginCreation creation = new PluginCreation();
-                creation.setName(getScriptName(header, values));
+                creation.setName(getScriptId(header, values).getPermId());
                 creation.setScript(script);
                 switch (scriptType)
                 {
                     case VALIDATION_SCRIPT:
-                        creation.setPluginType(PluginType.ENTITY_VALIDATION);
+                        creation.setPluginType(ENTITY_VALIDATION);
                         break;
                     case DYNAMIC_SCRIPT:
-                        creation.setPluginType(PluginType.DYNAMIC_PROPERTY);
+                        creation.setPluginType(DYNAMIC_PROPERTY);
                         break;
                 }
                 delayedExecutor.createPlugin(creation);
@@ -112,8 +112,7 @@ public class ScriptImportHelper extends BasicImportHelper
             if (script != null)
             {
                 PluginUpdate update = new PluginUpdate();
-                PluginPermId permId = new PluginPermId(getScriptName(header, values));
-                update.setPluginId(permId);
+                update.setPluginId(getScriptId(header, values));
                 update.setScript(script);
                 delayedExecutor.updatePlugin(update);
             }
diff --git a/server-application-server/source/java/ch/ethz/sis/openbis/generic/server/xls/importer/utils/ImportUtils.java b/server-application-server/source/java/ch/ethz/sis/openbis/generic/server/xls/importer/utils/ImportUtils.java
index 7f742e6499633ceb63e7cbc21f47709d3944e605..ec449b74109834e4dda67c4d66c8a6044b1cf2b1 100644
--- a/server-application-server/source/java/ch/ethz/sis/openbis/generic/server/xls/importer/utils/ImportUtils.java
+++ b/server-application-server/source/java/ch/ethz/sis/openbis/generic/server/xls/importer/utils/ImportUtils.java
@@ -17,6 +17,8 @@ package ch.ethz.sis.openbis.generic.server.xls.importer.utils;
 
 import ch.ethz.sis.openbis.generic.asapi.v3.dto.experiment.id.ExperimentIdentifier;
 import ch.ethz.sis.openbis.generic.asapi.v3.dto.experiment.id.IExperimentId;
+import ch.ethz.sis.openbis.generic.asapi.v3.dto.plugin.Plugin;
+import ch.ethz.sis.openbis.generic.asapi.v3.dto.plugin.id.PluginPermId;
 import ch.ethz.sis.openbis.generic.asapi.v3.dto.project.id.IProjectId;
 import ch.ethz.sis.openbis.generic.asapi.v3.dto.project.id.ProjectIdentifier;
 import ch.ethz.sis.openbis.generic.asapi.v3.dto.sample.create.SampleCreation;
@@ -129,7 +131,7 @@ public class ImportUtils
         }
     }
 
-    public static String getScriptName(String code, String pathToScript)
+    private static String getScriptName(String pathToScript)
     {
         if (pathToScript.contains("/"))
         {
@@ -139,6 +141,23 @@ public class ImportUtils
         {
             pathToScript = pathToScript.substring(0, pathToScript.lastIndexOf("."));
         }
-        return code + "." + pathToScript;
+        return pathToScript;
+    }
+
+    public static PluginPermId getScriptId(String script, Plugin existingPlugin)
+    {
+        if (script != null && !script.isEmpty())
+        {
+            if (script.equals("--DELETE--") || script.equals("__DELETE__"))
+            {
+                return null;
+            } else {
+                return new PluginPermId(ImportUtils.getScriptName(script));
+            }
+        } else if (existingPlugin != null){
+            return existingPlugin.getPermId();
+        }
+
+        return null;
     }
 }