diff --git a/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/translator/externaldms/ExternalDmsTranslator.java b/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/translator/externaldms/ExternalDmsTranslator.java
index 30905e2978c28d9f2a86d2c35e41fb46839391ad..f5fe7d2c10ca87ca9e1b6d778df71b4376841e28 100644
--- a/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/translator/externaldms/ExternalDmsTranslator.java
+++ b/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/translator/externaldms/ExternalDmsTranslator.java
@@ -69,7 +69,7 @@ public class ExternalDmsTranslator extends AbstractCachingTranslator<Long, Exter
         result.setLabel(baseRecord.label);
         result.setUrlTemplate(baseRecord.address);
         result.setAddress(baseRecord.address);
-        result.setAddressType(ExternalDmsAddressType.fromString(baseRecord.addressType));
+        result.setAddressType(ExternalDmsAddressType.valueOf(baseRecord.addressType));
         result.setOpenbis(ExternalDmsAddressType.OPENBIS.equals(result.getAddressType()));
     }
 
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/datasetlister/DatasetLister.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/datasetlister/DatasetLister.java
index 2d14a7ebd362f8d07e52efefba8fa02830e1d3cd..057b9170286986c1ceb7b2dd1b4c2e77329558a0 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/datasetlister/DatasetLister.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/datasetlister/DatasetLister.java
@@ -1297,7 +1297,7 @@ public class DatasetLister extends AbstractLister implements IDatasetLister
         result.setLabel(edmsRecord.label);
         result.setUrlTemplate(edmsRecord.address);
         result.setAddress(edmsRecord.address);
-        result.setAddressType(ExternalDataManagementSystemType.fromString(edmsRecord.addressType));
+        result.setAddressType(ExternalDataManagementSystemType.valueOf(edmsRecord.addressType));
         result.setOpenBIS(ExternalDataManagementSystemType.OPENBIS.equals(result.getAddressType()));
 
         return result;
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/fetchoptions/datasetlister/DataSetLister.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/fetchoptions/datasetlister/DataSetLister.java
index 549a7c2d91289904eb801619b04aa89a0a5c8737..3eb52556e1aeff818e0a01f7386e5c1fe1f91f24 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/fetchoptions/datasetlister/DataSetLister.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/fetchoptions/datasetlister/DataSetLister.java
@@ -256,7 +256,7 @@ public class DataSetLister implements IDataSetLister
             edms.setUrlTemplate(dataSet.edms_address);
             edms.setAddress(dataSet.edms_address);
             edms.setDatabaseInstance(db);
-            edms.setAddressType(ExternalDataManagementSystemType.fromString(dataSet.edms_address_type));
+            edms.setAddressType(ExternalDataManagementSystemType.valueOf(dataSet.edms_address_type));
             edms.setOpenBIS(ExternalDataManagementSystemType.OPENBIS.equals(edms.getAddressType()));
             initializer.setExternalDataManagementSystem(edms);
         }
