diff --git a/src/app/p_services/admin/lifeCycleManagement/service-rule-design/service-rule-design.component.ts b/src/app/p_services/admin/lifeCycleManagement/service-rule-design/service-rule-design.component.ts
index 56627e860c7c3805951340c5606f4c0f6a1e0f51..05629b3079da12dbd1a3c03383c2070219d9335c 100644
--- a/src/app/p_services/admin/lifeCycleManagement/service-rule-design/service-rule-design.component.ts
+++ b/src/app/p_services/admin/lifeCycleManagement/service-rule-design/service-rule-design.component.ts
@@ -1470,12 +1470,66 @@ export class ServiceRuleDesignComponent implements OnInit {
   
       var avalue =  Blockly.Java.valueToCode(block, 'CONDITION',
                 Blockly.Java.ORDER_ASSIGNMENT) || 'true';
-      
-      var code = 'createServiceRefIf('  + serviceName    +', '+ avalue   +');\n';
-  
+
+      var charvalsVarName =  'charvals';      
+      //put it in braces so to ensure the scope of the hashmap variable
+      var code = '{\n';
+
+      var charvalsVarName =  'charvals';
+      code += 'java.util.HashMap<String,String> ' + charvalsVarName + ' = new java.util.HashMap<>();\n';
+
+      var varray = '[';
+      var cvs =  Blockly.Java.valueToCode(block, 'CHARVALUES', Blockly.Java.ORDER_NONE)  || null ;
+      console.log( cvs );
+      var objects = JSON.parse( cvs );
+      console.log( objects );
+      if (objects){
+        objects.forEach(element => {
+          var charname =  element.charname;
+          var avalue =  element.charvalue; 
+          code += charvalsVarName + '.put(' + charname + ',' +avalue + ');\n';
+        });
+      }
+      varray += ']';
+
+      code += 'createServiceRefIf('  + serviceName    +', '+ avalue +', '+ charvalsVarName  +');\n';
+      code += '}\n';
       return code;
   };
 
+  Blockly.Java['createResourceRefIf'] = function(block: any) {
+    var resourceName = Blockly.Java.valueToCode(block, 'RESOURCE_NAME',
+      Blockly.Java.ORDER_NONE) || '""';
+    
+  
+      var avalue =  Blockly.Java.valueToCode(block, 'CONDITION',
+                Blockly.Java.ORDER_ASSIGNMENT) || 'true';
+                
+      var charvalsVarName =  'charvals';      
+      //put it in braces so to ensure the scope of the hashmap variable
+      var code = '{\n';
+
+      var charvalsVarName =  'charvals';
+      code += 'java.util.HashMap<String,String> ' + charvalsVarName + ' = new java.util.HashMap<>();\n';
+
+      var varray = '[';
+      var cvs =  Blockly.Java.valueToCode(block, 'CHARVALUES', Blockly.Java.ORDER_NONE)  || null ;
+      console.log( cvs );
+      var objects = JSON.parse( cvs );
+      console.log( objects );
+      if (objects){
+        objects.forEach(element => {
+          var charname =  element.charname;
+          var avalue =  element.charvalue; 
+          code += charvalsVarName + '.put(' + charname + ',' +avalue + ');\n';
+        });
+      }
+      varray += ']';
+
+      code += 'createResourceRefIf('  + resourceName    +', '+ avalue +', '+ charvalsVarName  +');\n';
+      code += '}\n';
+      return code;
+  };
 
   
   Blockly.Java['getServiceRefName'] = function(block: any) {
@@ -1598,8 +1652,11 @@ export class ServiceRuleDesignComponent implements OnInit {
     var objects = JSON.parse( cvs );
     console.log( objects );
 
-	var charvalsVarName =  'charvals_'+ Math.floor(Math.random() * 1000) + 1;
-    var code = 'java.util.HashMap<String,String> ' + charvalsVarName + ' = new java.util.HashMap<>();\n';
+    //var charvalsVarName =  'charvals_'+ Math.floor(Math.random() * 1000) + 1;
+    var charvalsVarName =  'charvals';
+    //put it in braces so to ensure the scope of the hashmap variable
+    var code = '{\n';
+    code += 'java.util.HashMap<String,String> ' + charvalsVarName + ' = new java.util.HashMap<>();\n';
 
     var varray = '[';
 
@@ -1613,7 +1670,7 @@ export class ServiceRuleDesignComponent implements OnInit {
     varray += ']';
 
     code += 'setServiceRefCharacteristicsValues(' + servicename +', ' + charvalsVarName + ');\n';
-
+    code += '}\n';
 
     return  code;
   };
diff --git a/src/assets/blockly/custom_blocks.js b/src/assets/blockly/custom_blocks.js
index 7a1a00bd65407b8aa49e83e26eec02e446e85cb0..a3a0cb5cf420a8059b3e4b352d4ded3a927aff94 100644
--- a/src/assets/blockly/custom_blocks.js
+++ b/src/assets/blockly/custom_blocks.js
@@ -1214,8 +1214,16 @@ Blockly.Blocks['example_variable_typed'] = {
           .appendField("Create Ref Service");
       this.appendValueInput("CONDITION")
           .setCheck("Boolean")
+          .setAlign(Blockly.ALIGN_RIGHT)
           .appendField("if");
-      this.setInputsInline(true);
+
+      this.appendValueInput("CHARVALUES")
+        .setCheck("Array")
+        .setAlign(Blockly.ALIGN_RIGHT)
+        .appendField("Characteristics");  
+
+
+      this.setInputsInline(false);
       this.setPreviousStatement(true, null);
       this.setNextStatement(true, null);
       this.setColour(230);
@@ -1231,8 +1239,13 @@ Blockly.Blocks['example_variable_typed'] = {
           .appendField("Create Ref Resource");
       this.appendValueInput("CONDITION")
           .setCheck("Boolean")
+          .setAlign(Blockly.ALIGN_RIGHT)
           .appendField("if");
-      this.setInputsInline(true);
+          this.appendValueInput("CHARVALUES")
+          .setCheck("Array")
+          .setAlign(Blockly.ALIGN_RIGHT)
+          .appendField("Characteristics");  
+      this.setInputsInline(false);
       this.setPreviousStatement(true, null);
       this.setNextStatement(true, null);
       this.setColour(230);