Merge "Adding examples for openapi specification"
diff --git a/examples/src/main/resources/clamp/acm/test/tosca-template-additional-properties.yaml b/examples/src/main/resources/clamp/acm/test/tosca-template-additional-properties.yaml
new file mode 100644
index 0000000..55990b4
--- /dev/null
+++ b/examples/src/main/resources/clamp/acm/test/tosca-template-additional-properties.yaml
@@ -0,0 +1,226 @@
+# ============LICENSE_START=======================================================
+# Copyright (C) 2022 Nordix Foundation.
+# ================================================================================
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+# SPDX-License-Identifier: Apache-2.0
+# ============LICENSE_END=========================================================
+tosca_definitions_version: tosca_simple_yaml_1_3
+data_types:
+  onap.datatypes.ToscaConceptIdentifier:
+    derived_from: tosca.datatypes.Root
+    properties:
+      name:
+        type: string
+        required: true
+      version:
+        type: string
+        required: true
+    derived_from: tosca.datatypes.Root
+    description: Definition for a entity in A&AI to perform a control loop operation
+      on
+    properties:
+      targetType:
+        type: string
+        description: Category for the target type
+        required: true
+        constraints:
+          - valid_values:
+              - VNF
+              - VM
+              - VFMODULE
+              - PNF
+      entityIds:
+        type: map
+        description: |
+          Map of values that identify the resource. If none are provided, it is assumed that the
+          entity that generated the ONSET event will be the target.
+        required: false
+        metadata:
+          clamp_possible_values: ClampExecution:CSAR_RESOURCES
+        entry_schema:
+          type: string
+    version: 1.0.0
+    derived_from: tosca.datatypes.Root
+    properties:
+      configurationEntityId:
+        type: onap.datatypes.ToscaConceptIdentifier
+        required: true
+        description: The name and version of a Configuration Entity to be handled
+          by the HTTP Automation Composition Element
+      restSequence:
+        type: list
+        entry_schema:
+          type: org.onap.datatypes.policy.clamp.acm.httpAutomationCompositionElement.RestRequest
+          type_version: 1.0.0
+        description: A sequence of REST commands to send to the REST endpoint
+policy_types:
+  onap.policies.controlloop.operational.common.Apex:
+    derived_from: onap.policies.controlloop.operational.Common
+    type_version: 1.0.0
+    version: 1.0.0
+    name: onap.policies.controlloop.operational.common.Apex
+    description: Operational policies for Apex PDP
+    properties:
+      engineServiceParameters:
+        type: string
+        description: The engine parameters like name, instanceCount, policy implementation,
+          parameters etc.
+        required: true
+      eventInputParameters:
+        type: string
+        description: The event input parameters.
+        required: true
+      eventOutputParameters:
+        type: string
+        description: The event output parameters.
+        required: true
+      javaProperties:
+        type: string
+        description: Name/value pairs of properties to be set for APEX if needed.
+        required: false
+
+node_types:
+  org.onap.policy.clamp.acm.Participant:
+    version: 1.0.1
+    derived_from: tosca.nodetypes.Root
+    properties:
+      provider:
+        type: string
+        required: false
+    version: 1.0.1
+    derived_from: org.onap.policy.clamp.acm.AutomationCompositionElement
+    properties:
+      baseUrl:
+        type: string
+        required: true
+        description: The base URL to be prepended to each path, identifies the host for the REST endpoints.
+      httpHeaders:
+        type: map
+        required: false
+        entry_schema:
+          type: string
+        description: HTTP headers to send on REST requests
+      configurationEntities:
+        type: map
+        required: true
+        entry_schema:
+          type: org.onap.datatypes.policy.clamp.acm.httpAutomationCompositionElement.ConfigurationEntity
+          type_version: 1.0.0
+        description: The connfiguration entities the Automation Composition Element is managing and their associated REST requests
+
+topology_template:
+  inputs:
+    pmsh_operational_policy:
+      type: onap.datatypes.ToscaConceptIdentifier
+      description: The ID of the PMSH operational policy to use
+      default:
+        name: operational.apex.pmcontrol
+        version: 1.0.0
+  node_templates:
+    org.onap.policy.clamp.acm.PolicyParticipant:
+      version: 2.3.1
+      type: org.onap.policy.clamp.acm.Participant
+      type_version: 1.0.1
+      description: Participant for DCAE microservices
+      properties:
+        provider: ONAP
+      requirements:
+        -
+          org.onap.policy.clamp.acm.Required:
+            type: org.onap
+            type_version: 1.0.1
+            name: org.onap.policy.clamp.acm.Required
+            version: 1.0.0
+            capability: Capable
+            node: node1
+            occurrences:
+              - V1
+              - V2
+      capabilities:
+        org.onap.policy.clamp.acm.Capability:
+          type: org.onap
+          type_version: 1.0.1
+          name: org.onap.policy.clamp.acm.Capability
+          version: 1.0.0
+          attributes:
+            attribute: attribute0
+          occurrences:
+            - V1
+            - V2
+capability_types:
+  org.onap.policy.clamp.acm.capability.Type:
+    name: org.onap.policy.clamp.acm.capability.Type
+    version: 1.0.0
+    metadata:
+      key0: value0
+    description: Capability Type
+    properties:
+      prop1:
+        name: org.onap.policy.clamp.acm.PolicyAutomationCompositionElement2
+        type: string
+        type_version: 1.0.0
+        description: Test RelationshipType
+        deafault: 0
+        key_schema:
+          name: org.onap.policy.clamp.acm.PolicyAutomationCompositionElement3
+          type: string
+          type_version: 1.0.0
+          description: Test Schema
+          constraints:
+            - valid_values:
+              - V1
+              - V2
+      entry_schema:
+        name: org.onap.policy.clamp.acm.PolicyAutomationCompositionElement4
+        type: string
+        type_version: 1.0.0
+        description: Test Schema
+        constraints:
+          - valid_values:
+            - V1
+            - V2
+relationship_types:
+  org.onap.policy.clamp.acm.Relationship:
+    version: 1.0.0
+    metadata:
+      key: value
+      key2: value2
+    description: Hello
+    properties:
+      prop1:
+        name: org.onap.policy.clamp.acm.PolicyAutomationCompositionElement2
+        type: string
+        type_version: 1.0.0
+        description: Test RelationshipType
+        deafault: 0
+        key_schema:
+          name: org.onap.policy.clamp.acm.PolicyAutomationCompositionElement3
+          type: string
+          type_version: 1.0.0
+          description: Test Schema
+          constraints:
+            - valid_values:
+              - V1
+              - V2
+        entry_schema:
+          name: org.onap.policy.clamp.acm.PolicyAutomationCompositionElement4
+          type: string
+          type_version: 1.0.0
+          description: Test Schema
+          constraints:
+            - valid_values:
+              - V1
+              - V2
+        metadata:
+          clamp_possible_values: ClampExecution:CSAR_RESOURCES
diff --git a/models/src/main/java/org/onap/policy/clamp/models/acm/concepts/AutomationComposition.java b/models/src/main/java/org/onap/policy/clamp/models/acm/concepts/AutomationComposition.java
index c3245d2..b19f54c 100644
--- a/models/src/main/java/org/onap/policy/clamp/models/acm/concepts/AutomationComposition.java
+++ b/models/src/main/java/org/onap/policy/clamp/models/acm/concepts/AutomationComposition.java
@@ -38,6 +38,9 @@
 @EqualsAndHashCode(callSuper = true)
 public class AutomationComposition extends ToscaEntity implements Comparable<AutomationComposition> {
     @NonNull
+    private UUID instanceId;
+
+    @NonNull
     private UUID compositionId;
 
     @NonNull
@@ -58,6 +61,7 @@
      */
     public AutomationComposition(final AutomationComposition otherAutomationComposition) {
         super(otherAutomationComposition);
+        this.instanceId = otherAutomationComposition.instanceId;
         this.compositionId = otherAutomationComposition.compositionId;
         this.state = otherAutomationComposition.state;
         this.orderedState = otherAutomationComposition.orderedState;
diff --git a/models/src/main/java/org/onap/policy/clamp/models/acm/messages/rest/instantiation/InstantiationResponse.java b/models/src/main/java/org/onap/policy/clamp/models/acm/messages/rest/instantiation/InstantiationResponse.java
index 4ecb8ce..534c909 100644
--- a/models/src/main/java/org/onap/policy/clamp/models/acm/messages/rest/instantiation/InstantiationResponse.java
+++ b/models/src/main/java/org/onap/policy/clamp/models/acm/messages/rest/instantiation/InstantiationResponse.java
@@ -20,6 +20,7 @@
 
 package org.onap.policy.clamp.models.acm.messages.rest.instantiation;
 
+import java.util.UUID;
 import lombok.Getter;
 import lombok.Setter;
 import lombok.ToString;
@@ -33,5 +34,6 @@
 @Setter
 @ToString(callSuper = true)
 public class InstantiationResponse extends SimpleResponse {
+    private UUID instanceId;
     ToscaConceptIdentifier affectedAutomationComposition;
 }
diff --git a/models/src/main/java/org/onap/policy/clamp/models/acm/persistence/concepts/JpaAutomationComposition.java b/models/src/main/java/org/onap/policy/clamp/models/acm/persistence/concepts/JpaAutomationComposition.java
index 8268e90..b87bad4 100644
--- a/models/src/main/java/org/onap/policy/clamp/models/acm/persistence/concepts/JpaAutomationComposition.java
+++ b/models/src/main/java/org/onap/policy/clamp/models/acm/persistence/concepts/JpaAutomationComposition.java
@@ -23,7 +23,6 @@
 import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
-import java.util.Map.Entry;
 import java.util.UUID;
 import javax.persistence.CascadeType;
 import javax.persistence.Column;
@@ -40,7 +39,6 @@
 import lombok.NonNull;
 import org.apache.commons.lang3.ObjectUtils;
 import org.onap.policy.clamp.models.acm.concepts.AutomationComposition;
-import org.onap.policy.clamp.models.acm.concepts.AutomationCompositionElement;
 import org.onap.policy.clamp.models.acm.concepts.AutomationCompositionOrderedState;
 import org.onap.policy.clamp.models.acm.concepts.AutomationCompositionState;
 import org.onap.policy.common.parameters.annotations.NotNull;
@@ -66,11 +64,16 @@
 public class JpaAutomationComposition extends PfConcept implements PfAuthorative<AutomationComposition> {
     private static final long serialVersionUID = -4725410933242154805L;
 
+    @Column
+    @NotNull
+    private String instanceId;
+
     @EmbeddedId
     @VerifyKey
     @NotNull
     private PfConceptKey key;
 
+    @Column
     @NotNull
     private String compositionId;
 
@@ -97,29 +100,23 @@
      * The Default Constructor creates a {@link JpaAutomationComposition} object with a null key.
      */
     public JpaAutomationComposition() {
-        this(new PfConceptKey());
-    }
-
-    /**
-     * The Key Constructor creates a {@link JpaAutomationComposition} object with the given concept key.
-     *
-     * @param key the key
-     */
-    public JpaAutomationComposition(@NonNull final PfConceptKey key) {
-        this(key, UUID.randomUUID().toString(), AutomationCompositionState.UNINITIALISED, new LinkedHashMap<>());
+        this(UUID.randomUUID().toString(), new PfConceptKey(), UUID.randomUUID().toString(),
+                AutomationCompositionState.UNINITIALISED, new LinkedHashMap<>());
     }
 
     /**
      * The Key Constructor creates a {@link JpaAutomationComposition} object with all mandatory fields.
      *
+     * @param instanceId The UUID of the automation composition instance
      * @param key the key
      * @param compositionId the TOSCA compositionId of the automation composition definition
      * @param state the state of the automation composition
      * @param elements the elements of the automation composition in participants
      */
-    public JpaAutomationComposition(@NonNull final PfConceptKey key, @NonNull final String compositionId,
-            @NonNull final AutomationCompositionState state,
+    public JpaAutomationComposition(@NonNull final String instanceId, @NonNull final PfConceptKey key,
+            @NonNull final String compositionId, @NonNull final AutomationCompositionState state,
             @NonNull final Map<UUID, JpaAutomationCompositionElement> elements) {
+        this.instanceId = instanceId;
         this.key = key;
         this.compositionId = compositionId;
         this.state = state;
@@ -133,6 +130,7 @@
      */
     public JpaAutomationComposition(@NonNull final JpaAutomationComposition copyConcept) {
         super(copyConcept);
+        this.instanceId = copyConcept.instanceId;
         this.key = new PfConceptKey(copyConcept.key);
         this.compositionId = copyConcept.compositionId;
         this.state = copyConcept.state;
@@ -156,6 +154,7 @@
     public AutomationComposition toAuthorative() {
         var automationComposition = new AutomationComposition();
 
+        automationComposition.setInstanceId(UUID.fromString(instanceId));
         automationComposition.setName(getKey().getName());
         automationComposition.setVersion(getKey().getVersion());
         automationComposition.setCompositionId(UUID.fromString(compositionId));
@@ -171,6 +170,7 @@
 
     @Override
     public void fromAuthorative(@NonNull final AutomationComposition automationComposition) {
+        this.instanceId = automationComposition.getInstanceId().toString();
         if (this.key == null || this.getKey().isNullKey()) {
             this.setKey(new PfConceptKey(automationComposition.getName(), automationComposition.getVersion()));
         }
@@ -182,7 +182,7 @@
         this.primed = automationComposition.getPrimed();
 
         this.elements = new LinkedHashMap<>(automationComposition.getElements().size());
-        for (Entry<UUID, AutomationCompositionElement> elementEntry : automationComposition.getElements().entrySet()) {
+        for (var elementEntry : automationComposition.getElements().entrySet()) {
             var jpaAutomationCompositionElement = new JpaAutomationCompositionElement();
             jpaAutomationCompositionElement
                     .setKey(new PfReferenceKey(getKey(), elementEntry.getValue().getId().toString()));
@@ -193,9 +193,9 @@
 
     @Override
     public List<PfKey> getKeys() {
-        List<PfKey> keyList = getKey().getKeys();
+        var keyList = getKey().getKeys();
 
-        for (JpaAutomationCompositionElement element : elements.values()) {
+        for (var element : elements.values()) {
             keyList.addAll(element.getKeys());
         }
 
@@ -207,7 +207,7 @@
         key.clean();
         description = (description == null ? null : description.trim());
 
-        for (JpaAutomationCompositionElement element : elements.values()) {
+        for (var element : elements.values()) {
             element.clean();
         }
     }
@@ -224,8 +224,13 @@
             return this.getClass().getName().compareTo(otherConcept.getClass().getName());
         }
 
-        final JpaAutomationComposition other = (JpaAutomationComposition) otherConcept;
-        int result = key.compareTo(other.key);
+        final var other = (JpaAutomationComposition) otherConcept;
+        var result = ObjectUtils.compare(instanceId, other.instanceId);
+        if (result != 0) {
+            return result;
+        }
+
+        result = key.compareTo(other.key);
         if (result != 0) {
             return result;
         }
diff --git a/models/src/main/java/org/onap/policy/clamp/models/acm/persistence/provider/AutomationCompositionProvider.java b/models/src/main/java/org/onap/policy/clamp/models/acm/persistence/provider/AutomationCompositionProvider.java
index 5024785..3d2813e 100644
--- a/models/src/main/java/org/onap/policy/clamp/models/acm/persistence/provider/AutomationCompositionProvider.java
+++ b/models/src/main/java/org/onap/policy/clamp/models/acm/persistence/provider/AutomationCompositionProvider.java
@@ -52,6 +52,21 @@
     /**
      * Get automation composition.
      *
+     * @param instanceId the ID of the automation composition to get
+     * @return the automation composition found
+     */
+    @Transactional(readOnly = true)
+    public AutomationComposition getAutomationComposition(final UUID instanceId) {
+        var result = automationCompositionRepository.findByInstanceId(instanceId.toString());
+        if (result.isEmpty()) {
+            throw new PfModelRuntimeException(Status.NOT_FOUND, "AutomationComposition not found");
+        }
+        return result.get().toAuthorative();
+    }
+
+    /**
+     * Get automation composition.
+     *
      * @param automationCompositionId the ID of the automation composition to get
      * @return the automation composition found
      */
@@ -67,19 +82,6 @@
     /**
      * Find automation composition by automationCompositionId.
      *
-     * @param name the name of the automation composition to get, null to get all automation compositions
-     * @param version the version of the automation composition to get, null to get all automation compositions
-     * @return the automation composition found
-     */
-    @Transactional(readOnly = true)
-    public Optional<AutomationComposition> findAutomationComposition(@NonNull final String name,
-            @NonNull final String version) {
-        return findAutomationComposition(new PfConceptKey(name, version));
-    }
-
-    /**
-     * Find automation composition by automationCompositionId.
-     *
      * @param automationCompositionId the ID of the automation composition to get
      * @return the automation composition found
      */
@@ -94,12 +96,27 @@
     }
 
     /**
-     * Save automation composition.
+     * Create automation composition.
+     *
+     * @param automationComposition the automation composition to create
+     * @return the create automation composition
+     */
+    public AutomationComposition createAutomationComposition(final AutomationComposition automationComposition) {
+        automationComposition.setInstanceId(UUID.randomUUID());
+        var result = automationCompositionRepository.save(ProviderUtils.getJpaAndValidate(automationComposition,
+                JpaAutomationComposition::new, "automation composition"));
+
+        // Return the saved automation composition
+        return result.toAuthorative();
+    }
+
+    /**
+     * Update automation composition.
      *
      * @param automationComposition the automation composition to update
      * @return the updated automation composition
      */
-    public AutomationComposition saveAutomationComposition(final AutomationComposition automationComposition) {
+    public AutomationComposition updateAutomationComposition(final AutomationComposition automationComposition) {
         var result = automationCompositionRepository.save(ProviderUtils.getJpaAndValidate(automationComposition,
                 JpaAutomationComposition::new, "automation composition"));
 
@@ -136,23 +153,18 @@
     /**
      * Delete a automation composition.
      *
-     * @param name the name of the automation composition to delete
-     * @param version the version of the automation composition to delete
+     * @param instanceId the ID of the automation composition to get
      * @return the automation composition deleted
      */
-    public AutomationComposition deleteAutomationComposition(@NonNull final String name,
-            @NonNull final String version) {
-
-        var automationCompositionKey = new PfConceptKey(name, version);
-        var jpaDeleteAutomationComposition = automationCompositionRepository.findById(automationCompositionKey);
-
+    public AutomationComposition deleteAutomationComposition(@NonNull final UUID instanceId) {
+        var jpaDeleteAutomationComposition = automationCompositionRepository.findByInstanceId(instanceId.toString());
         if (jpaDeleteAutomationComposition.isEmpty()) {
-            String errorMessage = "delete of automation composition \"" + automationCompositionKey.getId()
+            var errorMessage = "delete of automation composition \"" + instanceId
                     + "\" failed, automation composition does not exist";
             throw new PfModelRuntimeException(Response.Status.NOT_FOUND, errorMessage);
         }
 
-        automationCompositionRepository.deleteById(automationCompositionKey);
+        automationCompositionRepository.deleteById(jpaDeleteAutomationComposition.get().getKey());
 
         return jpaDeleteAutomationComposition.get().toAuthorative();
     }
diff --git a/models/src/main/java/org/onap/policy/clamp/models/acm/persistence/repository/AutomationCompositionRepository.java b/models/src/main/java/org/onap/policy/clamp/models/acm/persistence/repository/AutomationCompositionRepository.java
index 273b99a..aba7526 100644
--- a/models/src/main/java/org/onap/policy/clamp/models/acm/persistence/repository/AutomationCompositionRepository.java
+++ b/models/src/main/java/org/onap/policy/clamp/models/acm/persistence/repository/AutomationCompositionRepository.java
@@ -21,6 +21,7 @@
 package org.onap.policy.clamp.models.acm.persistence.repository;
 
 import java.util.List;
+import java.util.Optional;
 import org.onap.policy.clamp.models.acm.persistence.concepts.JpaAutomationComposition;
 import org.onap.policy.models.base.PfConceptKey;
 import org.springframework.data.jpa.repository.JpaRepository;
@@ -28,7 +29,9 @@
 
 @Repository
 public interface AutomationCompositionRepository
-    extends JpaRepository<JpaAutomationComposition, PfConceptKey>, FilterRepository {
+        extends JpaRepository<JpaAutomationComposition, PfConceptKey>, FilterRepository {
+
+    Optional<JpaAutomationComposition> findByInstanceId(String instanceId);
 
     List<JpaAutomationComposition> findByCompositionId(String compositionId);
 }
diff --git a/models/src/test/java/org/onap/policy/clamp/models/acm/persistence/concepts/JpaAutomationCompositionTest.java b/models/src/test/java/org/onap/policy/clamp/models/acm/persistence/concepts/JpaAutomationCompositionTest.java
index 733ba38..f5a2149 100644
--- a/models/src/test/java/org/onap/policy/clamp/models/acm/persistence/concepts/JpaAutomationCompositionTest.java
+++ b/models/src/test/java/org/onap/policy/clamp/models/acm/persistence/concepts/JpaAutomationCompositionTest.java
@@ -46,7 +46,8 @@
  */
 class JpaAutomationCompositionTest {
 
-    private static final String NULL_KEY_ERROR = "key is marked .*ull but is null";
+    private static final String NULL_KEY_ERROR = "instanceId is marked .*ull but is null";
+    private static final UUID INSTANCE_ID = UUID.fromString("709c62b3-8918-41b9-a747-d21eb79c6c20");
     private static final String COMPOSITION_ID = "709c62b3-8918-41b9-a747-e21eb79c6c41";
 
     @Test
@@ -56,74 +57,70 @@
         }).hasMessageMatching("copyConcept is marked .*ull but is null");
 
         assertThatThrownBy(() -> {
-            new JpaAutomationComposition((PfConceptKey) null);
+            new JpaAutomationComposition(null, null, null, null, null);
         }).hasMessageMatching(NULL_KEY_ERROR);
 
         assertThatThrownBy(() -> {
-            new JpaAutomationComposition(null, null, null, null);
+            new JpaAutomationComposition(null, null, null, null, new LinkedHashMap<>());
         }).hasMessageMatching(NULL_KEY_ERROR);
 
         assertThatThrownBy(() -> {
-            new JpaAutomationComposition(null, null, null, new LinkedHashMap<>());
+            new JpaAutomationComposition(null, null, null, AutomationCompositionState.UNINITIALISED, null);
         }).hasMessageMatching(NULL_KEY_ERROR);
 
         assertThatThrownBy(() -> {
-            new JpaAutomationComposition(null, null, AutomationCompositionState.UNINITIALISED, null);
-        }).hasMessageMatching(NULL_KEY_ERROR);
-
-        assertThatThrownBy(() -> {
-            new JpaAutomationComposition(null, null, AutomationCompositionState.UNINITIALISED, new LinkedHashMap<>());
-        }).hasMessageMatching(NULL_KEY_ERROR);
-
-        assertThatThrownBy(() -> {
-            new JpaAutomationComposition(null, "key", null, null);
-        }).hasMessageMatching(NULL_KEY_ERROR);
-
-        assertThatThrownBy(() -> {
-            new JpaAutomationComposition(null, "key", null, new LinkedHashMap<>());
-        }).hasMessageMatching(NULL_KEY_ERROR);
-
-        assertThatThrownBy(() -> {
-            new JpaAutomationComposition(null, "key", AutomationCompositionState.UNINITIALISED, null);
-        }).hasMessageMatching(NULL_KEY_ERROR);
-
-        assertThatThrownBy(() -> {
-            new JpaAutomationComposition(null, "key", AutomationCompositionState.UNINITIALISED, new LinkedHashMap<>());
-        }).hasMessageMatching(NULL_KEY_ERROR);
-
-        assertThatThrownBy(() -> {
-            new JpaAutomationComposition(new PfConceptKey(), null, null, null);
-        }).hasMessageMatching("compositionId is marked .*ull but is null");
-
-        assertThatThrownBy(() -> {
-            new JpaAutomationComposition(new PfConceptKey(), null, null, new LinkedHashMap<>());
-        }).hasMessageMatching("compositionId is marked .*ull but is null");
-
-        assertThatThrownBy(() -> {
-            new JpaAutomationComposition(new PfConceptKey(), null, AutomationCompositionState.UNINITIALISED, null);
-        }).hasMessageMatching("compositionId is marked .*ull but is null");
-
-        assertThatThrownBy(() -> {
-            new JpaAutomationComposition(new PfConceptKey(), null, AutomationCompositionState.UNINITIALISED,
+            new JpaAutomationComposition(null, null, null, AutomationCompositionState.UNINITIALISED,
                     new LinkedHashMap<>());
+        }).hasMessageMatching(NULL_KEY_ERROR);
+
+        assertThatThrownBy(() -> {
+            new JpaAutomationComposition(null, null, "key", null, new LinkedHashMap<>());
+        }).hasMessageMatching(NULL_KEY_ERROR);
+
+        assertThatThrownBy(() -> {
+            new JpaAutomationComposition(null, null, "key", AutomationCompositionState.UNINITIALISED, null);
+        }).hasMessageMatching(NULL_KEY_ERROR);
+
+        assertThatThrownBy(() -> {
+            new JpaAutomationComposition(null, null, "key", AutomationCompositionState.UNINITIALISED,
+                    new LinkedHashMap<>());
+        }).hasMessageMatching(NULL_KEY_ERROR);
+
+        assertThatThrownBy(() -> {
+            new JpaAutomationComposition(INSTANCE_ID.toString(), new PfConceptKey(), null, null, null);
         }).hasMessageMatching("compositionId is marked .*ull but is null");
 
         assertThatThrownBy(() -> {
-            new JpaAutomationComposition(new PfConceptKey(), "key", null, null);
+            new JpaAutomationComposition(INSTANCE_ID.toString(), new PfConceptKey(), null, null, new LinkedHashMap<>());
+        }).hasMessageMatching("compositionId is marked .*ull but is null");
+
+        assertThatThrownBy(() -> {
+            new JpaAutomationComposition(INSTANCE_ID.toString(), new PfConceptKey(), null,
+                    AutomationCompositionState.UNINITIALISED, null);
+        }).hasMessageMatching("compositionId is marked .*ull but is null");
+
+        assertThatThrownBy(() -> {
+            new JpaAutomationComposition(INSTANCE_ID.toString(), new PfConceptKey(), null,
+                    AutomationCompositionState.UNINITIALISED, new LinkedHashMap<>());
+        }).hasMessageMatching("compositionId is marked .*ull but is null");
+
+        assertThatThrownBy(() -> {
+            new JpaAutomationComposition(INSTANCE_ID.toString(), new PfConceptKey(), "key", null, null);
         }).hasMessageMatching("state is marked .*ull but is null");
 
         assertThatThrownBy(() -> {
-            new JpaAutomationComposition(new PfConceptKey(), "key", null, new LinkedHashMap<>());
+            new JpaAutomationComposition(INSTANCE_ID.toString(), new PfConceptKey(), "key", null,
+                    new LinkedHashMap<>());
         }).hasMessageMatching("state is marked .*ull but is null");
 
         assertThatThrownBy(() -> {
-            new JpaAutomationComposition(new PfConceptKey(), "key", AutomationCompositionState.UNINITIALISED, null);
+            new JpaAutomationComposition(INSTANCE_ID.toString(), new PfConceptKey(), "key",
+                    AutomationCompositionState.UNINITIALISED, null);
         }).hasMessageMatching("elements is marked .*ull but is null");
 
         assertNotNull(new JpaAutomationComposition());
-        assertNotNull(new JpaAutomationComposition((new PfConceptKey())));
-        assertNotNull(new JpaAutomationComposition(new PfConceptKey(), "key", AutomationCompositionState.UNINITIALISED,
-                new LinkedHashMap<>()));
+        assertNotNull(new JpaAutomationComposition(INSTANCE_ID.toString(), new PfConceptKey(), "key",
+                AutomationCompositionState.UNINITIALISED, new LinkedHashMap<>()));
     }
 
     @Test
@@ -182,23 +179,24 @@
                 new StandardCoder().decode(new File("src/test/resources/json/AutomationCompositionNoOrderedState.json"),
                         AutomationComposition.class);
 
+        noOrderedStateAc.setInstanceId(INSTANCE_ID);
         var noOrderedStateJpaAc = new JpaAutomationComposition(noOrderedStateAc);
         assertNull(noOrderedStateJpaAc.getOrderedState());
         noOrderedStateAc.setOrderedState(AutomationCompositionOrderedState.UNINITIALISED);
         noOrderedStateJpaAc = new JpaAutomationComposition(noOrderedStateAc);
         assertEquals(testJpaAutomationComposition, noOrderedStateJpaAc);
 
-        var automationCompositionsWithElements = new StandardCoder().decode(
-                new File("src/test/resources/providers/TestAutomationCompositions.json"), AutomationCompositions.class);
+        var acWithElements =
+                new StandardCoder().decode(new File("src/test/resources/providers/TestAutomationCompositions.json"),
+                        AutomationCompositions.class).getAutomationCompositionList().get(0);
 
-        var jpaAutomationCompositionWithElements =
-                new JpaAutomationComposition(automationCompositionsWithElements.getAutomationCompositionList().get(0));
+        acWithElements.setInstanceId(INSTANCE_ID);
+        var jpaAutomationCompositionWithElements = new JpaAutomationComposition(acWithElements);
         assertEquals(4, jpaAutomationCompositionWithElements.getElements().size());
         assertEquals(17, jpaAutomationCompositionWithElements.getKeys().size());
         assertThatCode(jpaAutomationCompositionWithElements::clean).doesNotThrowAnyException();
 
-        assertEquals(automationCompositionsWithElements.getAutomationCompositionList().get(0),
-                jpaAutomationCompositionWithElements.toAuthorative());
+        assertEquals(acWithElements, jpaAutomationCompositionWithElements.toAuthorative());
     }
 
     @Test
@@ -282,6 +280,7 @@
 
         var ac2 = new JpaAutomationComposition();
         ac2.setCompositionId(COMPOSITION_ID);
+        ac2.setInstanceId(ac0.getInstanceId());
         assertEquals(ac2, ac0);
     }
 
@@ -299,6 +298,7 @@
     private AutomationComposition createAutomationCompositionInstance() {
         var testAutomationComposition = new AutomationComposition();
         testAutomationComposition.setName("automation-composition");
+        testAutomationComposition.setInstanceId(INSTANCE_ID);
         testAutomationComposition.setVersion("0.0.1");
         testAutomationComposition.setCompositionId(UUID.fromString(COMPOSITION_ID));
         testAutomationComposition.setElements(new LinkedHashMap<>());
diff --git a/models/src/test/java/org/onap/policy/clamp/models/acm/persistence/provider/AcDefinitionProviderTest.java b/models/src/test/java/org/onap/policy/clamp/models/acm/persistence/provider/AcDefinitionProviderTest.java
index a2d6d69..50953d6 100644
--- a/models/src/test/java/org/onap/policy/clamp/models/acm/persistence/provider/AcDefinitionProviderTest.java
+++ b/models/src/test/java/org/onap/policy/clamp/models/acm/persistence/provider/AcDefinitionProviderTest.java
@@ -22,6 +22,7 @@
 
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.assertj.core.api.Assertions.assertThatThrownBy;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 import static org.junit.jupiter.api.Assertions.fail;
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.Mockito.mock;
@@ -46,6 +47,8 @@
 class AcDefinitionProviderTest {
 
     private static final String TOSCA_SERVICE_TEMPLATE_YAML = "clamp/acm/pmsh/funtional-pmsh-usecase.yaml";
+    private static final String TOSCA_SERVICE_TEMPLATE_YAML_PROP =
+            "clamp/acm/test/tosca-template-additional-properties.yaml";
 
     private static final StandardYamlCoder YAML_TRANSLATOR = new StandardYamlCoder();
 
@@ -57,6 +60,24 @@
     }
 
     @Test
+    void testDocCopyCompare() {
+
+        var inputServiceTemplateProperties = getToscaServiceTemplate(TOSCA_SERVICE_TEMPLATE_YAML_PROP);
+        var docServiceTemplate = new DocToscaServiceTemplate(inputServiceTemplateProperties);
+        var docServiceTemplateCopy = new DocToscaServiceTemplate(docServiceTemplate);
+
+        assertTrue(docServiceTemplate.compareTo(docServiceTemplateCopy) < -1);
+        assertThat(docServiceTemplate.compareToWithoutEntities(docServiceTemplateCopy)).isZero();
+
+        var acmDefinition = getAcDefinition(docServiceTemplate);
+        var acmDefinitionCopy = getAcDefinition(docServiceTemplateCopy);
+
+        assertThat(acmDefinition.getServiceTemplate().getName()).isEqualTo(
+                acmDefinitionCopy.getServiceTemplate().getName());
+
+    }
+
+    @Test
     void testCreateServiceTemplate() {
         var docServiceTemplate = new DocToscaServiceTemplate(inputServiceTemplate);
         var acmDefinition = getAcDefinition(docServiceTemplate);
diff --git a/models/src/test/java/org/onap/policy/clamp/models/acm/persistence/provider/AutomationCompositionProviderTest.java b/models/src/test/java/org/onap/policy/clamp/models/acm/persistence/provider/AutomationCompositionProviderTest.java
index 5b12eee..d7d96e9 100644
--- a/models/src/test/java/org/onap/policy/clamp/models/acm/persistence/provider/AutomationCompositionProviderTest.java
+++ b/models/src/test/java/org/onap/policy/clamp/models/acm/persistence/provider/AutomationCompositionProviderTest.java
@@ -30,6 +30,7 @@
 
 import java.util.List;
 import java.util.Optional;
+import java.util.UUID;
 import javax.persistence.EntityNotFoundException;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
@@ -40,7 +41,6 @@
 import org.onap.policy.common.utils.coder.Coder;
 import org.onap.policy.common.utils.coder.StandardCoder;
 import org.onap.policy.common.utils.resources.ResourceUtils;
-import org.onap.policy.models.base.PfConceptKey;
 import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifier;
 
 class AutomationCompositionProviderTest {
@@ -68,18 +68,32 @@
     }
 
     @Test
-    void testAutomationCompositionSave() {
+    void testAutomationCompositionCreate() {
         var automationCompositionRepository = mock(AutomationCompositionRepository.class);
         var automationCompositionProvider = new AutomationCompositionProvider(automationCompositionRepository);
 
-        assertThatThrownBy(() -> automationCompositionProvider.saveAutomationComposition(null))
+        when(automationCompositionRepository.save(any(JpaAutomationComposition.class)))
+                .thenReturn(inputAutomationCompositionsJpa.get(0));
+        var inputAc = inputAutomationCompositions.getAutomationCompositionList().get(0);
+
+        var createdAutomationComposition = automationCompositionProvider.createAutomationComposition(inputAc);
+        inputAc.setInstanceId(createdAutomationComposition.getInstanceId());
+        assertEquals(inputAc, createdAutomationComposition);
+    }
+
+    @Test
+    void testAutomationCompositionUpdate() {
+        var automationCompositionRepository = mock(AutomationCompositionRepository.class);
+        var automationCompositionProvider = new AutomationCompositionProvider(automationCompositionRepository);
+
+        assertThatThrownBy(() -> automationCompositionProvider.updateAutomationComposition(null))
                 .hasMessageMatching(OBJECT_IS_NULL);
 
         when(automationCompositionRepository.save(inputAutomationCompositionsJpa.get(0)))
                 .thenReturn(inputAutomationCompositionsJpa.get(0));
 
         var createdAutomationComposition = automationCompositionProvider
-                .saveAutomationComposition(inputAutomationCompositions.getAutomationCompositionList().get(0));
+                .updateAutomationComposition(inputAutomationCompositions.getAutomationCompositionList().get(0));
 
         assertEquals(inputAutomationCompositions.getAutomationCompositionList().get(0), createdAutomationComposition);
     }
@@ -121,31 +135,49 @@
                 .getAutomationComposition(new ToscaConceptIdentifier(ID_NAME_NOT_EXTST, ID_VERSION)))
                         .hasMessageMatching("AutomationComposition not found");
 
-        ac = automationCompositionProvider.findAutomationComposition(ID_NAME, ID_VERSION)
-                .orElse(new AutomationComposition());
-        assertEquals(inputAutomationCompositions.getAutomationCompositionList().get(1), ac);
-
         assertThat(automationCompositionProvider
                 .findAutomationComposition(new ToscaConceptIdentifier(ID_NAME_NOT_EXTST, ID_VERSION))).isEmpty();
     }
 
     @Test
+    void testGetAutomationComposition() {
+        var automationCompositionRepository = mock(AutomationCompositionRepository.class);
+        var automationCompositionProvider = new AutomationCompositionProvider(automationCompositionRepository);
+
+        var automationComposition = inputAutomationCompositions.getAutomationCompositionList().get(0);
+        when(automationCompositionRepository.findByInstanceId(automationComposition.getInstanceId().toString()))
+                .thenReturn(Optional.of(inputAutomationCompositionsJpa.get(0)));
+        var ac = automationCompositionProvider.getAutomationComposition(automationComposition.getInstanceId());
+        assertEquals(inputAutomationCompositions.getAutomationCompositionList().get(0), ac);
+    }
+
+    @Test
+    void testGetAcInstancesByCompositionId() {
+        var automationCompositionRepository = mock(AutomationCompositionRepository.class);
+        var automationCompositionProvider = new AutomationCompositionProvider(automationCompositionRepository);
+
+        var automationComposition = inputAutomationCompositions.getAutomationCompositionList().get(0);
+        when(automationCompositionRepository.findByCompositionId(automationComposition.getCompositionId().toString()))
+                .thenReturn(inputAutomationCompositionsJpa);
+        var acList =
+                automationCompositionProvider.getAcInstancesByCompositionId(automationComposition.getCompositionId());
+        assertEquals(inputAutomationCompositions.getAutomationCompositionList(), acList);
+    }
+
+    @Test
     void testDeleteAutomationComposition() {
         var automationCompositionRepository = mock(AutomationCompositionRepository.class);
         var automationCompositionProvider = new AutomationCompositionProvider(automationCompositionRepository);
 
-        assertThatThrownBy(
-                () -> automationCompositionProvider.deleteAutomationComposition(ID_NAME_NOT_EXTST, ID_VERSION))
-                        .hasMessageMatching(".*.failed, automation composition does not exist");
+        assertThatThrownBy(() -> automationCompositionProvider.deleteAutomationComposition(UUID.randomUUID()))
+                .hasMessageMatching(".*.failed, automation composition does not exist");
 
         var automationComposition = inputAutomationCompositions.getAutomationCompositionList().get(0);
-        var name = automationComposition.getName();
-        var version = automationComposition.getVersion();
-
-        when(automationCompositionRepository.findById(new PfConceptKey(name, version)))
+        when(automationCompositionRepository.findByInstanceId(automationComposition.getInstanceId().toString()))
                 .thenReturn(Optional.of(inputAutomationCompositionsJpa.get(0)));
 
-        AutomationComposition deletedAc = automationCompositionProvider.deleteAutomationComposition(name, version);
+        var deletedAc =
+                automationCompositionProvider.deleteAutomationComposition(automationComposition.getInstanceId());
         assertEquals(automationComposition, deletedAc);
     }
 }
diff --git a/models/src/test/java/org/onap/policy/clamp/models/acm/utils/AcmUtilsTest.java b/models/src/test/java/org/onap/policy/clamp/models/acm/utils/AcmUtilsTest.java
index ccb4b83..617b245 100644
--- a/models/src/test/java/org/onap/policy/clamp/models/acm/utils/AcmUtilsTest.java
+++ b/models/src/test/java/org/onap/policy/clamp/models/acm/utils/AcmUtilsTest.java
@@ -22,19 +22,26 @@
 
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
 import static org.junit.jupiter.api.Assertions.assertNotEquals;
 import static org.junit.jupiter.api.Assertions.assertNotNull;
 import static org.junit.jupiter.api.Assertions.assertNull;
 
+import java.io.File;
 import java.util.ArrayList;
 import java.util.HashMap;
+import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.UUID;
 import org.junit.jupiter.api.Test;
+import org.onap.policy.clamp.models.acm.concepts.AutomationComposition;
 import org.onap.policy.clamp.models.acm.concepts.AutomationCompositionElement;
 import org.onap.policy.clamp.models.acm.concepts.ParticipantDefinition;
 import org.onap.policy.clamp.models.acm.concepts.ParticipantUpdates;
 import org.onap.policy.clamp.models.acm.concepts.ParticipantUtils;
+import org.onap.policy.common.utils.coder.CoderException;
+import org.onap.policy.common.utils.coder.StandardCoder;
 import org.onap.policy.common.utils.coder.StandardYamlCoder;
 import org.onap.policy.common.utils.resources.ResourceUtils;
 import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifier;
@@ -115,6 +122,36 @@
         assertThat(result).hasSize(6);
     }
 
+    @Test
+    void testValidateAutomationComposition() throws Exception {
+        var automationComposition = getDummyAutomationComposition();
+        var toscaServiceTemplate = getDummyToscaServiceTemplate();
+        var result = AcmUtils.validateAutomationComposition(automationComposition, toscaServiceTemplate);
+        assertNotNull(result);
+        assertFalse(result.isValid());
+
+        Map<String, ToscaNodeTemplate> nodeTemplates = new HashMap<>();
+        var nodeTemplate = new ToscaNodeTemplate();
+        nodeTemplate.setType("org.onap.policy.clamp.acm.AutomationComposition");
+        nodeTemplates.put("org.onap.dcae.acm.DCAEMicroserviceAutomationCompositionParticipant", nodeTemplate);
+        toscaServiceTemplate.getToscaTopologyTemplate().setNodeTemplates(nodeTemplates);
+        var result2 = AcmUtils.validateAutomationComposition(automationComposition, toscaServiceTemplate);
+        toscaServiceTemplate.setToscaTopologyTemplate(null);
+        assertFalse(result2.isValid());
+    }
+
+    private AutomationComposition getDummyAutomationComposition() throws CoderException {
+        var automationComposition = new AutomationComposition();
+        var element = new StandardCoder().decode(
+                new File("src/test/resources/json/AutomationCompositionElementNoOrderedState.json"),
+                AutomationCompositionElement.class);
+        automationComposition.setCompositionId(UUID.randomUUID());
+        Map<UUID, AutomationCompositionElement> map = new LinkedHashMap<>();
+        map.put(UUID.randomUUID(), element);
+        automationComposition.setElements(map);
+        return automationComposition;
+    }
+
     private ToscaServiceTemplate getDummyToscaServiceTemplate() {
         var toscaServiceTemplate = new ToscaServiceTemplate();
         var policyTypes = getDummyPolicyTypesMap();
diff --git a/models/src/test/resources/providers/TestAutomationCompositions.json b/models/src/test/resources/providers/TestAutomationCompositions.json
index 171ce07..2867599 100644
--- a/models/src/test/resources/providers/TestAutomationCompositions.json
+++ b/models/src/test/resources/providers/TestAutomationCompositions.json
@@ -2,6 +2,7 @@
     "automationCompositionList": [
         {
             "compositionId": "709c62b3-8918-41b9-a747-e21eb79c6c40",
+            "instanceId": "809c62b3-8918-41b9-a748-e21eb79c6c89",
             "state": "UNINITIALISED",
             "orderedState": "UNINITIALISED",
             "elements": {
@@ -68,6 +69,7 @@
         },
         {
             "compositionId": "709c62b3-8918-41b9-a747-e21eb79c6c40",
+            "instanceId": "809c62b3-8918-41b9-a748-e21eb79c6c90",
             "state": "UNINITIALISED",
             "orderedState": "UNINITIALISED",
             "elements": {
diff --git a/packages/policy-clamp-docker/pom.xml b/packages/policy-clamp-docker/pom.xml
index 4c00050..c8d837f 100644
--- a/packages/policy-clamp-docker/pom.xml
+++ b/packages/policy-clamp-docker/pom.xml
@@ -43,18 +43,6 @@
         <docker.skip.push>false</docker.skip.push>
         <docker.pull.registry>nexus3.onap.org:10001</docker.pull.registry>
         <docker.push.registry>nexus3.onap.org:10003</docker.push.registry>
-        <docker.clamp-runtime-acm.dockerFile>AcmRuntime.Dockerfile</docker.clamp-runtime-acm.dockerFile>
-        <docker.clamp-runtime-acm.contextDir>${project.basedir}/src/main/docker</docker.clamp-runtime-acm.contextDir>
-        <docker.clamp-ac-pf-ppnt.dockerFile>PolicyParticipant.Dockerfile</docker.clamp-ac-pf-ppnt.dockerFile>
-        <docker.clamp-ac-pf-ppnt.contextDir>${project.basedir}/src/main/docker</docker.clamp-ac-pf-ppnt.contextDir>
-        <docker.clamp-ac-k8s-ppnt.dockerFile>KubernetesParticipant.Dockerfile</docker.clamp-ac-k8s-ppnt.dockerFile>
-        <docker.clamp-ac-k8s-ppnt.contextDir>${project.basedir}/src/main/docker</docker.clamp-ac-k8s-ppnt.contextDir>
-        <docker.clamp-ac-http-ppnt.dockerFile>HttpParticipant.Dockerfile</docker.clamp-ac-http-ppnt.dockerFile>
-        <docker.clamp-ac-http-ppnt.contextDir>${project.basedir}/src/main/docker</docker.clamp-ac-http-ppnt.contextDir>
-        <docker.clamp-ac-a1pms-ppnt.dockerFile>A1pmsParticipant.Dockerfile</docker.clamp-ac-a1pms-ppnt.dockerFile>
-        <docker.clamp-ac-a1pms-ppnt.contextDir>${project.basedir}/src/main/docker</docker.clamp-ac-a1pms-ppnt.contextDir>
-        <docker.clamp-acm-element-impl.dockerFile>ElementParticipant.Dockerfile</docker.clamp-acm-element-impl.dockerFile>
-        <docker.clamp-acm-element-impl.contextDir>${project.basedir}/src/main/docker</docker.clamp-acm-element-impl.contextDir>
         <maven.build.timestamp.format>yyyyMMdd'T'HHmm</maven.build.timestamp.format>
     </properties>
 
diff --git a/packages/policy-clamp-docker/src/main/docker/A1pmsParticipant-Suse.Dockerfile b/packages/policy-clamp-docker/src/main/docker/A1pmsParticipant-Suse.Dockerfile
index 33d66da..a03f262 100755
--- a/packages/policy-clamp-docker/src/main/docker/A1pmsParticipant-Suse.Dockerfile
+++ b/packages/policy-clamp-docker/src/main/docker/A1pmsParticipant-Suse.Dockerfile
@@ -53,7 +53,7 @@
 
 WORKDIR $POLICY_HOME
 COPY --chown=policy:policy a1pms-participant.sh bin/
-COPY --chown=policy:policy /maven/policy-clamp-participant-impl-a1.jar /app/app.jar
+COPY --chown=policy:policy /maven/policy-clamp-participant-impl-a1pms.jar /app/app.jar
 
 RUN chmod 755 bin/*.sh
 
diff --git a/packages/pom.xml b/packages/pom.xml
index 56f9974..41463a1 100644
--- a/packages/pom.xml
+++ b/packages/pom.xml
@@ -54,6 +54,12 @@
             </modules>
             <properties>
                 <docker.skip.push>false</docker.skip.push>
+                <docker.clamp-runtime-acm.dockerFile>AcmRuntime.Dockerfile</docker.clamp-runtime-acm.dockerFile>
+                <docker.clamp-ac-pf-ppnt.dockerFile>PolicyParticipant.Dockerfile</docker.clamp-ac-pf-ppnt.dockerFile>
+                <docker.clamp-ac-k8s-ppnt.dockerFile>KubernetesParticipant.Dockerfile</docker.clamp-ac-k8s-ppnt.dockerFile>
+                <docker.clamp-ac-http-ppnt.dockerFile>HttpParticipant.Dockerfile</docker.clamp-ac-http-ppnt.dockerFile>
+                <docker.clamp-ac-a1pms-ppnt.dockerFile>A1pmsParticipant.Dockerfile</docker.clamp-ac-a1pms-ppnt.dockerFile>
+                <docker.clamp-acm-element-impl.dockerFile>ElementParticipant.Dockerfile</docker.clamp-acm-element-impl.dockerFile>
             </properties>
         </profile>
         <profile>
diff --git a/participant/participant-impl/participant-impl-a1pms/src/main/java/org/onap/policy/clamp/acm/participant/a1pms/handler/AutomationCompositionElementHandler.java b/participant/participant-impl/participant-impl-a1pms/src/main/java/org/onap/policy/clamp/acm/participant/a1pms/handler/AutomationCompositionElementHandler.java
index 072d144..9b942b9 100755
--- a/participant/participant-impl/participant-impl-a1pms/src/main/java/org/onap/policy/clamp/acm/participant/a1pms/handler/AutomationCompositionElementHandler.java
+++ b/participant/participant-impl/participant-impl-a1pms/src/main/java/org/onap/policy/clamp/acm/participant/a1pms/handler/AutomationCompositionElementHandler.java
@@ -145,12 +145,8 @@
                 LOGGER.error("Violations found in the config request parameters: {}", violations);
                 throw new ValidationException("Constraint violations in the config request");
             }
-        } catch (ValidationException | CoderException e) {
-            LOGGER.error("Error invoking the A1PMS request for the config ", e);
+        } catch (ValidationException | CoderException | A1PolicyServiceException e) {
             throw new A1PolicyServiceException(HttpStatus.SC_BAD_REQUEST, "Invalid Configuration", e);
-        } catch (A1PolicyServiceException e) {
-            LOGGER.error("Error invoking the A1PMS request for the config ", e);
-            throw e;
         }
     }
 }
diff --git a/participant/participant-impl/participant-impl-a1pms/src/test/java/org/onap/policy/clamp/acm/participant/a1pms/handler/AcElementHandlerTest.java b/participant/participant-impl/participant-impl-a1pms/src/test/java/org/onap/policy/clamp/acm/participant/a1pms/handler/AcElementHandlerTest.java
index 690f5f2..635b774 100755
--- a/participant/participant-impl/participant-impl-a1pms/src/test/java/org/onap/policy/clamp/acm/participant/a1pms/handler/AcElementHandlerTest.java
+++ b/participant/participant-impl/participant-impl-a1pms/src/test/java/org/onap/policy/clamp/acm/participant/a1pms/handler/AcElementHandlerTest.java
@@ -21,6 +21,7 @@
 package org.onap.policy.clamp.acm.participant.a1pms.handler;
 
 import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
+import static org.junit.jupiter.api.Assertions.assertThrows;
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.Mockito.doNothing;
 import static org.mockito.Mockito.mock;
@@ -96,6 +97,12 @@
         assertDoesNotThrow(() -> automationCompositionElementHandler.automationCompositionElementStateChange(
             automationCompositionId, automationCompositionElementId, AutomationCompositionState.PASSIVE,
             AutomationCompositionOrderedState.RUNNING));
+
+        when(acA1PmsClient.isPmsHealthy()).thenReturn(Boolean.FALSE);
+        assertThrows(A1PolicyServiceException.class,
+                () -> automationCompositionElementHandler.automationCompositionElementStateChange(
+                        automationCompositionId, automationCompositionElementId, AutomationCompositionState.PASSIVE,
+                        AutomationCompositionOrderedState.UNINITIALISED));
     }
 
     @Test
@@ -107,4 +114,28 @@
             commonTestData.getAutomationCompositionId(), element,
             nodeTemplatesMap.get(A1_AUTOMATION_COMPOSITION_ELEMENT)));
     }
+
+    @Test
+    void test_AutomationCompositionElementUpdateWithUnhealthyA1pms() {
+        AutomationCompositionElement element = commonTestData.getAutomationCompositionElement();
+        when(acA1PmsClient.isPmsHealthy()).thenReturn(Boolean.FALSE);
+
+        Map<String, ToscaNodeTemplate> nodeTemplatesMap = serviceTemplate.getToscaTopologyTemplate().getNodeTemplates();
+        assertThrows(A1PolicyServiceException.class,
+                () -> automationCompositionElementHandler.automationCompositionElementUpdate(
+                        commonTestData.getAutomationCompositionId(), element,
+                        nodeTemplatesMap.get(A1_AUTOMATION_COMPOSITION_ELEMENT)));
+    }
+
+    @Test
+    void test_AutomationCompositionElementUpdateWithInvalidConfiguration() {
+        AutomationCompositionElement element = commonTestData.getAutomationCompositionElement();
+
+        Map<String, ToscaNodeTemplate> nodeTemplatesMap = serviceTemplate.getToscaTopologyTemplate().getNodeTemplates();
+        ToscaNodeTemplate toscaNodeTemplate = nodeTemplatesMap.get(A1_AUTOMATION_COMPOSITION_ELEMENT);
+        toscaNodeTemplate.setProperties(Map.of());
+        assertThrows(A1PolicyServiceException.class,
+                () -> automationCompositionElementHandler.automationCompositionElementUpdate(
+                        commonTestData.getAutomationCompositionId(), element, toscaNodeTemplate));
+    }
 }
diff --git a/participant/participant-impl/participant-impl-kubernetes/src/main/java/org/onap/policy/clamp/acm/participant/kubernetes/helm/HelmClient.java b/participant/participant-impl/participant-impl-kubernetes/src/main/java/org/onap/policy/clamp/acm/participant/kubernetes/helm/HelmClient.java
index f3f7d34..a05dfbc 100644
--- a/participant/participant-impl/participant-impl-kubernetes/src/main/java/org/onap/policy/clamp/acm/participant/kubernetes/helm/HelmClient.java
+++ b/participant/participant-impl/participant-impl-kubernetes/src/main/java/org/onap/policy/clamp/acm/participant/kubernetes/helm/HelmClient.java
@@ -143,7 +143,7 @@
      * @return string output
      * @throws ServiceException incase of error.
      */
-    public static String executeCommand(ProcessBuilder processBuilder) throws ServiceException {
+    public String executeCommand(ProcessBuilder processBuilder) throws ServiceException {
         var commandStr = toString(processBuilder);
 
         try {
diff --git a/participant/participant-impl/participant-impl-kubernetes/src/main/java/org/onap/policy/clamp/acm/participant/kubernetes/helm/PodStatusValidator.java b/participant/participant-impl/participant-impl-kubernetes/src/main/java/org/onap/policy/clamp/acm/participant/kubernetes/helm/PodStatusValidator.java
index 67bdc0b..89eb284 100644
--- a/participant/participant-impl/participant-impl-kubernetes/src/main/java/org/onap/policy/clamp/acm/participant/kubernetes/helm/PodStatusValidator.java
+++ b/participant/participant-impl/participant-impl-kubernetes/src/main/java/org/onap/policy/clamp/acm/participant/kubernetes/helm/PodStatusValidator.java
@@ -46,6 +46,8 @@
 
     private ChartInfo chart;
 
+    private HelmClient client = new HelmClient();
+
     /**
      * Constructor for PodStatusValidator.
      * @param chart chartInfo
@@ -76,7 +78,7 @@
         long endTime = System.currentTimeMillis() + (timeout * 1000L);
 
         while (!isVerified && System.currentTimeMillis() < endTime) {
-            var output = HelmClient.executeCommand(verifyPodStatusCommand(chart));
+            var output = client.executeCommand(verifyPodStatusCommand(chart));
             var podStatusMap = mapPodStatus(output);
             isVerified = !podStatusMap.isEmpty()
                     && podStatusMap.values().stream().allMatch("Running"::equals);
diff --git a/participant/participant-impl/participant-impl-kubernetes/src/test/java/org/onap/policy/clamp/acm/participant/kubernetes/helm/HelmClientTest.java b/participant/participant-impl/participant-impl-kubernetes/src/test/java/org/onap/policy/clamp/acm/participant/kubernetes/helm/HelmClientTest.java
index f5826bf..19106a6 100644
--- a/participant/participant-impl/participant-impl-kubernetes/src/test/java/org/onap/policy/clamp/acm/participant/kubernetes/helm/HelmClientTest.java
+++ b/participant/participant-impl/participant-impl-kubernetes/src/test/java/org/onap/policy/clamp/acm/participant/kubernetes/helm/HelmClientTest.java
@@ -29,7 +29,7 @@
 import static org.junit.jupiter.api.Assertions.fail;
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.Mockito.doReturn;
-import static org.mockito.Mockito.mockStatic;
+import static org.mockito.Mockito.doThrow;
 import static org.mockito.Mockito.when;
 
 import java.io.File;
@@ -42,8 +42,6 @@
 import org.junit.jupiter.api.extension.ExtendWith;
 import org.mockito.InjectMocks;
 import org.mockito.Mock;
-import org.mockito.MockedStatic;
-import org.mockito.Mockito;
 import org.mockito.Spy;
 import org.onap.policy.clamp.acm.participant.kubernetes.exception.ServiceException;
 import org.onap.policy.clamp.acm.participant.kubernetes.models.ChartInfo;
@@ -74,25 +72,20 @@
     @Mock
     HelmRepository repo;
 
-    private static MockedStatic<HelmClient> mockedClient;
 
     @BeforeAll
     static void init() throws CoderException {
         charts = CODER.decode(new File(CHART_INFO_YAML), ChartList.class).getCharts();
-        //Mock static method for bash command execution
-        mockedClient = mockStatic(HelmClient.class);
     }
 
     @AfterAll
     public static void close() throws IOException {
-        mockedClient.close();
         FileSystemUtils.deleteRecursively(Path.of("target/tmp"));
     }
 
     @Test
-    void test_installChart() {
-        mockedClient.when(() -> HelmClient.executeCommand(any()))
-            .thenReturn("success");
+    void test_installChart() throws ServiceException {
+        doReturn("success").when(helmClient).executeCommand(any());
         doReturn(new File("/target/tmp/override.yaml")).when(chartStore)
             .getOverrideFile(any());
         var chartinfo = charts.get(0);
@@ -101,29 +94,28 @@
         chartinfo.setNamespace("");
         assertDoesNotThrow(() -> helmClient.installChart(chartinfo));
 
-        mockedClient.when(() -> HelmClient.executeCommand(any())).thenReturn("");
+        doReturn("").when(helmClient).executeCommand(any());
         assertDoesNotThrow(() -> helmClient.installChart(chartinfo));
 
     }
 
     @Test
-    void test_addRepository() {
-        mockedClient.when(() -> HelmClient.executeCommand(any())).thenReturn("");
+    void test_addRepository() throws ServiceException {
+        doReturn("").when(helmClient).executeCommand(any());
         when(repo.getRepoName()).thenReturn("RepoName");
         when(repo.getAddress()).thenReturn("http://localhost:8080");
         assertDoesNotThrow(() -> helmClient.addRepository(repo));
 
-        mockedClient.when(() -> HelmClient.executeCommand(any()))
-            .thenReturn("failed");
+        doReturn("failed").when(helmClient).executeCommand(any());
         assertDoesNotThrow(() -> helmClient.addRepository(repo));
     }
 
     @Test
     void test_findChartRepository() throws IOException, ServiceException {
         String tmpPath = "target/tmp/dummyChart/1.0/";
-        mockedClient.when(() -> HelmClient.executeCommand(Mockito.any()))
-            .thenReturn("nginx-stable/nginx-ingress\t0.9.3\t1.11.3"
-                + " \tNGINX Ingress Controller");
+        doReturn("nginx-stable/nginx-ingress\t0.9.3\t1.11.3"
+                + " \tNGINX Ingress Controller").when(helmClient).executeCommand(any());
+
         String configuredRepo = helmClient.findChartRepository(charts.get(1));
         assertThat(configuredRepo).isEqualTo("nginx-stable");
 
@@ -143,8 +135,9 @@
 
     @Test
     void test_uninstallChart() throws ServiceException {
+        doReturn("success").when(helmClient).executeCommand(any());
         helmClient.uninstallChart(charts.get(0));
-        mockedClient.when(() -> HelmClient.executeCommand(any())).thenThrow(new ServiceException("error in execution"));
+        doThrow(ServiceException.class).when(helmClient).executeCommand(any());
 
         assertThatThrownBy(() -> helmClient.uninstallChart(charts.get(0)))
             .isInstanceOf(ServiceException.class);
@@ -152,8 +145,7 @@
 
     @Test
     void test_verifyConfiguredRepoForInvalidChart() throws IOException, ServiceException {
-        mockedClient.when(() -> HelmClient.executeCommand(Mockito.any()))
-            .thenReturn("");
+        doReturn("").when(helmClient).executeCommand(any());
         String configuredRepo = helmClient.verifyConfiguredRepo(charts.get(1));
         assertNull(configuredRepo);
     }
diff --git a/participant/participant-impl/participant-impl-kubernetes/src/test/java/org/onap/policy/clamp/acm/participant/kubernetes/helm/PodStatusValidatorTest.java b/participant/participant-impl/participant-impl-kubernetes/src/test/java/org/onap/policy/clamp/acm/participant/kubernetes/helm/PodStatusValidatorTest.java
index 962744d..6cec605 100644
--- a/participant/participant-impl/participant-impl-kubernetes/src/test/java/org/onap/policy/clamp/acm/participant/kubernetes/helm/PodStatusValidatorTest.java
+++ b/participant/participant-impl/participant-impl-kubernetes/src/test/java/org/onap/policy/clamp/acm/participant/kubernetes/helm/PodStatusValidatorTest.java
@@ -25,17 +25,17 @@
 import static org.assertj.core.api.Assertions.assertThatThrownBy;
 import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
 import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.Mockito.mockStatic;
+import static org.mockito.Mockito.doReturn;
 
 import java.io.File;
 import java.util.List;
 import java.util.Map;
-import org.junit.jupiter.api.AfterAll;
 import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.BeforeAll;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.extension.ExtendWith;
-import org.mockito.MockedStatic;
+import org.mockito.InjectMocks;
+import org.mockito.Mock;
 import org.onap.policy.clamp.acm.participant.kubernetes.exception.ServiceException;
 import org.onap.policy.clamp.acm.participant.kubernetes.handler.AutomationCompositionElementHandler;
 import org.onap.policy.clamp.acm.participant.kubernetes.models.ChartInfo;
@@ -54,12 +54,21 @@
     private static int STATUS_CHECK_INTERVAL = 1;
     private static List<ChartInfo> charts;
 
-    private static MockedStatic<HelmClient> mockedClient;
+    @InjectMocks
+    private PodStatusValidator podStatusValidator = new PodStatusValidator(charts.get(0), TIMEOUT,
+            STATUS_CHECK_INTERVAL);
+
+    @InjectMocks
+    private PodStatusValidator podValidatorWithPodName = new PodStatusValidator(charts.get(2), TIMEOUT,
+            STATUS_CHECK_INTERVAL);
+
+
+    @Mock
+    private HelmClient client;
 
     @BeforeAll
     static void init() throws CoderException {
         charts = CODER.decode(new File(CHART_INFO_YAML), ChartList.class).getCharts();
-        mockedClient = mockStatic(HelmClient.class);
     }
 
     @AfterEach
@@ -67,17 +76,11 @@
         AutomationCompositionElementHandler.getPodStatusMap().clear();
     }
 
-    @AfterAll
-    public static void close() {
-        mockedClient.close();
-    }
 
     @Test
-    void test_RunningPodState() {
+    void test_RunningPodState() throws ServiceException {
         String runningPod = "NAME\tREADY\tSTATUS\tRESTARTS\tAGE\r\nHelloWorld-54777df9f8-qpzqr\t1/1\tRunning\t0\t9h";
-        mockedClient.when(() -> HelmClient.executeCommand(any()))
-            .thenReturn(runningPod);
-        var podStatusValidator = new PodStatusValidator(charts.get(0), TIMEOUT, STATUS_CHECK_INTERVAL);
+        doReturn(runningPod).when(client).executeCommand(any());
         assertDoesNotThrow(() -> podStatusValidator.run());
         assertThat(AutomationCompositionElementHandler.getPodStatusMap()).hasSize(1);
         assertThat(AutomationCompositionElementHandler.getPodStatusMap()).containsKey(charts.get(0).getReleaseName());
@@ -86,11 +89,9 @@
     }
 
     @Test
-    void test_InvalidPodState() {
+    void test_InvalidPodState() throws ServiceException {
         String invalidPod = "NAME\tREADY\tSTATUS\tRESTARTS\tAGE\nhellofromdocker-54777df9f8-qpzqr\t1/1\tInit\t0\t9h";
-        mockedClient.when(() -> HelmClient.executeCommand(any()))
-            .thenReturn(invalidPod);
-        var podStatusValidator = new PodStatusValidator(charts.get(1), TIMEOUT, STATUS_CHECK_INTERVAL);
+        doReturn(invalidPod).when(client).executeCommand(any());
         assertThatThrownBy(() -> podStatusValidator.run())
             .isInstanceOf(ServiceException.class).hasMessage("Error verifying the status of the pod. Exiting");
         assertThat(AutomationCompositionElementHandler.getPodStatusMap()).isEmpty();
@@ -98,12 +99,10 @@
 
     // Use case scenario: Hard coded pod name
     @Test
-    void test_RunningPodStateWhitPodName() {
+    void test_RunningPodStateWithPodName() throws ServiceException {
         String runningPod = "NAME\tREADY\tSTATUS\tRESTARTS\tAGE\r\nhelloallworld-54777df9f8-qpzqr\t1/1\tRunning\t0\t9h";
-        mockedClient.when(() -> HelmClient.executeCommand(any()))
-            .thenReturn(runningPod);
-        var podStatusValidator = new PodStatusValidator(charts.get(2), TIMEOUT, STATUS_CHECK_INTERVAL);
-        assertDoesNotThrow(() -> podStatusValidator.run());
+        doReturn(runningPod).when(client).executeCommand(any());
+        assertDoesNotThrow(() -> podValidatorWithPodName.run());
         assertThat(AutomationCompositionElementHandler.getPodStatusMap()).hasSize(1);
         assertThat(AutomationCompositionElementHandler.getPodStatusMap()).containsKey(charts.get(2).getReleaseName());
         assertThat(AutomationCompositionElementHandler.getPodStatusMap())
diff --git a/pom.xml b/pom.xml
index 1d0b75a..f018d02 100644
--- a/pom.xml
+++ b/pom.xml
@@ -48,7 +48,7 @@
             o policy-clamp-participant-impl-policy: A standard participant for handling polcies for Policy Framework
             o policy-clamp-acm-element-impl: ACM element implementation for integration testing
             o policy-clamp-participant-impl-http: A standard participant for http configurations
-            o policy-clamp-participant-impl-a1: A standard participant for accessing A1-Policy Management Service
+            o policy-clamp-participant-impl-a1pms: A standard participant for accessing A1-Policy Management Service
     </description>
 
     <properties>
diff --git a/runtime-acm/src/main/java/org/onap/policy/clamp/acm/runtime/instantiation/AutomationCompositionInstantiationProvider.java b/runtime-acm/src/main/java/org/onap/policy/clamp/acm/runtime/instantiation/AutomationCompositionInstantiationProvider.java
index 29b337e..03a2f4e 100644
--- a/runtime-acm/src/main/java/org/onap/policy/clamp/acm/runtime/instantiation/AutomationCompositionInstantiationProvider.java
+++ b/runtime-acm/src/main/java/org/onap/policy/clamp/acm/runtime/instantiation/AutomationCompositionInstantiationProvider.java
@@ -43,6 +43,7 @@
 import org.onap.policy.common.parameters.ObjectValidationResult;
 import org.onap.policy.common.parameters.ValidationStatus;
 import org.onap.policy.models.base.PfModelRuntimeException;
+import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifier;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -80,9 +81,10 @@
         if (!validationResult.isValid()) {
             throw new PfModelRuntimeException(Response.Status.BAD_REQUEST, validationResult.getResult());
         }
-        automationComposition = automationCompositionProvider.saveAutomationComposition(automationComposition);
+        automationComposition = automationCompositionProvider.createAutomationComposition(automationComposition);
 
         var response = new InstantiationResponse();
+        response.setInstanceId(automationComposition.getInstanceId());
         response.setAffectedAutomationComposition(automationComposition.getKey().asIdentifier());
 
         return response;
@@ -99,9 +101,10 @@
         if (!validationResult.isValid()) {
             throw new PfModelRuntimeException(Response.Status.BAD_REQUEST, validationResult.getResult());
         }
-        automationCompositionProvider.saveAutomationComposition(automationComposition);
+        automationCompositionProvider.updateAutomationComposition(automationComposition);
 
         var response = new InstantiationResponse();
+        response.setInstanceId(automationComposition.getInstanceId());
         response.setAffectedAutomationComposition(automationComposition.getKey().asIdentifier());
 
         return response;
@@ -134,7 +137,8 @@
      * @return the result of the deletion
      */
     public InstantiationResponse deleteAutomationComposition(String name, String version) {
-        var automationCompositionOpt = automationCompositionProvider.findAutomationComposition(name, version);
+        var automationCompositionOpt =
+                automationCompositionProvider.findAutomationComposition(new ToscaConceptIdentifier(name, version));
         if (automationCompositionOpt.isEmpty()) {
             throw new PfModelRuntimeException(Response.Status.NOT_FOUND, "Automation composition not found");
         }
@@ -144,8 +148,10 @@
                     "Automation composition state is still " + automationComposition.getState());
         }
         var response = new InstantiationResponse();
-        response.setAffectedAutomationComposition(
-                automationCompositionProvider.deleteAutomationComposition(name, version).getKey().asIdentifier());
+        automationComposition =
+                automationCompositionProvider.deleteAutomationComposition(automationComposition.getInstanceId());
+        response.setInstanceId(automationComposition.getInstanceId());
+        response.setAffectedAutomationComposition(automationComposition.getKey().asIdentifier());
         return response;
     }
 
@@ -199,7 +205,7 @@
 
         automationComposition.setCascadedOrderedState(command.getOrderedState());
         supervisionHandler.triggerAutomationCompositionSupervision(automationComposition);
-        automationCompositionProvider.saveAutomationComposition(automationComposition);
+        automationCompositionProvider.updateAutomationComposition(automationComposition);
         var response = new InstantiationResponse();
         response.setAffectedAutomationComposition(command.getAutomationCompositionIdentifier());
 
diff --git a/runtime-acm/src/main/java/org/onap/policy/clamp/acm/runtime/supervision/SupervisionHandler.java b/runtime-acm/src/main/java/org/onap/policy/clamp/acm/runtime/supervision/SupervisionHandler.java
index b5d7645..de67360 100644
--- a/runtime-acm/src/main/java/org/onap/policy/clamp/acm/runtime/supervision/SupervisionHandler.java
+++ b/runtime-acm/src/main/java/org/onap/policy/clamp/acm/runtime/supervision/SupervisionHandler.java
@@ -235,7 +235,7 @@
                         automationCompositionAckMessage.getAutomationCompositionResultMap().entrySet());
                 updated |= setPrimed(automationComposition.get());
                 if (updated) {
-                    automationCompositionProvider.saveAutomationComposition(automationComposition.get());
+                    automationCompositionProvider.updateAutomationComposition(automationComposition.get());
                 }
             } else {
                 LOGGER.warn("AutomationComposition not found in database {}",
diff --git a/runtime-acm/src/main/java/org/onap/policy/clamp/acm/runtime/supervision/SupervisionScanner.java b/runtime-acm/src/main/java/org/onap/policy/clamp/acm/runtime/supervision/SupervisionScanner.java
index e2f8b67..129569b 100644
--- a/runtime-acm/src/main/java/org/onap/policy/clamp/acm/runtime/supervision/SupervisionScanner.java
+++ b/runtime-acm/src/main/java/org/onap/policy/clamp/acm/runtime/supervision/SupervisionScanner.java
@@ -242,7 +242,7 @@
                     automationComposition.getState(), automationComposition.getOrderedState());
 
             automationComposition.setState(automationComposition.getOrderedState().asState());
-            automationCompositionProvider.saveAutomationComposition(automationComposition);
+            automationCompositionProvider.updateAutomationComposition(automationComposition);
 
             // Clear missed report counter on automation composition
             clearFaultAndCounter(automationComposition);
diff --git a/runtime-acm/src/test/java/org/onap/policy/clamp/acm/runtime/commissioning/CommissioningProviderTest.java b/runtime-acm/src/test/java/org/onap/policy/clamp/acm/runtime/commissioning/CommissioningProviderTest.java
index 85f2193..792cb4a 100644
--- a/runtime-acm/src/test/java/org/onap/policy/clamp/acm/runtime/commissioning/CommissioningProviderTest.java
+++ b/runtime-acm/src/test/java/org/onap/policy/clamp/acm/runtime/commissioning/CommissioningProviderTest.java
@@ -22,6 +22,7 @@
 package org.onap.policy.clamp.acm.runtime.commissioning;
 
 import static org.assertj.core.api.Assertions.assertThat;
+import static org.assertj.core.api.Assertions.assertThatThrownBy;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
@@ -31,11 +32,13 @@
 import java.util.UUID;
 import org.junit.jupiter.api.Test;
 import org.onap.policy.clamp.acm.runtime.instantiation.InstantiationUtils;
+import org.onap.policy.clamp.acm.runtime.supervision.SupervisionHandler;
+import org.onap.policy.clamp.models.acm.concepts.AutomationComposition;
 import org.onap.policy.clamp.models.acm.concepts.AutomationCompositionDefinition;
+import org.onap.policy.clamp.models.acm.concepts.Participant;
 import org.onap.policy.clamp.models.acm.persistence.provider.AcDefinitionProvider;
 import org.onap.policy.clamp.models.acm.persistence.provider.AutomationCompositionProvider;
 import org.onap.policy.clamp.models.acm.persistence.provider.ParticipantProvider;
-import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifier;
 import org.onap.policy.models.tosca.authorative.concepts.ToscaServiceTemplate;
 
 class CommissioningProviderTest {
@@ -46,7 +49,7 @@
      * @throws Exception .
      */
     @Test
-    void testGetAutomationCompositionDefinitions() throws Exception {
+    void testGetAutomationCompositionDefinitions() {
         var acProvider = mock(AutomationCompositionProvider.class);
         var participantProvider = mock(ParticipantProvider.class);
         var acDefinitionProvider = mock(AcDefinitionProvider.class);
@@ -68,21 +71,27 @@
      * @throws Exception .
      */
     @Test
-    void testCreateAutomationCompositionDefinitions() throws Exception {
+    void testCreateAutomationCompositionDefinitions() {
         var serviceTemplate = InstantiationUtils.getToscaServiceTemplate(TOSCA_SERVICE_TEMPLATE_YAML);
+        serviceTemplate.setName("Name");
+        serviceTemplate.setVersion("1.0.0");
         var acmDefinition = new AutomationCompositionDefinition();
         acmDefinition.setCompositionId(UUID.randomUUID());
         acmDefinition.setServiceTemplate(serviceTemplate);
         var acDefinitionProvider = mock(AcDefinitionProvider.class);
         when(acDefinitionProvider.createAutomationCompositionDefinition(serviceTemplate)).thenReturn(acmDefinition);
 
-        // Response should return the number of node templates present in the service template
-        var acProvider = mock(AutomationCompositionProvider.class);
         var participantProvider = mock(ParticipantProvider.class);
-        var provider = new CommissioningProvider(acDefinitionProvider, acProvider, null, participantProvider);
-        List<ToscaConceptIdentifier> affectedDefinitions = provider
+        when(participantProvider.getParticipants()).thenReturn(List.of(new Participant()));
+        var acProvider = mock(AutomationCompositionProvider.class);
+        var supervisionHandler = mock(SupervisionHandler.class);
+        var provider =
+                new CommissioningProvider(acDefinitionProvider, acProvider, supervisionHandler, participantProvider);
+        var affectedDefinitions = provider
                 .createAutomationCompositionDefinitions(serviceTemplate).getAffectedAutomationCompositionDefinitions();
         verify(acDefinitionProvider).createAutomationCompositionDefinition(serviceTemplate);
+        verify(supervisionHandler).handleSendCommissionMessage(serviceTemplate.getName(), serviceTemplate.getVersion());
+        // Response should return the number of node templates present in the service template
         assertThat(affectedDefinitions).hasSize(7);
     }
 
@@ -92,18 +101,54 @@
      *
      */
     @Test
-    void testGetToscaServiceTemplateList() throws Exception {
+    void testGetToscaServiceTemplateList() {
         var acDefinitionProvider = mock(AcDefinitionProvider.class);
         var acProvider = mock(AutomationCompositionProvider.class);
         var participantProvider = mock(ParticipantProvider.class);
 
         var provider =
                 new CommissioningProvider(acDefinitionProvider, acProvider, null, participantProvider);
-        ToscaServiceTemplate serviceTemplate = InstantiationUtils.getToscaServiceTemplate(TOSCA_SERVICE_TEMPLATE_YAML);
+        var serviceTemplate = InstantiationUtils.getToscaServiceTemplate(TOSCA_SERVICE_TEMPLATE_YAML);
         when(acDefinitionProvider.getServiceTemplateList(null, null)).thenReturn(List.of(serviceTemplate));
 
         var returnedServiceTemplate = provider.getAutomationCompositionDefinitions(null, null);
         assertThat(returnedServiceTemplate).isNotNull();
         assertThat(returnedServiceTemplate.getServiceTemplates()).isNotEmpty();
     }
+
+    @Test
+    void testDeletecDefinitionDabRequest() {
+        var acDefinitionProvider = mock(AcDefinitionProvider.class);
+        var acProvider = mock(AutomationCompositionProvider.class);
+        var participantProvider = mock(ParticipantProvider.class);
+
+        var compositionId = UUID.randomUUID();
+        when(acProvider.getAcInstancesByCompositionId(compositionId)).thenReturn(List.of(new AutomationComposition()));
+
+        var provider = new CommissioningProvider(acDefinitionProvider, acProvider, null, participantProvider);
+
+        assertThatThrownBy(() -> provider.deleteAutomationCompositionDefinition(compositionId))
+                .hasMessageMatching("Delete instances, to commission automation composition definitions");
+    }
+
+    @Test
+    void testDeleteAutomationCompositionDefinition() {
+        var participantProvider = mock(ParticipantProvider.class);
+        when(participantProvider.getParticipants()).thenReturn(List.of(new Participant()));
+
+        var acDefinitionProvider = mock(AcDefinitionProvider.class);
+        var compositionId = UUID.randomUUID();
+        var serviceTemplate = InstantiationUtils.getToscaServiceTemplate(TOSCA_SERVICE_TEMPLATE_YAML);
+        when(acDefinitionProvider.deleteAcDefintion(compositionId)).thenReturn(serviceTemplate);
+
+        var acProvider = mock(AutomationCompositionProvider.class);
+        var supervisionHandler = mock(SupervisionHandler.class);
+        var provider =
+                new CommissioningProvider(acDefinitionProvider, acProvider, supervisionHandler, participantProvider);
+
+        provider.deleteAutomationCompositionDefinition(compositionId);
+
+        verify(supervisionHandler).handleSendDeCommissionMessage();
+        verify(acDefinitionProvider).deleteAcDefintion(compositionId);
+    }
 }
diff --git a/runtime-acm/src/test/java/org/onap/policy/clamp/acm/runtime/instantiation/AutomationCompositionInstantiationProviderTest.java b/runtime-acm/src/test/java/org/onap/policy/clamp/acm/runtime/instantiation/AutomationCompositionInstantiationProviderTest.java
index 8641798..115adcb 100644
--- a/runtime-acm/src/test/java/org/onap/policy/clamp/acm/runtime/instantiation/AutomationCompositionInstantiationProviderTest.java
+++ b/runtime-acm/src/test/java/org/onap/policy/clamp/acm/runtime/instantiation/AutomationCompositionInstantiationProviderTest.java
@@ -45,6 +45,7 @@
 import org.onap.policy.clamp.models.acm.persistence.provider.AutomationCompositionProvider;
 import org.onap.policy.clamp.models.acm.persistence.provider.ParticipantProvider;
 import org.onap.policy.clamp.models.acm.persistence.provider.ProviderUtils;
+import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifier;
 import org.onap.policy.models.tosca.authorative.concepts.ToscaServiceTemplate;
 import org.onap.policy.models.tosca.simple.concepts.JpaToscaServiceTemplate;
 
@@ -66,14 +67,13 @@
     private static final String ORDERED_STATE_INVALID = "ordered state invalid or not specified on command";
     private static final String AC_ELEMENT_NAME_NOT_FOUND =
             "\"AutomationComposition\" INVALID, item has status INVALID\n"
-            + "  \"entry PMSHInstance0AcElementNotFound\" INVALID, item has status INVALID\n"
-            + "    \"entry org.onap.domain.pmsh.DCAEMicroservice\" INVALID, Not found\n"
-            + "    \"entry org.onap.domain.pmsh.PMSH_MonitoringPolicyAutomationCompositionElement\""
-            + " INVALID, Not found\n";
-    private static final String AC_DEFINITION_NOT_FOUND =
-            "\"AutomationComposition\" INVALID, item has status INVALID\n"
-                    + "  item \"ServiceTemplate\" value \"\" INVALID,"
-                    + " Commissioned automation composition definition not found\n";
+                    + "  \"entry PMSHInstance0AcElementNotFound\" INVALID, item has status INVALID\n"
+                    + "    \"entry org.onap.domain.pmsh.DCAEMicroservice\" INVALID, Not found\n"
+                    + "    \"entry org.onap.domain.pmsh.PMSH_MonitoringPolicyAutomationCompositionElement\""
+                    + " INVALID, Not found\n";
+    private static final String AC_DEFINITION_NOT_FOUND = "\"AutomationComposition\" INVALID, item has status INVALID\n"
+            + "  item \"ServiceTemplate\" value \"\" INVALID,"
+            + " Commissioned automation composition definition not found\n";
 
     private static ToscaServiceTemplate serviceTemplate = new ToscaServiceTemplate();
 
@@ -101,12 +101,13 @@
         var automationCompositionCreate =
                 InstantiationUtils.getAutomationCompositionFromResource(AC_INSTANTIATION_CREATE_JSON, "Crud");
         automationCompositionCreate.setCompositionId(compositionId);
-        when(acProvider.saveAutomationComposition(automationCompositionCreate)).thenReturn(automationCompositionCreate);
+        when(acProvider.createAutomationComposition(automationCompositionCreate))
+                .thenReturn(automationCompositionCreate);
 
         var instantiationResponse = instantiationProvider.createAutomationComposition(automationCompositionCreate);
         InstantiationUtils.assertInstantiationResponse(instantiationResponse, automationCompositionCreate);
 
-        verify(acProvider).saveAutomationComposition(automationCompositionCreate);
+        verify(acProvider).createAutomationComposition(automationCompositionCreate);
 
         when(acProvider.getAutomationCompositions(automationCompositionCreate.getName(),
                 automationCompositionCreate.getVersion())).thenReturn(List.of(automationCompositionCreate));
@@ -123,14 +124,12 @@
         instantiationResponse = instantiationProvider.updateAutomationComposition(automationCompositionUpdate);
         InstantiationUtils.assertInstantiationResponse(instantiationResponse, automationCompositionUpdate);
 
-        verify(acProvider).saveAutomationComposition(automationCompositionUpdate);
+        verify(acProvider).updateAutomationComposition(automationCompositionUpdate);
 
         when(acProvider.findAutomationComposition(automationCompositionUpdate.getKey().asIdentifier()))
                 .thenReturn(Optional.of(automationCompositionUpdate));
-        when(acProvider.findAutomationComposition(automationCompositionUpdate.getName(),
-                automationCompositionUpdate.getVersion())).thenReturn(Optional.of(automationCompositionUpdate));
-        when(acProvider.deleteAutomationComposition(automationCompositionUpdate.getName(),
-                automationCompositionUpdate.getVersion())).thenReturn(automationCompositionUpdate);
+        when(acProvider.deleteAutomationComposition(automationCompositionUpdate.getInstanceId()))
+                .thenReturn(automationCompositionUpdate);
 
         var instantiationCommand =
                 InstantiationUtils.getInstantiationCommandFromResource(AC_INSTANTIATION_CHANGE_STATE_JSON, "Crud");
@@ -146,8 +145,7 @@
         instantiationProvider.deleteAutomationComposition(automationCompositionCreate.getName(),
                 automationCompositionCreate.getVersion());
 
-        verify(acProvider).deleteAutomationComposition(automationCompositionCreate.getName(),
-                automationCompositionCreate.getVersion());
+        verify(acProvider).deleteAutomationComposition(automationCompositionCreate.getInstanceId());
     }
 
     @Test
@@ -172,11 +170,13 @@
             }
         }
         automationComposition.setState(AutomationCompositionState.UNINITIALISED);
+        automationComposition.setInstanceId(UUID.randomUUID());
 
-        when(acProvider.findAutomationComposition(automationComposition.getName(), automationComposition.getVersion()))
-                .thenReturn(Optional.of(automationComposition));
-        when(acProvider.deleteAutomationComposition(automationComposition.getName(),
-                automationComposition.getVersion())).thenReturn(automationComposition);
+        when(acProvider.findAutomationComposition(
+                new ToscaConceptIdentifier(automationComposition.getName(), automationComposition.getVersion())))
+                        .thenReturn(Optional.of(automationComposition));
+        when(acProvider.deleteAutomationComposition(automationComposition.getInstanceId()))
+                .thenReturn(automationComposition);
 
         instantiationProvider.deleteAutomationComposition(automationComposition.getName(),
                 automationComposition.getVersion());
@@ -193,8 +193,8 @@
         var instantiationProvider = new AutomationCompositionInstantiationProvider(acProvider, supervisionHandler,
                 participantProvider, acDefinitionProvider);
 
-        when(acProvider.findAutomationComposition(automationComposition.getName(), automationComposition.getVersion()))
-                .thenReturn(Optional.of(automationComposition));
+        var key = new ToscaConceptIdentifier(automationComposition.getName(), automationComposition.getVersion());
+        when(acProvider.findAutomationComposition(key)).thenReturn(Optional.of(automationComposition));
 
         assertThatThrownBy(() -> instantiationProvider.deleteAutomationComposition(automationComposition.getName(),
                 automationComposition.getVersion())).hasMessageMatching(String.format(DELETE_BAD_REQUEST, state));
@@ -209,9 +209,11 @@
         var automationCompositionCreate =
                 InstantiationUtils.getAutomationCompositionFromResource(AC_INSTANTIATION_CREATE_JSON, "NoDuplicates");
         automationCompositionCreate.setCompositionId(compositionId);
+        automationCompositionCreate.setInstanceId(UUID.randomUUID());
 
         var acProvider = mock(AutomationCompositionProvider.class);
-        when(acProvider.saveAutomationComposition(automationCompositionCreate)).thenReturn(automationCompositionCreate);
+        when(acProvider.createAutomationComposition(automationCompositionCreate))
+                .thenReturn(automationCompositionCreate);
 
         var participantProvider = Mockito.mock(ParticipantProvider.class);
         var supervisionHandler = mock(SupervisionHandler.class);
diff --git a/runtime-acm/src/test/java/org/onap/policy/clamp/acm/runtime/instantiation/rest/InstantiationControllerTest.java b/runtime-acm/src/test/java/org/onap/policy/clamp/acm/runtime/instantiation/rest/InstantiationControllerTest.java
index dd6e8f3..9c364b2 100644
--- a/runtime-acm/src/test/java/org/onap/policy/clamp/acm/runtime/instantiation/rest/InstantiationControllerTest.java
+++ b/runtime-acm/src/test/java/org/onap/policy/clamp/acm/runtime/instantiation/rest/InstantiationControllerTest.java
@@ -166,6 +166,7 @@
         assertEquals(Response.Status.OK.getStatusCode(), resp.getStatus());
         var instResponse = resp.readEntity(InstantiationResponse.class);
         InstantiationUtils.assertInstantiationResponse(instResponse, automationCompositionFromRsc);
+        automationCompositionFromRsc.setInstanceId(instResponse.getInstanceId());
 
         var automationCompositionsFromDb = instantiationProvider.getAutomationCompositions(
                 automationCompositionFromRsc.getKey().getName(), automationCompositionFromRsc.getKey().getVersion());
@@ -227,12 +228,13 @@
                 InstantiationUtils.getAutomationCompositionFromResource(AC_INSTANTIATION_CREATE_JSON, "Update");
         automationCompositionCreate.setCompositionId(compositionId);
 
-        instantiationProvider.createAutomationComposition(automationCompositionCreate);
+        var response = instantiationProvider.createAutomationComposition(automationCompositionCreate);
 
         var invocationBuilder = super.sendRequest(INSTANTIATION_ENDPOINT);
         var automationComposition =
                 InstantiationUtils.getAutomationCompositionFromResource(AC_INSTANTIATION_UPDATE_JSON, "Update");
         automationComposition.setCompositionId(compositionId);
+        automationComposition.setInstanceId(response.getInstanceId());
         var resp = invocationBuilder.put(Entity.json(automationComposition));
         assertEquals(Response.Status.OK.getStatusCode(), resp.getStatus());
 
diff --git a/runtime-acm/src/test/java/org/onap/policy/clamp/acm/runtime/supervision/SupervisionHandlerTest.java b/runtime-acm/src/test/java/org/onap/policy/clamp/acm/runtime/supervision/SupervisionHandlerTest.java
index e01f76b..3a707cd 100644
--- a/runtime-acm/src/test/java/org/onap/policy/clamp/acm/runtime/supervision/SupervisionHandlerTest.java
+++ b/runtime-acm/src/test/java/org/onap/policy/clamp/acm/runtime/supervision/SupervisionHandlerTest.java
@@ -131,6 +131,50 @@
     }
 
     @Test
+    void testAcTransitioning() {
+        var handler = createSupervisionHandlerForTrigger();
+        var automationComposition =
+                InstantiationUtils.getAutomationCompositionFromResource(AC_INSTANTIATION_CREATE_JSON, "Crud");
+        automationComposition.setOrderedState(AutomationCompositionOrderedState.UNINITIALISED);
+        automationComposition.setState(AutomationCompositionState.PASSIVE2UNINITIALISED);
+
+        assertThatThrownBy(() -> handler.triggerAutomationCompositionSupervision(automationComposition))
+                .hasMessageMatching("Automation composition is already in state "
+                        + "PASSIVE2UNINITIALISED and transitioning to state UNINITIALISED");
+
+        automationComposition.setOrderedState(AutomationCompositionOrderedState.PASSIVE);
+        automationComposition.setState(AutomationCompositionState.UNINITIALISED2PASSIVE);
+        assertThatThrownBy(() -> handler.triggerAutomationCompositionSupervision(automationComposition))
+                .hasMessageMatching("Automation composition is already in state "
+                        + "UNINITIALISED2PASSIVE and transitioning to state PASSIVE");
+
+        automationComposition.setOrderedState(AutomationCompositionOrderedState.RUNNING);
+        automationComposition.setState(AutomationCompositionState.PASSIVE2RUNNING);
+        assertThatThrownBy(() -> handler.triggerAutomationCompositionSupervision(automationComposition))
+                .hasMessageMatching("Automation composition is already in state "
+                        + "PASSIVE2RUNNING and transitioning to state RUNNING");
+    }
+
+    @Test
+    void testAcRunningToPassive() throws AutomationCompositionException {
+        var automationCompositionStateChangePublisher = mock(AutomationCompositionStateChangePublisher.class);
+        var handler = createSupervisionHandler(mock(AutomationCompositionProvider.class),
+                mock(ParticipantProvider.class), mock(ParticipantRegisterAckPublisher.class),
+                mock(ParticipantDeregisterAckPublisher.class), mock(AutomationCompositionUpdatePublisher.class),
+                automationCompositionStateChangePublisher, mock(ParticipantUpdatePublisher.class),
+                AutomationCompositionOrderedState.PASSIVE, AutomationCompositionState.UNINITIALISED);
+
+        var automationComposition =
+                InstantiationUtils.getAutomationCompositionFromResource(AC_INSTANTIATION_CREATE_JSON, "Crud");
+        automationComposition.setOrderedState(AutomationCompositionOrderedState.PASSIVE);
+        automationComposition.setState(AutomationCompositionState.RUNNING);
+
+        handler.triggerAutomationCompositionSupervision(automationComposition);
+
+        verify(automationCompositionStateChangePublisher).send(any(AutomationComposition.class), eq(1));
+    }
+
+    @Test
     void testAcRunningToRunning() {
         var handler = createSupervisionHandlerForTrigger();
 
@@ -158,12 +202,32 @@
     }
 
     @Test
+    void testAcPassiveToRunning() throws AutomationCompositionException {
+        var automationCompositionStateChangePublisher = mock(AutomationCompositionStateChangePublisher.class);
+        var handler = createSupervisionHandler(mock(AutomationCompositionProvider.class),
+                mock(ParticipantProvider.class), mock(ParticipantRegisterAckPublisher.class),
+                mock(ParticipantDeregisterAckPublisher.class), mock(AutomationCompositionUpdatePublisher.class),
+                automationCompositionStateChangePublisher, mock(ParticipantUpdatePublisher.class),
+                AutomationCompositionOrderedState.PASSIVE, AutomationCompositionState.UNINITIALISED);
+
+        var automationComposition =
+                InstantiationUtils.getAutomationCompositionFromResource(AC_INSTANTIATION_CREATE_JSON, "Crud");
+        automationComposition.setOrderedState(AutomationCompositionOrderedState.RUNNING);
+        automationComposition.setState(AutomationCompositionState.PASSIVE);
+
+        handler.triggerAutomationCompositionSupervision(automationComposition);
+
+        verify(automationCompositionStateChangePublisher).send(any(AutomationComposition.class), eq(0));
+    }
+
+    @Test
     void testHandleAutomationCompositionStateChangeAckMessage() {
         var automationCompositionProvider = mock(AutomationCompositionProvider.class);
         var handler = createSupervisionHandler(automationCompositionProvider, mock(ParticipantProvider.class),
                 mock(ParticipantRegisterAckPublisher.class), mock(ParticipantDeregisterAckPublisher.class),
-                mock(AutomationCompositionUpdatePublisher.class), mock(ParticipantUpdatePublisher.class),
-                AutomationCompositionOrderedState.PASSIVE, AutomationCompositionState.UNINITIALISED);
+                mock(AutomationCompositionUpdatePublisher.class), mock(AutomationCompositionStateChangePublisher.class),
+                mock(ParticipantUpdatePublisher.class), AutomationCompositionOrderedState.PASSIVE,
+                AutomationCompositionState.UNINITIALISED);
         var automationCompositionAckMessage =
                 new AutomationCompositionAck(ParticipantMessageType.AUTOMATION_COMPOSITION_STATECHANGE_ACK);
         automationCompositionAckMessage.setAutomationCompositionResultMap(Map.of());
@@ -171,7 +235,7 @@
 
         handler.handleAutomationCompositionStateChangeAckMessage(automationCompositionAckMessage);
 
-        verify(automationCompositionProvider).saveAutomationComposition(any(AutomationComposition.class));
+        verify(automationCompositionProvider).updateAutomationComposition(any(AutomationComposition.class));
     }
 
     @Test
@@ -185,12 +249,13 @@
         var automationCompositionProvider = mock(AutomationCompositionProvider.class);
         var handler = createSupervisionHandler(automationCompositionProvider, mock(ParticipantProvider.class),
                 mock(ParticipantRegisterAckPublisher.class), mock(ParticipantDeregisterAckPublisher.class),
-                mock(AutomationCompositionUpdatePublisher.class), mock(ParticipantUpdatePublisher.class),
-                AutomationCompositionOrderedState.PASSIVE, AutomationCompositionState.UNINITIALISED);
+                mock(AutomationCompositionUpdatePublisher.class), mock(AutomationCompositionStateChangePublisher.class),
+                mock(ParticipantUpdatePublisher.class), AutomationCompositionOrderedState.PASSIVE,
+                AutomationCompositionState.UNINITIALISED);
 
         handler.handleAutomationCompositionUpdateAckMessage(automationCompositionAckMessage);
 
-        verify(automationCompositionProvider).saveAutomationComposition(any(AutomationComposition.class));
+        verify(automationCompositionProvider).updateAutomationComposition(any(AutomationComposition.class));
     }
 
     @Test
@@ -211,8 +276,9 @@
         var participantDeregisterAckPublisher = mock(ParticipantDeregisterAckPublisher.class);
         var handler = createSupervisionHandler(mock(AutomationCompositionProvider.class), participantProvider,
                 mock(ParticipantRegisterAckPublisher.class), participantDeregisterAckPublisher,
-                mock(AutomationCompositionUpdatePublisher.class), mock(ParticipantUpdatePublisher.class),
-                AutomationCompositionOrderedState.PASSIVE, AutomationCompositionState.UNINITIALISED);
+                mock(AutomationCompositionUpdatePublisher.class), mock(AutomationCompositionStateChangePublisher.class),
+                mock(ParticipantUpdatePublisher.class), AutomationCompositionOrderedState.PASSIVE,
+                AutomationCompositionState.UNINITIALISED);
 
         handler.handleParticipantMessage(participantDeregisterMessage);
 
@@ -235,8 +301,9 @@
         var participantRegisterAckPublisher = mock(ParticipantRegisterAckPublisher.class);
         var handler = createSupervisionHandler(mock(AutomationCompositionProvider.class), participantProvider,
                 participantRegisterAckPublisher, mock(ParticipantDeregisterAckPublisher.class),
-                mock(AutomationCompositionUpdatePublisher.class), mock(ParticipantUpdatePublisher.class),
-                AutomationCompositionOrderedState.PASSIVE, AutomationCompositionState.UNINITIALISED);
+                mock(AutomationCompositionUpdatePublisher.class), mock(AutomationCompositionStateChangePublisher.class),
+                mock(ParticipantUpdatePublisher.class), AutomationCompositionOrderedState.PASSIVE,
+                AutomationCompositionState.UNINITIALISED);
 
         handler.handleParticipantMessage(participantRegisterMessage);
 
@@ -262,8 +329,9 @@
         participantUpdateAckMessage.setState(ParticipantState.PASSIVE);
         var handler = createSupervisionHandler(mock(AutomationCompositionProvider.class), participantProvider,
                 mock(ParticipantRegisterAckPublisher.class), mock(ParticipantDeregisterAckPublisher.class),
-                mock(AutomationCompositionUpdatePublisher.class), mock(ParticipantUpdatePublisher.class),
-                AutomationCompositionOrderedState.PASSIVE, AutomationCompositionState.UNINITIALISED);
+                mock(AutomationCompositionUpdatePublisher.class), mock(AutomationCompositionStateChangePublisher.class),
+                mock(ParticipantUpdatePublisher.class), AutomationCompositionOrderedState.PASSIVE,
+                AutomationCompositionState.UNINITIALISED);
 
         handler.handleParticipantMessage(participantUpdateAckMessage);
 
@@ -281,8 +349,9 @@
         var participantProvider = mock(ParticipantProvider.class);
         var handler = createSupervisionHandler(mock(AutomationCompositionProvider.class), participantProvider,
                 mock(ParticipantRegisterAckPublisher.class), mock(ParticipantDeregisterAckPublisher.class),
-                mock(AutomationCompositionUpdatePublisher.class), mock(ParticipantUpdatePublisher.class),
-                AutomationCompositionOrderedState.PASSIVE, AutomationCompositionState.UNINITIALISED);
+                mock(AutomationCompositionUpdatePublisher.class), mock(AutomationCompositionStateChangePublisher.class),
+                mock(ParticipantUpdatePublisher.class), AutomationCompositionOrderedState.PASSIVE,
+                AutomationCompositionState.UNINITIALISED);
         handler.handleParticipantMessage(participantStatusMessage);
 
         verify(participantProvider).saveParticipant(any());
@@ -291,11 +360,11 @@
     @Test
     void testHandleSendCommissionMessage() throws PfModelException {
         var participantUpdatePublisher = mock(ParticipantUpdatePublisher.class);
-        var handler =
-                createSupervisionHandler(mock(AutomationCompositionProvider.class), mock(ParticipantProvider.class),
-                        mock(ParticipantRegisterAckPublisher.class), mock(ParticipantDeregisterAckPublisher.class),
-                        mock(AutomationCompositionUpdatePublisher.class), participantUpdatePublisher,
-                        AutomationCompositionOrderedState.PASSIVE, AutomationCompositionState.UNINITIALISED);
+        var handler = createSupervisionHandler(mock(AutomationCompositionProvider.class),
+                mock(ParticipantProvider.class), mock(ParticipantRegisterAckPublisher.class),
+                mock(ParticipantDeregisterAckPublisher.class), mock(AutomationCompositionUpdatePublisher.class),
+                mock(AutomationCompositionStateChangePublisher.class), participantUpdatePublisher,
+                AutomationCompositionOrderedState.PASSIVE, AutomationCompositionState.UNINITIALISED);
         handler.handleSendCommissionMessage(participantId.getName(), participantId.getVersion());
 
         verify(participantUpdatePublisher).sendComissioningBroadcast(participantId.getName(),
@@ -305,11 +374,11 @@
     @Test
     void testHandleSendDeCommissionMessage() throws PfModelException {
         var participantUpdatePublisher = mock(ParticipantUpdatePublisher.class);
-        var handler =
-                createSupervisionHandler(mock(AutomationCompositionProvider.class), mock(ParticipantProvider.class),
-                        mock(ParticipantRegisterAckPublisher.class), mock(ParticipantDeregisterAckPublisher.class),
-                        mock(AutomationCompositionUpdatePublisher.class), participantUpdatePublisher,
-                        AutomationCompositionOrderedState.PASSIVE, AutomationCompositionState.UNINITIALISED);
+        var handler = createSupervisionHandler(mock(AutomationCompositionProvider.class),
+                mock(ParticipantProvider.class), mock(ParticipantRegisterAckPublisher.class),
+                mock(ParticipantDeregisterAckPublisher.class), mock(AutomationCompositionUpdatePublisher.class),
+                mock(AutomationCompositionStateChangePublisher.class), participantUpdatePublisher,
+                AutomationCompositionOrderedState.PASSIVE, AutomationCompositionState.UNINITIALISED);
         handler.handleSendDeCommissionMessage();
 
         verify(participantUpdatePublisher).sendDecomisioning();
@@ -319,6 +388,7 @@
             ParticipantProvider participantProvider, ParticipantRegisterAckPublisher participantRegisterAckPublisher,
             ParticipantDeregisterAckPublisher participantDeregisterAckPublisher,
             AutomationCompositionUpdatePublisher automationCompositionUpdatePublisher,
+            AutomationCompositionStateChangePublisher automationCompositionStateChangePublisher,
             ParticipantUpdatePublisher participantUpdatePublisher, AutomationCompositionOrderedState orderedState,
             AutomationCompositionState state) {
         var automationComposition =
@@ -327,18 +397,17 @@
         automationComposition.setOrderedState(orderedState);
         automationComposition.setState(state);
         when(automationCompositionProvider.findAutomationComposition(identifier))
-            .thenReturn(Optional.of(automationComposition));
+                .thenReturn(Optional.of(automationComposition));
 
         var acDefinitionProvider = Mockito.mock(AcDefinitionProvider.class);
         when(acDefinitionProvider.getServiceTemplateList(any(), any())).thenReturn(List
                 .of(Objects.requireNonNull(InstantiationUtils.getToscaServiceTemplate(TOSCA_SERVICE_TEMPLATE_YAML))));
-
-        var automationCompositionStateChangePublisher = mock(AutomationCompositionStateChangePublisher.class);
+        when(acDefinitionProvider.getAcDefinition(automationComposition.getCompositionId()))
+                .thenReturn(InstantiationUtils.getToscaServiceTemplate(TOSCA_SERVICE_TEMPLATE_YAML));
 
         return new SupervisionHandler(automationCompositionProvider, participantProvider, acDefinitionProvider,
                 automationCompositionUpdatePublisher, automationCompositionStateChangePublisher,
                 participantRegisterAckPublisher, participantDeregisterAckPublisher, participantUpdatePublisher);
-
     }
 
     private SupervisionHandler createSupervisionHandlerForTrigger() {
@@ -346,7 +415,6 @@
                 mock(AcDefinitionProvider.class), mock(AutomationCompositionUpdatePublisher.class),
                 mock(AutomationCompositionStateChangePublisher.class), mock(ParticipantRegisterAckPublisher.class),
                 mock(ParticipantDeregisterAckPublisher.class), mock(ParticipantUpdatePublisher.class));
-
     }
 
     private SupervisionHandler createSupervisionHandlerForTrigger(
diff --git a/runtime-acm/src/test/java/org/onap/policy/clamp/acm/runtime/supervision/SupervisionScannerTest.java b/runtime-acm/src/test/java/org/onap/policy/clamp/acm/runtime/supervision/SupervisionScannerTest.java
index 03a0ec5..1455e92 100644
--- a/runtime-acm/src/test/java/org/onap/policy/clamp/acm/runtime/supervision/SupervisionScannerTest.java
+++ b/runtime-acm/src/test/java/org/onap/policy/clamp/acm/runtime/supervision/SupervisionScannerTest.java
@@ -96,7 +96,7 @@
                 participantStatusReqPublisher, participantUpdatePublisher, acRuntimeParameterGroup);
         supervisionScanner.run(false);
 
-        verify(automationCompositionProvider, times(0)).saveAutomationComposition(any(AutomationComposition.class));
+        verify(automationCompositionProvider, times(0)).updateAutomationComposition(any(AutomationComposition.class));
     }
 
     @Test
@@ -120,7 +120,7 @@
                 participantStatusReqPublisher, participantUpdatePublisher, acRuntimeParameterGroup);
         supervisionScanner.run(false);
 
-        verify(automationCompositionProvider, times(1)).saveAutomationComposition(any(AutomationComposition.class));
+        verify(automationCompositionProvider, times(1)).updateAutomationComposition(any(AutomationComposition.class));
     }
 
     @Test
@@ -148,7 +148,7 @@
 
         supervisionScanner.handleParticipantStatus(participant.getKey().asIdentifier());
         supervisionScanner.run(true);
-        verify(automationCompositionProvider, times(0)).saveAutomationComposition(any(AutomationComposition.class));
+        verify(automationCompositionProvider, times(0)).updateAutomationComposition(any(AutomationComposition.class));
         verify(participantStatusReqPublisher, times(0)).send(any(ToscaConceptIdentifier.class));
     }
 
diff --git a/runtime-acm/src/test/java/org/onap/policy/clamp/acm/runtime/supervision/comm/SupervisionMessagesTest.java b/runtime-acm/src/test/java/org/onap/policy/clamp/acm/runtime/supervision/comm/SupervisionMessagesTest.java
index 11a0600..2cfe7eb 100644
--- a/runtime-acm/src/test/java/org/onap/policy/clamp/acm/runtime/supervision/comm/SupervisionMessagesTest.java
+++ b/runtime-acm/src/test/java/org/onap/policy/clamp/acm/runtime/supervision/comm/SupervisionMessagesTest.java
@@ -21,123 +21,87 @@
 
 package org.onap.policy.clamp.acm.runtime.supervision.comm;
 
-import static org.assertj.core.api.Assertions.assertThatCode;
 import static org.assertj.core.api.Assertions.assertThatThrownBy;
 import static org.mockito.ArgumentMatchers.anyString;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.times;
 import static org.mockito.Mockito.verify;
 
-import java.time.Instant;
 import java.util.Collections;
 import java.util.List;
 import java.util.UUID;
-import org.junit.jupiter.api.BeforeAll;
 import org.junit.jupiter.api.Test;
-import org.mockito.Mockito;
 import org.onap.policy.clamp.acm.runtime.supervision.SupervisionHandler;
-import org.onap.policy.clamp.acm.runtime.util.rest.CommonRestController;
 import org.onap.policy.clamp.models.acm.concepts.AutomationComposition;
 import org.onap.policy.clamp.models.acm.concepts.AutomationCompositionState;
+import org.onap.policy.clamp.models.acm.messages.dmaap.participant.AutomationCompositionAck;
 import org.onap.policy.clamp.models.acm.messages.dmaap.participant.ParticipantDeregister;
 import org.onap.policy.clamp.models.acm.messages.dmaap.participant.ParticipantDeregisterAck;
+import org.onap.policy.clamp.models.acm.messages.dmaap.participant.ParticipantMessageType;
+import org.onap.policy.clamp.models.acm.messages.dmaap.participant.ParticipantRegister;
 import org.onap.policy.clamp.models.acm.messages.dmaap.participant.ParticipantRegisterAck;
+import org.onap.policy.clamp.models.acm.messages.dmaap.participant.ParticipantStatus;
 import org.onap.policy.clamp.models.acm.messages.dmaap.participant.ParticipantUpdateAck;
 import org.onap.policy.clamp.models.acm.persistence.provider.AcDefinitionProvider;
-import org.onap.policy.clamp.models.acm.persistence.provider.AutomationCompositionProvider;
-import org.onap.policy.clamp.models.acm.persistence.provider.ParticipantProvider;
 import org.onap.policy.common.endpoints.event.comm.Topic.CommInfrastructure;
 import org.onap.policy.common.endpoints.event.comm.TopicSink;
-import org.onap.policy.models.base.PfModelException;
 import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifier;
 
-class SupervisionMessagesTest extends CommonRestController {
+class SupervisionMessagesTest {
 
     private static final String NOT_ACTIVE = "Not Active!";
-    private static final Object lockit = new Object();
     private static final CommInfrastructure INFRA = CommInfrastructure.NOOP;
     private static final String TOPIC = "my-topic";
-    private static SupervisionHandler supervisionHandler;
 
-    /**
-     * setup Db Provider Parameters.
-     *
-     * @throws PfModelException if an error occurs
-     */
-    @BeforeAll
-    public static void setupDbProviderParameters() throws PfModelException {
-        var acProvider = mock(AutomationCompositionProvider.class);
-        var participantProvider = mock(ParticipantProvider.class);
-        var acDefinitionProvider = Mockito.mock(AcDefinitionProvider.class);
-        var automationCompositionUpdatePublisher = Mockito.mock(AutomationCompositionUpdatePublisher.class);
-        var automationCompositionStateChangePublisher = Mockito.mock(AutomationCompositionStateChangePublisher.class);
-        var participantRegisterAckPublisher = Mockito.mock(ParticipantRegisterAckPublisher.class);
-        var participantDeregisterAckPublisher = Mockito.mock(ParticipantDeregisterAckPublisher.class);
-        var participantUpdatePublisher = Mockito.mock(ParticipantUpdatePublisher.class);
-        supervisionHandler = new SupervisionHandler(acProvider, participantProvider,
-            acDefinitionProvider, automationCompositionUpdatePublisher, automationCompositionStateChangePublisher,
-            participantRegisterAckPublisher, participantDeregisterAckPublisher, participantUpdatePublisher);
+    @Test
+    void testSendParticipantRegisterAck() {
+        var acRegisterAckPublisher = new ParticipantRegisterAckPublisher();
+        var topicSink = mock(TopicSink.class);
+        acRegisterAckPublisher.active(List.of(topicSink));
+        acRegisterAckPublisher.send(new ParticipantRegisterAck());
+        verify(topicSink).send(anyString());
+        acRegisterAckPublisher.stop();
     }
 
     @Test
-    void testSendParticipantRegisterAck() throws Exception {
-        final ParticipantRegisterAck participantRegisterAckMsg = new ParticipantRegisterAck();
-        participantRegisterAckMsg.setMessage("ParticipantRegisterAck message");
-        participantRegisterAckMsg.setResponseTo(UUID.randomUUID());
-        participantRegisterAckMsg.setResult(true);
-
-        synchronized (lockit) {
-            ParticipantRegisterAckPublisher acRegisterAckPublisher = new ParticipantRegisterAckPublisher();
-            acRegisterAckPublisher.active(List.of(Mockito.mock(TopicSink.class)));
-            assertThatCode(() -> acRegisterAckPublisher.send(participantRegisterAckMsg)).doesNotThrowAnyException();
-        }
+    void testSendParticipantRegisterAckNoActive() {
+        var acRegisterAckPublisher = new ParticipantRegisterAckPublisher();
+        assertThatThrownBy(() -> acRegisterAckPublisher.send(new ParticipantRegisterAck()))
+                .hasMessageMatching(NOT_ACTIVE);
     }
 
     @Test
-    void testReceiveParticipantDeregister() throws Exception {
-        final ParticipantDeregister participantDeregisterMsg = new ParticipantDeregister();
-        participantDeregisterMsg.setParticipantId(getParticipantId());
-        participantDeregisterMsg.setTimestamp(Instant.now());
-        participantDeregisterMsg.setParticipantType(getParticipantType());
-
-        synchronized (lockit) {
-            ParticipantDeregisterListener participantDeregisterListener =
-                new ParticipantDeregisterListener(supervisionHandler);
-            assertThatCode(
-                () -> participantDeregisterListener.onTopicEvent(INFRA, TOPIC, null, participantDeregisterMsg))
-                    .doesNotThrowAnyException();
-        }
+    void testReceiveParticipantDeregister() {
+        final var participantDeregisterMsg = new ParticipantDeregister();
+        var supervisionHandler = mock(SupervisionHandler.class);
+        var participantDeregisterListener = new ParticipantDeregisterListener(supervisionHandler);
+        participantDeregisterListener.onTopicEvent(INFRA, TOPIC, null, participantDeregisterMsg);
+        verify(supervisionHandler).handleParticipantMessage(participantDeregisterMsg);
     }
 
     @Test
-    void testSendParticipantDeregisterAck() throws Exception {
-        final ParticipantDeregisterAck participantDeregisterAckMsg = new ParticipantDeregisterAck();
-        participantDeregisterAckMsg.setMessage("ParticipantDeregisterAck message");
-        participantDeregisterAckMsg.setResponseTo(UUID.randomUUID());
-        participantDeregisterAckMsg.setResult(true);
+    void testSendParticipantDeregisterAck() {
+        var acDeregisterAckPublisher = new ParticipantDeregisterAckPublisher();
+        var topicSink = mock(TopicSink.class);
+        acDeregisterAckPublisher.active(Collections.singletonList(topicSink));
+        acDeregisterAckPublisher.send(new ParticipantDeregisterAck());
+        verify(topicSink).send(anyString());
+        acDeregisterAckPublisher.stop();
+    }
 
-        synchronized (lockit) {
-            ParticipantDeregisterAckPublisher acDeregisterAckPublisher = new ParticipantDeregisterAckPublisher();
-            acDeregisterAckPublisher.active(Collections.singletonList(Mockito.mock(TopicSink.class)));
-            assertThatCode(() -> acDeregisterAckPublisher.send(participantDeregisterAckMsg)).doesNotThrowAnyException();
-        }
+    void testSendParticipantDeregisterAckNoActive() {
+        var acDeregisterAckPublisher = new ParticipantDeregisterAckPublisher();
+        assertThatThrownBy(() -> acDeregisterAckPublisher.send(new ParticipantDeregisterAck()))
+                .hasMessageMatching(NOT_ACTIVE);
     }
 
     @Test
-    void testReceiveParticipantUpdateAckMessage() throws Exception {
-        final ParticipantUpdateAck participantUpdateAckMsg = new ParticipantUpdateAck();
-        participantUpdateAckMsg.setMessage("ParticipantUpdateAck message");
-        participantUpdateAckMsg.setResponseTo(UUID.randomUUID());
-        participantUpdateAckMsg.setResult(true);
-        participantUpdateAckMsg.setParticipantId(getParticipantId());
-        participantUpdateAckMsg.setParticipantType(getParticipantType());
-
-        synchronized (lockit) {
-            ParticipantUpdateAckListener participantUpdateAckListener =
-                new ParticipantUpdateAckListener(supervisionHandler);
-            assertThatCode(() -> participantUpdateAckListener.onTopicEvent(INFRA, TOPIC, null, participantUpdateAckMsg))
-                .doesNotThrowAnyException();
-        }
+    void testReceiveParticipantUpdateAckMessage() {
+        final var participantUpdateAckMsg = new ParticipantUpdateAck();
+        var supervisionHandler = mock(SupervisionHandler.class);
+        var participantUpdateAckListener = new ParticipantUpdateAckListener(supervisionHandler);
+        participantUpdateAckListener.onTopicEvent(INFRA, TOPIC, null, participantUpdateAckMsg);
+        verify(supervisionHandler).handleParticipantMessage(participantUpdateAckMsg);
     }
 
     @Test
@@ -146,6 +110,14 @@
         assertThatThrownBy(() -> publisher.send(getAutomationComposition(), 0)).hasMessage(NOT_ACTIVE);
     }
 
+    private AutomationComposition getAutomationComposition() {
+        var automationComposition = new AutomationComposition();
+        automationComposition.setName("NAME");
+        automationComposition.setVersion("0.0.1");
+        automationComposition.setState(AutomationCompositionState.UNINITIALISED);
+        return automationComposition;
+    }
+
     @Test
     void testSendAutomationCompositionStateChangePublisher() {
         var publisher = new AutomationCompositionStateChangePublisher();
@@ -153,6 +125,7 @@
         publisher.active(List.of(topicSink));
         publisher.send(getAutomationComposition(), 0);
         verify(topicSink).send(anyString());
+        publisher.stop();
     }
 
     @Test
@@ -191,6 +164,14 @@
         verify(topicSink).send(anyString());
     }
 
+    private ToscaConceptIdentifier getParticipantId() {
+        return new ToscaConceptIdentifier("org.onap.PM_Policy", "1.0.0");
+    }
+
+    private ToscaConceptIdentifier getParticipantType() {
+        return new ToscaConceptIdentifier("org.onap.policy.acm.PolicyAutomationCompositionParticipant", "2.3.1");
+    }
+
     @Test
     void testParticipantDeregisterAckPublisher() {
         var publisher = new ParticipantDeregisterAckPublisher();
@@ -200,19 +181,42 @@
         verify(topicSink).send(anyString());
     }
 
-    private AutomationComposition getAutomationComposition() {
-        var automationComposition = new AutomationComposition();
-        automationComposition.setName("NAME");
-        automationComposition.setVersion("0.0.1");
-        automationComposition.setState(AutomationCompositionState.UNINITIALISED);
-        return automationComposition;
+    @Test
+    void testParticipantRegisterListener() {
+        final var participantRegister = new ParticipantRegister();
+        var supervisionHandler = mock(SupervisionHandler.class);
+        var participantRegisterListener = new ParticipantRegisterListener(supervisionHandler);
+        participantRegisterListener.onTopicEvent(INFRA, TOPIC, null, participantRegister);
+        verify(supervisionHandler).handleParticipantMessage(participantRegister);
     }
 
-    private ToscaConceptIdentifier getParticipantId() {
-        return new ToscaConceptIdentifier("org.onap.PM_Policy", "1.0.0");
+    @Test
+    void testParticipantStatusListener() {
+        final var participantStatus = new ParticipantStatus();
+        var supervisionHandler = mock(SupervisionHandler.class);
+        var participantStatusListener = new ParticipantStatusListener(supervisionHandler);
+        participantStatusListener.onTopicEvent(INFRA, TOPIC, null, participantStatus);
+        verify(supervisionHandler).handleParticipantMessage(participantStatus);
     }
 
-    private ToscaConceptIdentifier getParticipantType() {
-        return new ToscaConceptIdentifier("org.onap.policy.acm.PolicyAutomationCompositionParticipant", "2.3.1");
+    @Test
+    void testAutomationCompositionUpdateAckListener() {
+        final var automationCompositionAck =
+                new AutomationCompositionAck(ParticipantMessageType.AUTOMATION_COMPOSITION_UPDATE);
+        var supervisionHandler = mock(SupervisionHandler.class);
+        var acUpdateAckListener = new AutomationCompositionUpdateAckListener(supervisionHandler);
+        acUpdateAckListener.onTopicEvent(INFRA, TOPIC, null, automationCompositionAck);
+        verify(supervisionHandler).handleAutomationCompositionUpdateAckMessage(automationCompositionAck);
     }
+
+    @Test
+    void testAutomationCompositionStateChangeAckListener() {
+        final var automationCompositionAck =
+                new AutomationCompositionAck(ParticipantMessageType.AUTOMATION_COMPOSITION_STATE_CHANGE);
+        var supervisionHandler = mock(SupervisionHandler.class);
+        var acStateChangeAckListener = new AutomationCompositionStateChangeAckListener(supervisionHandler);
+        acStateChangeAckListener.onTopicEvent(INFRA, TOPIC, null, automationCompositionAck);
+        verify(supervisionHandler).handleAutomationCompositionStateChangeAckMessage(automationCompositionAck);
+    }
+
 }
diff --git a/runtime-acm/src/test/resources/rest/monitoring/TestAcElementStatistics.json b/runtime-acm/src/test/resources/rest/monitoring/TestAcElementStatistics.json
deleted file mode 100644
index c63c3ea..0000000
--- a/runtime-acm/src/test/resources/rest/monitoring/TestAcElementStatistics.json
+++ /dev/null
@@ -1,44 +0,0 @@
-{
-  "acElementStatistics":[
-    {
-      "participantId":{
-        "name":"name1",
-        "version":"1.001"
-      },
-      "id": "709c62b3-8918-41b9-a747-d21eb79c6c20",
-      "timeStamp": "2021-01-10T13:45:00.000Z",
-      "state": "UNINITIALISED",
-      "acElementUptime":250
-    },
-    {
-      "participantId":{
-        "name":"name1",
-        "version":"1.001"
-      },
-      "id": "709c62b3-8918-41b9-a747-d21eb79c6c20",
-      "timeStamp": "2021-01-10T15:45:00.000Z",
-      "state": "UNINITIALISED",
-      "acElementUptime":450
-    },
-    {
-      "participantId":{
-        "name":"name2",
-        "version":"1.001"
-      },
-      "id": "709c62b3-8918-41b9-a747-d21eb79c6c21",
-      "timeStamp": "2021-01-10T14:25:00.000Z",
-      "state": "UNINITIALISED",
-      "acElementUptime":330
-    },
-    {
-      "participantId":{
-        "name":"name2",
-        "version":"1.001"
-      },
-      "id": "709c62b3-8918-41b9-a747-d21eb79c6c21",
-      "timeStamp": "2021-01-10T16:35:00.000Z",
-      "state": "UNINITIALISED",
-      "acElementUptime":650
-    }
-  ]
-}
\ No newline at end of file
diff --git a/runtime-acm/src/test/resources/rest/monitoring/TestAcElementStatistics_Invalid.json b/runtime-acm/src/test/resources/rest/monitoring/TestAcElementStatistics_Invalid.json
deleted file mode 100644
index 59af478..0000000
--- a/runtime-acm/src/test/resources/rest/monitoring/TestAcElementStatistics_Invalid.json
+++ /dev/null
@@ -1,13 +0,0 @@
-{
-  "acElementStatisticsList":[
-    {
-      "participantId":{
-        "name":"name1",
-        "version":"1.001"
-      },
-      "id": "709c62b3-8918-41b9-a747-d21eb79c6c20",
-      "state": "UNINITIALISED",
-      "acElementUptime":250
-    }
-  ]
-}
\ No newline at end of file
diff --git a/runtime-acm/src/test/resources/rest/monitoring/TestParticipantStatistics.json b/runtime-acm/src/test/resources/rest/monitoring/TestParticipantStatistics.json
deleted file mode 100644
index acd88e2..0000000
--- a/runtime-acm/src/test/resources/rest/monitoring/TestParticipantStatistics.json
+++ /dev/null
@@ -1,46 +0,0 @@
-{
-  "statisticsList":[
-    {
-      "participantId":{
-        "name":"name1",
-        "version":"1.001"
-      },
-      "timeStamp": "2021-01-10T13:45:00.000Z",
-      "state": "PASSIVE",
-      "healthStatus": "HEALTHY",
-      "eventCount":250,
-      "lastExecutionTime":100,
-      "averageExecutionTime":90,
-      "upTime":1000,
-      "lastStart":3000
-    },
-    {
-      "participantId":{
-        "name":"name1",
-        "version":"1.001"
-      },
-      "timeStamp": "2021-01-10T15:45:00.000Z",
-      "state": "PASSIVE",
-      "healthStatus": "HEALTHY",
-      "eventCount":262,
-      "lastExecutionTime":100,
-      "averageExecutionTime":90,
-      "upTime":2000,
-      "lastStart":3000
-    },
-    {
-      "participantId":{
-        "name":"name2",
-        "version":"1.001"
-      },
-      "timeStamp": "2021-01-27T14:25:00.000Z",
-      "state": "PASSIVE",
-      "healthStatus": "HEALTHY",
-      "eventCount":245,
-      "lastExecutionTime":1020,
-      "averageExecutionTime":85,
-      "upTime":1050,
-      "lastStart":3100
-    }
-  ]
-}
\ No newline at end of file
diff --git a/runtime-acm/src/test/resources/rest/monitoring/TestParticipantStatistics_Invalid.json b/runtime-acm/src/test/resources/rest/monitoring/TestParticipantStatistics_Invalid.json
deleted file mode 100644
index 7281822..0000000
--- a/runtime-acm/src/test/resources/rest/monitoring/TestParticipantStatistics_Invalid.json
+++ /dev/null
@@ -1,16 +0,0 @@
-{
-  "participantStatisticsList":[
-    {
-      "participantId":{
-        "name":"name3",
-        "version":"1.001"
-      },
-      "state": "PASSIVE",
-      "eventCount":250,
-      "lastExecutionTime":100,
-      "averageExecutionTime":90,
-      "upTime":1000,
-      "lastStart":3000
-    }
-  ]
-}
\ No newline at end of file