diff --git a/test-api-openbis-javascript/servers/common/core-plugins/tests/1/as/webapps/openbis-v3-api-test/html/test/test-create.js b/test-api-openbis-javascript/servers/common/core-plugins/tests/1/as/webapps/openbis-v3-api-test/html/test/test-create.js
index 994a63837b01286496df7754e84435d3896a56f2..ac42300ab7c9f905515435103b1119f28ad04683 100644
--- a/test-api-openbis-javascript/servers/common/core-plugins/tests/1/as/webapps/openbis-v3-api-test/html/test/test-create.js
+++ b/test-api-openbis-javascript/servers/common/core-plugins/tests/1/as/webapps/openbis-v3-api-test/html/test/test-create.js
@@ -125,6 +125,7 @@ define(
 						attachmentCreation.setContent(btoa("hello world!"));
 						experimentCreation.setAttachments([ attachmentCreation ]);
 						experimentCreation.setProperty("EXPERIMENT_DESIGN", "SEQUENCE_ENRICHMENT");
+						experimentCreation.setMetaData({"meta_key":"meta_value"})
 						return facade.createExperiments([ experimentCreation ]);
 					}
 
@@ -146,6 +147,8 @@ define(
 						var properties = experiment.getProperties();
 						c.assertEqual(properties["EXPERIMENT_DESIGN"], "SEQUENCE_ENRICHMENT", "Property EXPERIMENT_DESIGN");
 						c.assertEqual(Object.keys(properties), "EXPERIMENT_DESIGN", "Properties");
+						var metaData = experiment.getMetaData();
+						c.assertEqual(metaData["meta_key"], "meta_value", "metadata meta_key");
 					}
 
 					testCreate(c, fCreate, c.findExperiment, fCheck);
@@ -222,6 +225,7 @@ define(
 						creation.setDescription("a new description");
 						creation.setValidationPluginId(new c.PluginPermId("Has_Parents"));
 						creation.setPropertyAssignments([ assignmentCreation ]);
+						creation.setMetaData({"type_key":"type_value"});
 
 						return facade.createExperimentTypes([ creation ]);
 					}
@@ -243,6 +247,9 @@ define(
 						c.assertEqual(assignment.isShowInEditView(), true, "Assignment ShowInEditView");
 						c.assertEqual(assignment.isShowRawValueInForms(), true, "Assignment ShowRawValueInForms");
 						c.assertEqual(assignment.getPlugin().getName(), "Diff_time", "Assignment Plugin");
+
+						var metaData = type.getMetaData();
+						c.assertEqual(metaData["type_key"], "type_value", "Metadata");
 					}
 
 					testCreate(c, fCreate, c.findExperimentType, fCheck);
@@ -258,6 +265,7 @@ define(
 						creation.setCode(code);
 						creation.setSpaceId(new c.SpacePermId("TEST"));
 						creation.setTagIds([ new c.TagCode("CREATE_JSON_TAG") ]);
+						creation.setMetaData({"sample_key":"sample_value"});
 						return facade.createSamples([ creation ]);
 					}
 
@@ -266,6 +274,9 @@ define(
 						c.assertEqual(sample.getType().getCode(), "UNKNOWN", "Type code");
 						c.assertEqual(sample.getSpace().getCode(), "TEST", "Space code");
 						c.assertEqual(sample.getTags()[0].getCode(), "CREATE_JSON_TAG", "Tag code");
+
+						var metaData = sample.getMetaData();
+                        c.assertEqual(metaData["sample_key"], "sample_value", "Metadata");
 					}
 
 					testCreate(c, fCreate, c.findSample, fCheck);
@@ -398,6 +409,7 @@ define(
 						creation.setShowParentMetadata(true);
 						creation.setValidationPluginId(new c.PluginPermId("Has_Parents"));
 						creation.setPropertyAssignments([ assignmentCreation ]);
+						creation.setMetaData({"sample_type_key":"type_value"});
 
 						return facade.createSampleTypes([ creation ]);
 					}