diff --git a/openbis/source/sql/generic/158/schema-158.sql b/openbis/source/sql/generic/158/schema-158.sql
index 852115ef3ac615fb2174e495566c25cac4ac6d7b..9b7224f038c20729516f99a7941020fa7c1111c2 100644
--- a/openbis/source/sql/generic/158/schema-158.sql
+++ b/openbis/source/sql/generic/158/schema-158.sql
@@ -64,7 +64,7 @@ CREATE TABLE EXPERIMENT_RELATIONSHIPS_HISTORY (ID TECH_ID NOT NULL, MAIN_EXPE_ID
 CREATE TABLE SAMPLE_RELATIONSHIPS_HISTORY (ID TECH_ID NOT NULL, MAIN_SAMP_ID TECH_ID NOT NULL, RELATION_TYPE TEXT_VALUE, EXPE_ID TECH_ID, SAMP_ID TECH_ID, DATA_ID TECH_ID, ENTITY_PERM_ID TEXT_VALUE, PERS_ID_AUTHOR TECH_ID, VALID_FROM_TIMESTAMP TIME_STAMP NOT NULL, VALID_UNTIL_TIMESTAMP TIME_STAMP, SPACE_ID TECH_ID, PROJ_ID TECH_ID);
 CREATE TABLE DATA_SET_RELATIONSHIPS_HISTORY (ID TECH_ID NOT NULL, MAIN_DATA_ID TECH_ID NOT NULL, RELATION_TYPE TEXT_VALUE, ORDINAL INTEGER, EXPE_ID TECH_ID, SAMP_ID TECH_ID, DATA_ID TECH_ID, ENTITY_PERM_ID TEXT_VALUE, PERS_ID_AUTHOR TECH_ID, VALID_FROM_TIMESTAMP TIME_STAMP NOT NULL, VALID_UNTIL_TIMESTAMP TIME_STAMP);
 
-CREATE TABLE EXTERNAL_DATA_MANAGEMENT_SYSTEMS (ID TECH_ID, CODE CODE, LABEL TEXT_VALUE, ADDRESS TEXT_VALUE, ADDRESS_TYPE EDMS_ADDRESS_TYPE);
+CREATE TABLE EXTERNAL_DATA_MANAGEMENT_SYSTEMS (ID TECH_ID, CODE CODE NOT NULL, LABEL TEXT_VALUE, ADDRESS TEXT_VALUE NOT NULL, ADDRESS_TYPE EDMS_ADDRESS_TYPE NOT NULL);
 CREATE TABLE LINK_DATA (DATA_ID TECH_ID NOT NULL, EDMS_ID TECH_ID NOT NULL, EXTERNAL_CODE TEXT_VALUE NOT NULL);
 
 CREATE TABLE METAPROJECTS (ID TECH_ID NOT NULL, NAME CODE NOT NULL, DESCRIPTION DESCRIPTION_2000, OWNER TECH_ID NOT NULL, PRIVATE BOOLEAN_CHAR NOT NULL DEFAULT TRUE, CREATION_DATE TIME_STAMP_DFL NOT NULL DEFAULT CURRENT_TIMESTAMP);
diff --git a/openbis/source/sql/postgresql/migration/migration-157-158.sql b/openbis/source/sql/postgresql/migration/migration-157-158.sql
index cb42aa46e642ef53d6a3c5fd4a5720af039c2506..a3fc17166c374c40274fd8cc5a477c2f5ec4c3b4 100644
--- a/openbis/source/sql/postgresql/migration/migration-157-158.sql
+++ b/openbis/source/sql/postgresql/migration/migration-157-158.sql
@@ -1,6 +1,15 @@
 CREATE DOMAIN EDMS_ADDRESS_TYPE AS TEXT CHECK (VALUE IN ('OPENBIS', 'URL', 'FILE_SYSTEM'));
+
 ALTER TABLE external_data_management_systems ADD COLUMN address_type EDMS_ADDRESS_TYPE;
 UPDATE external_data_management_systems SET address_type='OPENBIS' WHERE is_openbis = true;
 UPDATE external_data_management_systems SET address_type='URL' WHERE is_openbis = false;
+ALTER TABLE external_data_management_systems ALTER COLUMN address_type SET NOT NULL;
+
+ALTER TABLE external_data_management_systems RENAME COLUMN url_template TO address;
+UPDATE external_data_management_systems SET address='UNKNOWN' WHERE address IS NULL;
+ALTER TABLE external_data_management_systems ALTER COLUMN address SET NOT NULL;
+
 ALTER TABLE external_data_management_systems DROP COLUMN is_openbis;
-ALTER TABLE external_data_management_systems RENAME COLUMN url_template TO address;
\ No newline at end of file
+
+UPDATE external_data_management_systems SET code = (SELECT coalesce(code, '') FROM external_data_management_systems order by coalesce(length(code), '0') desc limit 1) || id WHERE code IS NULL;
+ALTER TABLE external_data_management_systems ALTER COLUMN code SET NOT NULL;
\ No newline at end of file
diff --git a/openbis/sourceTest/sql/postgresql/158/schema-158.sql b/openbis/sourceTest/sql/postgresql/158/schema-158.sql
index abad9f21d89d8c10ae16147fc5b153cf607ec263..853083f848b2a64c4b3ab7be0fccddfac1d3b5aa 100644
--- a/openbis/sourceTest/sql/postgresql/158/schema-158.sql
+++ b/openbis/sourceTest/sql/postgresql/158/schema-158.sql
@@ -1061,10 +1061,10 @@ CREATE SEQUENCE external_data_management_system_id_seq
     CACHE 1;
 CREATE TABLE external_data_management_systems (
     id tech_id NOT NULL,
-    code code,
+    code code NOT NULL,
     label text_value,
-    address text_value,
-    address_type edms_address_type
+    address text_value NOT NULL,
+    address_type edms_address_type NOT NULL
 );
 CREATE SEQUENCE file_format_type_id_seq
     START WITH 1