diff --git a/examples/src/main/resources/clamp/acm/acm-demo/toscaServiceTemplate.yaml b/examples/src/main/resources/clamp/acm/acm-demo/toscaServiceTemplate.yaml
new file mode 100644
index 0000000..6a1ccfe
--- /dev/null
+++ b/examples/src/main/resources/clamp/acm/acm-demo/toscaServiceTemplate.yaml
@@ -0,0 +1,1253 @@
+# ============LICENSE_START=======================================================
+# Copyright (C) 2023 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
+  onap.datatypes.native.apex.EngineService:
+    derived_from: tosca.datatypes.Root
+    properties:
+      name:
+        type: string
+        description: Specifies the engine name
+        required: false
+        default: "ApexEngineService"
+      version:
+        type: string
+        description: Specifies the engine version in double dotted format
+        required: false
+        default: "1.0.0"
+      id:
+        type: integer
+        description: Specifies the engine id
+        required: true
+      instance_count:
+        type: integer
+        description: Specifies the number of engine threads that should be run
+        required: true
+      deployment_port:
+        type: integer
+        description: Specifies the port to connect to for engine administration
+        required: false
+        default: 1
+      policy_model_file_name:
+        type: string
+        description: The name of the file from which to read the APEX policy model
+        required: false
+      policy_type_impl:
+        type: string
+        description: The policy type implementation from which to read the APEX policy model
+        required: false
+      periodic_event_period:
+        type: string
+        description: The time interval in milliseconds for the periodic scanning event, 0 means don't scan
+        required: false
+      engine:
+        type: onap.datatypes.native.apex.engineservice.Engine
+        description: The parameters for all engines in the APEX engine service
+        required: true
+  onap.datatypes.native.apex.EventHandler:
+    derived_from: tosca.datatypes.Root
+    properties:
+      name:
+        type: string
+        description: Specifies the event handler name, if not specified this is set to the key name
+        required: false
+      carrier_technology:
+        type: onap.datatypes.native.apex.CarrierTechnology
+        description: Specifies the carrier technology of the event handler (such as REST/Web Socket/Kafka)
+        required: true
+      event_protocol:
+        type: onap.datatypes.native.apex.EventProtocol
+        description: Specifies the event protocol of events for the event handler (such as Yaml/JSON/XML/POJO)
+        required: true
+      event_name:
+        type: string
+        description: Specifies the event name for events on this event handler, if not specified, the event name is read from or written to the event being received or sent
+        required: false
+      event_name_filter:
+        type: string
+        description: Specifies a filter as a regular expression, events that do not match the filter are dropped, the default is to let all events through
+        required: false
+      synchronous_mode:
+        type: boolean
+        description: Specifies the event handler is syncronous (receive event and send response)
+        required: false
+        default: false
+      synchronous_peer:
+        type: string
+        description: The peer event handler (output for input or input for output) of this event handler in synchronous mode, this parameter is mandatory if the event handler is in synchronous mode
+        required: false
+      synchronous_timeout:
+        type: integer
+        description: The timeout in milliseconds for responses to be issued by APEX torequests, this parameter is mandatory if the event handler is in synchronous mode
+        required: false
+      requestor_mode:
+        type: boolean
+        description: Specifies the event handler is in requestor mode (send event and wait for response mode)
+        required: false
+        default: false
+      requestor_peer:
+        type: string
+        description: The peer event handler (output for input or input for output) of this event handler in requestor mode, this parameter is mandatory if the event handler is in requestor mode
+        required: false
+      requestor_timeout:
+        type: integer
+        description: The timeout in milliseconds for wait for responses to requests, this parameter is mandatory if the event handler is in requestor mode
+        required: false
+  onap.datatypes.native.apex.CarrierTechnology:
+    derived_from: tosca.datatypes.Root
+    properties:
+      label:
+        type: string
+        description: The label (name) of the carrier technology (such as REST, Kafka, WebSocket)
+        required: true
+      plugin_parameter_class_name:
+        type: string
+        description: The class name of the class that overrides default handling of event input or output for this carrier technology, defaults to the supplied input or output class
+        required: false
+  onap.datatypes.native.apex.EventProtocol:
+    derived_from: tosca.datatypes.Root
+    properties:
+      label:
+        type: string
+        description: The label (name) of the event protocol (such as Yaml, JSON, XML, or POJO)
+        required: true
+      event_protocol_plugin_class:
+        type: string
+        description: The class name of the class that overrides default handling of the event protocol for this carrier technology, defaults to the supplied event protocol class
+        required: false
+  onap.datatypes.native.apex.Environment:
+    derived_from: tosca.datatypes.Root
+    properties:
+      name:
+        type: string
+        description: The name of the environment variable
+        required: true
+      value:
+        type: string
+        description: The value of the environment variable
+        required: true
+  onap.datatypes.native.apex.engineservice.Engine:
+    derived_from: tosca.datatypes.Root
+    properties:
+      context:
+        type: onap.datatypes.native.apex.engineservice.engine.Context
+        description: The properties for handling context in APEX engines, defaults to using Java maps for context
+        required: false
+      executors:
+        type: map
+        description: The plugins for policy executors used in engines such as javascript, MVEL, Jython
+        required: true
+        entry_schema:
+          description: The plugin class path for this policy executor
+          type: string
+  onap.datatypes.native.apex.engineservice.engine.Context:
+    derived_from: tosca.datatypes.Root
+    properties:
+      distributor:
+        type: onap.datatypes.native.apex.Plugin
+        description: The plugin to be used for distributing context between APEX PDPs at runtime
+        required: false
+      schemas:
+        type: map
+        description: The plugins for context schemas available in APEX PDPs such as Java and Avro
+        required: false
+        entry_schema:
+          type: onap.datatypes.native.apex.Plugin
+      locking:
+        type: onap.datatypes.native.apex.Plugin
+        description: The plugin to be used for locking context in and between APEX PDPs at runtime
+        required: false
+      persistence:
+        type: onap.datatypes.native.apex.Plugin
+        description: The plugin to be used for persisting context for APEX PDPs at runtime
+        required: false
+  onap.datatypes.native.apex.Plugin:
+    derived_from: tosca.datatypes.Root
+    properties:
+      name:
+        type: string
+        description: The name of the executor such as Javascript, Jython or MVEL
+        required: true
+      plugin_class_name:
+        type: string
+        description: The class path of the plugin class for this executor
+  org.onap.datatypes.policy.clamp.acm.httpAutomationCompositionElement.RestRequest:
+    version: 1.0.0
+    derived_from: tosca.datatypes.Root
+    properties:
+      restRequestId:
+        type: onap.datatypes.ToscaConceptIdentifier
+        required: true
+        description: The name and version of a REST request to be sent to a REST endpoint
+      httpMethod:
+        type: string
+        required: true
+        constraints:
+          - valid_values:
+              - POST
+              - PUT
+              - GET
+              - DELETE
+        description: The REST method to use
+      path:
+        type: string
+        required: true
+        description: The path of the REST request relative to the base URL
+      body:
+        type: string
+        required: false
+        description: The body of the REST request for PUT and POST requests
+      expectedResponse:
+        type: integer
+        required: true
+        constraints: []
+        description: THe expected HTTP status code for the REST request
+  org.onap.datatypes.policy.clamp.acm.httpAutomationCompositionElement.ConfigurationEntity:
+    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.Native:
+    derived_from: tosca.policies.Root
+    description: a base policy type for all native PDP policies
+    version: 1.0.0
+    name: onap.policies.Native
+  onap.policies.native.Apex:
+    derived_from: onap.policies.Native
+    description: a policy type for native apex policies
+    version: 1.0.0
+    name: onap.policies.native.Apex
+    properties:
+      engine_service:
+        type: onap.datatypes.native.apex.EngineService
+        description: APEX Engine Service Parameters
+      inputs:
+        type: map
+        description: Inputs for handling events coming into the APEX engine
+        entry_schema:
+          type: onap.datatypes.native.apex.EventHandler
+      outputs:
+        type: map
+        description: Outputs for handling events going out of the APEX engine
+        entry_schema:
+          type: onap.datatypes.native.apex.EventHandler
+      environment:
+        type: list
+        description: Envioronmental parameters for the APEX engine
+        entry_schema:
+          type: onap.datatypes.native.apex.Environment
+node_types:
+  org.onap.policy.clamp.acm.Participant:
+    version: 1.0.1
+    derived_from: tosca.nodetypes.Root
+    properties:
+      provider:
+        type: string
+        required: false
+  org.onap.policy.clamp.acm.AutomationCompositionElement:
+    version: 1.0.1
+    derived_from: tosca.nodetypes.Root
+    properties:
+      provider:
+        type: string
+        required: false
+        metadata:
+          common: true
+        description: Specifies the organization that provides the automation composition element
+      participant_id:
+        type: onap.datatypes.ToscaConceptIdentifier
+        required: true
+        metadata:
+          common: true
+      participantType:
+        type: onap.datatypes.ToscaConceptIdentifier
+        required: true
+        metadata:
+          common: true
+        description: The identity of the participant type that hosts this type of Automation Composition Element
+      startPhase:
+        type: integer
+        required: false
+        constraints:
+          - greater_or_equal: 0
+        metadata:
+          common: true
+        description: A value indicating the start phase in which this automation composition element will be started, the
+          first start phase is zero. Automation Composition Elements are started in their start_phase order and stopped
+          in reverse start phase order. Automation Composition Elements with the same start phase are started and
+          stopped simultaneously
+      uninitializedToPassiveTimeout:
+        type: integer
+        required: false
+        constraints:
+          - greater_or_equal: 0
+        default: 60
+        metadata:
+          common: true
+        description: The maximum time in seconds to wait for a state chage from uninitialized to passive
+      passiveToRunningTimeout:
+        type: integer
+        required: false
+        constraints:
+          - greater_or_equal: 0
+        default: 60
+        metadata:
+          common: true
+        description: The maximum time in seconds to wait for a state chage from passive to running
+      runningToPassiveTimeout:
+        type: integer
+        required: false
+        constraints:
+          - greater_or_equal: 0
+        default: 60
+        metadata:
+          common: true
+        description: The maximum time in seconds to wait for a state chage from running to passive
+      passiveToUninitializedTimeout:
+        type: integer
+        required: false
+        constraints:
+          - greater_or_equal: 0
+        default: 60
+        metadata:
+          common: true
+        description: The maximum time in seconds to wait for a state chage from passive to uninitialized
+  org.onap.policy.clamp.acm.AutomationComposition:
+    version: 1.0.1
+    derived_from: tosca.nodetypes.Root
+    properties:
+      provider:
+        type: string
+        required: false
+        metadata:
+          common: true
+        description: Specifies the organization that provides the automation composition element
+      elements:
+        type: list
+        required: true
+        metadata:
+          common: true
+        entry_schema:
+          type: onap.datatypes.ToscaConceptIdentifier
+        description: Specifies a list of automation composition element definitions that make up this automation composition definition
+  org.onap.policy.clamp.acm.PolicyAutomationCompositionElement:
+    version: 1.0.1
+    derived_from: org.onap.policy.clamp.acm.AutomationCompositionElement
+    properties:
+      policy_type_id:
+        type: onap.datatypes.ToscaConceptIdentifier
+        required: true
+      policy_id:
+        type: onap.datatypes.ToscaConceptIdentifier
+        required: false
+  org.onap.policy.clamp.acm.K8SMicroserviceAutomationCompositionElement:
+    version: 1.0.1
+    derived_from: org.onap.policy.clamp.acm.AutomationCompositionElement
+    properties:
+      chart:
+        type: string
+        required: true
+      configs:
+        type: list
+        required: false
+      requirements:
+        type: string
+        required: false
+      templates:
+        type: list
+        required: false
+        entry_schema:
+      values:
+        type: string
+        required: true
+  org.onap.policy.clamp.acm.HttpAutomationCompositionElement:
+    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:
+    acm_element_policy:
+      type: onap.datatypes.ToscaConceptIdentifier
+      description: The ID of the operational policy to use
+      default:
+        name: onap.policies.native.apex.ac.element
+        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 Policy microservices
+      properties:
+        provider: ONAP
+    onap.policy.clamp.ac.element.Policy_AutomationCompositionElement:
+      version: 1.2.3
+      type: org.onap.policy.clamp.acm.PolicyAutomationCompositionElement
+      type_version: 1.0.0
+      description: Automation composition element for the operational policy for Performance Management Subscription Handling
+      properties:
+        provider: Ericsson
+        participant_id:
+          name: org.onap.PM_Policy
+          version: 1.0.0
+        participantType:
+          name: org.onap.policy.clamp.acm.PolicyParticipant
+          version: 2.3.1
+        policy_type_id:
+          name: onap.policies.operational.pm-subscription-handler
+          version: 1.0.0
+        startPhase: 0
+        policy_id:
+          get_input: acm_element_policy
+    org.onap.k8s.acm.K8SAutomationCompositionParticipant:
+      version: 2.3.4
+      type: org.onap.policy.clamp.acm.Participant
+      type_version: 1.0.1
+      description: Participant for K8S
+      properties:
+        provider: ONAP
+    onap.policy.clamp.ac.element.K8S_StarterAutomationCompositionElement:
+      # Chart from any chart repository configured on helm client.
+      version: 1.2.3
+      type: org.onap.policy.clamp.acm.K8SMicroserviceAutomationCompositionElement
+      type_version: 1.0.1
+      description: Automation composition element for the K8S microservice for AC Element Starter
+      properties:
+        provider: ONAP
+        participant_id:
+          name: K8sParticipant0
+          version: 1.0.0
+        participantType:
+          name: org.onap.policy.clamp.acm.KubernetesParticipant
+          version: 2.3.4
+        startPhase: 0
+        uninitializedToPassiveTimeout: 300
+        podStatusCheckInterval: 30
+        chart:
+          chartId:
+            name: acelement
+            version: 0.1.0
+          namespace: onap
+          releaseName: acm-starter
+          podName: acm-starter
+          repository:
+            repoName: local
+            address: 'http://cluster-ip:8080'
+          overrideParams:
+            acelement.elementId.name: onap.policy.clamp.ac.starter
+            service.nodeport: 30800
+    onap.policy.clamp.ac.element.K8S_BridgeAutomationCompositionElement:
+      # Chart from any chart repository configured on helm client.
+      version: 1.2.3
+      type: org.onap.policy.clamp.acm.K8SMicroserviceAutomationCompositionElement
+      type_version: 1.0.1
+      description: Automation composition element for the K8S microservice for AC Element Bridge
+      properties:
+        provider: ONAP
+        participant_id:
+          name: K8sParticipant0
+          version: 1.0.0
+        participantType:
+          name: org.onap.policy.clamp.acm.KubernetesParticipant
+          version: 2.3.4
+        startPhase: 0
+        uninitializedToPassiveTimeout: 300
+        podStatusCheckInterval: 30
+        chart:
+          chartId:
+            name: acelement
+            version: 0.1.0
+          namespace: onap
+          releaseName: acm-bridge
+          podName: acm-bridge
+          repository:
+            repoName: local
+            address: 'http://cluster-ip:8080'
+          overrideParams:
+            acelement.elementId.name: onap.policy.clamp.ac.bridge
+            service.nodeport: 30801
+    onap.policy.clamp.ac.element.K8S_SinkAutomationCompositionElement:
+      # Chart from any chart repository configured on helm client.
+      version: 1.2.3
+      type: org.onap.policy.clamp.acm.K8SMicroserviceAutomationCompositionElement
+      type_version: 1.0.1
+      description: Automation composition element for the K8S microservice for AC Element Sink
+      properties:
+        provider: ONAP
+        participant_id:
+          name: K8sParticipant0
+          version: 1.0.0
+        participantType:
+          name: org.onap.policy.clamp.acm.KubernetesParticipant
+          version: 2.3.4
+        startPhase: 0
+        uninitializedToPassiveTimeout: 300
+        podStatusCheckInterval: 30
+        chart:
+          chartId:
+            name: acelement
+            version: 0.1.0
+          namespace: onap
+          releaseName: acm-sink
+          podName: acm-sink
+          repository:
+            repoName: local
+            address: 'http://cluster-ip:8080'
+          overrideParams:
+            acelement.elementId.name: onap.policy.clamp.ac.sink
+            service.nodeport: 30802
+    org.onap.policy.clamp.acm.HttpParticipant:
+      version: 2.3.4
+      type: org.onap.policy.clamp.acm.Participant
+      type_version: 1.0.1
+      description: Participant for Http requests
+      properties:
+        provider: ONAP
+    onap.policy.clamp.ac.element.Http_StarterAutomationCompositionElement:
+      # Http config for AC Element Starter.
+      version: 1.2.3
+      type: org.onap.policy.clamp.acm.HttpAutomationCompositionElement
+      type_version: 1.0.1
+      description: Automation composition element for the http requests of AC Element Starter microservice
+      properties:
+        provider: ONAP
+        participant_id:
+          name: HttpParticipant0
+          version: 1.0.0
+        participantType:
+          name: org.onap.policy.clamp.acm.HttpParticipant
+          version: 2.3.4
+        uninitializedToPassiveTimeout: 300
+        startPhase: 1
+        baseUrl: http://cluster-ip:30800
+        httpHeaders:
+          Content-Type: application/json
+          Authorization: Basic YWNtVXNlcjp6YiFYenRHMzQ=
+        configurationEntities:
+          - configurationEntityId:
+              name: onap.policy.clamp.ac.starter
+              version: 1.0.0
+            restSequence:
+              - restRequestId:
+                  name: request1
+                  version: 1.0.1
+                httpMethod: POST
+                path: /onap/policy/clamp/acelement/v2/activate
+                body: '{ "receiverId": { "name": "onap.policy.clamp.ac.startertobridge", "version": "1.0.0" }, "timerMs": 20000, "elementType": "STARTER", "topicParameterGroup": { "server": "acm-starter-ac-element-impl-dmaap", "listenerTopic": "POLICY_UPDATE_MSG", "publisherTopic": "AC_ELEMENT_MSG", "fetchTimeout": 15000, "topicCommInfrastructure": "dmaap" } }'
+                expectedResponse: 201
+    onap.policy.clamp.ac.element.Http_BridgeAutomationCompositionElement:
+      # Http config for AC Element Bridge.
+      version: 1.2.3
+      type: org.onap.policy.clamp.acm.HttpAutomationCompositionElement
+      type_version: 1.0.1
+      description: Automation composition element for the http requests of AC Element Bridge microservice
+      properties:
+        provider: ONAP
+        participant_id:
+          name: HttpParticipant0
+          version: 1.0.0
+        participantType:
+          name: org.onap.policy.clamp.acm.HttpParticipant
+          version: 2.3.4
+        uninitializedToPassiveTimeout: 300
+        startPhase: 1
+        baseUrl: http://cluster-ip:30801
+        httpHeaders:
+          Content-Type: application/json
+          Authorization: Basic YWNtVXNlcjp6YiFYenRHMzQ=
+        configurationEntities:
+          - configurationEntityId:
+              name: onap.policy.clamp.ac.bridge
+              version: 1.0.0
+            restSequence:
+              - restRequestId:
+                  name: request2
+                  version: 1.0.1
+                httpMethod: POST
+                path: /onap/policy/clamp/acelement/v2/activate
+                body: '{ "receiverId": { "name": "onap.policy.clamp.ac.bridgetosink", "version": "1.0.0" }, "timerMs": 20000, "elementType": "BRIDGE", "topicParameterGroup": { "server": "acm-starter-ac-element-impl-dmaap", "listenerTopic": "POLICY_UPDATE_MSG", "publisherTopic": "AC_ELEMENT_MSG", "fetchTimeout": 15000, "topicCommInfrastructure": "dmaap" } }'
+                expectedResponse: 201
+    onap.policy.clamp.ac.element.Http_SinkAutomationCompositionElement:
+      # Http config for AC Element Sink.
+      version: 1.2.3
+      type: org.onap.policy.clamp.acm.HttpAutomationCompositionElement
+      type_version: 1.0.1
+      description: Automation composition element for the http requests of AC Element Sink microservice
+      properties:
+        provider: ONAP
+        participant_id:
+          name: HttpParticipant0
+          version: 1.0.0
+        participantType:
+          name: org.onap.policy.clamp.acm.HttpParticipant
+          version: 2.3.4
+        uninitializedToPassiveTimeout: 300
+        startPhase: 1
+        baseUrl: http://cluster-ip:30802
+        httpHeaders:
+          Content-Type: application/json
+          Authorization: Basic YWNtVXNlcjp6YiFYenRHMzQ=
+        configurationEntities:
+          - configurationEntityId:
+              name: onap.policy.clamp.ac.sink
+              version: 1.0.0
+            restSequence:
+              - restRequestId:
+                  name: request3
+                  version: 1.0.1
+                httpMethod: POST
+                path: /onap/policy/clamp/acelement/v2/activate
+                body: '{ "receiverId": { "name": "onap.policy.clamp.ac.sink", "version": "1.0.0" }, "timerMs": 20000, "elementType": "SINK", "topicParameterGroup": { "server": "acm-starter-ac-element-impl-dmaap", "listenerTopic": "POLICY_UPDATE_MSG", "publisherTopic": "AC_ELEMENT_MSG", "fetchTimeout": 15000, "topicCommInfrastructure": "dmaap" } }'
+                expectedResponse: 201
+    onap.policy.clamp.ac.element.AutomationCompositionDefinition:
+      version: 1.2.3
+      type: org.onap.policy.clamp.acm.AutomationComposition
+      type_version: 1.0.1
+      description: Automation composition for Demo
+      properties:
+        provider: ONAP
+        elements:
+          - name: onap.policy.clamp.ac.element.Policy_AutomationCompositionElement
+            version: 1.2.3
+          - name: onap.policy.clamp.ac.element.K8S_StarterAutomationCompositionElement
+            version: 1.2.3
+          - name: onap.policy.clamp.ac.element.K8S_BridgeAutomationCompositionElement
+            version: 1.2.3
+          - name: onap.policy.clamp.ac.element.K8S_SinkAutomationCompositionElement
+            version: 1.2.3
+          - name: onap.policy.clamp.ac.element.Http_StarterAutomationCompositionElement
+            version: 1.2.3
+          - name: onap.policy.clamp.ac.element.Http_BridgeAutomationCompositionElement
+            version: 1.2.3
+          - name: onap.policy.clamp.ac.element.Http_SinkAutomationCompositionElement
+            version: 1.2.3
+  policies:
+    - onap.policies.native.apex.ac.element:
+        type: onap.policies.native.Apex
+        type_version: 1.0.0
+        properties:
+          engineServiceParameters:
+            name: MyApexEngine
+            version: 0.0.1
+            id: 45
+            instanceCount: 2
+            deploymentPort: 12561
+            engineParameters:
+              executorParameters:
+                JAVASCRIPT:
+                  parameterClassName: org.onap.policy.apex.plugins.executor.javascript.JavascriptExecutorParameters
+              contextParameters:
+                parameterClassName: org.onap.policy.apex.context.parameters.ContextParameters
+                schemaParameters:
+                  Json:
+                    parameterClassName: org.onap.policy.apex.plugins.context.schema.json.JsonSchemaHelperParameters
+            policy_type_impl:
+              policies:
+                key:
+                  name: APEXacElementPolicy_Policies
+                  version: 0.0.1
+                policyMap:
+                  entry:
+                    - key:
+                        name: ReceiveEventPolicy
+                        version: 0.0.1
+                      value:
+                        policyKey:
+                          name: ReceiveEventPolicy
+                          version: 0.0.1
+                        template: Freestyle
+                        state:
+                          entry:
+                            - key: DecideForwardingState
+                              value:
+                                stateKey:
+                                  parentKeyName: ReceiveEventPolicy
+                                  parentKeyVersion: 0.0.1
+                                  parentLocalName: 'NULL'
+                                  localName: DecideForwardingState
+                                trigger:
+                                  name: AcElementEvent
+                                  version: 0.0.1
+                                stateOutputs:
+                                  entry:
+                                    - key: CreateForwardPayload
+                                      value:
+                                        key:
+                                          parentKeyName: ReceiveEventPolicy
+                                          parentKeyVersion: 0.0.1
+                                          parentLocalName: DecideForwardingState
+                                          localName: CreateForwardPayload
+                                        outgoingEvent:
+                                          name: DmaapResponseStatusEvent
+                                          version: 0.0.1
+                                        outgoingEventReference:
+                                          - name: DmaapResponseStatusEvent
+                                            version: 0.0.1
+                                        nextState:
+                                          parentKeyName: 'NULL'
+                                          parentKeyVersion: 0.0.0
+                                          parentLocalName: 'NULL'
+                                          localName: 'NULL'
+                                contextAlbumReference: []
+                                taskSelectionLogic:
+                                  key:
+                                    parentKeyName: 'NULL'
+                                    parentKeyVersion: 0.0.0
+                                    parentLocalName: 'NULL'
+                                    localName: 'NULL'
+                                  logicFlavour: UNDEFINED
+                                  logic: ''
+                                stateFinalizerLogicMap:
+                                  entry: []
+                                defaultTask:
+                                  name: ForwardPayloadTask
+                                  version: 0.0.1
+                                taskReferences:
+                                  entry:
+                                    - key:
+                                        name: ForwardPayloadTask
+                                        version: 0.0.1
+                                      value:
+                                        key:
+                                          parentKeyName: ReceiveEventPolicy
+                                          parentKeyVersion: 0.0.1
+                                          parentLocalName: DecideForwardingState
+                                          localName: ReceiveEventPolicy
+                                        outputType: DIRECT
+                                        output:
+                                          parentKeyName: ReceiveEventPolicy
+                                          parentKeyVersion: 0.0.1
+                                          parentLocalName: DecideForwardingState
+                                          localName: CreateForwardPayload
+                        firstState: DecideForwardingState
+              tasks:
+                key:
+                  name: APEXacElementPolicy_Tasks
+                  version: 0.0.1
+                taskMap:
+                  entry:
+                    - key:
+                        name: ForwardPayloadTask
+                        version: 0.0.1
+                      value:
+                        key:
+                          name: ForwardPayloadTask
+                          version: 0.0.1
+                        inputEvent:
+                          key:
+                            name: AcElementEvent
+                            version: 0.0.1
+                          nameSpace: org.onap.policy.apex.ac.element
+                          source: Dmaap
+                          target: APEX
+                          parameter:
+                            entry:
+                              - key: DmaapResponseEvent
+                                value:
+                                  key:
+                                    parentKeyName: AcElementEvent
+                                    parentKeyVersion: 0.0.1
+                                    parentLocalName: 'NULL'
+                                    localName: DmaapResponseEvent
+                                  fieldSchemaKey:
+                                    name: ACEventType
+                                    version: 0.0.1
+                                  optional: false
+                          toscaPolicyState: ENTRY
+                        outputEvents:
+                          entry:
+                            - key: DmaapResponseStatusEvent
+                              value:
+                                key:
+                                  name: DmaapResponseStatusEvent
+                                  version: 0.0.1
+                                nameSpace: org.onap.policy.apex.ac.element
+                                source: APEX
+                                target: Dmaap
+                                parameter:
+                                  entry:
+                                    - key: DmaapResponseStatusEvent
+                                      value:
+                                        key:
+                                          parentKeyName: DmaapResponseStatusEvent
+                                          parentKeyVersion: 0.0.1
+                                          parentLocalName: 'NULL'
+                                          localName: DmaapResponseStatusEvent
+                                        fieldSchemaKey:
+                                          name: ACEventType
+                                          version: 0.0.1
+                                        optional: false
+                                toscaPolicyState: ''
+                        taskParameters:
+                          entry: []
+                        contextAlbumReference:
+                          - name: ACElementAlbum
+                            version: 0.0.1
+                        taskLogic:
+                          key:
+                            parentKeyName: ForwardPayloadTask
+                            parentKeyVersion: 0.0.1
+                            parentLocalName: 'NULL'
+                            localName: TaskLogic
+                          logicFlavour: JAVASCRIPT
+                          logic: "/*\n * ============LICENSE_START=======================================================\n\
+                        \ *  Copyright (C) 2022 Nordix. All rights reserved.\n * ================================================================================\n\
+                        \ * Licensed under the Apache License, Version 2.0 (the 'License');\n\
+                        \ * you may not use this file except in compliance with the\
+                        \ License.\n * You may obtain a copy of the License at\n *\n\
+                        \ *      http://www.apache.org/licenses/LICENSE-2.0\n *\n\
+                        \ * Unless required by applicable law or agreed to in writing,\
+                        \ software\n * distributed under the License is distributed\
+                        \ on an 'AS IS' BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS\
+                        \ OF ANY KIND, either express or implied.\n * See the License\
+                        \ for the specific language governing permissions and\n *\
+                        \ limitations under the License.\n *\n * SPDX-License-Identifier:\
+                        \ Apache-2.0\n * ============LICENSE_END=========================================================\n\
+                        \ */\n\nexecutor.logger.info(executor.subject.id);\nexecutor.logger.info(executor.inFields);\n\
+                        \nvar msgResponse = executor.inFields.get('DmaapResponseEvent');\n\
+                        executor.logger.info('Task in progress with mesages: ' + msgResponse);\n\
+                        \nvar elementId = msgResponse.get('elementId').get('name');\n\
+                        \nif (msgResponse.get('messageType') == 'STATUS' &&\n    (elementId\
+                        \ == 'onap.policy.clamp.ac.startertobridge'\n    || elementId\
+                        \ == 'onap.policy.clamp.ac.bridgetosink')) {\n\n    var receiverId\
+                        \ = '';\n    if (elementId == 'onap.policy.clamp.ac.startertobridge')\
+                        \ {\n        receiverId = 'onap.policy.clamp.ac.bridge';\n\
+                        \    } else {\n        receiverId = 'onap.policy.clamp.ac.sink';\n\
+                        \    }\n\n    var elementIdResponse = new java.util.HashMap();\n\
+                        \    elementIdResponse.put('name', receiverId);\n    elementIdResponse.put('version',\
+                        \ msgResponse.get('elementId').get('version'));\n\n    var\
+                        \ dmaapResponse = new java.util.HashMap();\n    dmaapResponse.put('elementId',\
+                        \ elementIdResponse);\n\n    var message = msgResponse.get('message')\
+                        \ + ' trace added from policy';\n    dmaapResponse.put('message',\
+                        \ message);\n    dmaapResponse.put('messageType', 'STATUS');\n\
+                        \    dmaapResponse.put('messageId', msgResponse.get('messageId'));\n\
+                        \    dmaapResponse.put('timestamp', msgResponse.get('timestamp'));\n\
+                        \n    executor.logger.info('Sending forwarding Event to Ac\
+                        \ element: ' + dmaapResponse);\n\n    executor.outFields.put('DmaapResponseStatusEvent',\
+                        \ dmaapResponse);\n}\n\ntrue;"
+              events:
+                key:
+                  name: APEXacElementPolicy_Events
+                  version: 0.0.1
+                eventMap:
+                  entry:
+                    - key:
+                        name: AcElementEvent
+                        version: 0.0.1
+                      value:
+                        key:
+                          name: AcElementEvent
+                          version: 0.0.1
+                        nameSpace: org.onap.policy.apex.ac.element
+                        source: Dmaap
+                        target: APEX
+                        parameter:
+                          entry:
+                            - key: DmaapResponseEvent
+                              value:
+                                key:
+                                  parentKeyName: AcElementEvent
+                                  parentKeyVersion: 0.0.1
+                                  parentLocalName: 'NULL'
+                                  localName: DmaapResponseEvent
+                                fieldSchemaKey:
+                                  name: ACEventType
+                                  version: 0.0.1
+                                optional: false
+                        toscaPolicyState: ENTRY
+                    - key:
+                        name: DmaapResponseStatusEvent
+                        version: 0.0.1
+                      value:
+                        key:
+                          name: DmaapResponseStatusEvent
+                          version: 0.0.1
+                        nameSpace: org.onap.policy.apex.ac.element
+                        source: APEX
+                        target: Dmaap
+                        parameter:
+                          entry:
+                            - key: DmaapResponseStatusEvent
+                              value:
+                                key:
+                                  parentKeyName: DmaapResponseStatusEvent
+                                  parentKeyVersion: 0.0.1
+                                  parentLocalName: 'NULL'
+                                  localName: DmaapResponseStatusEvent
+                                fieldSchemaKey:
+                                  name: ACEventType
+                                  version: 0.0.1
+                                optional: false
+                        toscaPolicyState: ''
+                    - key:
+                        name: LogEvent
+                        version: 0.0.1
+                      value:
+                        key:
+                          name: LogEvent
+                          version: 0.0.1
+                        nameSpace: org.onap.policy.apex.ac.element
+                        source: APEX
+                        target: file
+                        parameter:
+                          entry:
+                            - key: final_status
+                              value:
+                                key:
+                                  parentKeyName: LogEvent
+                                  parentKeyVersion: 0.0.1
+                                  parentLocalName: 'NULL'
+                                  localName: final_status
+                                fieldSchemaKey:
+                                  name: SimpleStringType
+                                  version: 0.0.1
+                                optional: false
+                            - key: message
+                              value:
+                                key:
+                                  parentKeyName: LogEvent
+                                  parentKeyVersion: 0.0.1
+                                  parentLocalName: 'NULL'
+                                  localName: message
+                                fieldSchemaKey:
+                                  name: SimpleStringType
+                                  version: 0.0.1
+                                optional: false
+                        toscaPolicyState: ''
+              albums:
+                key:
+                  name: APEXacElementPolicy_Albums
+                  version: 0.0.1
+                albums:
+                  entry:
+                    - key:
+                        name: ACElementAlbum
+                        version: 0.0.1
+                      value:
+                        key:
+                          name: ACElementAlbum
+                          version: 0.0.1
+                        scope: policy
+                        isWritable: true
+                        itemSchema:
+                          name: ACEventType
+                          version: 0.0.1
+              schemas:
+                key:
+                  name: APEXacElementPolicy_Schemas
+                  version: 0.0.1
+                schemas:
+                  entry:
+                    - key:
+                        name: ACEventType
+                        version: 0.0.1
+                      value:
+                        key:
+                          name: ACEventType
+                          version: 0.0.1
+                        schemaFlavour: Json
+                        schemaDefinition: "{\n    \"$schema\": \"http://json-schema.org/draft-04/schema#\"\
+                      ,\n    \"type\": \"object\",\n    \"properties\": {\n      \
+                      \  \"elementId\": {\n            \"type\": \"object\",\n   \
+                      \         \"properties\": {\n                \"name\": {\n \
+                      \                   \"type\": \"string\"\n                },\n\
+                      \                \"version\": {\n                    \"type\"\
+                      : \"string\"\n                }\n            },\n          \
+                      \  \"required\": [\n                \"name\",\n            \
+                      \    \"version\"\n            ]\n        },\n        \"message\"\
+                      : {\n            \"type\": \"string\"\n        },\n        \"\
+                      messageType\": {\n            \"type\": \"string\"\n       \
+                      \ }\n    },\n    \"required\": [\n        \"elementId\",\n \
+                      \       \"message\",\n        \"messageType\"\n    ]\n}"
+                    - key:
+                        name: SimpleIntType
+                        version: 0.0.1
+                      value:
+                        key:
+                          name: SimpleIntType
+                          version: 0.0.1
+                        schemaFlavour: Java
+                        schemaDefinition: java.lang.Integer
+                    - key:
+                        name: SimpleStringType
+                        version: 0.0.1
+                      value:
+                        key:
+                          name: SimpleStringType
+                          version: 0.0.1
+                        schemaFlavour: Java
+                        schemaDefinition: java.lang.String
+                    - key:
+                        name: UUIDType
+                        version: 0.0.1
+                      value:
+                        key:
+                          name: UUIDType
+                          version: 0.0.1
+                        schemaFlavour: Java
+                        schemaDefinition: java.util.UUID
+              key:
+                name: APEXacElementPolicy
+                version: 0.0.1
+              keyInformation:
+                key:
+                  name: APEXacElementPolicy_KeyInfo
+                  version: 0.0.1
+                keyInfoMap:
+                  entry:
+                    - key:
+                        name: ACElementAlbum
+                        version: 0.0.1
+                      value:
+                        key:
+                          name: ACElementAlbum
+                          version: 0.0.1
+                        UUID: 7cddfab8-6d3f-3f7f-8ac3-e2eb5979c900
+                        description: Generated description for concept referred to by
+                          key "ACElementAlbum:0.0.1"
+                    - key:
+                        name: ACEventType
+                        version: 0.0.1
+                      value:
+                        key:
+                          name: ACEventType
+                          version: 0.0.1
+                        UUID: dab78794-b666-3929-a75b-70d634b04fe5
+                        description: Generated description for concept referred to by
+                          key "ACEventType:0.0.1"
+                    - key:
+                        name: APEXacElementPolicy
+                        version: 0.0.1
+                      value:
+                        key:
+                          name: APEXacElementPolicy
+                          version: 0.0.1
+                        UUID: da478611-7d77-3c46-b4be-be968769ba4e
+                        description: Generated description for concept referred to by
+                          key "APEXacElementPolicy:0.0.1"
+                    - key:
+                        name: APEXacElementPolicy_Albums
+                        version: 0.0.1
+                      value:
+                        key:
+                          name: APEXacElementPolicy_Albums
+                          version: 0.0.1
+                        UUID: fa8dc15e-8c8d-3de3-a0f8-585b76511175
+                        description: Generated description for concept referred to by
+                          key "APEXacElementPolicy_Albums:0.0.1"
+                    - key:
+                        name: APEXacElementPolicy_Events
+                        version: 0.0.1
+                      value:
+                        key:
+                          name: APEXacElementPolicy_Events
+                          version: 0.0.1
+                        UUID: 8508cd65-8dd2-342d-a5c6-1570810dbe2b
+                        description: Generated description for concept referred to by
+                          key "APEXacElementPolicy_Events:0.0.1"
+                    - key:
+                        name: APEXacElementPolicy_KeyInfo
+                        version: 0.0.1
+                      value:
+                        key:
+                          name: APEXacElementPolicy_KeyInfo
+                          version: 0.0.1
+                        UUID: 09e6927d-c5ac-3779-919f-9333994eed22
+                        description: Generated description for concept referred to by
+                          key "APEXacElementPolicy_KeyInfo:0.0.1"
+                    - key:
+                        name: APEXacElementPolicy_Policies
+                        version: 0.0.1
+                      value:
+                        key:
+                          name: APEXacElementPolicy_Policies
+                          version: 0.0.1
+                        UUID: cade3c9a-1600-3642-a6f4-315612187f46
+                        description: Generated description for concept referred to by
+                          key "APEXacElementPolicy_Policies:0.0.1"
+                    - key:
+                        name: APEXacElementPolicy_Schemas
+                        version: 0.0.1
+                      value:
+                        key:
+                          name: APEXacElementPolicy_Schemas
+                          version: 0.0.1
+                        UUID: 5bb4a8e9-35fa-37db-9a49-48ef036a7ba9
+                        description: Generated description for concept referred to by
+                          key "APEXacElementPolicy_Schemas:0.0.1"
+                    - key:
+                        name: APEXacElementPolicy_Tasks
+                        version: 0.0.1
+                      value:
+                        key:
+                          name: APEXacElementPolicy_Tasks
+                          version: 0.0.1
+                        UUID: 2527eeec-0d1f-3094-ad3f-212622b12836
+                        description: Generated description for concept referred to by
+                          key "APEXacElementPolicy_Tasks:0.0.1"
+                    - key:
+                        name: AcElementEvent
+                        version: 0.0.1
+                      value:
+                        key:
+                          name: AcElementEvent
+                          version: 0.0.1
+                        UUID: 32c013e2-2740-3986-a626-cbdf665b63e9
+                        description: Generated description for concept referred to by
+                          key "AcElementEvent:0.0.1"
+                    - key:
+                        name: DmaapResponseStatusEvent
+                        version: 0.0.1
+                      value:
+                        key:
+                          name: DmaapResponseStatusEvent
+                          version: 0.0.1
+                        UUID: 2715cb6c-2778-3461-8b69-871e79f95935
+                        description: Generated description for concept referred to by
+                          key "DmaapResponseStatusEvent:0.0.1"
+                    - key:
+                        name: ForwardPayloadTask
+                        version: 0.0.1
+                      value:
+                        key:
+                          name: ForwardPayloadTask
+                          version: 0.0.1
+                        UUID: 51defa03-1ecf-3314-bf34-2a652bce57fa
+                        description: Generated description for concept referred to by
+                          key "ForwardPayloadTask:0.0.1"
+                    - key:
+                        name: LogEvent
+                        version: 0.0.1
+                      value:
+                        key:
+                          name: LogEvent
+                          version: 0.0.1
+                        UUID: c540f048-96af-35e3-a36e-e9c29377cba7
+                        description: Generated description for concept referred to by
+                          key "LogEvent:0.0.1"
+                    - key:
+                        name: ReceiveEventPolicy
+                        version: 0.0.1
+                      value:
+                        key:
+                          name: ReceiveEventPolicy
+                          version: 0.0.1
+                        UUID: 568b7345-9de1-36d3-b6a3-9b857e6809a1
+                        description: Generated description for concept referred to by
+                          key "ReceiveEventPolicy:0.0.1"
+                    - key:
+                        name: SimpleIntType
+                        version: 0.0.1
+                      value:
+                        key:
+                          name: SimpleIntType
+                          version: 0.0.1
+                        UUID: 153791fd-ae0a-36a7-88a5-309a7936415d
+                        description: Generated description for concept referred to by
+                          key "SimpleIntType:0.0.1"
+                    - key:
+                        name: SimpleStringType
+                        version: 0.0.1
+                      value:
+                        key:
+                          name: SimpleStringType
+                          version: 0.0.1
+                        UUID: 8a4957cf-9493-3a76-8c22-a208e23259af
+                        description: Generated description for concept referred to by
+                          key "SimpleStringType:0.0.1"
+                    - key:
+                        name: UUIDType
+                        version: 0.0.1
+                      value:
+                        key:
+                          name: UUIDType
+                          version: 0.0.1
+                        UUID: 6a8cc68e-dfc8-3403-9c6d-071c886b319c
+                        description: Generated description for concept referred to by
+                          key "UUIDType:0.0.1"
+          eventInputParameters:
+            DmaapConsumer:
+              carrierTechnologyParameters:
+                carrierTechnology: RESTCLIENT
+                parameterClassName: org.onap.policy.apex.plugins.event.carrier.restclient.RestClientCarrierTechnologyParameters
+                parameters:
+                  url: http://message-router:3904/events/AC_ELEMENT_MSG/APEX/1?timeout=30000
+              eventProtocolParameters:
+                eventProtocol: JSON
+                parameters:
+                  pojoField: DmaapResponseEvent
+              eventName: AcElementEvent
+              eventNameFilter: AcElementEvent
+          eventOutputParameters:
+            logOutputter:
+              carrierTechnologyParameters:
+                carrierTechnology: FILE
+                parameters:
+                  fileName: outputevents.log
+              eventProtocolParameters:
+                eventProtocol: JSON
+            DmaapReplyProducer:
+              carrierTechnologyParameters:
+                carrierTechnology: RESTCLIENT
+                parameterClassName: org.onap.policy.apex.plugins.event.carrier.restclient.RestClientCarrierTechnologyParameters
+                parameters:
+                  url: http://message-router:3904/events/POLICY_UPDATE_MSG
+              eventProtocolParameters:
+                eventProtocol: JSON
+                parameters:
+                  pojoField: DmaapResponseStatusEvent
+              eventNameFilter: (LogEvent|DmaapResponseStatusEvent)
+        name: onap.policies.native.apex.ac.element
+        version: 1.0.0
diff --git a/models/src/main/java/org/onap/policy/clamp/models/acm/concepts/Participant.java b/models/src/main/java/org/onap/policy/clamp/models/acm/concepts/Participant.java
index 1a8fbc4..6a523fa 100644
--- a/models/src/main/java/org/onap/policy/clamp/models/acm/concepts/Participant.java
+++ b/models/src/main/java/org/onap/policy/clamp/models/acm/concepts/Participant.java
@@ -1,6 +1,6 @@
 /*-
  * ============LICENSE_START=======================================================
- * Copyright (C) 2021 Nordix Foundation.
+ * Copyright (C) 2021-2023 Nordix Foundation.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -39,10 +39,7 @@
     private ToscaConceptIdentifier definition = new ToscaConceptIdentifier(PfConceptKey.getNullKey());
 
     @NonNull
-    private ParticipantState participantState = ParticipantState.UNKNOWN;
-
-    @NonNull
-    private ParticipantHealthStatus healthStatus = ParticipantHealthStatus.UNKNOWN;
+    private ParticipantState participantState = ParticipantState.ON_LINE;
 
     @NonNull
     private ToscaConceptIdentifier participantType = new ToscaConceptIdentifier();
@@ -71,7 +68,6 @@
         super(otherParticipant);
         this.definition = new ToscaConceptIdentifier(otherParticipant.definition);
         this.participantState = otherParticipant.participantState;
-        this.healthStatus = otherParticipant.healthStatus;
         this.participantType = otherParticipant.participantType;
     }
 }
diff --git a/models/src/main/java/org/onap/policy/clamp/models/acm/concepts/ParticipantHealthStatus.java b/models/src/main/java/org/onap/policy/clamp/models/acm/concepts/ParticipantHealthStatus.java
deleted file mode 100644
index f8cc0a8..0000000
--- a/models/src/main/java/org/onap/policy/clamp/models/acm/concepts/ParticipantHealthStatus.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * Copyright (C) 2021 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=========================================================
- */
-
-package org.onap.policy.clamp.models.acm.concepts;
-
-/**
- * Class to hold the possible values for health status of Participant.
- */
-public enum ParticipantHealthStatus {
-
-    /**
-     * Participant is healthy and working fine.
-     */
-    HEALTHY,
-
-    /**
-     * Participant is not healthy.
-     */
-    NOT_HEALTHY,
-
-    /**
-     * Participant is currently under test state and performing tests.
-     */
-    TEST_IN_PROGRESS,
-
-    /**
-     * The health status of the Participant is unknown.
-     */
-    UNKNOWN,
-
-    /**
-     * The health status of the Participant is off line.
-     */
-    OFF_LINE
-}
diff --git a/models/src/main/java/org/onap/policy/clamp/models/acm/concepts/ParticipantState.java b/models/src/main/java/org/onap/policy/clamp/models/acm/concepts/ParticipantState.java
index 4ab42c6..30dc69a 100644
--- a/models/src/main/java/org/onap/policy/clamp/models/acm/concepts/ParticipantState.java
+++ b/models/src/main/java/org/onap/policy/clamp/models/acm/concepts/ParticipantState.java
@@ -1,6 +1,6 @@
 /*-
  * ============LICENSE_START=======================================================
- * Copyright (C) 2021 Nordix Foundation.
+ * Copyright (C) 2021-2023 Nordix Foundation.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -25,36 +25,12 @@
  */
 public enum ParticipantState {
     /**
-     * Participant state is unknown.
+     * Participant state is online.
      */
-    UNKNOWN,
+    ON_LINE,
 
     /**
-     * Participant is passive, automation composition element execution is always rejected.
+     * Participant is offline, automation composition element execution is always rejected.
      */
-    PASSIVE,
-
-    /**
-     * Automation composition element execution execution proceeds, but changes to domain state or context are not
-     * carried out. The participant returns an indication that it is running in SAFE mode together with the action it
-     * would have performed if it was operating in ACTIVE mode.
-     */
-    SAFE,
-
-    /**
-     * Automation composition element execution execution proceeds and changes to domain and state are carried out in a
-     * test environment. The participant returns an indication that it is running in TEST mode together with the action
-     * it has performed on the test environment.
-     */
-    TEST,
-
-    /**
-     * Automation composition element execution is executed in the live environment by the participant.
-     */
-    ACTIVE,
-
-    /**
-     * Automation composition element execution has been terminated.
-     */
-    TERMINATED
+    OFF_LINE
 }
