diff --git a/src/main/java/org/onap/clamp/clds/client/PolicyClient.java b/src/main/java/org/onap/clamp/clds/client/PolicyClient.java
index 6095af1..22f215c 100644
--- a/src/main/java/org/onap/clamp/clds/client/PolicyClient.java
+++ b/src/main/java/org/onap/clamp/clds/client/PolicyClient.java
@@ -324,8 +324,8 @@
                     versions.add(version);
                 } catch (Exception e) {
                     // just print warning - if n;o policies, version may be null
-                    logger.warn("warning: failed to parse policyConfig.getPolicyVersion()="
-                            + policyConfig.getPolicyVersion());
+                    logger.warn("Failed to parse due to an exception policyConfig.getPolicyVersion()="
+                            + policyConfig.getPolicyVersion(), e);
                 }
             }
             Collections.sort(versions);
diff --git a/src/main/java/org/onap/clamp/clds/client/req/SdcReq.java b/src/main/java/org/onap/clamp/clds/client/req/SdcReq.java
index 3c16ce6..9c2ebcd 100644
--- a/src/main/java/org/onap/clamp/clds/client/req/SdcReq.java
+++ b/src/main/java/org/onap/clamp/clds/client/req/SdcReq.java
@@ -23,6 +23,17 @@
 
 package org.onap.clamp.clds.client.req;
 
+import com.att.eelf.configuration.EELFLogger;
+import com.att.eelf.configuration.EELFManager;
+import com.fasterxml.jackson.core.JsonParseException;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.JsonMappingException;
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.node.ArrayNode;
+import com.fasterxml.jackson.databind.node.ObjectNode;
+import com.fasterxml.jackson.dataformat.yaml.snakeyaml.Yaml;
+
 import java.io.IOException;
 import java.nio.charset.StandardCharsets;
 import java.util.ArrayList;
@@ -35,6 +46,7 @@
 import org.apache.commons.codec.digest.DigestUtils;
 import org.camunda.bpm.engine.delegate.DelegateExecution;
 import org.onap.clamp.clds.client.SdcCatalogServices;
+import org.onap.clamp.clds.exception.SdcCommunicationException;
 import org.onap.clamp.clds.model.CldsSdcResource;
 import org.onap.clamp.clds.model.CldsSdcServiceDetail;
 import org.onap.clamp.clds.model.prop.Global;
@@ -43,17 +55,6 @@
 import org.onap.clamp.clds.model.prop.Tca;
 import org.onap.clamp.clds.model.refprop.RefProp;
 
-import com.att.eelf.configuration.EELFLogger;
-import com.att.eelf.configuration.EELFManager;
-import com.fasterxml.jackson.core.JsonParseException;
-import com.fasterxml.jackson.core.JsonProcessingException;
-import com.fasterxml.jackson.databind.JsonMappingException;
-import com.fasterxml.jackson.databind.JsonNode;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.fasterxml.jackson.databind.node.ArrayNode;
-import com.fasterxml.jackson.databind.node.ObjectNode;
-import com.fasterxml.jackson.dataformat.yaml.snakeyaml.Yaml;
-
 /**
  * Construct a Sdc request given CLDS objects.
  */
