diff --git a/src/datamodel.c b/src/datamodel.c
index be99ac01a79665b8f70b4712c109b3ba44ba38cf..9b64de4883a9d4f8badb71462f1d7bd3740b4da6 100644
--- a/src/datamodel.c
+++ b/src/datamodel.c
@@ -67,54 +67,6 @@ static int browseSoftwareModulesExecutionUnitInst(struct dmctx *dmctx, DMNODE *p
 	return 0;
 }
 
-/*************************************************************
-* LINKER FUNCTIONS
-*************************************************************/
-static int get_linker_eu(char *refparam, struct dmctx *dmctx, void *data, char *instance, char **linker)
-{
-	char *ee_name = NULL, *eu_name = NULL;
-
-	ee_name = dmjson_get_value((json_object *)data, 1, "ee_name");
-	eu_name = dmjson_get_value((json_object *)data, 1, "eu_name");
-	if (ee_name == NULL)
-		ee_name = "";
-
-	if (eu_name == NULL)
-		eu_name = "";
-
-	dmasprintf(linker, "%.32s%.32s", ee_name, eu_name);
-
-	return 0;
-}
-
-/*************************************************************
-* COMMON FUNCTIONS
-**************************************************************/
-#if 0
-static int get_SoftwareModules_VendorConfigList(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value)
-{
-	struct uci_section *s = NULL;
-	dmasprintf(value, "");
-
-	char *config = dmjson_get_value((json_object *)data, 1, "config");
-	if (config == NULL || *config == '\0')
-		return 0;
-
-	uci_path_foreach_sections(bbfdm, DMMAP, "vcf", s) {
-		char *name = NULL;
-
-		dmuci_get_value_by_section_string(s, "name", &name);
-		if (name && strcmp(name, config) == 0) {
-			char *vcf_instance;
-			dmuci_get_value_by_section_string(s, "vcf_instance", &vcf_instance);
-			dmasprintf(value, "Device.DeviceInfo.VendorConfigFile.%s", vcf_instance);
-			break;
-		}
-	}
-	return 0;
-}
-#endif
-
 /*************************************************************
 * GET & SET PARAM
 *************************************************************/
@@ -546,11 +498,7 @@ static int get_SoftwareModulesDeploymentUnit_ExecutionUnitList(char *refparam, s
 
 	snprintf(eu_label, sizeof(eu_label), "%.32s%.32s", ee ? ee : "", eu ? eu : "");
 
-	char *linker = NULL;
-	adm_entry_get_linker_param(ctx, "Device.SoftwareModules.ExecutionUnit.", eu_label, &linker);
-	if (DM_STRLEN(linker) != 0)
-		dmasprintf(value, "%s", linker);
-
+	adm_entry_get_linker_param(ctx, "Device.SoftwareModules.ExecutionUnit.*.ExecEnvLabel", eu_label, value);
 	return 0;
 }
 
@@ -772,11 +720,7 @@ static int get_SoftwareModulesExecutionUnit_AssociatedProcessList(char *refparam
 	if (DM_STRLEN(euid) == 0 || DM_STRCMP(euid, "Unknown") == 0)
 		return 0;
 
-	char *linker = NULL;
-	adm_entry_get_linker_param(ctx, "Device.DeviceInfo.ProcessStatus.", euid, &linker);
-	if (DM_STRLEN(linker) != 0)
-		dmasprintf(value, "%s", linker);
-
+	adm_entry_get_reference_param(ctx, "Device.DeviceInfo.ProcessStatus.Process.*.PID", euid, value);
 	return 0;
 }
 