diff --git a/models/src/main/java/org/onap/policy/clamp/models/acm/messages/dmaap/participant/ParticipantStatus.java b/models/src/main/java/org/onap/policy/clamp/models/acm/messages/dmaap/participant/ParticipantStatus.java
index 1d57c24..31a42c5 100644
--- a/models/src/main/java/org/onap/policy/clamp/models/acm/messages/dmaap/participant/ParticipantStatus.java
+++ b/models/src/main/java/org/onap/policy/clamp/models/acm/messages/dmaap/participant/ParticipantStatus.java
@@ -1,6 +1,6 @@
 /*-
  * ============LICENSE_START=======================================================
- * Copyright (C) 2021-2022 Nordix Foundation.
+ * Copyright (C) 2021-2023 Nordix Foundation.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -27,7 +27,6 @@
 import lombok.ToString;
 import org.onap.policy.clamp.models.acm.concepts.AutomationCompositionInfo;
 import org.onap.policy.clamp.models.acm.concepts.ParticipantDefinition;
-import org.onap.policy.clamp.models.acm.concepts.ParticipantHealthStatus;
 import org.onap.policy.clamp.models.acm.concepts.ParticipantState;
 import org.onap.policy.models.base.PfUtils;
 
@@ -41,7 +40,6 @@
 
     // State and health status of the participant
     private ParticipantState state;
-    private ParticipantHealthStatus healthStatus;
 
     // A list of ParticipantDefinition updates, returned in response to ParticipantStatusReq only
     private List<ParticipantDefinition> participantDefinitionUpdates = new ArrayList<>();
@@ -66,7 +64,6 @@
         super(source);
 
         this.state = source.state;
-        this.healthStatus = source.healthStatus;
         this.participantDefinitionUpdates =
             PfUtils.mapList(source.participantDefinitionUpdates, ParticipantDefinition::new);
         this.automationCompositionInfoList =
diff --git a/models/src/main/java/org/onap/policy/clamp/models/acm/persistence/concepts/JpaParticipant.java b/models/src/main/java/org/onap/policy/clamp/models/acm/persistence/concepts/JpaParticipant.java
index 143499c..aec2d32 100644
--- a/models/src/main/java/org/onap/policy/clamp/models/acm/persistence/concepts/JpaParticipant.java
+++ b/models/src/main/java/org/onap/policy/clamp/models/acm/persistence/concepts/JpaParticipant.java
@@ -1,6 +1,6 @@
 /*-
  * ============LICENSE_START=======================================================
- * Copyright (C) 2021 Nordix Foundation.
+ * Copyright (C) 2021-2023 Nordix Foundation.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -34,7 +34,6 @@
 import lombok.NonNull;
 import org.apache.commons.lang3.ObjectUtils;
 import org.onap.policy.clamp.models.acm.concepts.Participant;
-import org.onap.policy.clamp.models.acm.concepts.ParticipantHealthStatus;
 import org.onap.policy.clamp.models.acm.concepts.ParticipantState;
 import org.onap.policy.common.parameters.annotations.NotNull;
 import org.onap.policy.models.base.PfAuthorative;
@@ -80,10 +79,6 @@
     private ParticipantState participantState;
 
     @Column
-    @NotNull
-    private ParticipantHealthStatus healthStatus;
-
-    @Column
     private String description;
 
     /**
@@ -99,7 +94,7 @@
      * @param key the key
      */
     public JpaParticipant(@NonNull final PfConceptKey key) {
-        this(key, new PfConceptKey(), ParticipantState.PASSIVE, ParticipantHealthStatus.UNKNOWN);
+        this(key, new PfConceptKey(), ParticipantState.ON_LINE);
     }
 
     /**
@@ -108,14 +103,12 @@
      * @param key the key
      * @param definition the TOSCA definition of the participant
      * @param participantState the state of the participant
-     * @param healthStatus the health state of the participant
      */
     public JpaParticipant(@NonNull final PfConceptKey key, @NonNull final PfConceptKey definition,
-            @NonNull final ParticipantState participantState, @NonNull ParticipantHealthStatus healthStatus) {
+            @NonNull final ParticipantState participantState) {
         this.key = key;
         this.definition = definition;
         this.participantState = participantState;
-        this.healthStatus = healthStatus;
     }
 
     /**
@@ -128,7 +121,6 @@
         this.key = new PfConceptKey(copyConcept.key);
         this.definition = new PfConceptKey(copyConcept.definition);
         this.participantState = copyConcept.participantState;
-        this.healthStatus = copyConcept.healthStatus;
         this.description = copyConcept.description;
         this.participantType = copyConcept.participantType;
     }
@@ -150,7 +142,6 @@
         participant.setVersion(key.getVersion());
         participant.setDefinition(new ToscaConceptIdentifier(definition));
         participant.setParticipantState(participantState);
-        participant.setHealthStatus(healthStatus);
         participant.setDescription(description);
         participant.setParticipantType(new ToscaConceptIdentifier(participantType));
 
@@ -165,7 +156,6 @@
 
         this.definition = participant.getDefinition().asConceptKey();
         this.setParticipantState(participant.getParticipantState());
-        this.setHealthStatus(participant.getHealthStatus());
         this.setDescription(participant.getDescription());
         this.participantType = participant.getParticipantType().asConceptKey();
     }
@@ -216,11 +206,6 @@
             return result;
         }
 
-        result = ObjectUtils.compare(healthStatus, other.healthStatus);
-        if (result != 0) {
-            return result;
-        }
-
         result = ObjectUtils.compare(participantType, other.participantType);
         if (result != 0) {
             return result;
diff --git a/models/src/main/java/org/onap/policy/clamp/models/acm/persistence/provider/ParticipantProvider.java b/models/src/main/java/org/onap/policy/clamp/models/acm/persistence/provider/ParticipantProvider.java
index 6e3b56d..3f7e297 100644
--- a/models/src/main/java/org/onap/policy/clamp/models/acm/persistence/provider/ParticipantProvider.java
+++ b/models/src/main/java/org/onap/policy/clamp/models/acm/persistence/provider/ParticipantProvider.java
@@ -1,6 +1,6 @@
 /*-
  * ============LICENSE_START=======================================================
- * Copyright (C) 2021-2022 Nordix Foundation.
+ * Copyright (C) 2021-2023 Nordix Foundation.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -23,15 +23,13 @@
 import java.util.List;
 import java.util.Optional;
 import javax.ws.rs.core.Response.Status;
-import lombok.AllArgsConstructor;
 import lombok.NonNull;
+import lombok.RequiredArgsConstructor;
 import org.onap.policy.clamp.models.acm.concepts.Participant;
 import org.onap.policy.clamp.models.acm.persistence.concepts.JpaParticipant;
 import org.onap.policy.clamp.models.acm.persistence.repository.ParticipantRepository;
-import org.onap.policy.models.base.PfConceptKey;
-import org.onap.policy.models.base.PfModelException;
 import org.onap.policy.models.base.PfModelRuntimeException;
-import org.onap.policy.models.tosca.authorative.concepts.ToscaTypedEntityFilter;
+import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifier;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -40,10 +38,10 @@
  */
 @Service
 @Transactional