@@ -425,6 +437,9 @@ define(
 						c.assertEqual(assignment.isShowInEditView(), true, "Assignment ShowInEditView");
 						c.assertEqual(assignment.isShowRawValueInForms(), true, "Assignment ShowRawValueInForms");
 						c.assertEqual(assignment.getPlugin().getName(), "Diff_time", "Assignment Plugin");
+
+						var metaData = type.getMetaData();
+                        c.assertEqual(metaData["sample_type_key"], "type_value", "Metadata");
 					}
 
 					testCreate(c, fCreate, c.findSampleType, fCheck);
@@ -531,6 +546,7 @@ define(
 								creation.setDataStoreId(new c.DataStorePermId("DSS1"));
 								creation.setExperimentId(new c.ExperimentIdentifier("/TEST/TEST-PROJECT/TEST-EXPERIMENT"));
 								creation.setProperty(propertyTypeCode, "20130412140147735-20");
+								creation.setMetaData({"dataset_key":"dataset_value"});
 								return facade.createDataSets([ creation ]);
 							});
 						});
@@ -541,6 +557,10 @@ define(
 						c.assertEqual(dataSet.getType().getCode(), dataSetTypeCode, "Type code");
 						c.assertEqual(dataSet.getProperties()[propertyTypeCode], "20130412140147735-20", "Sample property id");
 						c.assertEqual(dataSet.getSampleProperties()[propertyTypeCode].getIdentifier().getIdentifier(), "/PLATONIC/SCREENING-EXAMPLES/PLATE-1", "Sample property");
+
+						var metaData = dataSet.getMetaData();
+						c.assertEqual(metaData["dataset_key"], "dataset_value", "Metadata");
+
 					}
 					
 					testCreate(c, fCreate, c.findDataSet, fCheck);
@@ -569,6 +589,7 @@ define(
 						creation.setDisallowDeletion(true);
 						creation.setValidationPluginId(new c.PluginPermId("Has_Parents"));
 						creation.setPropertyAssignments([ assignmentCreation ]);
+						creation.setMetaData({"dataset_type_key":"dataset_type_value"});
 
 						return facade.createDataSetTypes([ creation ]);
 					}
@@ -592,6 +613,9 @@ define(
 						c.assertEqual(assignment.isShowInEditView(), true, "Assignment ShowInEditView");
 						c.assertEqual(assignment.isShowRawValueInForms(), true, "Assignment ShowRawValueInForms");
 						c.assertEqual(assignment.getPlugin().getName(), "Diff_time", "Assignment Plugin");
+
+						var metaData = type.getMetaData();
+						c.assertEqual(metaData["dataset_type_key"], "dataset_type_value", "Metadata");
 					}
 
 					testCreate(c, fCreate, c.findDataSetType, fCheck);
