diff --git a/src/main/java/eu/hbp/mip/models/DAOs/ExperimentDAO.java b/src/main/java/eu/hbp/mip/models/DAOs/ExperimentDAO.java
index f634c77a2b330cf2442490efef17964ea2bd8e0d..30d5ee123121545aa7a77ce8d25f83169cbe9c4f 100644
--- a/src/main/java/eu/hbp/mip/models/DAOs/ExperimentDAO.java
+++ b/src/main/java/eu/hbp/mip/models/DAOs/ExperimentDAO.java
@@ -43,6 +43,7 @@ public class ExperimentDAO {
 
     @Expose
     @Column(columnDefinition = "TEXT")
+    @Enumerated(EnumType.STRING)
     private Status status;
 
     @Expose
@@ -55,11 +56,11 @@ public class ExperimentDAO {
 
     @Expose
     @Column(columnDefinition = "TEXT")
-    private String algorithmDetails;
+    private String algorithm;
 
     @Expose
     @Column(columnDefinition = "TEXT")
-    private String algorithm;
+    private String algorithmId;
 
     @Expose
     @Column(columnDefinition = "TIMESTAMP WITHOUT TIME ZONE")
@@ -93,14 +94,14 @@ public class ExperimentDAO {
     public ExperimentDTO convertToDTO(boolean includeResult)
     {
         ExperimentDTO experimentDTO = new ExperimentDTO();
-        experimentDTO.setAlgorithm(JsonConverters.convertJsonStringToObject(this.algorithmDetails, AlgorithmDTO.class));
+        experimentDTO.setAlgorithm(JsonConverters.convertJsonStringToObject(this.algorithm, AlgorithmDTO.class));
         experimentDTO.setCreated(this.created);
         experimentDTO.setUpdated(this.updated);
         experimentDTO.setFinished(this.finished);
         experimentDTO.setCreatedBy(this.createdBy.getUsername());
         experimentDTO.setName(this.name);
         if(includeResult){
-            experimentDTO.setResult(JsonConverters.convertJsonStringToObject(String.valueOf(this.result), new ArrayList<ExperimentDTO.ResultDTO>().getClass()));
+            experimentDTO.setResult(JsonConverters.convertJsonStringToObject(String.valueOf(this.result),  new ArrayList<ExperimentDTO.ResultDTO>().getClass()));
         }
         experimentDTO.setStatus(this.status);
         experimentDTO.setShared(this.shared);
@@ -109,14 +110,6 @@ public class ExperimentDAO {
         return experimentDTO;
     }
 
-    public String getAlgorithmDetails() {
-        return algorithmDetails;
-    }
-
-    public void setAlgorithmDetails(String algorithmDetails) {
-        this.algorithmDetails = algorithmDetails;
-    }
-
     public String getAlgorithm() {
         return algorithm;
     }
@@ -125,6 +118,14 @@ public class ExperimentDAO {
         this.algorithm = algorithm;
     }
 
+    public String getAlgorithmId() {
+        return algorithmId;
+    }
+
+    public void setAlgorithmId(String algorithmId) {
+        this.algorithmId = algorithmId;
+    }
+
     public String getWorkflowHistoryId() {
         return workflowHistoryId;
     }
diff --git a/src/main/java/eu/hbp/mip/models/DTOs/ExperimentDTO.java b/src/main/java/eu/hbp/mip/models/DTOs/ExperimentDTO.java
index a1c6e916cbdc66332a014e99593865426e8fbe6c..2840f669fcb507bf7b91b0f604b54ba7440cafc9 100644
--- a/src/main/java/eu/hbp/mip/models/DTOs/ExperimentDTO.java
+++ b/src/main/java/eu/hbp/mip/models/DTOs/ExperimentDTO.java
@@ -117,7 +117,7 @@ public class ExperimentDTO {
     public static class ResultDTO {
 
         private Object data;
-        private Object type;
+        private String type;
 
         public Object getData() {
             return this.data;
@@ -127,11 +127,11 @@ public class ExperimentDTO {
             this.data = data;
         }
 
-        public Object getType() {
+        public String getType() {
             return type;
         }
 
-        public void setType(Object type) {
+        public void setType(String type) {
             this.type = type;
         }
     }
diff --git a/src/main/java/eu/hbp/mip/services/ExperimentService.java b/src/main/java/eu/hbp/mip/services/ExperimentService.java
index e12c0b858d5573ce76a7bdb6f67d19e8c246f395..869db8836a24d9e0e39a42fe663db4d2590c2100 100644
--- a/src/main/java/eu/hbp/mip/services/ExperimentService.java
+++ b/src/main/java/eu/hbp/mip/services/ExperimentService.java
@@ -59,7 +59,7 @@ public class ExperimentService {
 
     private static final Gson gson = new Gson();
 
-    private ActiveUserService activeUserService;
+    private final ActiveUserService activeUserService;
     private final ExperimentRepository experimentRepository;
 
     public ExperimentService(ActiveUserService activeUserService, ExperimentRepository experimentRepository) {
@@ -90,7 +90,7 @@ public class ExperimentService {
         if (size > 50)
             throw new BadRequestException("Invalid size input, max size is 50.");
         Specification<ExperimentDAO> spec;
-        if(authenticationIsEnabled  && ClaimUtils.validateAccessRightsOnExperiments(user.getUsername(), authentication.getAuthorities(), logger))
+        if(!authenticationIsEnabled  || ClaimUtils.validateAccessRightsOnExperiments(user.getUsername(), authentication.getAuthorities(), logger))
         {
             spec = Specification
                     .where(new ExperimentSpecifications.ExperimentWithName(name))
@@ -146,6 +146,7 @@ public class ExperimentService {
         if (
                 !experimentDAO.isShared()
                 && !experimentDAO.getCreatedBy().getUsername().equals(user.getUsername())
+                && authenticationIsEnabled
                 && ClaimUtils.validateAccessRightsOnExperiments(user.getUsername(), authentication.getAuthorities(), logger)
         ) {
             logger.LogUserAction("Accessing Experiment is unauthorized.");
@@ -346,9 +347,24 @@ public class ExperimentService {
             throw new BadRequestException("Created is not editable.");
         }
 
+        if (experimentDTO.getCreatedBy() != null) {
+            logger.LogUserAction( "CreatedBy is not editable.");
+            throw new BadRequestException("CreatedBy is not editable.");
+        }
+
+        if (experimentDTO.getUpdated() != null) {
+            logger.LogUserAction( "Updated is not editable.");
+            throw new BadRequestException("Updated is not editable.");
+        }
+
+        if (experimentDTO.getFinished() != null) {
+            logger.LogUserAction( "Finished is not editable.");
+            throw new BadRequestException("Finished is not editable.");
+        }
+
         if (experimentDTO.getResult() != null) {
-            logger.LogUserAction( "Status is not editable.");
-            throw new BadRequestException("Status is not editable.");
+            logger.LogUserAction( "Result is not editable.");
+            throw new BadRequestException("Result is not editable.");
         }
 
         if (experimentDTO.getStatus() != null) {
@@ -369,7 +385,7 @@ public class ExperimentService {
                         .append("\n"));
         logger.LogUserAction("Executing " + algorithmName + parametersLogMessage);
     }
-
+    
     /**
      * The getDatasetFromExperimentParameters will retrieve the dataset from the experiment parameters
      *
@@ -434,8 +450,8 @@ public class ExperimentService {
         ExperimentDAO experimentDAO = new ExperimentDAO();
         experimentDAO.setUuid(UUID.randomUUID());
         experimentDAO.setCreatedBy(user);
-        experimentDAO.setAlgorithmDetails(JsonConverters.convertObjectToJsonString(experimentDTO.getAlgorithm()));
-        experimentDAO.setAlgorithm(experimentDTO.getAlgorithm().getName());
+        experimentDAO.setAlgorithm(JsonConverters.convertObjectToJsonString(experimentDTO.getAlgorithm()));
+        experimentDAO.setAlgorithmId(experimentDTO.getAlgorithm().getName());
         experimentDAO.setName(experimentDTO.getName());
         experimentDAO.setStatus(ExperimentDAO.Status.pending);
 
@@ -447,7 +463,7 @@ public class ExperimentService {
         }
 
         logger.LogUserAction(" id : " + experimentDAO.getUuid());
-        logger.LogUserAction(" algorithms : " + experimentDAO.getAlgorithmDetails());
+        logger.LogUserAction(" algorithm : " + experimentDAO.getAlgorithm());
         logger.LogUserAction(" name : " + experimentDAO.getName());
         return experimentDAO;
     }
@@ -455,7 +471,7 @@ public class ExperimentService {
     private void saveExperiment(ExperimentDAO experimentDAO, Logger logger) {
 
         logger.LogUserAction(" id : " + experimentDAO.getUuid());
-        logger.LogUserAction(" algorithms : " + experimentDAO.getAlgorithmDetails());
+        logger.LogUserAction(" algorithm : " + experimentDAO.getAlgorithm());
         logger.LogUserAction(" name : " + experimentDAO.getName());
         logger.LogUserAction(" historyId : " + experimentDAO.getWorkflowHistoryId());
         logger.LogUserAction(" status : " + experimentDAO.getStatus());
diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml
index 84053f9128a3a2c724ae1aa3ecab8ad0ff9b2e39..b44e1ae9e6f819465f823e018922dd28c72a6a0d 100644
--- a/src/main/resources/application.yml
+++ b/src/main/resources/application.yml
@@ -11,7 +11,7 @@ logging:
 
 ### AUTHENTICATION ###
 authentication:
-  enabled: true
+  enabled: false
 
 
 ### DATABASE CONFIGURATION ###
diff --git a/src/main/resources/db/migration/V7_0__NewDatabaseStructure.sql b/src/main/resources/db/migration/V7_0__NewDatabaseStructure.sql
index a1c728e963e8e510dfe6df4b128d19d6ce470922..04c6f3f996b7b7e12311ce7058be89812cea1faf 100644
--- a/src/main/resources/db/migration/V7_0__NewDatabaseStructure.sql
+++ b/src/main/resources/db/migration/V7_0__NewDatabaseStructure.sql
@@ -1,11 +1,37 @@
+UPDATE experiment
+SET algorithms =
+    (
+        SELECT SUBSTR(algorithms, 2, LENGTH(algorithms) - 2)
+    );
+
+UPDATE experiment
+SET workflowstatus = 'error'
+WHERE workflowstatus IS NULL AND haserror;
+
+UPDATE experiment
+SET workflowstatus = 'completed'
+WHERE workflowstatus IS NULL AND NOT haserror;
+
+UPDATE experiment
+SET workflowstatus = 'success'
+WHERE workflowstatus = 'completed';
+
+UPDATE experiment
+SET workflowstatus = 'pending'
+WHERE workflowstatus = 'running';
+
 ALTER TABLE experiment
 DROP COLUMN haserror,
 DROP COLUMN hasservererror,
 DROP COLUMN validations,
 DROP COLUMN model_slug;
 
+UPDATE experiment
+SET algorithms = REPLACE(algorithms, '"name"', '"id"');
 ALTER TABLE experiment
-RENAME algorithms TO algorithmDetails;
+RENAME algorithms TO algorithm;
+ALTER TABLE experiment
+ALTER COLUMN algorithm TYPE json USING algorithm::json;
 ALTER TABLE experiment
 RENAME createdby_username TO created_by_username;
 ALTER TABLE experiment
@@ -16,10 +42,15 @@ ALTER TABLE experiment
 RENAME workflowstatus TO status;
 
 ALTER TABLE experiment
-ADD COLUMN updated timestamp without time zone;
+ADD COLUMN algorithmId text;
+
+UPDATE experiment
+SET algorithmId = (algorithm ->> 'id');
 
 ALTER TABLE experiment
-ADD COLUMN algorithm text;
+ALTER COLUMN algorithm TYPE text;
+ALTER TABLE experiment
+ADD COLUMN updated timestamp without time zone;
 
 ALTER TABLE "user"
 DROP COLUMN birthday,