diff --git a/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoCreateResources.groovy b/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoCreateResources.groovy
index c3768f9..bc26aa1 100644
--- a/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoCreateResources.groovy
+++ b/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoCreateResources.groovy
@@ -78,7 +78,7 @@
     JsonUtils jsonUtil = new JsonUtils()
     CatalogDbUtils catalogDbUtils = new CatalogDbUtilsFactory().create()
 
-    public void preProcessRequest(DelegateExecution execution) {
+     void preProcessRequest(DelegateExecution execution) {
         logger.trace("preProcessRequest ")
         String msg = ""
 
@@ -95,7 +95,7 @@
         logger.trace("Exit preProcessRequest ")
     }
 
-    public void sequenceResoure(DelegateExecution execution) {
+     void sequenceResoure(DelegateExecution execution) {
         logger.trace("Start sequenceResoure Process ")
 
         String incomingRequest = execution.getVariable("uuiRequest")
@@ -181,7 +181,7 @@
         logger.trace("COMPLETED sequenceResoure Process ")
     }
 
-    public prepareServiceTopologyRequest(DelegateExecution execution) {
+     void prepareServiceTopologyRequest(DelegateExecution execution) {
 
         logger.trace("======== Start prepareServiceTopologyRequest Process ======== ")
 
@@ -201,7 +201,7 @@
         logger.trace("======== End prepareServiceTopologyRequest Process ======== ")
     }
 
-    public void getCurrentResoure(DelegateExecution execution){
+     void getCurrentResoure(DelegateExecution execution){
         logger.trace("Start getCurrentResoure Process ")
         def currentIndex = execution.getVariable("currentResourceIndex")
         List<Resource> sequencedResourceList = execution.getVariable("sequencedResourceList")
@@ -211,7 +211,7 @@
         logger.trace("COMPLETED getCurrentResource Process ")
     }
 
-    public void parseNextResource(DelegateExecution execution){
+     void parseNextResource(DelegateExecution execution){
         logger.trace("Start parseNextResource Process ")
         def currentIndex = execution.getVariable("currentResourceIndex")
         def nextIndex =  currentIndex + 1
@@ -225,7 +225,7 @@
         logger.trace("COMPLETED parseNextResource Process ")
     }
 
-    public void prepareResourceRecipeRequest(DelegateExecution execution){
+     void prepareResourceRecipeRequest(DelegateExecution execution){
         logger.trace("Start prepareResourceRecipeRequest Process ")
         ResourceInput resourceInput = new ResourceInput()
         String serviceInstanceName = execution.getVariable("serviceInstanceName")
@@ -284,7 +284,7 @@
         logger.trace("COMPLETED prepareResourceRecipeRequest Process ")
     }
 
-    public void executeResourceRecipe(DelegateExecution execution){
+     void executeResourceRecipe(DelegateExecution execution){
         logger.trace("Start executeResourceRecipe Process ")
 
         try {
@@ -338,7 +338,7 @@
         }
     }
 
-    public void postConfigRequest(DelegateExecution execution){
+     void postConfigRequest(DelegateExecution execution){
         //now do noting
         ServiceDecomposition serviceDecomposition = execution.getVariable("serviceDecomposition")
         for (VnfResource resource : serviceDecomposition.vnfResources) {
