diff --git a/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/util/FormUtil.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/util/FormUtil.js
index 544867a83a54bf256da267ec949984a1577a2e28..fae8371bba93f2853aad8e1805328067ad6abef9 100644
--- a/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/util/FormUtil.js
+++ b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/util/FormUtil.js
@@ -919,14 +919,18 @@ var FormUtil = new function() {
 		}
 		return termCode;
 	}
-	
+
 	this.getFieldForPropertyType = function(propertyType, timestampValue) {
+	    return this.getFieldForPropertyType(propertyType, timestampValue, false);
+	}
+	
+	this.getFieldForPropertyType = function(propertyType, timestampValue, isMultiValue) {
 		var $component = null;
 		if (propertyType.dataType === "BOOLEAN") {
 			$component = this._getBoolean2Field(propertyType.code, propertyType.description, propertyType.mandatory);
 		} else if (propertyType.dataType === "CONTROLLEDVOCABULARY") {
 			var vocabulary = profile.getVocabularyByCode(propertyType.vocabulary.code);
-			$component = this._getDropDownFieldForVocabulary(propertyType.code, vocabulary.terms, propertyType.description, propertyType.mandatory);
+			$component = this._getDropDownFieldForVocabulary(propertyType.code, vocabulary.terms, propertyType.description, propertyType.mandatory, isMultiValue);
 		} else if (propertyType.dataType === "HYPERLINK") {
 			$component = this._getInputField("url", propertyType.code, propertyType.description, null, propertyType.mandatory);
 		} else if (propertyType.dataType === "INTEGER") {
@@ -1040,16 +1044,27 @@ var FormUtil = new function() {
 	this.getDropDownForTerms = function(id, terms, alt, isRequired) {
 		return this._getDropDownFieldForVocabulary(id, terms, alt, isRequired);
 	}
-	
+
 	this._getDropDownFieldForVocabulary = function(code, terms, alt, isRequired) {
-		var $component = $("<select>", {'placeholder' : alt, 'class' : 'form-control'});
+	    return this._getDropDownFieldForVocabulary(code, terms, alt, isRequired, false);
+	}
+	
+	this._getDropDownFieldForVocabulary = function(code, terms, alt, isRequired, isMultiValue) {
+	    var $component = $("<select>", {'placeholder' : alt, 'class' : 'form-control'});
+	    if(isMultiValue) {
+	        $component.attr('multiple', 'multiple');
+	    }
 		$component.attr('id', this.prepareId(code));
 		
 		if (isRequired) {
 			$component.attr('required', '');
 		}
-		
-		$component.append($("<option>").attr('value', '').attr('selected', '').attr('disabled', '').text(alt));
+
+		var labelOption = $("<option>").attr('value', '').attr('disabled', '').text(alt);
+		if(!isMultiValue) {
+		    labelOption = labelOption.attr('selected', '');
+		}
+		$component.append(labelOption);
 		$component.append($("<option>").attr('value', '').text('(empty)'));
         var $options = [];
 		for(var i = 0; i < terms.length; i++) {
diff --git a/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/ExperimentForm/ExperimentFormView.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/ExperimentForm/ExperimentFormView.js
index 78ac43ea3703abdd4c04c9b7acc85445f4c8ee69..daf87f76d6f99d03b0c278100326e783bb16a0a0 100644
--- a/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/ExperimentForm/ExperimentFormView.js
+++ b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/ExperimentForm/ExperimentFormView.js
@@ -578,13 +578,19 @@ function ExperimentFormView(experimentFormController, experimentFormModel) {
 					if(propertyType.code === "$DEFAULT_OBJECT_TYPE") {
 						$component = FormUtil.getSampleTypeDropdown(propertyType.code, false, null, null, IdentifierUtil.getSpaceCodeFromIdentifier(this._experimentFormModel.experiment.identifier), true);
 					} else {
-						$component = FormUtil.getFieldForPropertyType(propertyType, value);
+						$component = FormUtil.getFieldForPropertyType(propertyType, value, propertyTypeV3.isMultiValue());
 					}
 
 					if(this._experimentFormModel.mode === FormMode.EDIT) {
 						if(propertyType.dataType === "BOOLEAN") {
 							FormUtil.setFieldValue(propertyType, $component, value);
 						} else if(propertyType.dataType === "TIMESTAMP" || propertyType.dataType === "DATE") {
+						} else if(propertyType.dataType === "CONTROLLEDVOCABULARY") {
+						    if(value) {
+						        var valueArray = value.split(',');
+						        valueArray = valueArray.map(function(item){ return item.trim(); });
+						        $component.val(valueArray);
+						    }
 						} else {
 							$component.val(value);
 						}
@@ -592,31 +598,66 @@ function ExperimentFormView(experimentFormController, experimentFormModel) {
 						$component.val(""); //HACK-FIX: Not all browsers show the placeholder in Bootstrap 3 if you don't set an empty value.
 					}
 
-					var changeEvent = function(propertyType) {
-						return function(jsEvent, newValue) {
-							var propertyTypeCode = null;
-							propertyTypeCode = propertyType.code;
-							_this._experimentFormModel.isFormDirty = true;
-							var field = $(this);
-							if(propertyType.dataType === "BOOLEAN") {
-								_this._experimentFormModel.experiment.properties[propertyTypeCode] = FormUtil.getBooleanValue(field);
-							} else if (propertyType.dataType === "TIMESTAMP" || propertyType.dataType === "DATE") {
-								var timeValue = $($(field.children()[0]).children()[0]).val();
-								var isValidValue = Util.isDateValid(timeValue, propertyType.dataType === "DATE");
-								if(!isValidValue.isValid) {
-								    Util.showUserError(isValidValue.error);
-								} else {
-								    _this._experimentFormModel.experiment.properties[propertyTypeCode] = timeValue;
-								}
-							} else {
-								if(newValue !== undefined && newValue !== null) {
-									_this._experimentFormModel.experiment.properties[propertyTypeCode] = Util.getEmptyIfNull(newValue);
-								} else {
-									_this._experimentFormModel.experiment.properties[propertyTypeCode] = Util.getEmptyIfNull(field.val());
-								}
-							}
-						}
-					}
+					var changeEvent = function(propertyType, isMultiValue) {
+                        return function(jsEvent, newValue) {
+                            var propertyTypeCode = null;
+                            propertyTypeCode = propertyType.code;
+                            _this._experimentFormModel.isFormDirty = true;
+                            var field = $(this);
+                            if(propertyType.dataType === "BOOLEAN") {
+                                _this._experimentFormModel.experiment.properties[propertyTypeCode] = FormUtil.getBooleanValue(field);
+                            } else if (propertyType.dataType === "TIMESTAMP" || propertyType.dataType === "DATE") {
+                                var timeValue = $($(field.children()[0]).children()[0]).val();
+                                var isValidValue = Util.isDateValid(timeValue, propertyType.dataType === "DATE");
+                                if(!isValidValue.isValid) {
+                                    Util.showUserError(isValidValue.error);
+                                } else {
+                                    _this._experimentFormModel.experiment.properties[propertyTypeCode] = timeValue;
+                                }
+                            } else {
+                                if(newValue !== undefined && newValue !== null) {
+                                    _this._experimentFormModel.experiment.properties[propertyTypeCode] = Util.getEmptyIfNull(newValue);
+                                } else {
+                                    var lastSelected = Util.getEmptyIfNull($('option', this).filter(':selected:last').val());
+                                    var dataLast = field.data('last');
+                                     if(propertyType.dataType === "CONTROLLEDVOCABULARY" && isMultiValue) {
+                                         var props = _this._experimentFormModel.experiment.properties[propertyTypeCode];
+                                         if (field.val()) {
+                                        if(props !== undefined) {
+                                            if(props != '' && field.val().includes('')) {
+                                                _this._experimentFormModel.experiment.properties[propertyTypeCode] = '';
+                                                field.val([]);
+                                            } else {
+                                                if(props == '' && field.val().includes('')) {
+                                                    var removedEmpty = field.val().filter(x => x != '');
+                                                    _this._experimentFormModel.experiment.properties[propertyTypeCode] = removedEmpty;
+                                                    field.val(removedEmpty);
+                                                } else {
+                                                    _this._experimentFormModel.experiment.properties[propertyTypeCode] = Util.getEmptyIfNull(field.val());
+                                                }
+                                            }
+                                        } else {
+                                            if(field.val().includes('')) {
+                                                _this._experimentFormModel.experiment.properties[propertyTypeCode] = '';
+                                                field.val([]);
+                                            } else {
+                                                _this._experimentFormModel.experiment.properties[propertyTypeCode] = field.val();
+                                            }
+                                        }
+                                         } else {
+                                              _this._experimentFormModel.experiment.properties[propertyTypeCode] = Util.getEmptyIfNull(field.val());
+                                         }
+
+
+
+                                    } else {
+                                        _this._experimentFormModel.experiment.properties[propertyTypeCode] = Util.getEmptyIfNull(field.val());
+                                    }
+                                    field.data('last', field.val());
+                                }
+                            }
+                        }
+                    }
 
 					//Avoid modifications in properties managed by scripts
 					if(propertyType.managed || propertyType.dinamic) {
@@ -650,7 +691,7 @@ function ExperimentFormView(experimentFormController, experimentFormModel) {
                     } else if(propertyType.dataType === "TIMESTAMP" || propertyType.dataType === "DATE") {
 						$component.on("dp.change", changeEvent(propertyType));
 					} else {
-						$component.change(changeEvent(propertyType));
+						$component.change(changeEvent(propertyType, propertyTypeV3.isMultiValue()));
 					}
 
 					$controlGroup = FormUtil.getFieldForComponentWithLabel($component, propertyType.label);