<version>1.1.0-SNAPSHOT</version>
                        <scope>provided</scope>
                </dependency>
-               <dependency>
-                       <groupId>org.onap.policy.drools-applications</groupId>
-                       <artifactId>actor.appclcm</artifactId>
-                       <version>1.1.0-SNAPSHOT</version>
-                       <scope>provided</scope>
-               </dependency>
-               <dependency>
-                       <groupId>org.onap.policy.drools-applications</groupId>
-                       <artifactId>aai</artifactId>
-                       <version>1.1.0-SNAPSHOT</version>
-                       <scope>provided</scope>
-               </dependency>
                <dependency>
                        <groupId>org.onap.policy.drools-applications</groupId>
                        <artifactId>appc</artifactId>
 
 import java.util.List;
 
 import org.onap.policy.controlloop.VirtualControlLoopEvent;
-import org.onap.policy.controlloop.actor.appclcm.AppcLcmActorServiceProvider;
-import org.onap.policy.aai.AAIGETVnfResponse;
-import org.onap.policy.aai.util.AAIException;
 import org.onap.policy.appc.CommonHeader;
 import org.onap.policy.appc.Request;
 import org.onap.policy.controlloop.ControlLoopOperation;
         * @throws AAIException 
         */
        public static Request constructRequest(VirtualControlLoopEvent onset, ControlLoopOperation operation,
-                       Policy policy, AAIGETVnfResponse vnfResponse) throws AAIException {
+                       Policy policy, String targetVnf) {
                /*
                 * Construct an APPC request
                 */
                request.CommonHeader.SubRequestID = operation.subRequestId;
                request.Action = policy.getRecipe().substring(0, 1).toUpperCase() 
                         + policy.getRecipe().substring(1);
-               
-               /*
-                * The target vnf-id may not be the same as the source vnf-id
-                * specified in the yaml, the target vnf-id is retrieved by
-                * a named query to A&AI.
-                */
-               String sourceVnf = onset.AAI.get("generic-vnf.vnf-id");
-               if (sourceVnf == null) {
-                   /*
-                    * Lets see if the vnf-name is provided
-                    */
-                   sourceVnf = vnfResponse.vnfID;
-                   if (sourceVnf == null) {
-                       throw new AAIException("No vnf-id found");
-                   }
-               }
-               String targetVnf = AppcLcmActorServiceProvider.vnfNamedQuery(
-                    policy.getTarget().getResourceID(), sourceVnf);
        
                /*
                 * For now Policy generates the PG Streams as a demo, in the
 
 import org.junit.AfterClass;
 import org.junit.BeforeClass;
 import org.junit.Test;
-import org.onap.policy.aai.AAIGETVnfResponse;
-import org.onap.policy.aai.util.AAIException;
 import org.onap.policy.appc.Request;
 import org.onap.policy.appc.Response;
 import org.onap.policy.appc.ResponseCode;
     private static VirtualControlLoopEvent onsetEvent;
     private static ControlLoopOperation operation;
     private static Policy policy;
-    private static AAIGETVnfResponse aaiResponse;
 
     static {
         /* 
         policy.setRetry(2);
         policy.setTimeout(300);
         
-        /* Construct a mock A&AI response */
-        aaiResponse = new AAIGETVnfResponse();
-        aaiResponse.vnfID = "vnf01";
-        
         /* Set environment properties */
         PolicyEngine.manager.setEnvironmentProperty("aai.url", "http://localhost:6666");
         PolicyEngine.manager.setEnvironmentProperty("aai.username", "AAI");
     public void constructModifyConfigRequestTest() {
         
         Request appcRequest = null;
-               try {
-                       appcRequest = APPCActorServiceProvider.constructRequest(onsetEvent, operation, policy, aaiResponse);
-               } catch (AAIException e) {
-                       logger.warn(e.toString());
-                       fail("no vnfid found");
-               }
+        appcRequest = APPCActorServiceProvider.constructRequest(onsetEvent, operation, policy, "vnf01");
         
         /* The service provider must return a non null APPC request */
         assertNotNull(appcRequest);
 
 
 import org.onap.policy.aai.AAINQInstanceFilters;
 import org.onap.policy.aai.AAINQInventoryResponseItem;
-import org.onap.policy.aai.AAIGETVnfResponse;
 import org.onap.policy.aai.AAIManager;
 import org.onap.policy.aai.AAINQNamedQuery;
 import org.onap.policy.aai.AAINQQueryParameters;
 public class AppcLcmActorServiceProvider implements Actor {
     
     private static final Logger logger = LoggerFactory.getLogger(AppcLcmActorServiceProvider.class);
-    
-    /* The source vnf-id provided from the DCAE onset */
-    private static final String DCAE_VNF_ID = "generic-vnf.vnf-id";
 
     /* To be used in future releases to restart a single vm */
     private static final String APPC_VM_ID = "vm-id";
      * @throws AAIException 
      */
     public static LCMRequestWrapper constructRequest(VirtualControlLoopEvent onset, 
-                ControlLoopOperation operation, Policy policy, AAIGETVnfResponse vnfResponse) throws AAIException {
+                ControlLoopOperation operation, Policy policy, String targetVnf) throws AAIException {
         
         /* Construct an APPC request using LCM Model */
         
          * a vnf-id.
          */
         HashMap<String, String> requestActionIdentifiers = new HashMap<>();
-        String vnfId = onset.AAI.get(DCAE_VNF_ID);
-        if (vnfId == null) {
-            vnfId = vnfResponse.vnfID;
-            if (vnfId == null) {
-                throw new AAIException("No vnf-id found");
-            }
-        }
-        requestActionIdentifiers.put("vnf-id", vnfId);
+        requestActionIdentifiers.put("vnf-id", targetVnf);
         
         appcRequest.setActionIdentifiers(requestActionIdentifiers);
         
 
 import org.junit.AfterClass;
 import org.junit.BeforeClass;
 import org.junit.Test;
-import org.onap.policy.aai.AAIGETVnfResponse;
 import org.onap.policy.aai.util.AAIException;
 import org.onap.policy.appclcm.LCMCommonHeader;
 import org.onap.policy.appclcm.LCMRequest;
     private static VirtualControlLoopEvent onsetEvent;
     private static ControlLoopOperation operation;
     private static Policy policy;
-    private static AAIGETVnfResponse aaiResponse;
     private static LCMRequestWrapper dmaapRequest;
     private static LCMResponseWrapper dmaapResponse;
 
         policy.setPayload(null);
         policy.setRetry(2);
         policy.setTimeout(300);
-        
-        /* Construct a mock A&AI response */
-        aaiResponse = new AAIGETVnfResponse();
-        aaiResponse.vnfID = "vnf01";
 
         /* A sample DMAAP request wrapper. */
         dmaapRequest = new LCMRequestWrapper();
         
         LCMRequestWrapper dmaapRequest = null;
         try {
-            dmaapRequest = AppcLcmActorServiceProvider.constructRequest(onsetEvent, operation, policy, aaiResponse);
+            dmaapRequest = AppcLcmActorServiceProvider.constructRequest(onsetEvent, operation, policy, "vnf01");
         } catch (AAIException e) {
             logger.warn(e.toString());
             fail("no vnfid found");
         String resourceId = "82194af1-3c2c-485a-8f44-420e22a9eaa4";
         String targetVnfId = null;
         try {
-            targetVnfId = AppcLcmActorServiceProvider.vnfNamedQuery(resourceId, aaiResponse.vnfID);
+            targetVnfId = AppcLcmActorServiceProvider.vnfNamedQuery(resourceId, "vnf01");
         } catch (AAIException e) {
             logger.warn(e.toString());
             fail("no vnf-id found");
         }
         assertNotNull(targetVnfId);
-        assertEquals(targetVnfId, aaiResponse.vnfID);
+        assertEquals(targetVnfId, "vnf01");
     }
 }
 
 import org.onap.policy.aai.AAIGETVnfResponse;
 import org.onap.policy.aai.AAIGETVserverResponse;
 import org.onap.policy.aai.AAIManager;
+import org.onap.policy.aai.util.AAIException;
 import org.onap.policy.controlloop.ControlLoopEventStatus;
 import org.onap.policy.controlloop.ControlLoopException;
 import org.onap.policy.controlloop.ControlLoopNotificationType;
                return notification;
        }
                
-       public ControlLoopOperationManager      processControlLoop() throws ControlLoopException {
+       public ControlLoopOperationManager      processControlLoop() throws ControlLoopException, AAIException {
                //
                // Check if they activated us
                //
                        //
                        LockResult<GuardResult, TargetLock> lockResult = PolicyGuard.lockTarget(
                                                                                                                                                this.currentOperation.policy.getTarget().getType(), 
-                                                                                                                                               this.getTargetInstance(this.currentOperation.policy),
+                                                                                                                                               this.currentOperation.getTargetEntity(),
                                                                                                                                                this.onset.requestID,
                                                                                                                                                this);
                        //
                return false;
        }
 
-       public String getTargetInstance(Policy policy) {
-               if (policy.getTarget() != null) {
-                       if (policy.getTarget().getType() != null) {
-                               switch(policy.getTarget().getType()) {
-                               case PNF:
-                                       break;
-                               case VM:
-                               case VNF:
-                                       if (this.onset.target.equalsIgnoreCase("vserver.vserver-name")) {
-                                               return this.onset.AAI.get("vserver.vserver-name");
-                                       }
-                                       else if (this.onset.target.equalsIgnoreCase("generic-vnf.vnf-id")) {
-                                           return this.onset.AAI.get("generic-vnf.vnf-id");
-                                       }
-                                       else if (this.onset.target.equalsIgnoreCase("generic-vnf.vnf-name")) {
-                                           return this.onset.AAI.get("generic-vnf.vnf-name");
-                                       }
-                                       break;
-                               default:
-                                       break;
-                               }
-                       }
-               }
-               return null;
-       }
-
        @Override
        public String toString() {
                return "ControlLoopEventManager [closedLoopControlName=" + closedLoopControlName + ", requestID=" + requestID
 
        private LinkedList<Operation> operationHistory = new LinkedList<Operation>();
        private PolicyResult policyResult = null;
        private ControlLoopEventManager eventManager = null;
+       private String targetEntity;
 
        public ControlLoopEventManager getEventManager() {
                return eventManager;
                this.eventManager = eventManager;
        }
 
+       public String getTargetEntity() {
+           return this.targetEntity;
+       }
 
        //
        // Internal class used for tracking
                this.guardApprovalStatus = guardApprovalStatus;
        }
 
-
-       public ControlLoopOperationManager(ControlLoopEvent onset, Policy policy, ControlLoopEventManager em) throws ControlLoopException {
+       public String getTarget(Policy policy) throws ControlLoopException, AAIException {
+        if (policy.getTarget() != null) {
+            if (policy.getTarget().getType() != null) {
+                switch(policy.getTarget().getType()) {
+                case PNF:
+                    break;
+                case VM:
+                case VNF:
+                    VirtualControlLoopEvent virtualOnset = (VirtualControlLoopEvent) this.onset;
+                    if (this.onset.target.equalsIgnoreCase("vserver.vserver-name")) {
+                        return virtualOnset.AAI.get("vserver.vserver-name");
+                    }
+                    else if (this.onset.target.equalsIgnoreCase("generic-vnf.vnf-id")) {
+                        return virtualOnset.AAI.get("generic-vnf.vnf-id");
+                    }
+                    else if (this.onset.target.equalsIgnoreCase("generic-vnf.vnf-name")) {
+                        /*
+                         * If the vnf-name was retrieved from the onset then the vnf-id
+                         * must be obtained from the event manager's A&AI GET query
+                         */
+                        String vnfId = this.eventManager.getVnfResponse().vnfID;
+                        if (vnfId == null) {
+                            throw new AAIException("No vnf-id found");
+                        }
+                        return vnfId;
+                    }
+                    break;
+                default:
+                    throw new ControlLoopException("The target type is not supported");
+                }
+            }
+            else {
+                throw new ControlLoopException("The target type is null");
+            }
+        }
+        else {
+            throw new ControlLoopException("The target is null");
+        }
+        return null;
+    }
+       
+       public ControlLoopOperationManager(ControlLoopEvent onset, Policy policy, ControlLoopEventManager em) throws ControlLoopException, AAIException {
                this.onset = onset;
                this.policy = policy;
                this.guardApprovalStatus = "NONE";
                this.eventManager = em;
-
+               this.targetEntity = getTarget(policy);
+               
                //
                // Let's make a sanity check
                //
                switch (policy.getActor()) {
                case "APPC":
+                   if ("ModifyConfig".equalsIgnoreCase(policy.getRecipe())) {
+                       /*
+                 * The target vnf-id may not be the same as the source vnf-id
+                 * specified in the yaml, the target vnf-id is retrieved by
+                 * a named query to A&AI.
+                 */
+                       String targetVnf = AppcLcmActorServiceProvider.vnfNamedQuery(
+                                   policy.getTarget().getResourceID(), this.targetEntity);
+                       this.targetEntity = targetVnf;
+                   }
                        break;
                case "SO":
-                       break;
+                   break;
                case "VFC":
                        break;
                default:
                    if ("ModifyConfig".equalsIgnoreCase(policy.getRecipe())) {
 
                    this.operationRequest = APPCActorServiceProvider.constructRequest((VirtualControlLoopEvent) onset, 
-                                           operation.operation, this.policy, eventManager.getVnfResponse());
+                                           operation.operation, this.policy, this.targetEntity);
                    }
                    else {
                        this.operationRequest = AppcLcmActorServiceProvider.constructRequest((VirtualControlLoopEvent) onset, 
-                                               operation.operation, this.policy, eventManager.getVnfResponse());
+                                               operation.operation, this.policy, this.targetEntity);
                    }
                        //
                        // Save the operation
                newEntry.requestId = this.onset.requestID.toString();
                newEntry.actor = this.currentOperation.operation.actor;
                newEntry.operation = this.currentOperation.operation.operation;
-               newEntry.target = this.eventManager.getTargetInstance(this.policy);
+               newEntry.target = this.targetEntity;
                newEntry.starttime = Timestamp.from(this.currentOperation.operation.start);
                newEntry.subrequestId = this.currentOperation.operation.subRequestId;
                newEntry.endtime = new Timestamp(this.currentOperation.operation.end.toEpochMilli());
 
 import org.onap.policy.controlloop.ControlLoopEventStatus;
 import org.onap.policy.controlloop.VirtualControlLoopEvent;
 import org.onap.policy.controlloop.ControlLoopException;
+import org.onap.policy.controlloop.ControlLoopTargetType;
 import org.onap.policy.controlloop.Util;
 import org.onap.policy.controlloop.policy.ControlLoopPolicy;
 import org.onap.policy.controlloop.policy.PolicyResult;
                onset = new VirtualControlLoopEvent();
                onset.requestID = UUID.randomUUID();
                onset.target = "generic-vnf.vnf-name";
+               onset.target_type = ControlLoopTargetType.VNF;
                onset.closedLoopAlarmStart = Instant.now();
                onset.AAI = new HashMap<>();
                onset.AAI.put("generic-vnf.vnf-name", "testTriggerSource");
 
     description:
     actor: APPC
     recipe: Restart
-    target: VM
+    target:
+      type: VNF
     retry: 1
     timeout: 20
     success: final_success
 
             }
         }
     } catch (Exception e) {
-      logger.warn("{}: {}: unexpected", 
+       logger.warn("{}: {}: unexpected", 
                   $params.getClosedLoopControlName(), 
                   drools.getRule().getName(), e);
 
-      //
-      // TODO should we abort if we get an exception?
-      //
+       VirtualControlLoopNotification notification = new VirtualControlLoopNotification($event);
+           notification.notification = ControlLoopNotificationType.FINAL_FAILURE;
+           notification.message = e.getMessage();
+           notification.from = "policy";
+           notification.policyName = drools.getRule().getName();
+           notification.policyScope = "${policyScope}";
+           notification.policyVersion = "${policyVersion}";
+  
+               PolicyEngine.manager.deliver("POLICY-CL-MGT", notification);                      
+               
+        retract($event);
+        retract($manager);
+        retract($clTimer);
     }
         
 end
                                                         $event.closedLoopControlName,
                                                         $operation.policy.getActor().toString(),
                                                         $operation.policy.getRecipe(),
-                                                        $manager.getTargetInstance($operation.policy),
-                                                        //$event.target,
+                                                        $operation.getTargetEntity(),
                                                         $event.requestID.toString()
                                                         ));
         t.start();
 
             LCMRequestWrapper dmaapRequest = (LCMRequestWrapper) obj;
             LCMRequest appcRequest = dmaapRequest.getBody();
             assertTrue(appcRequest.getCommonHeader().getSubRequestId().equals("1"));
+            assertNotNull(appcRequest.getActionIdentifiers().get("vnf-id"));
             
             logger.debug("\n============ APPC received the request!!! ===========\n");
             
 
                 logger.debug("Rule Fired: " + notification.policyName);
                 if ("error".equals(notification.AAI.get("generic-vnf.vnf-name"))) {
                        assertEquals(ControlLoopNotificationType.FINAL_FAILURE, notification.notification);
-                       assertEquals("Exception in processing closed loop", notification.message);
+                       assertEquals("Target vnf-id could not be found", notification.message);
                 }
                 else {
                     assertTrue(ControlLoopNotificationType.FINAL_SUCCESS.equals(notification.notification));
         }
         else if (obj instanceof Request) {
             assertTrue(((Request)obj).getCommonHeader().SubRequestID.equals("1"));
+            assertNotNull(((Request)obj).getPayload().get("generic-vnf.vnf-id"));
             
             logger.debug("\n============ APPC received the request!!! ===========\n");
             
 
     actor: APPC
     recipe: Restart
     target:
-      type: VM
+      type: VNF
     retry: 3
     timeout: 30
     success: final_success