}
 
     public static VFCRequest constructRequest(VirtualControlLoopEvent onset, ControlLoopOperation operation,
-                                              Policy policy) {
+                                              Policy policy, AAIGETVnfResponse vnfResponse) {
         // Construct an VFC request
         VFCRequest request = new VFCRequest();
-        request.nsInstanceId = getAAIServiceInstance(onset);
-           request.requestId = onset.requestID;
+        String serviceInstance = onset.AAI.get("service-instance.service-instance-id");
+        if (serviceInstance == null || "".equals(serviceInstance))
+        {
+               if(vnfResponse == null) //if the response is null, we haven't queried
+               {
+                       vnfResponse = getAAIServiceInstance(onset); //This does the AAI query since we haven't already
+                       if (vnfResponse == null)
+                           return null;
+               }
+               serviceInstance = vnfResponse.serviceId;
+        }
+        request.nsInstanceId = serviceInstance;
+        request.requestId = onset.requestID;
         request.healRequest = new VFCHealRequest();
         request.healRequest.vnfInstanceId = onset.AAI.get("generic-vnf.vnf-id");
         request.healRequest.cause = operation.message;
-
         request.healRequest.additionalParams = new VFCHealAdditionalParams();
-        if ("Restart".equalsIgnoreCase(policy.getRecipe())) {
-            request.healRequest.additionalParams.action = "restartvm";
-            request.healRequest.additionalParams.actionInfo = new VFCHealActionVmInfo();
-            request.healRequest.additionalParams.actionInfo.vmid = onset.AAI.get("vserver.vserver-id");
-            request.healRequest.additionalParams.actionInfo.vmname = onset.AAI.get("vserver.vserver-name");
-        } else {
-            request = null;
+        
+        switch (policy.getRecipe().toLowerCase()) {
+            case "restart":
+                request.healRequest.additionalParams.action = "restartvm";
+                request.healRequest.additionalParams.actionInfo = new VFCHealActionVmInfo();
+                request.healRequest.additionalParams.actionInfo.vmid = onset.AAI.get("vserver.vserver-id");
+                request.healRequest.additionalParams.actionInfo.vmname = onset.AAI.get("vserver.vserver-name");
+                break;
+            default:
+                return null;
         }
         return request;
     }
 
-    private static String getAAIServiceInstance(VirtualControlLoopEvent event) {
-        AAIGETVnfResponse response;
+
+    private static AAIGETVnfResponse getAAIServiceInstance(VirtualControlLoopEvent event) {
+        AAIGETVnfResponse response = null;
         UUID requestID = event.requestID;
-        String serviceInstance = event.AAI.get("service-instance.service-instance-id");
         String vnfName = event.AAI.get("generic-vnf.vnf-name");
         String vnfID = event.AAI.get("generic-vnf.vnf-id");
-
-        if (serviceInstance == null) {
-            String aaiUrl = PolicyEngine.manager.getEnvironmentProperty("aai.url");
-            String aaiUsername = PolicyEngine.manager.getEnvironmentProperty("aai.username");
-            String aaiPassword = PolicyEngine.manager.getEnvironmentProperty("aai.password");
-            try {
-                if (vnfName != null) {
-                    String url = aaiUrl + "/aai/v11/network/generic-vnfs/generic-vnf?vnf-name=";
-                    response = AAIManager.getQueryByVnfName(url, aaiUsername, aaiPassword, requestID, vnfName);
-                    if (response != null) {
-                        serviceInstance = response.serviceId;
-                    }
-                } else if (vnfID != null) {
-                    String url = aaiUrl + "/aai/v11/network/generic-vnfs/generic-vnf/";
-                    response = AAIManager.getQueryByVnfID(url, aaiUsername, aaiPassword, requestID, vnfID);
-                    if (response != null) {
-                        serviceInstance = response.serviceId;
-                    }
-                } else {
-                    logger.error("getAAIServiceInstance failed");
-
-                }
-            } catch (Exception e) {
-                logger.error("getAAIServiceInstance exception: ", e);
+        String aaiUrl = PolicyEngine.manager.getEnvironmentProperty("aai.url");
+        String aaiUsername = PolicyEngine.manager.getEnvironmentProperty("aai.username");
+        String aaiPassword = PolicyEngine.manager.getEnvironmentProperty("aai.password");
+        try {
+            if (vnfName != null) {
+                String url = aaiUrl + "/aai/v11/network/generic-vnfs/generic-vnf?vnf-name=";
+                response = AAIManager.getQueryByVnfName(url, aaiUsername, aaiPassword, requestID, vnfName);
+            } else if (vnfID != null) {
+                String url = aaiUrl + "/aai/v11/network/generic-vnfs/generic-vnf/";
+                response = AAIManager.getQueryByVnfID(url, aaiUsername, aaiPassword, requestID, vnfID);
+            } else {
+                logger.error("getAAIServiceInstance failed");
             }
+        } catch (Exception e) {
+            logger.error("getAAIServiceInstance exception: ", e);
         }
-        return serviceInstance;
+        return response;
     }
 }
 
        private LinkedList<ControlLoopOperation> controlLoopHistory = new LinkedList<>();
        private ControlLoopOperationManager currentOperation = null;
        private transient TargetLock targetLock = null;
-       private static AAIGETVnfResponse vnfResponse = null;
-       private static AAIGETVserverResponse vserverResponse = null;
+       private AAIGETVnfResponse vnfResponse = null;
+       private AAIGETVserverResponse vserverResponse = null;
        private static String aaiHostURL; 
        private static String aaiUser; 
        private static String aaiPassword;
-       private static String aaiGetQueryByVserver; 
-       private static String aaiGetQueryByVnfID; 
-       private static String aaiGetQueryByVnfName; 
        
        private static Collection<String> requiredAAIKeys = new ArrayList<>();
        static {
                
        public NEW_EVENT_STATUS onNewEvent(VirtualControlLoopEvent event) {
                try {
-                       ControlLoopEventManager.checkEventSyntax(event);
+                       this.checkEventSyntax(event);
                        if (event.closedLoopEventStatus == ControlLoopEventStatus.ONSET) {
                                //
                                // Check if this is our original ONSET
                return vserverResponse; 
        }
        
-       public static void checkEventSyntax(VirtualControlLoopEvent event) throws ControlLoopException {
+       public void checkEventSyntax(VirtualControlLoopEvent event) throws ControlLoopException {
                if (event.closedLoopEventStatus == null || 
                                (event.closedLoopEventStatus != ControlLoopEventStatus.ONSET &&
                                event.closedLoopEventStatus != ControlLoopEventStatus.ABATED)) {