-@AllArgsConstructor
+@RequiredArgsConstructor
 public class ParticipantProvider {
 
-    private ParticipantRepository participantRepository;
+    private final ParticipantRepository participantRepository;
 
     /**
      * Get participants.
@@ -71,32 +69,12 @@
     /**
      * Get participant.
      *
-     * @param name the name of the participant to get
-     * @param version the version of the participant to get
+     * @param participantId the Id of the participant to get
      * @return the participant found
-     * @throws PfModelException on errors getting participant
      */
     @Transactional(readOnly = true)
-    public Optional<Participant> findParticipant(@NonNull final String name, @NonNull final String version)
-            throws PfModelException {
-        try {
-            return participantRepository.findById(new PfConceptKey(name, version)).map(JpaParticipant::toAuthorative);
-        } catch (IllegalArgumentException e) {
-            throw new PfModelException(Status.BAD_REQUEST, "Error in find Participant", e);
-        }
-    }
-
-    /**
-     * Get filtered participants.
-     *
-     * @param filter the filter for the participants to get
-     * @return the participants found
-     */
-    @Transactional(readOnly = true)
-    public List<Participant> getFilteredParticipants(@NonNull final ToscaTypedEntityFilter<Participant> filter) {
-
-        return filter.filter(ProviderUtils.asEntityList(
-                participantRepository.getFiltered(JpaParticipant.class, filter.getName(), filter.getVersion())));
+    public Optional<Participant> findParticipant(@NonNull final ToscaConceptIdentifier participantId) {
+        return participantRepository.findById(participantId.asConceptKey()).map(JpaParticipant::toAuthorative);
     }
 
     /**
@@ -104,45 +82,31 @@
      *
      * @param participant participant to save
      * @return the participant created
-     * @throws PfModelException on errors creating participants
      */
-    public Participant saveParticipant(@NonNull final Participant participant) throws PfModelException {
-        try {
-            var result = participantRepository
-                    .save(ProviderUtils.getJpaAndValidate(participant, JpaParticipant::new, "participant"));
+    public Participant saveParticipant(@NonNull final Participant participant) {
+        var result = participantRepository
+                .save(ProviderUtils.getJpaAndValidate(participant, JpaParticipant::new, "participant"));
 
-            // Return the saved participant
-            return result.toAuthorative();
-        } catch (IllegalArgumentException e) {
-            throw new PfModelException(Status.BAD_REQUEST, "Error in save Participant", e);
-        }
+        // Return the saved participant
+        return result.toAuthorative();
     }
 
     /**
      * Delete a participant.
      *
-     * @param name the name of the participant to delete
-     * @param version the version of the participant to get
+     * @param participantId the Id of the participant to delete
      * @return the participant deleted
-     * @throws PfModelRuntimeException on errors deleting participants
      */
-    public Participant deleteParticipant(@NonNull final String name, @NonNull final String version)
-            throws PfModelException {
-        try {
-            var participantKey = new PfConceptKey(name, version);
+    public Participant deleteParticipant(@NonNull final ToscaConceptIdentifier participantId) {
+        var jpaDeleteParticipantOpt = participantRepository.findById(participantId.asConceptKey());
 
-            var jpaDeleteParticipantOpt = participantRepository.findById(participantKey);
-
-            if (jpaDeleteParticipantOpt.isEmpty()) {
-                String errorMessage =
-                        "delete of participant \"" + participantKey.getId() + "\" failed, participant does not exist";
-                throw new PfModelRuntimeException(Status.BAD_REQUEST, errorMessage);
-            }
-            participantRepository.delete(jpaDeleteParticipantOpt.get());
-
-            return jpaDeleteParticipantOpt.get().toAuthorative();
-        } catch (IllegalArgumentException e) {
-            throw new PfModelException(Status.BAD_REQUEST, "Error in delete Participant", e);
+        if (jpaDeleteParticipantOpt.isEmpty()) {
+            String errorMessage =
+                    "delete of participant \"" + participantId + "\" failed, participant does not exist";
+            throw new PfModelRuntimeException(Status.BAD_REQUEST, errorMessage);
         }
+        participantRepository.delete(jpaDeleteParticipantOpt.get());
+
+        return jpaDeleteParticipantOpt.get().toAuthorative();
     }
 }
diff --git a/models/src/test/java/org/onap/policy/clamp/models/acm/concepts/ParticipantTest.java b/models/src/test/java/org/onap/policy/clamp/models/acm/concepts/ParticipantTest.java
index f50bf36..f6eb3e0 100644
--- a/models/src/test/java/org/onap/policy/clamp/models/acm/concepts/ParticipantTest.java
+++ b/models/src/test/java/org/onap/policy/clamp/models/acm/concepts/ParticipantTest.java
@@ -1,6 +1,6 @@
 /*-
  * ============LICENSE_START=======================================================
- *  Copyright (C) 2021-2022 Nordix Foundation.
+ *  Copyright (C) 2021-2023 Nordix Foundation.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -59,9 +59,8 @@
 
         p1.setDefinition(new ToscaConceptIdentifier("defName", "0.0.1"));
         p1.setDescription("Description");
-        p1.setHealthStatus(ParticipantHealthStatus.HEALTHY);
         p1.setName("Name");
-        p1.setParticipantState(ParticipantState.ACTIVE);
+        p1.setParticipantState(ParticipantState.ON_LINE);
         p1.setVersion("0.0.1");
 
         assertThat(p1.toString()).contains("Participant(");
@@ -75,7 +74,6 @@
 
         // @formatter:off
         assertThatThrownBy(() -> p2.setDefinition(null)).      isInstanceOf(NullPointerException.class);
-        assertThatThrownBy(() -> p2.setHealthStatus(null)).    isInstanceOf(NullPointerException.class);
         assertThatThrownBy(() -> p2.setParticipantState(null)).isInstanceOf(NullPointerException.class);
         // @formatter:on
 
diff --git a/models/src/test/java/org/onap/policy/clamp/models/acm/messages/dmaap/participant/ParticipantStatusTest.java b/models/src/test/java/org/onap/policy/clamp/models/acm/messages/dmaap/participant/ParticipantStatusTest.java
index 7bf439e..51331b4 100644
--- a/models/src/test/java/org/onap/policy/clamp/models/acm/messages/dmaap/participant/ParticipantStatusTest.java
+++ b/models/src/test/java/org/onap/policy/clamp/models/acm/messages/dmaap/participant/ParticipantStatusTest.java
@@ -1,6 +1,6 @@
 /*-
  * ============LICENSE_START=======================================================
- * Copyright (C) 2021-2022 Nordix Foundation.
+ * Copyright (C) 2021-2023 Nordix Foundation.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -33,7 +33,6 @@
 import org.onap.policy.clamp.models.acm.concepts.AutomationCompositionInfo;
 import org.onap.policy.clamp.models.acm.concepts.AutomationCompositionState;
 import org.onap.policy.clamp.models.acm.concepts.ParticipantDefinition;
-import org.onap.policy.clamp.models.acm.concepts.ParticipantHealthStatus;
 import org.onap.policy.clamp.models.acm.concepts.ParticipantState;
 import org.onap.policy.common.utils.coder.CoderException;
 import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifier;
@@ -59,8 +58,7 @@
         ToscaConceptIdentifier type = new ToscaConceptIdentifier("type", "2.3.4");
         orig.setParticipantType(type);
         orig.setMessageId(UUID.randomUUID());
-        orig.setState(ParticipantState.ACTIVE);
-        orig.setHealthStatus(ParticipantHealthStatus.HEALTHY);
+        orig.setState(ParticipantState.ON_LINE);
         orig.setTimestamp(Instant.ofEpochMilli(3000));
 
         var acInfo = getAutomationCompositionInfo(automationCompositionId);
diff --git a/models/src/test/java/org/onap/policy/clamp/models/acm/persistence/concepts/JpaParticipantTest.java b/models/src/test/java/org/onap/policy/clamp/models/acm/persistence/concepts/JpaParticipantTest.java
index 3ff6149..9d1d7ff 100644
--- a/models/src/test/java/org/onap/policy/clamp/models/acm/persistence/concepts/JpaParticipantTest.java
+++ b/models/src/test/java/org/onap/policy/clamp/models/acm/persistence/concepts/JpaParticipantTest.java
@@ -1,6 +1,6 @@
 /*-
  * ============LICENSE_START=======================================================
- *  Copyright (C) 2021-2022 Nordix Foundation.
+ *  Copyright (C) 2021-2023 Nordix Foundation.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -29,7 +29,6 @@
 
 import org.junit.jupiter.api.Test;
 import org.onap.policy.clamp.models.acm.concepts.Participant;
-import org.onap.policy.clamp.models.acm.concepts.ParticipantHealthStatus;
 import org.onap.policy.clamp.models.acm.concepts.ParticipantState;
 import org.onap.policy.models.base.PfConceptKey;
 import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifier;
@@ -48,58 +47,52 @@
 
         assertThatThrownBy(() -> new JpaParticipant((PfConceptKey) null)).hasMessageMatching(NULL_KEY_ERROR);
 
-        assertThatThrownBy(() -> new JpaParticipant(null, null, null, null)).hasMessageMatching(NULL_KEY_ERROR);
+        assertThatThrownBy(() -> new JpaParticipant(null, null, null)).hasMessageMatching(NULL_KEY_ERROR);
 
-        assertThatThrownBy(() -> new JpaParticipant(null, null, null, ParticipantHealthStatus.HEALTHY))
+        assertThatThrownBy(() -> new JpaParticipant(null, null, null))
             .hasMessageMatching(NULL_KEY_ERROR);
 
-        assertThatThrownBy(() -> new JpaParticipant(null, null, ParticipantState.ACTIVE, null))
+        assertThatThrownBy(() -> new JpaParticipant(null, null, ParticipantState.ON_LINE))
             .hasMessageMatching(NULL_KEY_ERROR);
 
         assertThatThrownBy(
-            () -> new JpaParticipant(null, null, ParticipantState.ACTIVE, ParticipantHealthStatus.HEALTHY))
+            () -> new JpaParticipant(null, null, ParticipantState.ON_LINE))
             .hasMessageMatching(NULL_KEY_ERROR);
 
-        assertThatThrownBy(() -> new JpaParticipant(null, new PfConceptKey(), null, null))
+        assertThatThrownBy(() -> new JpaParticipant(null, new PfConceptKey(), null))
             .hasMessageMatching(NULL_KEY_ERROR);
 
-        assertThatThrownBy(() -> new JpaParticipant(null, new PfConceptKey(), null, ParticipantHealthStatus.HEALTHY))
+        assertThatThrownBy(() -> new JpaParticipant(null, new PfConceptKey(), null))
             .hasMessageMatching(NULL_KEY_ERROR);
 
-        assertThatThrownBy(() -> new JpaParticipant(null, new PfConceptKey(), ParticipantState.ACTIVE, null))
+        assertThatThrownBy(() -> new JpaParticipant(null, new PfConceptKey(), ParticipantState.ON_LINE))
             .hasMessageMatching(NULL_KEY_ERROR);
 
-        assertThatThrownBy(() -> new JpaParticipant(null, new PfConceptKey(), ParticipantState.ACTIVE,
-            ParticipantHealthStatus.HEALTHY))
+        assertThatThrownBy(() -> new JpaParticipant(null, new PfConceptKey(), ParticipantState.ON_LINE))
             .hasMessageMatching(NULL_KEY_ERROR);
 
-        assertThatThrownBy(() -> new JpaParticipant(new PfConceptKey(), null, null, null))
+        assertThatThrownBy(() -> new JpaParticipant(new PfConceptKey(), null, null))
             .hasMessageMatching("definition is marked .*ull but is null");
 
-        assertThatThrownBy(() -> new JpaParticipant(new PfConceptKey(), null, null, ParticipantHealthStatus.HEALTHY))
+        assertThatThrownBy(() -> new JpaParticipant(new PfConceptKey(), null, null))
             .hasMessageMatching("definition is marked .*ull but is null");
 
-        assertThatThrownBy(() -> new JpaParticipant(new PfConceptKey(), null, ParticipantState.ACTIVE, null))
+        assertThatThrownBy(() -> new JpaParticipant(new PfConceptKey(), null, ParticipantState.ON_LINE))
             .hasMessageMatching("definition is marked .*ull but is null");
 
-        assertThatThrownBy(() -> new JpaParticipant(new PfConceptKey(), null, ParticipantState.ACTIVE,
-            ParticipantHealthStatus.HEALTHY)).hasMessageMatching("definition is marked .*ull but is null");
+        assertThatThrownBy(() -> new JpaParticipant(new PfConceptKey(), null, ParticipantState.ON_LINE
+            )).hasMessageMatching("definition is marked .*ull but is null");
 
-        assertThatThrownBy(() -> new JpaParticipant(new PfConceptKey(), new PfConceptKey(), null, null))
+        assertThatThrownBy(() -> new JpaParticipant(new PfConceptKey(), new PfConceptKey(), null))
             .hasMessageMatching("participantState is marked .*ull but is null");
 
         assertThatThrownBy(
-            () -> new JpaParticipant(new PfConceptKey(), new PfConceptKey(), null, ParticipantHealthStatus.HEALTHY))
+            () -> new JpaParticipant(new PfConceptKey(), new PfConceptKey(), null))
             .hasMessageMatching("participantState is marked .*ull but is null");
 
-        assertThatThrownBy(
-            () -> new JpaParticipant(new PfConceptKey(), new PfConceptKey(), ParticipantState.ACTIVE, null))
-            .hasMessageMatching("healthStatus is marked .*ull but is null");
-
         assertNotNull(new JpaParticipant());
         assertNotNull(new JpaParticipant((new PfConceptKey())));
-        assertNotNull(new JpaParticipant(new PfConceptKey(), new PfConceptKey(), ParticipantState.ACTIVE,
-            ParticipantHealthStatus.HEALTHY));
+        assertNotNull(new JpaParticipant(new PfConceptKey(), new PfConceptKey(), ParticipantState.ON_LINE));
     }
 
     @Test
@@ -171,16 +164,10 @@
         testJpaParticipant.setDefinition(new PfConceptKey("participantDefinitionName", "0.0.1"));
         assertEquals(0, testJpaParticipant.compareTo(otherJpaParticipant));
 
-        testJpaParticipant.setParticipantState(ParticipantState.PASSIVE);
+        testJpaParticipant.setParticipantState(ParticipantState.OFF_LINE);
         assertNotEquals(0, testJpaParticipant.compareTo(otherJpaParticipant));
-        testJpaParticipant.setParticipantState(ParticipantState.UNKNOWN);
+        testJpaParticipant.setParticipantState(ParticipantState.ON_LINE);
         assertEquals(0, testJpaParticipant.compareTo(otherJpaParticipant));
-
-        testJpaParticipant.setHealthStatus(ParticipantHealthStatus.NOT_HEALTHY);
-        assertNotEquals(0, testJpaParticipant.compareTo(otherJpaParticipant));
-        testJpaParticipant.setHealthStatus(ParticipantHealthStatus.UNKNOWN);
-        assertEquals(0, testJpaParticipant.compareTo(otherJpaParticipant));
-
         assertEquals(testJpaParticipant, new JpaParticipant(testJpaParticipant));
     }
 
@@ -199,9 +186,8 @@
 
         p1.setDefinition(new PfConceptKey("defName", "0.0.1"));
         p1.setDescription("Description");
-        p1.setHealthStatus(ParticipantHealthStatus.HEALTHY);
         p1.setKey(new PfConceptKey("participant", "0.0.1"));
-        p1.setParticipantState(ParticipantState.ACTIVE);
+        p1.setParticipantState(ParticipantState.ON_LINE);
 
         assertThat(p1.toString()).contains("Participant(");
         assertNotEquals(0, p1.hashCode());
diff --git a/models/src/test/java/org/onap/policy/clamp/models/acm/persistence/provider/ParticipantProviderTest.java b/models/src/test/java/org/onap/policy/clamp/models/acm/persistence/provider/ParticipantProviderTest.java
index c7355f0..e115419 100644
--- a/models/src/test/java/org/onap/policy/clamp/models/acm/persistence/provider/ParticipantProviderTest.java
+++ b/models/src/test/java/org/onap/policy/clamp/models/acm/persistence/provider/ParticipantProviderTest.java
@@ -1,6 +1,6 @@
 /*-
  * ============LICENSE_START=======================================================
- * Copyright (C) 2021-2022 Nordix Foundation.
+ * Copyright (C) 2021-2023 Nordix Foundation.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -40,13 +40,14 @@
 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.ToscaTypedEntityFilter;
+import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifier;
 
 class ParticipantProviderTest {
 
     private static final Coder CODER = new StandardCoder();
     private static final String PARTICIPANT_JSON = "src/test/resources/providers/TestParticipant.json";
     private static final String LIST_IS_NULL = ".*. is marked .*ull but is null";
+    private static final ToscaConceptIdentifier INVALID_ID = new ToscaConceptIdentifier("invalid_name", "1.0.1");
 
     private final List<Participant> inputParticipants = new ArrayList<>();
     private List<JpaParticipant> jpaParticipantList;
@@ -67,18 +68,12 @@
         }
         var participantProvider = new ParticipantProvider(participantRepository);
 
-        assertThatThrownBy(() -> participantProvider.saveParticipant(null))
-            .hasMessageMatching(LIST_IS_NULL);
+        assertThatThrownBy(() -> participantProvider.saveParticipant(null)).hasMessageMatching(LIST_IS_NULL);
 
         when(participantRepository.save(any())).thenReturn(jpaParticipantList.get(0));
 
         Participant savedParticipant = participantProvider.saveParticipant(inputParticipants.get(0));
         assertEquals(savedParticipant, inputParticipants.get(0));
-
-        when(participantRepository.save(any())).thenThrow(IllegalArgumentException.class);
-
-        assertThatThrownBy(() -> participantProvider.saveParticipant(inputParticipants.get(0)))
-            .hasMessageMatching("Error in save Participant");
     }
 
     @Test
@@ -98,26 +93,10 @@
 
         assertThat(participantProvider.getParticipants("invalid_name", "1.0.1")).isEmpty();
 
-        assertThat(participantProvider.findParticipant("invalid_name", "1.0.1")).isEmpty();
+        assertThat(participantProvider.findParticipant(INVALID_ID)).isEmpty();
 
         when(participantRepository.findAll()).thenReturn(jpaParticipantList);
         assertThat(participantProvider.getParticipants()).hasSize(inputParticipants.size());
-
-        when(participantRepository.findById(any())).thenThrow(IllegalArgumentException.class);
-
-        assertThatThrownBy(() -> participantProvider.findParticipant("notValid", "notValid"))
-            .hasMessageMatching("Error in find Participant");
-
-        assertThatThrownBy(() -> participantProvider.getFilteredParticipants(null))
-            .hasMessageMatching("filter is marked .*ull but is null");
-
-        when(participantRepository.getFiltered((JpaParticipant.class), (null), (null)))
-                .thenReturn(jpaParticipantList);
-
-        final ToscaTypedEntityFilter<Participant> filter = ToscaTypedEntityFilter.<Participant>builder()
-                .type("org.onap.domain.pmsh.PMSHAutomationCompositionDefinition").build();
-        assertEquals(1, participantProvider.getFilteredParticipants(filter).size());
-
     }
 
     @Test
@@ -125,19 +104,13 @@
         var participantRepository = mock(ParticipantRepository.class);
         var participantProvider = new ParticipantProvider(participantRepository);
 
-        assertThatThrownBy(() -> participantProvider.deleteParticipant("Invalid_name", "1.0.1"))
-            .hasMessageMatching(".*.failed, participant does not exist");
-
-        String name = inputParticipants.get(0).getName();
-        String version = inputParticipants.get(0).getVersion();
+        assertThatThrownBy(() -> participantProvider.deleteParticipant(INVALID_ID))
+                .hasMessageMatching(".*.failed, participant does not exist");
 
         when(participantRepository.findById(any())).thenReturn(Optional.of(jpaParticipantList.get(0)));
 
-        Participant deletedParticipant = participantProvider.deleteParticipant(name, version);
+        Participant deletedParticipant =
+                participantProvider.deleteParticipant(inputParticipants.get(0).getDefinition());
         assertEquals(inputParticipants.get(0), deletedParticipant);
-
-        when(participantRepository.findById(any())).thenThrow(IllegalArgumentException.class);
-        assertThatThrownBy(() -> participantProvider.deleteParticipant(name, version))
-            .hasMessageMatching("Error in delete Participant");
     }
 }
diff --git a/models/src/test/resources/providers/TestAcElementStatistics.json b/models/src/test/resources/providers/TestAcElementStatistics.json
deleted file mode 100644
index cceb91d..0000000
--- a/models/src/test/resources/providers/TestAcElementStatistics.json
+++ /dev/null
@@ -1,24 +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":"name2",
-        "version":"1.001"
-      },
-      "id": "709c62b3-8918-41b9-a747-d21eb79c6c21",
-      "timeStamp": "2021-01-10T14:25:00.000Z",
-      "state": "UNINITIALISED",
-      "acElementUptime":330
-    }
-  ]
-}
diff --git a/models/src/test/resources/providers/TestParticipant.json b/models/src/test/resources/providers/TestParticipant.json
index 7e4f954..5d8a7ea 100644
--- a/models/src/test/resources/providers/TestParticipant.json
+++ b/models/src/test/resources/providers/TestParticipant.json
@@ -5,8 +5,7 @@
     "name": "org.onap.domain.pmsh.PMSHAutomationCompositionDefinition",
     "version": "1.0.0"
   },
-  "participantState": "PASSIVE",
-  "healthStatus": "HEALTHY",
+  "participantState": "ON_LINE",
   "description": "A dummy PMSH participant1",
   "participantType":{
     "name": "org.onap.domain.pmsh.PolicyAutomationCompositionDefinition",
diff --git a/models/src/test/resources/providers/TestParticipantStatistics.json b/models/src/test/resources/providers/TestParticipantStatistics.json
deleted file mode 100644
index 5cf6268..0000000
--- a/models/src/test/resources/providers/TestParticipantStatistics.json
+++ /dev/null
@@ -1,32 +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":"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
-    }
-  ]
-}
diff --git a/participant/participant-intermediary/src/main/java/org/onap/policy/clamp/acm/participant/intermediary/handler/ParticipantHandler.java b/participant/participant-intermediary/src/main/java/org/onap/policy/clamp/acm/participant/intermediary/handler/ParticipantHandler.java
index b442b99..6edf1ff 100644
--- a/participant/participant-intermediary/src/main/java/org/onap/policy/clamp/acm/participant/intermediary/handler/ParticipantHandler.java
+++ b/participant/participant-intermediary/src/main/java/org/onap/policy/clamp/acm/participant/intermediary/handler/ParticipantHandler.java
@@ -1,6 +1,6 @@
 /*-
  * ============LICENSE_START=======================================================
- *  Copyright (C) 2021-2022 Nordix Foundation.
+ *  Copyright (C) 2021-2023 Nordix Foundation.
  * ================================================================================
  * Modifications Copyright (C) 2021 AT&T Intellectual Property. All rights reserved.
  * ================================================================================
@@ -29,13 +29,11 @@
 import java.util.Map;
 import java.util.UUID;
 import lombok.Getter;
-import lombok.Setter;
 import org.onap.policy.clamp.acm.participant.intermediary.comm.ParticipantMessagePublisher;
 import org.onap.policy.clamp.acm.participant.intermediary.parameters.ParticipantParameters;
 import org.onap.policy.clamp.models.acm.concepts.AutomationCompositionElementDefinition;
 import org.onap.policy.clamp.models.acm.concepts.AutomationCompositionInfo;
 import org.onap.policy.clamp.models.acm.concepts.ParticipantDefinition;
-import org.onap.policy.clamp.models.acm.concepts.ParticipantHealthStatus;
 import org.onap.policy.clamp.models.acm.concepts.ParticipantState;
 import org.onap.policy.clamp.models.acm.messages.dmaap.participant.AutomationCompositionStateChange;
 import org.onap.policy.clamp.models.acm.messages.dmaap.participant.AutomationCompositionUpdate;
@@ -70,12 +68,6 @@
     private final AutomationCompositionHandler automationCompositionHandler;
     private final ParticipantMessagePublisher publisher;
 
-    @Setter
-    private ParticipantState state = ParticipantState.UNKNOWN;
-
-    @Setter
-    private ParticipantHealthStatus healthStatus = ParticipantHealthStatus.UNKNOWN;
-
     private final Map<UUID, List<AutomationCompositionElementDefinition>> acElementDefsMap = new HashMap<>();
 
     /**
@@ -169,21 +161,9 @@
     public void handleParticipantRegisterAck(ParticipantRegisterAck participantRegisterAckMsg) {
         LOGGER.debug("ParticipantRegisterAck message received as responseTo {}",
                 participantRegisterAckMsg.getResponseTo());
-        statusToPassive();
         publisher.sendParticipantStatus(makeHeartbeat(false));
     }
 
-    private void statusToPassive() {
-        if (ParticipantHealthStatus.UNKNOWN.equals(this.healthStatus)) {
-            this.healthStatus = ParticipantHealthStatus.HEALTHY;
-        }
-
-        if (ParticipantState.UNKNOWN.equals(this.state) || ParticipantState.TERMINATED.equals(this.state)) {
-            this.state = ParticipantState.PASSIVE;
-        }
-
-    }
-
     /**
      * Method to send ParticipantDeregister message to automation composition runtime.
      */
@@ -218,7 +198,6 @@
 
         acElementDefsMap.putIfAbsent(participantUpdateMsg.getCompositionId(), new ArrayList<>());
         if (!participantUpdateMsg.getParticipantDefinitionUpdates().isEmpty()) {
-            statusToPassive();
             // This message is to commission the automation composition
             for (var participantDefinition : participantUpdateMsg.getParticipantDefinitionUpdates()) {
                 if (participantDefinition.getParticipantType().equals(participantType)) {
@@ -230,7 +209,6 @@
         } else {
             // This message is to decommission the automation composition
             acElementDefsMap.get(participantUpdateMsg.getCompositionId()).clear();
-            this.state = ParticipantState.TERMINATED;
         }
         sendParticipantUpdateAck(participantUpdateMsg.getMessageId());
     }
@@ -245,7 +223,7 @@
         participantUpdateAck.setResult(true);
         participantUpdateAck.setParticipantId(participantId);
         participantUpdateAck.setParticipantType(participantType);
-        participantUpdateAck.setState(state);
+        participantUpdateAck.setState(ParticipantState.ON_LINE);
         publisher.sendParticipantUpdateAck(participantUpdateAck);
     }
 
@@ -263,8 +241,7 @@
         var heartbeat = new ParticipantStatus();
         heartbeat.setParticipantId(participantId);
         heartbeat.setParticipantType(participantType);
-        heartbeat.setHealthStatus(healthStatus);
-        heartbeat.setState(state);
+        heartbeat.setState(ParticipantState.ON_LINE);
         heartbeat.setAutomationCompositionInfoList(getAutomationCompositionInfoList());
 
         if (responseToParticipantStatusReq) {
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 9a80508..c274474 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
@@ -1,6 +1,6 @@
 /*-
  * ============LICENSE_START=======================================================
- *  Copyright (C) 2021,2022 Nordix Foundation.
+ *  Copyright (C) 2021,2023 Nordix Foundation.
  *  Modifications Copyright (C) 2021 AT&T Intellectual Property. All rights reserved.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -29,28 +29,17 @@
 import lombok.AllArgsConstructor;
 import org.onap.policy.clamp.acm.runtime.supervision.comm.AutomationCompositionStateChangePublisher;
 import org.onap.policy.clamp.acm.runtime.supervision.comm.AutomationCompositionUpdatePublisher;
-import org.onap.policy.clamp.acm.runtime.supervision.comm.ParticipantDeregisterAckPublisher;
-import org.onap.policy.clamp.acm.runtime.supervision.comm.ParticipantRegisterAckPublisher;
 import org.onap.policy.clamp.acm.runtime.supervision.comm.ParticipantUpdatePublisher;
 import org.onap.policy.clamp.common.acm.exception.AutomationCompositionException;
 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.AutomationCompositionElementAck;
 import org.onap.policy.clamp.models.acm.concepts.AutomationCompositionState;
-import org.onap.policy.clamp.models.acm.concepts.Participant;
-import org.onap.policy.clamp.models.acm.concepts.ParticipantHealthStatus;
-import org.onap.policy.clamp.models.acm.concepts.ParticipantState;
 import org.onap.policy.clamp.models.acm.concepts.ParticipantUtils;
 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.ParticipantMessage;
-import org.onap.policy.clamp.models.acm.messages.dmaap.participant.ParticipantRegister;
-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.models.base.PfModelException;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.stereotype.Component;
@@ -75,110 +64,14 @@
     private static final String AND_TRANSITIONING_TO_STATE = " and transitioning to state ";
 
     private final AutomationCompositionProvider automationCompositionProvider;
-    private final ParticipantProvider participantProvider;
     private final AcDefinitionProvider acDefinitionProvider;
 
     // Publishers for participant communication
     private final AutomationCompositionUpdatePublisher automationCompositionUpdatePublisher;
     private final AutomationCompositionStateChangePublisher automationCompositionStateChangePublisher;
-    private final ParticipantRegisterAckPublisher participantRegisterAckPublisher;
-    private final ParticipantDeregisterAckPublisher participantDeregisterAckPublisher;
     private final ParticipantUpdatePublisher participantUpdatePublisher;
 
     /**
-     * Handle a ParticipantStatus message from a participant.
-     *
-     * @param participantStatusMessage the ParticipantStatus message received from a participant
-     */
-    @MessageIntercept
-    @Timed(value = "listener.participant_status", description = "PARTICIPANT_STATUS messages received")
-    public void handleParticipantMessage(ParticipantStatus participantStatusMessage) {
-        LOGGER.debug("Participant Status received {}", participantStatusMessage);
-        try {
-            superviseParticipant(participantStatusMessage);
-        } catch (PfModelException | AutomationCompositionException svExc) {
-            LOGGER.warn("error supervising participant {}", participantStatusMessage.getParticipantId(), svExc);
-        }
-    }
-
-    /**
-     * Handle a ParticipantRegister message from a participant.
-     *
-     * @param participantRegisterMessage the ParticipantRegister message received from a participant
-     */
-    @MessageIntercept
-    @Timed(value = "listener.participant_register", description = "PARTICIPANT_REGISTER messages received")
-    public void handleParticipantMessage(ParticipantRegister participantRegisterMessage) {
-        LOGGER.debug("Participant Register received {}", participantRegisterMessage);
-        try {
-            checkParticipant(participantRegisterMessage, ParticipantState.UNKNOWN, ParticipantHealthStatus.UNKNOWN);
-        } catch (PfModelException | AutomationCompositionException svExc) {
-            LOGGER.warn("error saving participant {}", participantRegisterMessage.getParticipantId(), svExc);
-        }
-
-        participantUpdatePublisher.sendCommissioning(participantRegisterMessage.getParticipantId(),
-                participantRegisterMessage.getParticipantType());
-
-        participantRegisterAckPublisher.send(participantRegisterMessage.getMessageId(),
-                participantRegisterMessage.getParticipantId(), participantRegisterMessage.getParticipantType());
-    }
-
-    /**
-     * Handle a ParticipantDeregister message from a participant.
-     *
-     * @param participantDeregisterMessage the ParticipantDeregister message received from a participant
-     */
-    @MessageIntercept
-    @Timed(value = "listener.participant_deregister", description = "PARTICIPANT_DEREGISTER messages received")
-    public void handleParticipantMessage(ParticipantDeregister participantDeregisterMessage) {
-        LOGGER.debug("Participant Deregister received {}", participantDeregisterMessage);
-        try {
-            var participantOpt =
-                    participantProvider.findParticipant(participantDeregisterMessage.getParticipantId().getName(),
-                            participantDeregisterMessage.getParticipantId().getVersion());
-
-            if (participantOpt.isPresent()) {
-                var participant = participantOpt.get();
-                participant.setParticipantState(ParticipantState.TERMINATED);
-                participant.setHealthStatus(ParticipantHealthStatus.OFF_LINE);
-                participantProvider.saveParticipant(participant);
-            }
-        } catch (PfModelException pfme) {
-            LOGGER.warn("Model exception occured with participant id {}",
-                    participantDeregisterMessage.getParticipantId());
-        }
-
-        participantDeregisterAckPublisher.send(participantDeregisterMessage.getMessageId());
-    }
-
-    /**
-     * Handle a ParticipantUpdateAck message from a participant.
-     *
-     * @param participantUpdateAckMessage the ParticipantUpdateAck message received from a participant
-     */
-    @MessageIntercept
-    @Timed(value = "listener.participant_update_ack", description = "PARTICIPANT_UPDATE_ACK messages received")
-    public void handleParticipantMessage(ParticipantUpdateAck participantUpdateAckMessage) {
-        LOGGER.debug("Participant Update Ack received {}", participantUpdateAckMessage);
-        try {
-            var participantOpt =
-                    participantProvider.findParticipant(participantUpdateAckMessage.getParticipantId().getName(),
-                            participantUpdateAckMessage.getParticipantId().getVersion());
-
-            if (participantOpt.isPresent()) {
-                var participant = participantOpt.get();
-                participant.setParticipantState(participantUpdateAckMessage.getState());
-                participantProvider.saveParticipant(participant);
-            } else {
-                LOGGER.warn("Participant not found in database {}", participantUpdateAckMessage.getParticipantId());
-            }
-        } catch (PfModelException pfme) {
-            LOGGER.warn("Model exception occured with participant id {}",
-                    participantUpdateAckMessage.getParticipantId());
-        }
-    }
-
-    /**
      * Send commissioning update message to dmaap.
      *
      * @param acmDefinition the AutomationComposition Definition
@@ -213,6 +106,17 @@
     }
 
     /**
+     * Handle a ParticipantUpdateAck message from a participant.
+     *
+     * @param participantUpdateAckMessage the ParticipantUpdateAck message received from a participant
+     */
+    @MessageIntercept
+    @Timed(value = "listener.participant_update_ack", description = "PARTICIPANT_UPDATE_ACK messages received")
+    public void handleParticipantMessage(ParticipantUpdateAck participantUpdateAckMessage) {
+        LOGGER.debug("Participant Update Ack message received {}", participantUpdateAckMessage);
+    }
+
+    /**
      * Handle a AutomationComposition statechange acknowledge message from a participant.
      *
      * @param automationCompositionAckMessage the AutomationCompositionAck message received from a participant
@@ -405,40 +309,6 @@
         return ParticipantUtils.getFirstStartPhase(automationComposition, toscaServiceTemplate);
     }
 
-    private void checkParticipant(ParticipantMessage participantMessage, ParticipantState participantState,
-            ParticipantHealthStatus healthStatus) throws AutomationCompositionException, PfModelException {
-        if (participantMessage.getParticipantId() == null) {
-            exceptionOccured(Response.Status.NOT_FOUND, "Participant ID on PARTICIPANT_STATUS message is null");
-        }
-        var participantOpt = participantProvider.findParticipant(participantMessage.getParticipantId().getName(),
-                participantMessage.getParticipantId().getVersion());
-
-        if (participantOpt.isEmpty()) {
-            var participant = new Participant();
-            participant.setName(participantMessage.getParticipantId().getName());
-            participant.setVersion(participantMessage.getParticipantId().getVersion());
-            participant.setDefinition(participantMessage.getParticipantId());
-            participant.setParticipantType(participantMessage.getParticipantType());
-            participant.setParticipantState(participantState);
-            participant.setHealthStatus(healthStatus);
-
-            participantProvider.saveParticipant(participant);
-        } else {
-            var participant = participantOpt.get();
-            participant.setParticipantState(participantState);
-            participant.setHealthStatus(healthStatus);
-
-            participantProvider.saveParticipant(participant);
-        }
-    }
-
-    private void superviseParticipant(ParticipantStatus participantStatusMessage)
-            throws PfModelException, AutomationCompositionException {
-
-        checkParticipant(participantStatusMessage, participantStatusMessage.getState(),
-                participantStatusMessage.getHealthStatus());
-    }
-
     private void exceptionOccured(Response.Status status, String reason) throws AutomationCompositionException {
         throw new AutomationCompositionException(status, reason);
     }
diff --git a/runtime-acm/src/main/java/org/onap/policy/clamp/acm/runtime/supervision/SupervisionParticipantHandler.java b/runtime-acm/src/main/java/org/onap/policy/clamp/acm/runtime/supervision/SupervisionParticipantHandler.java
new file mode 100644
index 0000000..da9187d
--- /dev/null
+++ b/runtime-acm/src/main/java/org/onap/policy/clamp/acm/runtime/supervision/SupervisionParticipantHandler.java
@@ -0,0 +1,116 @@
+/*-
+ * ============LICENSE_START=======================================================
+ *  Copyright (C) 2023 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=========================================================
+ */
+
+package org.onap.policy.clamp.acm.runtime.supervision;
+
+import io.micrometer.core.annotation.Timed;
+import lombok.AllArgsConstructor;
+import org.onap.policy.clamp.acm.runtime.supervision.comm.ParticipantDeregisterAckPublisher;
+import org.onap.policy.clamp.acm.runtime.supervision.comm.ParticipantRegisterAckPublisher;
+import org.onap.policy.clamp.models.acm.concepts.Participant;
+import org.onap.policy.clamp.models.acm.concepts.ParticipantState;
+import org.onap.policy.clamp.models.acm.messages.dmaap.participant.ParticipantDeregister;
+import org.onap.policy.clamp.models.acm.messages.dmaap.participant.ParticipantMessage;
+import org.onap.policy.clamp.models.acm.messages.dmaap.participant.ParticipantRegister;
+import org.onap.policy.clamp.models.acm.messages.dmaap.participant.ParticipantStatus;
+import org.onap.policy.clamp.models.acm.persistence.provider.ParticipantProvider;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Component;
+
+/**
+ * This class handles supervision of participant status.
+ */
+@Component
+@AllArgsConstructor
+public class SupervisionParticipantHandler {
+    private static final Logger LOGGER = LoggerFactory.getLogger(SupervisionParticipantHandler.class);
+
+    private final ParticipantProvider participantProvider;
+    private final ParticipantRegisterAckPublisher participantRegisterAckPublisher;
+    private final ParticipantDeregisterAckPublisher participantDeregisterAckPublisher;
+
+    /**
+     * Handle a ParticipantRegister message from a participant.
+     *
+     * @param participantRegisterMsg the ParticipantRegister message received from a participant
+     */
+    @MessageIntercept
+    @Timed(value = "listener.participant_register", description = "PARTICIPANT_REGISTER messages received")
+    public void handleParticipantMessage(ParticipantRegister participantRegisterMsg) {
+        LOGGER.debug("Participant Register received {}", participantRegisterMsg);
+        saveParticipantStatus(participantRegisterMsg);
+
+        participantRegisterAckPublisher.send(participantRegisterMsg.getMessageId(),
+                participantRegisterMsg.getParticipantId(), participantRegisterMsg.getParticipantType());
+    }
+
+    /**
+     * Handle a ParticipantDeregister message from a participant.
+     *
+     * @param participantDeregisterMsg the ParticipantDeregister message received from a participant
+     */
+    @MessageIntercept
+    @Timed(value = "listener.participant_deregister", description = "PARTICIPANT_DEREGISTER messages received")
+    public void handleParticipantMessage(ParticipantDeregister participantDeregisterMsg) {
+        LOGGER.debug("Participant Deregister received {}", participantDeregisterMsg);
+        var participantOpt = participantProvider.findParticipant(participantDeregisterMsg.getParticipantId());
+
+        if (participantOpt.isPresent()) {
+            var participant = participantOpt.get();
+            participant.setParticipantState(ParticipantState.OFF_LINE);
+            participantProvider.saveParticipant(participant);
+        }
+
+        participantDeregisterAckPublisher.send(participantDeregisterMsg.getMessageId());
+    }
+
+    /**
+     * Handle a ParticipantStatus message from a participant.
+     *
+     * @param participantStatusMsg the ParticipantStatus message received from a participant
+     */
+    @MessageIntercept
+    @Timed(value = "listener.participant_status", description = "PARTICIPANT_STATUS messages received")
+    public void handleParticipantMessage(ParticipantStatus participantStatusMsg) {
+        LOGGER.debug("Participant Status received {}", participantStatusMsg);
+        saveParticipantStatus(participantStatusMsg);
+    }
+
+    private void saveParticipantStatus(ParticipantMessage participantMessage) {
+        var participantOpt = participantProvider.findParticipant(participantMessage.getParticipantId());
+
+        if (participantOpt.isEmpty()) {
+            var participant = new Participant();
+            participant.setName(participantMessage.getParticipantId().getName());
+            participant.setVersion(participantMessage.getParticipantId().getVersion());
+            participant.setDefinition(participantMessage.getParticipantId());
+            participant.setParticipantType(participantMessage.getParticipantType());
+            participant.setParticipantState(ParticipantState.ON_LINE);
+
+            participantProvider.saveParticipant(participant);
+        } else {
+            var participant = participantOpt.get();
+            participant.setParticipantState(ParticipantState.ON_LINE);
+
+            participantProvider.saveParticipant(participant);
+        }
+    }
+}
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 a71f49c..e595f3b 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
@@ -1,6 +1,6 @@
 /*-
  * ============LICENSE_START=======================================================
- * Copyright (C) 2021-2022 Nordix Foundation.
+ * Copyright (C) 2021-2023 Nordix Foundation.
  * ================================================================================
  * Modifications Copyright (C) 2021 AT&T Intellectual Property. All rights reserved.
  * ================================================================================
@@ -28,16 +28,14 @@
 import org.onap.policy.clamp.acm.runtime.main.parameters.AcRuntimeParameterGroup;
 import org.onap.policy.clamp.acm.runtime.supervision.comm.AutomationCompositionStateChangePublisher;
 import org.onap.policy.clamp.acm.runtime.supervision.comm.AutomationCompositionUpdatePublisher;
-import org.onap.policy.clamp.acm.runtime.supervision.comm.ParticipantStatusReqPublisher;
 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.concepts.Participant;
-import org.onap.policy.clamp.models.acm.concepts.ParticipantHealthStatus;
+import org.onap.policy.clamp.models.acm.concepts.ParticipantState;
 import org.onap.policy.clamp.models.acm.concepts.ParticipantUtils;
 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.base.PfModelException;
 import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifier;
 import org.onap.policy.models.tosca.authorative.concepts.ToscaServiceTemplate;
 import org.slf4j.Logger;
@@ -61,7 +59,6 @@
     private final AutomationCompositionStateChangePublisher automationCompositionStateChangePublisher;
     private final AutomationCompositionUpdatePublisher automationCompositionUpdatePublisher;
     private final ParticipantProvider participantProvider;
-    private final ParticipantStatusReqPublisher participantStatusReqPublisher;
 
     /**
      * Constructor for instantiating SupervisionScanner.
@@ -71,21 +68,18 @@
      * @param automationCompositionStateChangePublisher the AutomationComposition StateChange Publisher
      * @param automationCompositionUpdatePublisher the AutomationCompositionUpdate Publisher
      * @param participantProvider the Participant Provider
-     * @param participantStatusReqPublisher the Participant StatusReq Publisher
      * @param acRuntimeParameterGroup the parameters for the automation composition runtime
      */
     public SupervisionScanner(final AutomationCompositionProvider automationCompositionProvider,
             AcDefinitionProvider acDefinitionProvider,
             final AutomationCompositionStateChangePublisher automationCompositionStateChangePublisher,
             AutomationCompositionUpdatePublisher automationCompositionUpdatePublisher,
-            ParticipantProvider participantProvider, ParticipantStatusReqPublisher participantStatusReqPublisher,
-            final AcRuntimeParameterGroup acRuntimeParameterGroup) {
+            ParticipantProvider participantProvider, final AcRuntimeParameterGroup acRuntimeParameterGroup) {
         this.automationCompositionProvider = automationCompositionProvider;
         this.acDefinitionProvider = acDefinitionProvider;
         this.automationCompositionStateChangePublisher = automationCompositionStateChangePublisher;
         this.automationCompositionUpdatePublisher = automationCompositionUpdatePublisher;
         this.participantProvider = participantProvider;
-        this.participantStatusReqPublisher = participantStatusReqPublisher;
 
         automationCompositionCounter.setMaxRetryCount(
                 acRuntimeParameterGroup.getParticipantParameters().getUpdateParameters().getMaxRetryCount());
@@ -106,13 +100,8 @@
         LOGGER.debug("Scanning automation compositions in the database . . .");
 
         if (counterCheck) {
-            try {
-                for (var participant : participantProvider.getParticipants()) {
-                    scanParticipantStatus(participant);
-                }
-            } catch (PfModelException pfme) {
-                LOGGER.warn("error reading participant from database", pfme);
-                return;
+            for (var participant : participantProvider.getParticipants()) {
+                scanParticipantStatus(participant);
             }
         }
 
@@ -127,22 +116,17 @@
         LOGGER.debug("Automation composition scan complete . . .");
     }
 
-    private void scanParticipantStatus(Participant participant) throws PfModelException {
-        ToscaConceptIdentifier id = participant.getKey().asIdentifier();
+    private void scanParticipantStatus(Participant participant) {
+        var id = participant.getKey().asIdentifier();
         if (participantStatusCounter.isFault(id)) {
             LOGGER.debug("report Participant fault");
             return;
         }
-        if (participantStatusCounter.getDuration(id) > participantStatusCounter.getMaxWaitMs()) {
-            if (participantStatusCounter.count(id)) {
-                LOGGER.debug("retry message ParticipantStatusReq");
-                participantStatusReqPublisher.send(id);
-                participant.setHealthStatus(ParticipantHealthStatus.NOT_HEALTHY);
-            } else {
-                LOGGER.debug("report Participant fault");
-                participantStatusCounter.setFault(id);
-                participant.setHealthStatus(ParticipantHealthStatus.OFF_LINE);
-            }
+        if (participantStatusCounter.getDuration(id) > participantStatusCounter.getMaxWaitMs()
+                && !participantStatusCounter.count(id)) {
+            LOGGER.debug("report Participant fault");
+            participantStatusCounter.setFault(id);
+            participant.setParticipantState(ParticipantState.OFF_LINE);
             participantProvider.saveParticipant(participant);
         }
     }
@@ -209,8 +193,7 @@
                                     ? defaultMin
                                     : defaultMax;
 
-            if (nextSpNotCompleted != phaseMap.getOrDefault(automationComposition.getInstanceId(),
-                    firstStartPhase)) {
+            if (nextSpNotCompleted != phaseMap.getOrDefault(automationComposition.getInstanceId(), firstStartPhase)) {
                 phaseMap.put(automationComposition.getInstanceId(), nextSpNotCompleted);
                 sendAutomationCompositionMsg(automationComposition, nextSpNotCompleted);
             } else if (counterCheck) {
diff --git a/runtime-acm/src/main/java/org/onap/policy/clamp/acm/runtime/supervision/comm/ParticipantDeregisterListener.java b/runtime-acm/src/main/java/org/onap/policy/clamp/acm/runtime/supervision/comm/ParticipantDeregisterListener.java
index eec2123..62280a1 100644
--- a/runtime-acm/src/main/java/org/onap/policy/clamp/acm/runtime/supervision/comm/ParticipantDeregisterListener.java
+++ b/runtime-acm/src/main/java/org/onap/policy/clamp/acm/runtime/supervision/comm/ParticipantDeregisterListener.java
@@ -1,6 +1,6 @@
 /*-
  * ============LICENSE_START=======================================================
- * Copyright (C) 2021 Nordix Foundation.
+ * Copyright (C) 2021-2023 Nordix Foundation.
  * Modifications Copyright (C) 2021 AT&T Intellectual Property. All rights reserved.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -22,7 +22,7 @@
 package org.onap.policy.clamp.acm.runtime.supervision.comm;
 
 import org.onap.policy.clamp.acm.runtime.config.messaging.Listener;
-import org.onap.policy.clamp.acm.runtime.supervision.SupervisionHandler;
+import org.onap.policy.clamp.acm.runtime.supervision.SupervisionParticipantHandler;
 import org.onap.policy.clamp.models.acm.messages.dmaap.participant.ParticipantDeregister;
 import org.onap.policy.clamp.models.acm.messages.dmaap.participant.ParticipantMessageType;
 import org.onap.policy.common.endpoints.event.comm.Topic.CommInfrastructure;
@@ -40,12 +40,12 @@
                 implements Listener<ParticipantDeregister> {
     private static final Logger LOGGER = LoggerFactory.getLogger(ParticipantDeregisterListener.class);
 
-    private final SupervisionHandler supervisionHandler;
+    private final SupervisionParticipantHandler supervisionHandler;
 
     /**
      * Constructs the object.
      */
-    public ParticipantDeregisterListener(SupervisionHandler supervisionHandler) {
+    public ParticipantDeregisterListener(SupervisionParticipantHandler supervisionHandler) {
         super(ParticipantDeregister.class);
         this.supervisionHandler = supervisionHandler;
     }
diff --git a/runtime-acm/src/main/java/org/onap/policy/clamp/acm/runtime/supervision/comm/ParticipantRegisterListener.java b/runtime-acm/src/main/java/org/onap/policy/clamp/acm/runtime/supervision/comm/ParticipantRegisterListener.java
index 8523400..b082e6f 100644
--- a/runtime-acm/src/main/java/org/onap/policy/clamp/acm/runtime/supervision/comm/ParticipantRegisterListener.java
+++ b/runtime-acm/src/main/java/org/onap/policy/clamp/acm/runtime/supervision/comm/ParticipantRegisterListener.java
@@ -1,6 +1,6 @@
 /*-
  * ============LICENSE_START=======================================================
- * Copyright (C) 2021 Nordix Foundation.
+ * Copyright (C) 2021-2023 Nordix Foundation.
  * Modifications Copyright (C) 2021 AT&T Intellectual Property. All rights reserved.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -22,7 +22,7 @@
 package org.onap.policy.clamp.acm.runtime.supervision.comm;
 
 import org.onap.policy.clamp.acm.runtime.config.messaging.Listener;
-import org.onap.policy.clamp.acm.runtime.supervision.SupervisionHandler;
+import org.onap.policy.clamp.acm.runtime.supervision.SupervisionParticipantHandler;
 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.common.endpoints.event.comm.Topic.CommInfrastructure;
@@ -40,12 +40,12 @@
                 implements Listener<ParticipantRegister> {
     private static final Logger LOGGER = LoggerFactory.getLogger(ParticipantRegisterListener.class);
 
-    private final SupervisionHandler supervisionHandler;
+    private final SupervisionParticipantHandler supervisionHandler;
 
     /**
      * Constructs the object.
      */
-    public ParticipantRegisterListener(SupervisionHandler supervisionHandler) {
+    public ParticipantRegisterListener(SupervisionParticipantHandler supervisionHandler) {
         super(ParticipantRegister.class);
         this.supervisionHandler = supervisionHandler;
     }
diff --git a/runtime-acm/src/main/java/org/onap/policy/clamp/acm/runtime/supervision/comm/ParticipantStatusListener.java b/runtime-acm/src/main/java/org/onap/policy/clamp/acm/runtime/supervision/comm/ParticipantStatusListener.java
index 4ae1a1a..2118fe5 100644
--- a/runtime-acm/src/main/java/org/onap/policy/clamp/acm/runtime/supervision/comm/ParticipantStatusListener.java
+++ b/runtime-acm/src/main/java/org/onap/policy/clamp/acm/runtime/supervision/comm/ParticipantStatusListener.java
@@ -1,6 +1,6 @@
 /*-
  * ============LICENSE_START=======================================================
- * Copyright (C) 2021 Nordix Foundation.
+ * Copyright (C) 2021-2023 Nordix Foundation.
  * Modifications Copyright (C) 2021 AT&T Intellectual Property. All rights reserved.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -22,7 +22,7 @@
 package org.onap.policy.clamp.acm.runtime.supervision.comm;
 
 import org.onap.policy.clamp.acm.runtime.config.messaging.Listener;
-import org.onap.policy.clamp.acm.runtime.supervision.SupervisionHandler;
+import org.onap.policy.clamp.acm.runtime.supervision.SupervisionParticipantHandler;
 import org.onap.policy.clamp.models.acm.messages.dmaap.participant.ParticipantMessageType;
 import org.onap.policy.clamp.models.acm.messages.dmaap.participant.ParticipantStatus;
 import org.onap.policy.common.endpoints.event.comm.Topic.CommInfrastructure;
@@ -39,12 +39,12 @@
 public class ParticipantStatusListener extends ScoListener<ParticipantStatus> implements Listener<ParticipantStatus> {
     private static final Logger LOGGER = LoggerFactory.getLogger(ParticipantStatusListener.class);
 
-    private final SupervisionHandler supervisionHandler;
+    private final SupervisionParticipantHandler supervisionHandler;
 
     /**
      * Constructs the object.
      */
-    public ParticipantStatusListener(SupervisionHandler supervisionHandler) {
+    public ParticipantStatusListener(SupervisionParticipantHandler supervisionHandler) {
         super(ParticipantStatus.class);
         this.supervisionHandler = supervisionHandler;
     }
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 2da8690..fd6c9a0 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
@@ -1,6 +1,6 @@
 /*-
  * ============LICENSE_START=======================================================
- *  Copyright (C) 2021-2022 Nordix Foundation.
+ *  Copyright (C) 2021-2023 Nordix Foundation.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -38,8 +38,6 @@
 import org.onap.policy.clamp.acm.runtime.instantiation.InstantiationUtils;
 import org.onap.policy.clamp.acm.runtime.supervision.comm.AutomationCompositionStateChangePublisher;
 import org.onap.policy.clamp.acm.runtime.supervision.comm.AutomationCompositionUpdatePublisher;
-import org.onap.policy.clamp.acm.runtime.supervision.comm.ParticipantDeregisterAckPublisher;
-import org.onap.policy.clamp.acm.runtime.supervision.comm.ParticipantRegisterAckPublisher;
 import org.onap.policy.clamp.acm.runtime.supervision.comm.ParticipantUpdatePublisher;
 import org.onap.policy.clamp.common.acm.exception.AutomationCompositionException;
 import org.onap.policy.clamp.models.acm.concepts.AutomationComposition;
@@ -47,17 +45,12 @@
 import org.onap.policy.clamp.models.acm.concepts.AutomationCompositionOrderedState;
 import org.onap.policy.clamp.models.acm.concepts.AutomationCompositionState;
 import org.onap.policy.clamp.models.acm.concepts.Participant;
-import org.onap.policy.clamp.models.acm.concepts.ParticipantHealthStatus;
 import org.onap.policy.clamp.models.acm.concepts.ParticipantState;
 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.ParticipantMessageType;
-import org.onap.policy.clamp.models.acm.messages.dmaap.participant.ParticipantRegister;
-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.models.base.PfModelException;
 import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifier;
 
@@ -109,10 +102,9 @@
 
         var automationCompositionStateChangePublisher = mock(AutomationCompositionStateChangePublisher.class);
 
-        var handler = new SupervisionHandler(automationCompositionProvider, mock(ParticipantProvider.class),
-                acDefinitionProvider, mock(AutomationCompositionUpdatePublisher.class),
-                automationCompositionStateChangePublisher, mock(ParticipantRegisterAckPublisher.class),
-                mock(ParticipantDeregisterAckPublisher.class), mock(ParticipantUpdatePublisher.class));
+        var handler = new SupervisionHandler(automationCompositionProvider, acDefinitionProvider,
+                mock(AutomationCompositionUpdatePublisher.class), automationCompositionStateChangePublisher,
+                mock(ParticipantUpdatePublisher.class));
 
         handler.triggerAutomationCompositionSupervision(automationComposition);
 
@@ -160,10 +152,9 @@
     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);
+                mock(AutomationCompositionUpdatePublisher.class), automationCompositionStateChangePublisher,
+                mock(ParticipantUpdatePublisher.class), AutomationCompositionOrderedState.PASSIVE,
+                AutomationCompositionState.UNINITIALISED);
 
         var automationComposition =
                 InstantiationUtils.getAutomationCompositionFromResource(AC_INSTANTIATION_CREATE_JSON, "Crud");
@@ -206,10 +197,9 @@
     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);
+                mock(AutomationCompositionUpdatePublisher.class), automationCompositionStateChangePublisher,
+                mock(ParticipantUpdatePublisher.class), AutomationCompositionOrderedState.PASSIVE,
+                AutomationCompositionState.UNINITIALISED);
 
         var automationComposition =
                 InstantiationUtils.getAutomationCompositionFromResource(AC_INSTANTIATION_CREATE_JSON, "Crud");
@@ -224,8 +214,7 @@
     @Test
     void testHandleAutomationCompositionStateChangeAckMessage() {
         var automationCompositionProvider = mock(AutomationCompositionProvider.class);
-        var handler = createSupervisionHandler(automationCompositionProvider, mock(ParticipantProvider.class),
-                mock(ParticipantRegisterAckPublisher.class), mock(ParticipantDeregisterAckPublisher.class),
+        var handler = createSupervisionHandler(automationCompositionProvider,
                 mock(AutomationCompositionUpdatePublisher.class), mock(AutomationCompositionStateChangePublisher.class),
                 mock(ParticipantUpdatePublisher.class), AutomationCompositionOrderedState.PASSIVE,
                 AutomationCompositionState.UNINITIALISED);
@@ -248,8 +237,7 @@
         automationCompositionAckMessage.setAutomationCompositionResultMap(Map.of());
         automationCompositionAckMessage.setAutomationCompositionId(identifier);
         var automationCompositionProvider = mock(AutomationCompositionProvider.class);
-        var handler = createSupervisionHandler(automationCompositionProvider, mock(ParticipantProvider.class),
-                mock(ParticipantRegisterAckPublisher.class), mock(ParticipantDeregisterAckPublisher.class),
+        var handler = createSupervisionHandler(automationCompositionProvider,
                 mock(AutomationCompositionUpdatePublisher.class), mock(AutomationCompositionStateChangePublisher.class),
                 mock(ParticipantUpdatePublisher.class), AutomationCompositionOrderedState.PASSIVE,
                 AutomationCompositionState.UNINITIALISED);
@@ -260,112 +248,31 @@
     }
 
     @Test
-    void testHandleParticipantDeregister() throws PfModelException {
-        var participant = new Participant();
-        participant.setName(participantId.getName());
-        participant.setVersion(participantId.getVersion());
-        participant.setParticipantType(participantType);
-
-        var participantProvider = mock(ParticipantProvider.class);
-        when(participantProvider.findParticipant(participantId.getName(), participantId.getVersion()))
-                .thenReturn(Optional.of(participant));
-
-        var participantDeregisterMessage = new ParticipantDeregister();
-        participantDeregisterMessage.setMessageId(UUID.randomUUID());
-        participantDeregisterMessage.setParticipantId(participantId);
-        participantDeregisterMessage.setParticipantType(participantType);
-        var participantDeregisterAckPublisher = mock(ParticipantDeregisterAckPublisher.class);
-        var handler = createSupervisionHandler(mock(AutomationCompositionProvider.class), participantProvider,
-                mock(ParticipantRegisterAckPublisher.class), participantDeregisterAckPublisher,
-                mock(AutomationCompositionUpdatePublisher.class), mock(AutomationCompositionStateChangePublisher.class),
-                mock(ParticipantUpdatePublisher.class), AutomationCompositionOrderedState.PASSIVE,
-                AutomationCompositionState.UNINITIALISED);
-
-        handler.handleParticipantMessage(participantDeregisterMessage);
-
-        verify(participantProvider).saveParticipant(any());
-        verify(participantDeregisterAckPublisher).send(participantDeregisterMessage.getMessageId());
-    }
-
-    @Test
-    void testHandleParticipantRegister() throws PfModelException {
-        var participant = new Participant();
-        participant.setName(participantId.getName());
-        participant.setVersion(participantId.getVersion());
-        participant.setParticipantType(participantType);
-
-        var participantRegisterMessage = new ParticipantRegister();
-        participantRegisterMessage.setMessageId(UUID.randomUUID());
-        participantRegisterMessage.setParticipantId(participantId);
-        participantRegisterMessage.setParticipantType(participantType);
-        var participantProvider = mock(ParticipantProvider.class);
-        var participantRegisterAckPublisher = mock(ParticipantRegisterAckPublisher.class);
-        var handler = createSupervisionHandler(mock(AutomationCompositionProvider.class), participantProvider,
-                participantRegisterAckPublisher, mock(ParticipantDeregisterAckPublisher.class),
-                mock(AutomationCompositionUpdatePublisher.class), mock(AutomationCompositionStateChangePublisher.class),
-                mock(ParticipantUpdatePublisher.class), AutomationCompositionOrderedState.PASSIVE,
-                AutomationCompositionState.UNINITIALISED);
-
-        handler.handleParticipantMessage(participantRegisterMessage);
-
-        verify(participantProvider).saveParticipant(any());
-        verify(participantRegisterAckPublisher).send(participantRegisterMessage.getMessageId(), participantId,
-                participantType);
-    }
-
-    @Test
     void testParticipantUpdateAck() throws PfModelException {
         var participant = new Participant();
         participant.setName(participantId.getName());
         participant.setVersion(participantId.getVersion());
         participant.setParticipantType(participantType);
 
-        var participantProvider = mock(ParticipantProvider.class);
-        when(participantProvider.findParticipant(participantId.getName(), participantId.getVersion()))
-                .thenReturn(Optional.of(participant));
-
         var participantUpdateAckMessage = new ParticipantUpdateAck();
         participantUpdateAckMessage.setParticipantId(participantId);
         participantUpdateAckMessage.setParticipantType(participantType);
-        participantUpdateAckMessage.setState(ParticipantState.PASSIVE);
-        var handler = createSupervisionHandler(mock(AutomationCompositionProvider.class), participantProvider,
-                mock(ParticipantRegisterAckPublisher.class), mock(ParticipantDeregisterAckPublisher.class),
+        participantUpdateAckMessage.setState(ParticipantState.ON_LINE);
+        var handler = createSupervisionHandler(mock(AutomationCompositionProvider.class),
                 mock(AutomationCompositionUpdatePublisher.class), mock(AutomationCompositionStateChangePublisher.class),
                 mock(ParticipantUpdatePublisher.class), AutomationCompositionOrderedState.PASSIVE,
                 AutomationCompositionState.UNINITIALISED);
 
         handler.handleParticipantMessage(participantUpdateAckMessage);
-
-        verify(participantProvider).saveParticipant(any());
-    }
-
-    @Test
-    void testHandleParticipantStatus() throws PfModelException {
-        var participantStatusMessage = new ParticipantStatus();
-        participantStatusMessage.setParticipantId(participantId);
-        participantStatusMessage.setParticipantType(participantType);
-        participantStatusMessage.setState(ParticipantState.PASSIVE);
-        participantStatusMessage.setHealthStatus(ParticipantHealthStatus.HEALTHY);
-
-        var participantProvider = mock(ParticipantProvider.class);
-        var handler = createSupervisionHandler(mock(AutomationCompositionProvider.class), participantProvider,
-                mock(ParticipantRegisterAckPublisher.class), mock(ParticipantDeregisterAckPublisher.class),
-                mock(AutomationCompositionUpdatePublisher.class), mock(AutomationCompositionStateChangePublisher.class),
-                mock(ParticipantUpdatePublisher.class), AutomationCompositionOrderedState.PASSIVE,
-                AutomationCompositionState.UNINITIALISED);
-        handler.handleParticipantMessage(participantStatusMessage);
-
-        verify(participantProvider).saveParticipant(any());
     }
 
     @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),
-                mock(AutomationCompositionStateChangePublisher.class), participantUpdatePublisher,
-                AutomationCompositionOrderedState.PASSIVE, AutomationCompositionState.UNINITIALISED);
+                mock(AutomationCompositionUpdatePublisher.class), mock(AutomationCompositionStateChangePublisher.class),
+                participantUpdatePublisher, AutomationCompositionOrderedState.PASSIVE,
+                AutomationCompositionState.UNINITIALISED);
         var acmDefinition = new AutomationCompositionDefinition();
         handler.handleSendCommissionMessage(acmDefinition);
 
@@ -376,18 +283,15 @@
     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),
-                mock(AutomationCompositionStateChangePublisher.class), participantUpdatePublisher,
-                AutomationCompositionOrderedState.PASSIVE, AutomationCompositionState.UNINITIALISED);
+                mock(AutomationCompositionUpdatePublisher.class), mock(AutomationCompositionStateChangePublisher.class),
+                participantUpdatePublisher, AutomationCompositionOrderedState.PASSIVE,
+                AutomationCompositionState.UNINITIALISED);
         handler.handleSendDeCommissionMessage(identifier);
 
         verify(participantUpdatePublisher).sendDecomisioning(identifier);
     }
 
     private SupervisionHandler createSupervisionHandler(AutomationCompositionProvider automationCompositionProvider,
-            ParticipantProvider participantProvider, ParticipantRegisterAckPublisher participantRegisterAckPublisher,
-            ParticipantDeregisterAckPublisher participantDeregisterAckPublisher,
             AutomationCompositionUpdatePublisher automationCompositionUpdatePublisher,
             AutomationCompositionStateChangePublisher automationCompositionStateChangePublisher,
             ParticipantUpdatePublisher participantUpdatePublisher, AutomationCompositionOrderedState orderedState,
@@ -406,24 +310,22 @@
         when(acDefinitionProvider.getAcDefinition(automationComposition.getCompositionId()))
                 .thenReturn(InstantiationUtils.getToscaServiceTemplate(TOSCA_SERVICE_TEMPLATE_YAML));
 
-        return new SupervisionHandler(automationCompositionProvider, participantProvider, acDefinitionProvider,
+        return new SupervisionHandler(automationCompositionProvider, acDefinitionProvider,
                 automationCompositionUpdatePublisher, automationCompositionStateChangePublisher,
-                participantRegisterAckPublisher, participantDeregisterAckPublisher, participantUpdatePublisher);
+                participantUpdatePublisher);
     }
 
     private SupervisionHandler createSupervisionHandlerForTrigger() {
-        return new SupervisionHandler(mock(AutomationCompositionProvider.class), mock(ParticipantProvider.class),
-                mock(AcDefinitionProvider.class), mock(AutomationCompositionUpdatePublisher.class),
-                mock(AutomationCompositionStateChangePublisher.class), mock(ParticipantRegisterAckPublisher.class),
-                mock(ParticipantDeregisterAckPublisher.class), mock(ParticipantUpdatePublisher.class));
+        return new SupervisionHandler(mock(AutomationCompositionProvider.class), mock(AcDefinitionProvider.class),
+                mock(AutomationCompositionUpdatePublisher.class), mock(AutomationCompositionStateChangePublisher.class),
+                mock(ParticipantUpdatePublisher.class));
     }
 
     private SupervisionHandler createSupervisionHandlerForTrigger(
             AutomationCompositionUpdatePublisher automationCompositionUpdatePublisher) {
 
-        return new SupervisionHandler(mock(AutomationCompositionProvider.class), mock(ParticipantProvider.class),
-                mock(AcDefinitionProvider.class), automationCompositionUpdatePublisher,
-                mock(AutomationCompositionStateChangePublisher.class), mock(ParticipantRegisterAckPublisher.class),
-                mock(ParticipantDeregisterAckPublisher.class), mock(ParticipantUpdatePublisher.class));
+        return new SupervisionHandler(mock(AutomationCompositionProvider.class), mock(AcDefinitionProvider.class),
+                automationCompositionUpdatePublisher, mock(AutomationCompositionStateChangePublisher.class),
+                mock(ParticipantUpdatePublisher.class));
     }
 }
diff --git a/runtime-acm/src/test/java/org/onap/policy/clamp/acm/runtime/supervision/SupervisionParticipantHandlerTest.java b/runtime-acm/src/test/java/org/onap/policy/clamp/acm/runtime/supervision/SupervisionParticipantHandlerTest.java
new file mode 100644
index 0000000..9e35f2c
--- /dev/null
+++ b/runtime-acm/src/test/java/org/onap/policy/clamp/acm/runtime/supervision/SupervisionParticipantHandlerTest.java
@@ -0,0 +1,107 @@
+/*-
+ * ============LICENSE_START=======================================================
+ *  Copyright (C) 2023 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=========================================================
+ */
+
+package org.onap.policy.clamp.acm.runtime.supervision;
+
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import java.util.Optional;
+import java.util.UUID;
+import org.junit.jupiter.api.Test;
+import org.onap.policy.clamp.acm.runtime.supervision.comm.ParticipantDeregisterAckPublisher;
+import org.onap.policy.clamp.acm.runtime.supervision.comm.ParticipantRegisterAckPublisher;
+import org.onap.policy.clamp.models.acm.concepts.Participant;
+import org.onap.policy.clamp.models.acm.concepts.ParticipantState;
+import org.onap.policy.clamp.models.acm.messages.dmaap.participant.ParticipantDeregister;
+import org.onap.policy.clamp.models.acm.messages.dmaap.participant.ParticipantRegister;
+import org.onap.policy.clamp.models.acm.messages.dmaap.participant.ParticipantStatus;
+import org.onap.policy.clamp.models.acm.persistence.provider.ParticipantProvider;
+import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifier;
+
+class SupervisionParticipantHandlerTest {
+    private static final ToscaConceptIdentifier PARTICIPANT_ID = new ToscaConceptIdentifier("ParticipantId", "1.0.0");
+    private static final ToscaConceptIdentifier PARTICIPANT_TYPE =
+            new ToscaConceptIdentifier("ParticipantType", "1.0.0");
+
+    @Test
+    void testHandleParticipantDeregister() {
+        var participant = new Participant();
+        participant.setName(PARTICIPANT_ID.getName());
+        participant.setVersion(PARTICIPANT_ID.getVersion());
+        participant.setParticipantType(PARTICIPANT_TYPE);
+
+        var participantProvider = mock(ParticipantProvider.class);
+        when(participantProvider.findParticipant(PARTICIPANT_ID)).thenReturn(Optional.of(participant));
+
+        var participantDeregisterMessage = new ParticipantDeregister();
+        participantDeregisterMessage.setMessageId(UUID.randomUUID());
+        participantDeregisterMessage.setParticipantId(PARTICIPANT_ID);
+        participantDeregisterMessage.setParticipantType(PARTICIPANT_TYPE);
+        var participantDeregisterAckPublisher = mock(ParticipantDeregisterAckPublisher.class);
+        var handler = new SupervisionParticipantHandler(participantProvider,
+                mock(ParticipantRegisterAckPublisher.class), participantDeregisterAckPublisher);
+
+        handler.handleParticipantMessage(participantDeregisterMessage);
+
+        verify(participantProvider).saveParticipant(any());
+        verify(participantDeregisterAckPublisher).send(participantDeregisterMessage.getMessageId());
+    }
+
+    @Test
+    void testHandleParticipantRegister() {
+        var participant = new Participant();
+        participant.setName(PARTICIPANT_ID.getName());
+        participant.setVersion(PARTICIPANT_ID.getVersion());
+        participant.setParticipantType(PARTICIPANT_TYPE);
+
+        var participantRegisterMessage = new ParticipantRegister();
+        participantRegisterMessage.setMessageId(UUID.randomUUID());
+        participantRegisterMessage.setParticipantId(PARTICIPANT_ID);
+        participantRegisterMessage.setParticipantType(PARTICIPANT_TYPE);
+        var participantProvider = mock(ParticipantProvider.class);
+        var participantRegisterAckPublisher = mock(ParticipantRegisterAckPublisher.class);
+        var handler = new SupervisionParticipantHandler(participantProvider, participantRegisterAckPublisher,
+                mock(ParticipantDeregisterAckPublisher.class));
+
+        handler.handleParticipantMessage(participantRegisterMessage);
+
+        verify(participantProvider).saveParticipant(any());
+        verify(participantRegisterAckPublisher).send(participantRegisterMessage.getMessageId(), PARTICIPANT_ID,
+                PARTICIPANT_TYPE);
+    }
+
+    @Test
+    void testHandleParticipantStatus() {
+        var participantStatusMessage = new ParticipantStatus();
+        participantStatusMessage.setParticipantId(PARTICIPANT_ID);
+        participantStatusMessage.setParticipantType(PARTICIPANT_TYPE);
+        participantStatusMessage.setState(ParticipantState.ON_LINE);
+
+        var participantProvider = mock(ParticipantProvider.class);
+        var handler = new SupervisionParticipantHandler(participantProvider,
+                mock(ParticipantRegisterAckPublisher.class), mock(ParticipantDeregisterAckPublisher.class));
+        handler.handleParticipantMessage(participantStatusMessage);
+
+        verify(participantProvider).saveParticipant(any());
+    }
+}
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 a6d4d3b..0142f29 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
@@ -1,6 +1,6 @@
 /*-
  * ============LICENSE_START=======================================================
- *  Copyright (C) 2021-2022 Nordix Foundation.
+ *  Copyright (C) 2021-2023 Nordix Foundation.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -36,14 +36,12 @@
 import org.onap.policy.clamp.acm.runtime.instantiation.InstantiationUtils;
 import org.onap.policy.clamp.acm.runtime.supervision.comm.AutomationCompositionStateChangePublisher;
 import org.onap.policy.clamp.acm.runtime.supervision.comm.AutomationCompositionUpdatePublisher;
-import org.onap.policy.clamp.acm.runtime.supervision.comm.ParticipantStatusReqPublisher;
 import org.onap.policy.clamp.acm.runtime.util.CommonTestData;
 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.AutomationCompositionOrderedState;
 import org.onap.policy.clamp.models.acm.concepts.AutomationCompositionState;
 import org.onap.policy.clamp.models.acm.concepts.Participant;
-import org.onap.policy.clamp.models.acm.concepts.ParticipantHealthStatus;
 import org.onap.policy.clamp.models.acm.concepts.ParticipantState;
 import org.onap.policy.clamp.models.acm.persistence.provider.AcDefinitionProvider;
 import org.onap.policy.clamp.models.acm.persistence.provider.AutomationCompositionProvider;
@@ -81,7 +79,6 @@
         var automationCompositionStateChangePublisher = mock(AutomationCompositionStateChangePublisher.class);
         var automationCompositionUpdatePublisher = mock(AutomationCompositionUpdatePublisher.class);
         var participantProvider = mock(ParticipantProvider.class);
-        var participantStatusReqPublisher = mock(ParticipantStatusReqPublisher.class);
         var acRuntimeParameterGroup = CommonTestData.geParameterGroup("dbScanner");
 
         var automationComposition = InstantiationUtils.getAutomationCompositionFromResource(AC_JSON, "Crud");
@@ -90,7 +87,7 @@
 
         var supervisionScanner = new SupervisionScanner(automationCompositionProvider, acDefinitionProvider,
                 automationCompositionStateChangePublisher, automationCompositionUpdatePublisher, participantProvider,
-                participantStatusReqPublisher, acRuntimeParameterGroup);
+                acRuntimeParameterGroup);
         supervisionScanner.run(false);
 
         verify(automationCompositionProvider, times(0)).updateAutomationComposition(any(AutomationComposition.class));
@@ -108,12 +105,11 @@
         var automationCompositionUpdatePublisher = mock(AutomationCompositionUpdatePublisher.class);
         var automationCompositionStateChangePublisher = mock(AutomationCompositionStateChangePublisher.class);
         var participantProvider = mock(ParticipantProvider.class);
-        var participantStatusReqPublisher = mock(ParticipantStatusReqPublisher.class);
         var acRuntimeParameterGroup = CommonTestData.geParameterGroup("dbScanner");
 
         var supervisionScanner = new SupervisionScanner(automationCompositionProvider, acDefinitionProvider,
                 automationCompositionStateChangePublisher, automationCompositionUpdatePublisher, participantProvider,
-                participantStatusReqPublisher, acRuntimeParameterGroup);
+                acRuntimeParameterGroup);
         supervisionScanner.run(false);
 
         verify(automationCompositionProvider, times(1)).updateAutomationComposition(any(AutomationComposition.class));
@@ -133,18 +129,16 @@
         when(participantProvider.getParticipants(null, null)).thenReturn(List.of(participant));
 
         var automationCompositionUpdatePublisher = mock(AutomationCompositionUpdatePublisher.class);
-        var participantStatusReqPublisher = mock(ParticipantStatusReqPublisher.class);
         var automationCompositionStateChangePublisher = mock(AutomationCompositionStateChangePublisher.class);
         var acRuntimeParameterGroup = CommonTestData.geParameterGroup("dbScanner");
 
         var supervisionScanner = new SupervisionScanner(automationCompositionProvider, acDefinitionProvider,
                 automationCompositionStateChangePublisher, automationCompositionUpdatePublisher, participantProvider,
-                participantStatusReqPublisher, acRuntimeParameterGroup);
+                acRuntimeParameterGroup);
 
         supervisionScanner.handleParticipantStatus(participant.getKey().asIdentifier());
         supervisionScanner.run(true);
         verify(automationCompositionProvider, times(0)).updateAutomationComposition(any(AutomationComposition.class));
-        verify(participantStatusReqPublisher, times(0)).send(any(ToscaConceptIdentifier.class));
     }
 
     @Test
@@ -169,13 +163,12 @@
 
         var participantProvider = mock(ParticipantProvider.class);
         var automationCompositionUpdatePublisher = mock(AutomationCompositionUpdatePublisher.class);
-        var participantStatusReqPublisher = mock(ParticipantStatusReqPublisher.class);
         var automationCompositionStateChangePublisher = mock(AutomationCompositionStateChangePublisher.class);
         var acRuntimeParameterGroup = CommonTestData.geParameterGroup("dbScanner");
 
         var supervisionScanner = new SupervisionScanner(automationCompositionProvider, acDefinitionProvider,
                 automationCompositionStateChangePublisher, automationCompositionUpdatePublisher, participantProvider,
-                participantStatusReqPublisher, acRuntimeParameterGroup);
+                acRuntimeParameterGroup);
 
         supervisionScanner.run(false);
 
@@ -196,27 +189,24 @@
         var participant = new Participant();
         participant.setName(PARTICIPANT_NAME);
         participant.setVersion(PARTICIPANT_VERSION);
-        participant.setHealthStatus(ParticipantHealthStatus.HEALTHY);
-        participant.setParticipantState(ParticipantState.ACTIVE);
+        participant.setParticipantState(ParticipantState.OFF_LINE);
         participant.setDefinition(new ToscaConceptIdentifier("unknown", "0.0.0"));
         participant.setParticipantType(PARTICIPANT_TYPE);
         var participantProvider = mock(ParticipantProvider.class);
         when(participantProvider.getParticipants()).thenReturn(List.of(participant));
 
         var automationCompositionUpdatePublisher = mock(AutomationCompositionUpdatePublisher.class);
-        var participantStatusReqPublisher = mock(ParticipantStatusReqPublisher.class);
         var automationCompositionStateChangePublisher = mock(AutomationCompositionStateChangePublisher.class);
 
         var supervisionScanner = new SupervisionScanner(automationCompositionProvider, acDefinitionProvider,
                 automationCompositionStateChangePublisher, automationCompositionUpdatePublisher, participantProvider,
-                participantStatusReqPublisher, acRuntimeParameterGroup);
+                acRuntimeParameterGroup);
 
         supervisionScanner.handleParticipantStatus(participant.getKey().asIdentifier());
         supervisionScanner.run(true);
-        verify(participantStatusReqPublisher).send(any(ToscaConceptIdentifier.class));
-        verify(participantProvider).saveParticipant(any());
+        verify(participantProvider, times(0)).saveParticipant(any());
 
         supervisionScanner.run(true);
-        verify(participantProvider, times(2)).saveParticipant(any());
+        verify(participantProvider, times(1)).saveParticipant(any());
     }
 }
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 b545fd9..b7d2d93 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
@@ -1,6 +1,6 @@
 /*-
  * ============LICENSE_START=======================================================
- *  Copyright (C) 2021-2022 Nordix Foundation.
+ *  Copyright (C) 2021-2023 Nordix Foundation.
  *  Modifications Copyright (C) 2021 AT&T Intellectual Property. All rights reserved.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -33,6 +33,7 @@
 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.acm.runtime.supervision.SupervisionParticipantHandler;
 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.AutomationCompositionState;
@@ -75,7 +76,7 @@
     @Test
     void testReceiveParticipantDeregister() {
         final var participantDeregisterMsg = new ParticipantDeregister();
-        var supervisionHandler = mock(SupervisionHandler.class);
+        var supervisionHandler = mock(SupervisionParticipantHandler.class);
         var participantDeregisterListener = new ParticipantDeregisterListener(supervisionHandler);
         participantDeregisterListener.onTopicEvent(INFRA, TOPIC, null, participantDeregisterMsg);
         verify(supervisionHandler).handleParticipantMessage(participantDeregisterMsg);
@@ -192,7 +193,7 @@
     @Test
     void testParticipantRegisterListener() {
         final var participantRegister = new ParticipantRegister();
-        var supervisionHandler = mock(SupervisionHandler.class);
+        var supervisionHandler = mock(SupervisionParticipantHandler.class);
         var participantRegisterListener = new ParticipantRegisterListener(supervisionHandler);
         participantRegisterListener.onTopicEvent(INFRA, TOPIC, null, participantRegister);
         verify(supervisionHandler).handleParticipantMessage(participantRegister);
@@ -201,7 +202,7 @@
     @Test
     void testParticipantStatusListener() {
         final var participantStatus = new ParticipantStatus();
-        var supervisionHandler = mock(SupervisionHandler.class);
+        var supervisionHandler = mock(SupervisionParticipantHandler.class);
         var participantStatusListener = new ParticipantStatusListener(supervisionHandler);
         participantStatusListener.onTopicEvent(INFRA, TOPIC, null, participantStatus);
         verify(supervisionHandler).handleParticipantMessage(participantStatus);