@@ -1016,9 +960,9 @@ DMOBJ tSWmodObj[] = {
 /* *** Device.SoftwareModules. *** */
 DMOBJ tSoftwareModulesObj[] = {
 /* OBJ, permission, addobj, delobj, checkdep, browseinstobj, nextdynamicobj, dynamicleaf, nextobj, leaf, linker, bbfdm_type, uniqueKeys*/
-{"ExecEnv", &DMREAD, NULL, NULL, NULL, browseSoftwareModulesExecEnvInst, NULL, NULL, NULL, tSoftwareModulesExecEnvParams, NULL, BBFDM_BOTH, LIST_KEY{"Alias", "Name", NULL}},
-{"DeploymentUnit", &DMREAD, NULL, NULL, NULL, browseSoftwareModulesDeploymentUnitInst, NULL, NULL, NULL, tSoftwareModulesDeploymentUnitParams, NULL, BBFDM_BOTH, LIST_KEY{"UUID", "Version", "ExecutionEnvRef", "Alias", NULL}},
-{"ExecutionUnit", &DMREAD, NULL, NULL, NULL, browseSoftwareModulesExecutionUnitInst, NULL, NULL, NULL, tSoftwareModulesExecutionUnitParams, get_linker_eu, BBFDM_BOTH, LIST_KEY{"EUID", "Alias", NULL}},
+{"ExecEnv", &DMREAD, NULL, NULL, NULL, browseSoftwareModulesExecEnvInst, NULL, NULL, NULL, tSoftwareModulesExecEnvParams, NULL, BBFDM_BOTH, NULL},
+{"DeploymentUnit", &DMREAD, NULL, NULL, NULL, browseSoftwareModulesDeploymentUnitInst, NULL, NULL, NULL, tSoftwareModulesDeploymentUnitParams, NULL, BBFDM_BOTH, NULL},
+{"ExecutionUnit", &DMREAD, NULL, NULL, NULL, browseSoftwareModulesExecutionUnitInst, NULL, NULL, NULL, tSoftwareModulesExecutionUnitParams, NULL, BBFDM_BOTH, NULL},
 {0}
 };
 
@@ -1038,8 +982,8 @@ DMLEAF tSoftwareModulesExecEnvParams[] = {
 {"Enable", &DMWRITE, DMT_BOOL, get_SoftwareModulesExecEnv_Enable, set_SoftwareModulesExecEnv_Enable, BBFDM_BOTH},
 {"Status", &DMREAD, DMT_STRING, get_SoftwareModulesExecEnv_Status, NULL, BBFDM_BOTH},
 {"Reset", &DMWRITE, DMT_BOOL, get_SoftwareModulesExecEnv_Reset, set_SoftwareModulesExecEnv_Reset, BBFDM_CWMP},
-{"Alias", &DMWRITE, DMT_STRING, get_SoftwareModulesExecEnv_Alias, set_SoftwareModulesExecEnv_Alias, BBFDM_BOTH},
-{"Name", &DMREAD, DMT_STRING, get_SoftwareModulesExecEnv_Name, NULL, BBFDM_BOTH},
+{"Alias", &DMWRITE, DMT_STRING, get_SoftwareModulesExecEnv_Alias, set_SoftwareModulesExecEnv_Alias, BBFDM_BOTH, DM_FLAG_UNIQUE},
+{"Name", &DMREAD, DMT_STRING, get_SoftwareModulesExecEnv_Name, NULL, BBFDM_BOTH, DM_FLAG_UNIQUE},
 {"Type", &DMREAD, DMT_STRING, get_SoftwareModulesExecEnv_Type, NULL, BBFDM_BOTH},
 {"InitialRunLevel", &DMWRITE, DMT_UNINT, get_SoftwareModulesExecEnv_InitialRunLevel, set_SoftwareModulesExecEnv_InitialRunLevel, BBFDM_BOTH},
 {"RequestedRunLevel", &DMWRITE, DMT_INT, get_SoftwareModulesExecEnv_RequestedRunLevel, set_SoftwareModulesExecEnv_RequestedRunLevel, BBFDM_CWMP},
@@ -1047,7 +991,7 @@ DMLEAF tSoftwareModulesExecEnvParams[] = {
 {"InitialExecutionUnitRunLevel", &DMWRITE, DMT_INT, get_SoftwareModulesExecEnv_InitialExecutionUnitRunLevel, set_SoftwareModulesExecEnv_InitialExecutionUnitRunLevel, BBFDM_BOTH},
 {"Vendor", &DMREAD, DMT_STRING, get_SoftwareModulesExecEnv_Vendor, NULL, BBFDM_BOTH},
 {"Version", &DMREAD, DMT_STRING, get_SoftwareModulesExecEnv_Version, NULL, BBFDM_BOTH},
-{"ParentExecEnv", &DMREAD, DMT_STRING, get_SoftwareModulesExecEnv_ParentExecEnv, NULL, BBFDM_BOTH},
+{"ParentExecEnv", &DMREAD, DMT_STRING, get_SoftwareModulesExecEnv_ParentExecEnv, NULL, BBFDM_BOTH, DM_FLAG_REFERENCE},
 {"AllocatedDiskSpace", &DMREAD, DMT_INT, get_SoftwareModulesExecEnv_AllocatedDiskSpace, NULL, BBFDM_BOTH},
 {"AvailableDiskSpace", &DMREAD, DMT_INT, get_SoftwareModulesExecEnv_AvailableDiskSpace, NULL, BBFDM_BOTH},
 {"AllocatedMemory", &DMREAD, DMT_INT, get_SoftwareModulesExecEnv_AllocatedMemory, NULL, BBFDM_BOTH},
@@ -1062,20 +1006,20 @@ DMLEAF tSoftwareModulesExecEnvParams[] = {
 /* *** Device.SoftwareModules.DeploymentUnit.{i}. *** */
 DMLEAF tSoftwareModulesDeploymentUnitParams[] = {
 /* PARAM, permission, type, getvalue, setvalue, bbfdm_type*/
-{"UUID", &DMREAD, DMT_STRING, get_SoftwareModulesDeploymentUnit_UUID, NULL, BBFDM_BOTH},
+{"UUID", &DMREAD, DMT_STRING, get_SoftwareModulesDeploymentUnit_UUID, NULL, BBFDM_BOTH, DM_FLAG_UNIQUE},
 {"DUID", &DMREAD, DMT_STRING, get_SoftwareModulesDeploymentUnit_DUID, NULL, BBFDM_BOTH},
-{"Alias", &DMWRITE, DMT_STRING, get_SoftwareModulesDeploymentUnit_Alias, set_SoftwareModulesDeploymentUnit_Alias, BBFDM_BOTH},
+{"Alias", &DMWRITE, DMT_STRING, get_SoftwareModulesDeploymentUnit_Alias, set_SoftwareModulesDeploymentUnit_Alias, BBFDM_BOTH, DM_FLAG_UNIQUE},
 {"Name", &DMREAD, DMT_STRING, get_SoftwareModulesDeploymentUnit_Name, NULL, BBFDM_BOTH},
 {"Status", &DMREAD, DMT_STRING, get_SoftwareModulesDeploymentUnit_Status, NULL, BBFDM_BOTH},
 {"Resolved", &DMREAD, DMT_BOOL, get_SoftwareModulesDeploymentUnit_Resolved, NULL, BBFDM_BOTH},
 {"URL", &DMREAD, DMT_STRING, get_SoftwareModulesDeploymentUnit_URL, NULL, BBFDM_BOTH},
 {"Description", &DMREAD, DMT_STRING, get_SoftwareModulesDeploymentUnit_Description, NULL, BBFDM_BOTH},
 {"Vendor", &DMREAD, DMT_STRING, get_SoftwareModulesDeploymentUnit_Vendor, NULL, BBFDM_BOTH},
-{"Version", &DMREAD, DMT_STRING, get_SoftwareModulesDeploymentUnit_Version, NULL, BBFDM_BOTH},
-{"VendorLogList", &DMREAD, DMT_STRING, get_SoftwareModulesDeploymentUnit_VendorLogList, NULL, BBFDM_BOTH},
-{"VendorConfigList", &DMREAD, DMT_STRING, get_SoftwareModulesDeploymentUnit_VendorConfigList, NULL, BBFDM_BOTH},
-{"ExecutionUnitList", &DMREAD, DMT_STRING, get_SoftwareModulesDeploymentUnit_ExecutionUnitList, NULL, BBFDM_BOTH},
-{"ExecutionEnvRef", &DMREAD, DMT_STRING, get_SoftwareModulesDeploymentUnit_ExecutionEnvRef, NULL, BBFDM_BOTH},
+{"Version", &DMREAD, DMT_STRING, get_SoftwareModulesDeploymentUnit_Version, NULL, BBFDM_BOTH, DM_FLAG_UNIQUE},
+{"VendorLogList", &DMREAD, DMT_STRING, get_SoftwareModulesDeploymentUnit_VendorLogList, NULL, BBFDM_BOTH, DM_FLAG_REFERENCE},
+{"VendorConfigList", &DMREAD, DMT_STRING, get_SoftwareModulesDeploymentUnit_VendorConfigList, NULL, BBFDM_BOTH, DM_FLAG_REFERENCE},
+{"ExecutionUnitList", &DMREAD, DMT_STRING, get_SoftwareModulesDeploymentUnit_ExecutionUnitList, NULL, BBFDM_BOTH, DM_FLAG_REFERENCE},
+{"ExecutionEnvRef", &DMREAD, DMT_STRING, get_SoftwareModulesDeploymentUnit_ExecutionEnvRef, NULL, BBFDM_BOTH, DM_FLAG_UNIQUE|DM_FLAG_REFERENCE},
 //{"Update()", &DMASYNC, DMT_COMMAND, get_operate_args_SoftwareModulesDeploymentUnit_Update, operate_SoftwareModulesDeploymentUnit_Update, BBFDM_USP},
 {"Uninstall()", &DMASYNC, DMT_COMMAND, NULL, operate_SoftwareModulesDeploymentUnit_Uninstall, BBFDM_USP},
 {0}
@@ -1083,10 +1027,10 @@ DMLEAF tSoftwareModulesDeploymentUnitParams[] = {
 
 DMLEAF tSoftwareModulesExecutionUnitParams[] = {
 /* PARAM, permission, type, getvalue, setvalue, bbfdm_type*/
-{"EUID", &DMREAD, DMT_STRING, get_SoftwareModulesExecutionUnit_EUID, NULL, BBFDM_BOTH},
-{"Alias", &DMWRITE, DMT_STRING, get_SoftwareModulesExecutionUnit_Alias, set_SoftwareModulesExecutionUnit_Alias, BBFDM_BOTH},
+{"EUID", &DMREAD, DMT_STRING, get_SoftwareModulesExecutionUnit_EUID, NULL, BBFDM_BOTH, DM_FLAG_UNIQUE},
+{"Alias", &DMWRITE, DMT_STRING, get_SoftwareModulesExecutionUnit_Alias, set_SoftwareModulesExecutionUnit_Alias, BBFDM_BOTH, DM_FLAG_UNIQUE},
 {"Name", &DMREAD, DMT_STRING, get_SoftwareModulesExecutionUnit_Name, NULL, BBFDM_BOTH},
-{"ExecEnvLabel", &DMREAD, DMT_STRING, get_SoftwareModulesExecutionUnit_ExecEnvLabel, NULL, BBFDM_BOTH},
+{"ExecEnvLabel", &DMREAD, DMT_STRING, get_SoftwareModulesExecutionUnit_ExecEnvLabel, NULL, BBFDM_BOTH, DM_FLAG_LINKER},
 {"Status", &DMREAD, DMT_STRING, get_SoftwareModulesExecutionUnit_Status, NULL, BBFDM_BOTH},
 {"RequestedState", &DMWRITE, DMT_STRING, get_empty, set_SoftwareModulesExecutionUnit_RequestedState, BBFDM_CWMP},
 {"ExecutionFaultCode", &DMREAD, DMT_STRING, get_SoftwareModulesExecutionUnit_ExecutionFaultCode, NULL, BBFDM_BOTH},
@@ -1099,11 +1043,11 @@ DMLEAF tSoftwareModulesExecutionUnitParams[] = {
 {"DiskSpaceInUse", &DMREAD, DMT_INT, get_SoftwareModulesExecutionUnit_DiskSpaceInUse, NULL, BBFDM_BOTH},
 {"MemoryInUse", &DMREAD, DMT_INT, get_SoftwareModulesExecutionUnit_MemoryInUse, NULL, BBFDM_BOTH},
 //{"References", &DMREAD, DMT_STRING, get_SoftwareModulesExecutionUnit_References, NULL, BBFDM_BOTH},
-{"AssociatedProcessList", &DMREAD, DMT_STRING, get_SoftwareModulesExecutionUnit_AssociatedProcessList, NULL, BBFDM_BOTH},
-{"VendorLogList", &DMREAD, DMT_STRING, get_SoftwareModulesExecutionUnit_VendorLogList, NULL, BBFDM_BOTH},
-{"VendorConfigList", &DMREAD, DMT_STRING, get_SoftwareModulesExecutionUnit_VendorConfigList, NULL, BBFDM_BOTH},
-//{"SupportedDataModelList", &DMREAD, DMT_STRING, get_SoftwareModulesExecutionUnit_SupportedDataModelList, NULL, BBFDM_CWMP},
-{"ExecutionEnvRef", &DMREAD, DMT_STRING, get_SoftwareModulesExecutionUnit_ExecutionEnvRef, NULL, BBFDM_BOTH},
+{"AssociatedProcessList", &DMREAD, DMT_STRING, get_SoftwareModulesExecutionUnit_AssociatedProcessList, NULL, BBFDM_BOTH, DM_FLAG_REFERENCE},
+{"VendorLogList", &DMREAD, DMT_STRING, get_SoftwareModulesExecutionUnit_VendorLogList, NULL, BBFDM_BOTH, DM_FLAG_REFERENCE},
+{"VendorConfigList", &DMREAD, DMT_STRING, get_SoftwareModulesExecutionUnit_VendorConfigList, NULL, BBFDM_BOTH, DM_FLAG_REFERENCE},
+//{"SupportedDataModelList", &DMREAD, DMT_STRING, get_SoftwareModulesExecutionUnit_SupportedDataModelList, NULL, BBFDM_CWMP, DM_FLAG_REFERENCE},
+{"ExecutionEnvRef", &DMREAD, DMT_STRING, get_SoftwareModulesExecutionUnit_ExecutionEnvRef, NULL, BBFDM_BOTH, DM_FLAG_REFERENCE},
 {"SetRequestedState()", &DMSYNC, DMT_COMMAND, get_operate_args_SoftwareModulesExecutionUnit_SetRequestedState, operate_SoftwareModulesExecutionUnit_SetRequestedState, BBFDM_USP},
 {0}
 };