diff --git a/test-api-openbis-javascript/servers/common/core-plugins/tests/1/as/webapps/openbis-v3-api-test/html/test/test-update.js b/test-api-openbis-javascript/servers/common/core-plugins/tests/1/as/webapps/openbis-v3-api-test/html/test/test-update.js
index cf478d3b72817d8134d8cd5f8aa87791f64dc8b9..9c1cc46217e561cfc7308d8292c5db17d9ad23d9 100644
--- a/test-api-openbis-javascript/servers/common/core-plugins/tests/1/as/webapps/openbis-v3-api-test/html/test/test-update.js
+++ b/test-api-openbis-javascript/servers/common/core-plugins/tests/1/as/webapps/openbis-v3-api-test/html/test/test-update.js
@@ -175,6 +175,7 @@ define([ 'jquery', 'underscore', 'openbis', 'test/openbis-execute-operations', '
 				creation.setCode(code);
 				creation.setDescription("a new description");
 				creation.setPropertyAssignments([ assignmentCreation ]);
+				creation.setMetaData({"experiment_type_update":"old_value", "experiment_type_delete":"del_value"});
 
 				return facade.createExperimentTypes([ creation ]);
 			}
@@ -194,6 +195,9 @@ define([ 'jquery', 'underscore', 'openbis', 'test/openbis-execute-operations', '
 				update.setDescription("another new description");
 				update.setValidationPluginId(new c.PluginPermId("Has_Parents"));
 				update.getPropertyAssignments().set([ assignmentCreation ]);
+				update.getMetaData().put("experiment_type_update", "new_value");
+				update.getMetaData().add({"experiment_type_add":"add_value"});
+				update.getMetaData().remove("experiment_type_delete");
 				return facade.updateExperimentTypes([ update ]);
 			}
 
@@ -212,6 +216,11 @@ define([ 'jquery', 'underscore', 'openbis', 'test/openbis-execute-operations', '
 				c.assertEqual(assignment.isMandatory(), true, "Assignment mandatory");
 				c.assertEqual(assignment.isShowInEditView(), true, "Assignment ShowInEditView");
 				c.assertEqual(assignment.isShowRawValueInForms(), true, "Assignment ShowRawValueInForms");
+
+				var metaData = type.getMetaData();
+				c.assertEqual(metaData["experiment_type_update"], "new_value", "Metadata update");
+				c.assertEqual(metaData["experiment_type_add"], "add_value", "Metadata add");
+				c.assertEqual(metaData["experiment_type_delete"], undefined, "Metadata delete");
 			}
 
 			testUpdate(c, fCreate, fUpdate, c.findExperimentType, fCheck);
@@ -228,6 +237,7 @@ define([ 'jquery', 'underscore', 'openbis', 'test/openbis-execute-operations', '
 				experimentCreation.setProperty("EXPERIMENT_DESIGN", "EXPRESSION");
 				experimentCreation.setTagIds([ new c.TagCode("CREATE_JSON_TAG") ]);
 				experimentCreation.setProjectId(new c.ProjectIdentifier("/TEST/TEST-PROJECT"));
+				experimentCreation.setMetaData({"experiment_update":"old_value", "experiment_delete":"del_value"});
 				return facade.createExperiments([ experimentCreation ]);
 			}
 
@@ -242,6 +252,9 @@ define([ 'jquery', 'underscore', 'openbis', 'test/openbis-execute-operations', '
 				attachmentCreation.setDescription("test_description");
 				attachmentCreation.setContent(btoa("hello world"));
 				experimentUpdate.getAttachments().add([ attachmentCreation ]);
+				experimentUpdate.getMetaData().put("experiment_update", "new_value");
+                experimentUpdate.getMetaData().add({"experiment_add":"add_value"});
+                experimentUpdate.getMetaData().remove("experiment_delete");
 				return facade.updateExperiments([ experimentUpdate ]);
 			}
 
@@ -260,6 +273,11 @@ define([ 'jquery', 'underscore', 'openbis', 'test/openbis-execute-operations', '
 				c.assertEqual(attachments[0].description, "test_description", "Attachment description");
 				c.assertEqual(atob(attachments[0].content), "hello world", "Attachment content");
 				c.assertEqual(attachments.length, 1, "Number of attachments");
+
+				var metaData = experiment.getMetaData();
+                c.assertEqual(metaData["experiment_update"], "new_value", "Metadata update");
+                c.assertEqual(metaData["experiment_add"], "add_value", "Metadata add");
+                c.assertEqual(metaData["experiment_delete"], undefined, "Metadata delete");
 			}
 
 			testUpdate(c, fCreate, fUpdate, c.findExperiment, fCheck);
@@ -396,6 +414,7 @@ define([ 'jquery', 'underscore', 'openbis', 'test/openbis-execute-operations', '
 				creation.setDescription("a new description");
 				creation.setGeneratedCodePrefix("TEST_PREFIX");
 				creation.setPropertyAssignments([ assignmentCreation ]);
+				creation.setMetaData({"sample_type_update":"old_value", "sample_type_delete":"del_value"});
 
 				return facade.createSampleTypes([ creation ]);
 			}
@@ -423,6 +442,9 @@ define([ 'jquery', 'underscore', 'openbis', 'test/openbis-execute-operations', '
 				update.setValidationPluginId(new c.PluginPermId("Has_Parents"));
 				update.getPropertyAssignments().add([ assignmentCreation ]);
 				update.getPropertyAssignments().remove([ new c.PropertyAssignmentPermId(permId, new c.PropertyTypePermId("DESCRIPTION")) ]);
+                update.getMetaData().put("sample_type_update", "new_value");
+                update.getMetaData().add({"sample_type_add":"add_value"});
+                update.getMetaData().remove("sample_type_delete");
 				return facade.updateSampleTypes([ update ]);
 			}
 
@@ -448,6 +470,11 @@ define([ 'jquery', 'underscore', 'openbis', 'test/openbis-execute-operations', '
 				c.assertEqual(assignment.isMandatory(), true, "Assignment mandatory");
 				c.assertEqual(assignment.isShowInEditView(), true, "Assignment ShowInEditView");
 				c.assertEqual(assignment.isShowRawValueInForms(), true, "Assignment ShowRawValueInForms");
+
+				var metaData = type.getMetaData();
+                c.assertEqual(metaData["sample_type_update"], "new_value", "Metadata update");
+                c.assertEqual(metaData["sample_type_add"], "add_value", "Metadata add");
+                c.assertEqual(metaData["sample_type_delete"], undefined, "Metadata delete");
 			}
 
 			testUpdate(c, fCreate, fUpdate, c.findSampleType, fCheck);
@@ -463,6 +490,7 @@ define([ 'jquery', 'underscore', 'openbis', 'test/openbis-execute-operations', '
 				creation.setCode(code);
 				creation.setSpaceId(new c.SpacePermId("TEST"));
 				creation.setTagIds([ new c.TagCode("CREATE_JSON_TAG") ]);
+				creation.setMetaData({"sample_update":"old_value", "sample_delete":"del_value"});
 				return facade.createSamples([ creation ]);
 			}
 
@@ -472,6 +500,9 @@ define([ 'jquery', 'underscore', 'openbis', 'test/openbis-execute-operations', '
 				update.getTagIds().remove(new c.TagCode("CREATE_JSON_TAG"));
 				update.getTagIds().add(new c.TagCode("CREATE_JSON_TAG_2"));
 				update.getTagIds().add(new c.TagCode("CREATE_JSON_TAG_3"));
+				update.getMetaData().put("sample_update", "new_value");
+                update.getMetaData().add({"sample_add":"add_value"});
+                update.getMetaData().remove("sample_delete");
 				return facade.updateSamples([ update ]);
 			}
 
@@ -481,6 +512,11 @@ define([ 'jquery', 'underscore', 'openbis', 'test/openbis-execute-operations', '
 				c.assertEqual(sample.getSpace().getCode(), "TEST", "Space code");
 				c.assertObjectsCount(sample.getTags(), 2);
 				c.assertObjectsWithValues(sample.getTags(), "code", [ "CREATE_JSON_TAG_2", "CREATE_JSON_TAG_3" ]);
+
+				var metaData = sample.getMetaData();
+                c.assertEqual(metaData["sample_update"], "new_value", "Metadata update");
+                c.assertEqual(metaData["sample_add"], "add_value", "Metadata add");
+                c.assertEqual(metaData["sample_delete"], undefined, "Metadata delete");
 			}
 
 			testUpdate(c, fCreate, fUpdate, c.findSample, fCheck);
@@ -715,6 +751,7 @@ define([ 'jquery', 'underscore', 'openbis', 'test/openbis-execute-operations', '
 				creation.setCode(code);
 				creation.setDescription("a new description");
 				creation.setPropertyAssignments([ assignmentCreation ]);
+				creation.setMetaData({"dataset_type_update":"old_value", "dataset_type_delete":"del_value"});
 
 				return facade.createDataSetTypes([ creation ]);
 			}
@@ -737,6 +774,9 @@ define([ 'jquery', 'underscore', 'openbis', 'test/openbis-execute-operations', '
 				update.setMainDataSetPath("original/images/");
 				update.setDisallowDeletion(true);
 				update.getPropertyAssignments().set([ assignmentCreation ]);
+				update.getMetaData().put("dataset_type_update", "new_value");
+                update.getMetaData().add({"dataset_type_add":"add_value"});
+                update.getMetaData().remove("dataset_type_delete");
 				return facade.updateDataSetTypes([ update ]);
 			}
 
@@ -758,6 +798,11 @@ define([ 'jquery', 'underscore', 'openbis', 'test/openbis-execute-operations', '
 				c.assertEqual(assignment.isMandatory(), true, "Assignment mandatory");
 				c.assertEqual(assignment.isShowInEditView(), true, "Assignment ShowInEditView");
 				c.assertEqual(assignment.isShowRawValueInForms(), true, "Assignment ShowRawValueInForms");
+
+				var metaData = type.getMetaData();
+                c.assertEqual(metaData["dataset_type_update"], "new_value", "Metadata update");
+                c.assertEqual(metaData["dataset_type_add"], "add_value", "Metadata add");
+                c.assertEqual(metaData["dataset_type_delete"], undefined, "Metadata delete");
 			}
 
 			testUpdate(c, fCreate, fUpdate, c.findDataSetType, fCheck);
@@ -823,6 +868,7 @@ define([ 'jquery', 'underscore', 'openbis', 'test/openbis-execute-operations', '
 						creation.setDataStoreId(new c.DataStorePermId("DSS1"));
 						creation.setExperimentId(new c.ExperimentIdentifier("/TEST/TEST-PROJECT/TEST-EXPERIMENT"));
 						creation.setProperty(propertyTypeCode, "20130412140147735-20");
+						creation.setMetaData({"dataset_update":"old_value", "dataset_delete":"del_value"});
 						return facade.createDataSets([ creation ]);
 					});
 				});
@@ -832,6 +878,9 @@ define([ 'jquery', 'underscore', 'openbis', 'test/openbis-execute-operations', '
 				var update = new c.DataSetUpdate();
 				update.setDataSetId(permId);
 				update.setProperty(propertyTypeCode, "20130412140147736-21");
+				update.getMetaData().put("dataset_update", "new_value");
+                update.getMetaData().add({"dataset_add":"add_value"});
+                update.getMetaData().remove("dataset_delete");
 				return facade.updateDataSets([ update ]);
 			}
 
@@ -841,6 +890,11 @@ define([ 'jquery', 'underscore', 'openbis', 'test/openbis-execute-operations', '
 				c.assertEqual(dataSet.getSampleProperties()[propertyTypeCode].getIdentifier().getIdentifier(), "/PLATONIC/SCREENING-EXAMPLES/PLATE-2", "Sample property");
 				c.assertEqual(dataSet.getHistory()[0].getPropertyName(), propertyTypeCode, "Previous sample property name");
 				c.assertEqual(dataSet.getHistory()[0].getPropertyValue(), "20130412140147735-20", "Previous sample property value");
+
+				var metaData = dataSet.getMetaData();
+                c.assertEqual(metaData["dataset_update"], "new_value", "Metadata update");
+                c.assertEqual(metaData["dataset_add"], "add_value", "Metadata add");
+                c.assertEqual(metaData["dataset_delete"], undefined, "Metadata delete");
 			}
 
 			testUpdate(c, fCreate, fUpdate, c.findDataSet, fCheck);