diff --git a/src/main/java/org/etsi/osl/osom/lcm/LcmBaseExecutor.java b/src/main/java/org/etsi/osl/osom/lcm/LcmBaseExecutor.java
index 585b5d0a700ead4d8cfbac1ff79b362658083150..c7e3bc81ab4a1083ac49f10e05e262918c31d2c9 100644
--- a/src/main/java/org/etsi/osl/osom/lcm/LcmBaseExecutor.java
+++ b/src/main/java/org/etsi/osl/osom/lcm/LcmBaseExecutor.java
@@ -1,7 +1,10 @@
 package org.etsi.osl.osom.lcm;
 
 import java.io.IOException;
+import java.time.OffsetDateTime;
+import java.time.ZoneOffset;
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
 import java.util.Optional;
 import java.util.function.Consumer;
@@ -27,6 +30,8 @@ import org.etsi.osl.tmf.lcm.model.LCMRuleSpecification;
 import org.etsi.osl.tmf.prm669.model.RelatedParty;
 import org.etsi.osl.tmf.scm633.model.ServiceSpecRelationship;
 import org.etsi.osl.tmf.sim638.model.Service;
+import org.etsi.osl.tmf.sim638.model.ServiceCreate;
+import org.etsi.osl.tmf.sim638.model.ServiceUpdate;
 import org.etsi.osl.tmf.so641.model.ServiceOrder;
 import org.etsi.osl.tmf.so641.model.ServiceOrderCreate;
 import org.etsi.osl.tmf.so641.model.ServiceOrderItemRelationship;
@@ -788,10 +793,151 @@ public abstract class LcmBaseExecutor {
 
 		return "";
 	}
+	
+	
+	
+    /**
+     * Set the value to a characteristics of a referenced service
+     * @param serviceName the name of the service reference
+     * @param characteristics map with name.value
+     * @param value
+     */
+    public void setServiceRefCharacteristicsValues(String serviceName, HashMap<String, String> charvals) {
+      
+      //logger.debug( String.format( "setServiceRefPropValue %s %s %s ", serviceName, characteristicName, value ) );
+      logger.debug( String.format( "setServiceRefCharacteristicsValues for %s ", serviceName ) );
+      
+      Service ctxService = this.vars.getService();      
+      
+      if (ctxService == null) {
+        ServiceCreate scre = this.vars.getServiceToCreate();
+        if (scre != null) {
+          for (String charname : charvals.keySet()) {
+            setCharacteristicOfCurrentService(  serviceName + "::" + charname, charvals.get(charname) ); 
+          }
+        }
+        return;
+      }
+      
+      @NotNull @Valid ServiceRef refSrvice = null;
+      
+      for (ServiceRef sr : ctxService.getSupportingService()) {
+          if ( sr.getName().equals(serviceName) ) {
+              refSrvice = sr;
+              break;
+          }
+      }
+
+      
+      if (refSrvice == null) {
+          return;
+      }
+      
+      if (this.vars.getServiceOrderManager() != null) {
+        Service aService = this.vars.getServiceOrderManager().retrieveService(refSrvice.getId());
+        if (aService != null) {
+
+          ServiceUpdate supd = new ServiceUpdate();
+          Note n = new Note();
+          n.setAuthor("LCMRULE " + this.lcmspec.getName());
+          n.setDate(OffsetDateTime.now(ZoneOffset.UTC).toString());
+          String note = "";
+          for (String charname : charvals.keySet()) {            
+            setCharacteristicOfCurrentService(  serviceName + "::" + charname, charvals.get(charname) );
+            
+            Characteristic servicecrspecLast = aService.getServiceCharacteristicByName(charname);            
+            if (servicecrspecLast != null) {
+              servicecrspecLast.getValue().setValue( charvals.get(charname) );
+              supd.addServiceCharacteristicItem(servicecrspecLast);              
+              note += charname + "=" + charvals.get(charname)+ ", ";
+            }  
+          }
+          
+          
+          n.setText( String.format( "New characterisictic values for ServiceRef %s: %s" , serviceName, note ));
+          supd.addNoteItem(n);
+          this.vars.getServiceOrderManager().updateService(aService.getId(), supd, true);
+
+        }
+        
+      }
+    
+    }
+	
+//	/**
+//	 * Set the value to a characteristic of a referenced service
+//	 * @param serviceName the name of the service reference
+//	 * @param characteristicName
+//	 * @param value
+//	 */
+//	public void setServiceRefPropValue( String serviceName, String characteristicName, String value ) {
+//      logger.debug( String.format( "setServiceRefPropValue %s %s %s ", serviceName, characteristicName, value ) );
+//      Service ctxService = this.vars.getService();
+//      
+//      
+//      if (ctxService == null) {
+//        ServiceCreate scre = this.vars.getServiceToCreate();
+//        if (scre != null) {
+//          setCharacteristicOfCurrentService(  serviceName + "::" + characteristicName, value);          
+//        }
+//        return;
+//      }
+//      
+//      
+//
+//      
+//      
+//      
+//      @NotNull @Valid ServiceRef refSrvice = null;
+//      
+//      for (ServiceRef sr : ctxService.getSupportingService()) {
+//          if ( sr.getName().equals(serviceName) ) {
+//              refSrvice = sr;
+//              break;
+//          }
+//      }
+//
+//
+//      setCharacteristicOfCurrentService(  serviceName + "::" + characteristicName, value);
+//      
+//      if (refSrvice == null) {
+//          return;
+//      }
+//      
+//      if (this.vars.getServiceOrderManager() != null) {
+//        Service aService = this.vars.getServiceOrderManager().retrieveService(refSrvice.getId());
+//        if (aService != null) {
+//
+//          ServiceUpdate supd = new ServiceUpdate();
+//
+//          Characteristic servicecrspecLast =
+//              aService.getServiceCharacteristicByName(characteristicName);
+//          if (servicecrspecLast != null) {
+//            servicecrspecLast.getValue().setValue(value);
+//            supd.addServiceCharacteristicItem(servicecrspecLast);
+//            Note n = new Note();
+//            n.setAuthor("LCMRULE " + this.lcmspec.getName());
+//            n.setDate(OffsetDateTime.now(ZoneOffset.UTC).toString());
+//            n.setText("Set new value (" + value + ") to ref Service (" + serviceName
+//                + ") Characteristic: " + characteristicName);
+//            supd.addNoteItem(n);
+//            this.vars.getServiceOrderManager().updateService(aService.getId(), supd, true);
+//            
+//            
+//          }
+//
+//        }
+//        
+//      }
+//      
+//	}
 
 
 