@@ -63,14 +64,14 @@
 
     /**
      * Format the Blueprint from a Yaml
-     * 
+     *
      * @param refProp
      *            The RefProp instance containing the Clds config
      * @param prop
      *            The ModelProperties describing the clds model
      * @param docText
      *            The Yaml file that must be converted
-     * 
+     *
      * @return A String containing the BluePrint
      * @throws JsonParseException
      *             In case of issues
@@ -253,37 +254,41 @@
      * @throws Exception
      */
     public static List<String> getSdcReqUrlsList(ModelProperties prop, String baseUrl,
-            SdcCatalogServices sdcCatalogServices, DelegateExecution execution) throws Exception {
+            SdcCatalogServices sdcCatalogServices, DelegateExecution execution) {
         // TODO : refact and regroup with very similar code
         List<String> urlList = new ArrayList<>();
-        Global globalProps = prop.getGlobal();
-        if (globalProps != null) {
-            if (globalProps.getService() != null) {
-                String serviceInvariantUUID = globalProps.getService();
-                execution.setVariable("serviceInvariantUUID", serviceInvariantUUID);
-                List<String> resourceVfList = globalProps.getResourceVf();
-                String serviceUUID = sdcCatalogServices.getServiceUuidFromServiceInvariantId(serviceInvariantUUID);
-                String sdcServicesInformation = sdcCatalogServices.getSdcServicesInformation(serviceUUID);
-                CldsSdcServiceDetail CldsSdcServiceDetail = sdcCatalogServices
-                        .getCldsSdcServiceDetailFromJson(sdcServicesInformation);
-                if (CldsSdcServiceDetail != null && resourceVfList != null) {
-                    List<CldsSdcResource> CldsSdcResourcesList = CldsSdcServiceDetail.getResources();
-                    if (CldsSdcResourcesList != null && CldsSdcResourcesList.size() > 0) {
-                        for (CldsSdcResource CldsSdcResource : CldsSdcResourcesList) {
-                            if (CldsSdcResource != null && CldsSdcResource.getResoucreType() != null
-                                    && CldsSdcResource.getResoucreType().equalsIgnoreCase("VF")) {
-                                if (resourceVfList.contains(CldsSdcResource.getResourceInvariantUUID())) {
-                                    String normalizedResourceInstanceName = normalizeResourceInstanceName(
-                                            CldsSdcResource.getResourceInstanceName());
-                                    String svcUrl = baseUrl + "/" + serviceUUID + "/resourceInstances/"
-                                            + normalizedResourceInstanceName + "/artifacts";
-                                    urlList.add(svcUrl);
+        try {
+            Global globalProps = prop.getGlobal();
+            if (globalProps != null) {
+                if (globalProps.getService() != null) {
+                    String serviceInvariantUUID = globalProps.getService();
+                    execution.setVariable("serviceInvariantUUID", serviceInvariantUUID);
+                    List<String> resourceVfList = globalProps.getResourceVf();
+                    String serviceUUID = sdcCatalogServices.getServiceUuidFromServiceInvariantId(serviceInvariantUUID);
+                    String sdcServicesInformation = sdcCatalogServices.getSdcServicesInformation(serviceUUID);
+                    CldsSdcServiceDetail CldsSdcServiceDetail = sdcCatalogServices
+                            .getCldsSdcServiceDetailFromJson(sdcServicesInformation);
+                    if (CldsSdcServiceDetail != null && resourceVfList != null) {
+                        List<CldsSdcResource> CldsSdcResourcesList = CldsSdcServiceDetail.getResources();
+                        if (CldsSdcResourcesList != null && CldsSdcResourcesList.size() > 0) {
+                            for (CldsSdcResource CldsSdcResource : CldsSdcResourcesList) {
+                                if (CldsSdcResource != null && CldsSdcResource.getResoucreType() != null
+                                        && CldsSdcResource.getResoucreType().equalsIgnoreCase("VF")) {
+                                    if (resourceVfList.contains(CldsSdcResource.getResourceInvariantUUID())) {
+                                        String normalizedResourceInstanceName = normalizeResourceInstanceName(
+                                                CldsSdcResource.getResourceInstanceName());
+                                        String svcUrl = baseUrl + "/" + serviceUUID + "/resourceInstances/"
+                                                + normalizedResourceInstanceName + "/artifacts";
+                                        urlList.add(svcUrl);
+                                    }
                                 }
                             }
                         }
                     }
                 }
             }
+        } catch (IOException e) {
+            throw new SdcCommunicationException("Exception occurred during the SDC communication",e);
         }
         return urlList;
     }
@@ -358,7 +363,7 @@
 
     /**
      * Method to get yaml/template properties value from json
-     * 
+     *
      * @param docText
      * @return
      * @throws IOException
diff --git a/src/main/java/org/onap/clamp/clds/exception/SdcCommunicationException.java b/src/main/java/org/onap/clamp/clds/exception/SdcCommunicationException.java
new file mode 100644
index 0000000..429ab8d
--- /dev/null
+++ b/src/main/java/org/onap/clamp/clds/exception/SdcCommunicationException.java
@@ -0,0 +1,61 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP CLAMP
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights
+ *                             reserved.
+ * ================================================================================
+ * 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.
+ * ============LICENSE_END============================================
+ * ===================================================================
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+
+package org.onap.clamp.clds.exception;
+
+/**
+ * New exception to capture SDC communication errors.
+ *
+ */
+public class SdcCommunicationException extends RuntimeException {
+
+    /**
+     * Generated ID
+     */
+    private static final long serialVersionUID = 8452294782552680243L;
+
+    /**
+     * This constructor can be used to create a new SdcCommunicationException.
+     * 
+     * @param message
+     *            A string message detailing the problem
+     * @param e
+     *            The exception sent by the code
+     */
+    public SdcCommunicationException(String message, Throwable e) {
+        super(message, e);
+    }
+
+    /**
+     * This constructor can be used to create a new SdcCommunicationException.
+     * Use this constructor only if you are creating a new exception stack, not
+     * if an exception was already raised by another code.
+     *
+     * @param message
+     *            A string message detailing the problem
+     */
+    public SdcCommunicationException(String message) {
+        super(message);
+    }
+
+}
diff --git a/src/main/java/org/onap/clamp/clds/model/CldsModel.java b/src/main/java/org/onap/clamp/clds/model/CldsModel.java
index a830f93..7eac3d9 100644
--- a/src/main/java/org/onap/clamp/clds/model/CldsModel.java
+++ b/src/main/java/org/onap/clamp/clds/model/CldsModel.java
@@ -300,8 +300,9 @@
      */
     public static CldsModel createUsingControlName(String fullControlName) {
         if (fullControlName == null || fullControlName.length() < UUID_LENGTH) {
-            throw new BadRequestException("closed loop id / control name length, " + fullControlName.length()
-                    + ", less than the minimum of: " + UUID_LENGTH);
+            throw new BadRequestException(
+                    "closed loop id / control name length, " + (fullControlName != null ? fullControlName.length() : 0)
+                            + ", less than the minimum of: " + UUID_LENGTH);
         }
         CldsModel model = new CldsModel();
         model.setControlNamePrefix(fullControlName.substring(0, fullControlName.length() - UUID_LENGTH));