-	//createServiceRefIf("Bundle B", getServiceRefPropValue("BundleA", "state", "").equals("active")==true);
+	
+	
+
+  //createServiceRefIf("Bundle B", getServiceRefPropValue("BundleA", "state", "").equals("active")==true);
 	public boolean createServiceRefIf(String serviceName, boolean b) {
 
 		logger.debug( String.format("createServiceRefwhen serviceName=%s = %s", serviceName, b ) );
diff --git a/src/main/java/org/etsi/osl/osom/management/CROrchestrationCheckDeploymentService.java b/src/main/java/org/etsi/osl/osom/management/CROrchestrationCheckDeploymentService.java
index d13ff592a4b3c45519b668525c8432fc5f6acf1e..221c8619b6962d32fce13c5e986d8af688ec15e7 100644
--- a/src/main/java/org/etsi/osl/osom/management/CROrchestrationCheckDeploymentService.java
+++ b/src/main/java/org/etsi/osl/osom/management/CROrchestrationCheckDeploymentService.java
@@ -67,7 +67,7 @@ public class CROrchestrationCheckDeploymentService implements JavaDelegate {
 
 
 		ServiceUpdate supd = new ServiceUpdate();
-		boolean propagateToSO = false;
+		boolean triggerServiceActionQueue = false;
 
 		//retrieve the related supporting resource by id and check its status
 		//ResourceRef supresourceRef = aService.getSupportingResource().stream().findFirst().get();//we assume for now we have only one related resource
@@ -84,7 +84,7 @@ public class CROrchestrationCheckDeploymentService implements JavaDelegate {
 	        if ( res == null ) {
 	          supd.setState( ServiceStateType.TERMINATED);
 	          execution.setVariable("serviceDeploymentFinished", Boolean.TRUE);
-	          Service serviceResult = serviceOrderManager.updateService( aService.getId(), supd, propagateToSO );
+	          Service serviceResult = serviceOrderManager.updateService( aService.getId(), supd, triggerServiceActionQueue );
 	          return;
 	        }
 
@@ -145,7 +145,7 @@ public class CROrchestrationCheckDeploymentService implements JavaDelegate {
           supd.setState( ServiceStateType.INACTIVE ); 
         }
 		
-		Service serviceResult = serviceOrderManager.updateService( aService.getId(), supd, propagateToSO );
+		Service serviceResult = serviceOrderManager.updateService( aService.getId(), supd, triggerServiceActionQueue );
 		
 		if ( serviceResult!= null ) {
 			if ( serviceResult.getState().equals(ServiceStateType.ACTIVE)
diff --git a/src/main/java/org/etsi/osl/osom/management/CreateReservedService.java b/src/main/java/org/etsi/osl/osom/management/CreateReservedService.java
index 9feeb411350468f2d3d123cffa66373089b81cc6..f6a8955533feda277f9f2c7468f81dd47fceb9ec 100644
--- a/src/main/java/org/etsi/osl/osom/management/CreateReservedService.java
+++ b/src/main/java/org/etsi/osl/osom/management/CreateReservedService.java
@@ -160,8 +160,6 @@ public class CreateReservedService implements JavaDelegate {
 		
 		if ( partnerOrg != null  ) {
 			createdServ = createServiceByServiceSpec(sor, soi, specrel, EServiceStartMode.AUTOMATICALLY_MANAGED, partnerOrg, parentService);
-			
-			
 		}	
 		else if (specrel.getType().equals("ResourceFacingServiceSpecification")) {
 			createdServ = createServiceByServiceSpec(sor, soi, specrel, EServiceStartMode.AUTOMATICALLY_MANAGED, null, parentService);
@@ -329,7 +327,7 @@ public class CreateReservedService implements JavaDelegate {
 					}
 				}				
 			}
-								
+
 
 			//also add parent service as relationship to parent
 			ServiceRelationship srelationship = new ServiceRelationship();
diff --git a/src/main/java/org/etsi/osl/osom/management/NFVOrchestrationCheckDeploymentService.java b/src/main/java/org/etsi/osl/osom/management/NFVOrchestrationCheckDeploymentService.java
index e81aab1f84dcc4fd1097f291f4200717c9f038b7..021458906cc013f11966313a0d33d972e2951439 100644
--- a/src/main/java/org/etsi/osl/osom/management/NFVOrchestrationCheckDeploymentService.java
+++ b/src/main/java/org/etsi/osl/osom/management/NFVOrchestrationCheckDeploymentService.java
@@ -87,7 +87,7 @@ public class NFVOrchestrationCheckDeploymentService implements JavaDelegate {
 		ServiceUpdate supd = new ServiceUpdate();
 		boolean aVNFINDEXREFadded = false;
 		
-		boolean propagateToSO = false;
+		boolean triggerServiceActionQueue = false;
 		
 		if ( aService.getServiceCharacteristic() != null ) {
 			for (Characteristic c : aService.getServiceCharacteristic()) {
@@ -103,17 +103,17 @@ public class NFVOrchestrationCheckDeploymentService implements JavaDelegate {
 					c.setValue( new Any( dd.getInstanceId() + "" ));
 				} else if ( c.getName().equals("NSR")) {
 					c.setValue( new Any( dd.getNsr() + "" ));
-					propagateToSO = true;
+					triggerServiceActionQueue = true;
 				} else if ( c.getName().equals("NSLCM")) {
 					c.setValue( new Any( dd.getNs_nslcm_details() + "" ));
-					propagateToSO = true;
+					triggerServiceActionQueue = true;
 				}				
 				if ( dd.getDeploymentDescriptorVxFInstanceInfo() !=null ) {
 					for ( DeploymentDescriptorVxFInstanceInfo vnfinfo : dd.getDeploymentDescriptorVxFInstanceInfo() ) {
 						if ( c.getName().equals(  "VNFINDEXREF_INFO_" + vnfinfo.getMemberVnfIndexRef() )) {
 							c.setValue( new Any( vnfinfo.getVxfInstanceInfo()  + "" ));
 							aVNFINDEXREFadded = true;
-							propagateToSO = true;
+							triggerServiceActionQueue = true;
 						} 
 						
 					}
@@ -153,7 +153,7 @@ public class NFVOrchestrationCheckDeploymentService implements JavaDelegate {
 			supd.setState( ServiceStateType.TERMINATED );
 		}
 		
-		Service serviceResult = serviceOrderManager.updateService( aService.getId(), supd, propagateToSO );
+		Service serviceResult = serviceOrderManager.updateService( aService.getId(), supd, triggerServiceActionQueue );
 		
 		if ( serviceResult!= null ) {
 			if ( serviceResult.getState().equals(ServiceStateType.ACTIVE)
diff --git a/src/main/java/org/etsi/osl/osom/management/ServiceOrderManager.java b/src/main/java/org/etsi/osl/osom/management/ServiceOrderManager.java
index 86fb199ed59521d9af7c64df888d3cb35d1bbf9e..6290743ba0d1e9f690c0fd62db7134e3f611de1e 100644
--- a/src/main/java/org/etsi/osl/osom/management/ServiceOrderManager.java
+++ b/src/main/java/org/etsi/osl/osom/management/ServiceOrderManager.java
@@ -448,16 +448,16 @@ public class ServiceOrderManager {
 	/**
 	 * @param serviceId
 	 * @param s
-	 * @param propagateToSO is a cryptic thing. However it is used as follows: if FALSE, to just update the service status in catalog without further taking any action.
+	 * @param triggerServiceActionQueue is a cryptic thing. However it is used as follows: if FALSE, to just update the service status in catalog without further taking any action.
 	 * if TRUE then the ServiceUpdate will trigger a ServiceActionQueue to further process the update. So this is needed to avoid these kinds of deadlocks
 	 * @return
 	 */
-	public org.etsi.osl.tmf.sim638.model.Service updateService(String serviceId, ServiceUpdate s, boolean propagateToSO) {
+	public org.etsi.osl.tmf.sim638.model.Service updateService(String serviceId, ServiceUpdate s, boolean triggerServiceActionQueue) {
 		logger.info("will update Service : " + serviceId );
 		try {
 			Map<String, Object> map = new HashMap<>();
 			map.put("serviceid", serviceId );
-			map.put("propagateToSO", propagateToSO );
+			map.put("triggerServiceActionQueue", triggerServiceActionQueue );
 			
 			Object response = template.requestBodyAndHeaders( CATALOG_UPD_SERVICE, toJsonString(s), map);
 
diff --git a/src/main/java/org/etsi/osl/osom/serviceactions/ServiceActionCheck.java b/src/main/java/org/etsi/osl/osom/serviceactions/ServiceActionCheck.java
index c375e3766d304a751411e8391b8c9e57c55b1959..00269a8028cf3396f7fa0fcae647d740e4030a2d 100644
--- a/src/main/java/org/etsi/osl/osom/serviceactions/ServiceActionCheck.java
+++ b/src/main/java/org/etsi/osl/osom/serviceactions/ServiceActionCheck.java
@@ -79,7 +79,9 @@ public class ServiceActionCheck implements JavaDelegate {
 				execution.setVariable("saction", "HandleActiveStateChanged");
 			} else if ( item.getAction().equals( ServiceActionQueueAction.EVALUATE_STATE_CHANGE_TOINACTIVE  ) ) {
 				execution.setVariable("saction", "HandleInactiveStateChanged");
-			} else if ( item.getAction().equals( ServiceActionQueueAction.EVALUATE_CHARACTERISTIC_CHANGED  ) || item.getAction().equals( ServiceActionQueueAction.EVALUATE_CHARACTERISTIC_CHANGED_MANODAY2  ) ) {
+			} else if ( item.getAction().equals( ServiceActionQueueAction.EVALUATE_CHARACTERISTIC_CHANGED  ) 
+			              || item.getAction().equals( ServiceActionQueueAction.EVALUATE_CHILD_CHARACTERISTIC_CHANGED  ) 
+			              || item.getAction().equals( ServiceActionQueueAction.EVALUATE_CHARACTERISTIC_CHANGED_MANODAY2  ) ) {
 				
 				execution.setVariable("saction", "HandleEvaluateService");// default