diff --git a/ansible-adapter/ansible-adapter-bundle/src/test/java/org/onap/appc/adapter/ansible/impl/TestAnsibleAdapterImpl.java b/ansible-adapter/ansible-adapter-bundle/src/test/java/org/onap/ccsdk/adapter/ansible/impl/TestAnsibleAdapterImpl.java
similarity index 98%
rename from ansible-adapter/ansible-adapter-bundle/src/test/java/org/onap/appc/adapter/ansible/impl/TestAnsibleAdapterImpl.java
rename to ansible-adapter/ansible-adapter-bundle/src/test/java/org/onap/ccsdk/adapter/ansible/impl/TestAnsibleAdapterImpl.java
index d96a709..86bed7e 100644
--- a/ansible-adapter/ansible-adapter-bundle/src/test/java/org/onap/appc/adapter/ansible/impl/TestAnsibleAdapterImpl.java
+++ b/ansible-adapter/ansible-adapter-bundle/src/test/java/org/onap/ccsdk/adapter/ansible/impl/TestAnsibleAdapterImpl.java
@@ -22,7 +22,7 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.appc.adapter.ansible.impl;
+package org.onap.ccsdk.adapter.ansible.impl;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.fail;
diff --git a/ansible-adapter/ansible-adapter-bundle/src/test/java/org/onap/appc/adapter/ansible/model/TestAnsibleAdapter.java b/ansible-adapter/ansible-adapter-bundle/src/test/java/org/onap/ccsdk/adapter/ansible/model/TestAnsibleAdapter.java
similarity index 98%
rename from ansible-adapter/ansible-adapter-bundle/src/test/java/org/onap/appc/adapter/ansible/model/TestAnsibleAdapter.java
rename to ansible-adapter/ansible-adapter-bundle/src/test/java/org/onap/ccsdk/adapter/ansible/model/TestAnsibleAdapter.java
index aebc1c0..6fc90d0 100644
--- a/ansible-adapter/ansible-adapter-bundle/src/test/java/org/onap/appc/adapter/ansible/model/TestAnsibleAdapter.java
+++ b/ansible-adapter/ansible-adapter-bundle/src/test/java/org/onap/ccsdk/adapter/ansible/model/TestAnsibleAdapter.java
@@ -21,7 +21,7 @@
  * ECOMP is a trademark and service mark of AT&T Intellectual Property.
  * ============LICENSE_END=========================================================
  */
-package org.onap.appc.adapter.ansible.model;
+package org.onap.ccsdk.adapter.ansible.model;
 
 import static org.junit.Assert.assertNotNull;
 
diff --git a/ansible-adapter/ansible-adapter-bundle/src/test/java/org/onap/appc/test/ExecutorHarness.java b/ansible-adapter/ansible-adapter-bundle/src/test/java/org/onap/ccsdk/test/ExecutorHarness.java
similarity index 98%
rename from ansible-adapter/ansible-adapter-bundle/src/test/java/org/onap/appc/test/ExecutorHarness.java
rename to ansible-adapter/ansible-adapter-bundle/src/test/java/org/onap/ccsdk/test/ExecutorHarness.java
index 13b5fdf..3555d7d 100644
--- a/ansible-adapter/ansible-adapter-bundle/src/test/java/org/onap/appc/test/ExecutorHarness.java
+++ b/ansible-adapter/ansible-adapter-bundle/src/test/java/org/onap/ccsdk/test/ExecutorHarness.java
@@ -23,7 +23,7 @@
  */
 
 
-package org.onap.appc.test;
+package org.onap.ccsdk.test;
 
 import java.lang.reflect.Field;
 import java.lang.reflect.Method;
@@ -32,7 +32,6 @@
 import java.util.List;
 import java.util.Map;
 
-import org.onap.appc.test.InterceptLogger;
 import org.onap.ccsdk.sli.core.sli.SvcLogicContext;
 import org.onap.ccsdk.sli.core.sli.SvcLogicJavaPlugin;
 
diff --git a/ansible-adapter/ansible-adapter-bundle/src/test/java/org/onap/appc/test/InterceptLogger.java b/ansible-adapter/ansible-adapter-bundle/src/test/java/org/onap/ccsdk/test/InterceptLogger.java
similarity index 99%
rename from ansible-adapter/ansible-adapter-bundle/src/test/java/org/onap/appc/test/InterceptLogger.java
rename to ansible-adapter/ansible-adapter-bundle/src/test/java/org/onap/ccsdk/test/InterceptLogger.java
index b101ece..92235cb 100644
--- a/ansible-adapter/ansible-adapter-bundle/src/test/java/org/onap/appc/test/InterceptLogger.java
+++ b/ansible-adapter/ansible-adapter-bundle/src/test/java/org/onap/ccsdk/test/InterceptLogger.java
@@ -23,7 +23,7 @@
  */
 
 
-package org.onap.appc.test;
+package org.onap.ccsdk.test;
 
 import java.text.MessageFormat;
 import java.util.ArrayList;
diff --git a/ansible-adapter/ansible-adapter-bundle/src/test/resources/org/onap/appc/default.properties b/ansible-adapter/ansible-adapter-bundle/src/test/resources/org/onap/ccsdk/default.properties
similarity index 100%
rename from ansible-adapter/ansible-adapter-bundle/src/test/resources/org/onap/appc/default.properties
rename to ansible-adapter/ansible-adapter-bundle/src/test/resources/org/onap/ccsdk/default.properties
diff --git a/saltstack-adapter/README.md b/saltstack-adapter/README.md
index 8e989a8..5eaf1cc 100644
--- a/saltstack-adapter/README.md
+++ b/saltstack-adapter/README.md
@@ -50,7 +50,8 @@
     "User"; ->  Saltstack server's SSH Password.
   Note: SSH_CERT based Auth is not supported in this method.
   
-***Using Saltstack Adaptor Commands and params to pass in:*** reqExecCommand:
+***Using Saltstack Adaptor Commands and params to pass in: reqExecCommand API:*** 
+
 Method to execute a single command on SaltState server and execute a SLS file located on the server. The command entered should request the output in JSON format, this can be done by appending json-out outputter as specified in https://docs.saltstack.com/en/latest/ref/output/all/salt.output.json_out.html#module-salt.output.json_out and https://docs.saltstack.com/en/2017.7/ref/cli/salt-call.html 
 The response from Saltstack comes in json format and it is automatically put to context for DGs access, with a certain request-ID as prefix.
 If Id is not passed as part of input param, then a random Id will be generated and put to properties in "org.onap.appc.adapter.saltstack.Id" field. All the output message from the execution will be appended with reqId. 
@@ -72,8 +73,8 @@
 
 2) Execute a SLS file located on the server : Example command will look like:
 Knowing the saltstack server has vim.sls file located at "/srv/salt" directory then user can execute the following commands:
-1.1) Command to run the vim.sls file on saltstack server: "salt '*' state.apply vim --out=json --static"
-1.2) Command to run the nettools.sls file on saltstack server: "salt '*' state.apply nettools --out=json --static"
+1.1) Command to run the vim.sls file on saltstack server: cmd = "salt '*' state.apply vim --out=json --static"
+1.2) Command to run the nettools.sls file on saltstack server: cmd = "salt '*' state.apply nettools --out=json --static"
 Important thing to note: If the reqExecCommand is used to execute sls file then along with following, 
     "HostName";  ->  Saltstack server's host name IP address.
     "Port"; ->  Saltstack server's port to make SSH connection to.
@@ -82,14 +83,42 @@
 the param should contain,
     "slsExec"; ->  this variable should be set to true.
 
-In this case, params that will hold the command execution result for DG access are
+In this case, params that will hold the command execution result for DG access in Key:
 Result code at: org.onap.appc.adapter.saltstack.result.code (On success: This will be 200, this means the command was executed successfully and also configuration change made using the SLS file was also successful) 
 Message at: org.onap.appc.adapter.saltstack.message
 Both user inputted/auto generated req Id at:  org.onap.appc.adapter.saltstack.Id
 The result code here will be the execution of configuration SLS file on the server. 
-NOTE: It would be better to use reqExecSLS, where you will only have to specify SLS file name on server.
-***Using Saltstack Adaptor Commands and params to pass in:*** reqExecSLS:
-Method to execute a single sls on SaltState server and execute a SLS file located on the server. The command entered should request the output in JSON format, this can be done by appending json-out outputter as specified in https://docs.saltstack.com/en/latest/ref/output/all/salt.output.json_out.html#module-salt.output.json_out and https://docs.saltstack.com/en/2017.7/ref/cli/salt-call.html 
+NOTE: It would be better to use reqExecSLS, where you will only have to specify SLS file name on server to execute it.
+
+
+***Using Saltstack Adaptor Commands and params to pass in: reqExecSLS API:***
+
+Method to execute a single sls on SaltState server (Where the SLS file already located on the server). The command entered will only be the SLS file name and the output will be in JSON format automatically. 
 The response from Saltstack comes in json format and it is automatically put to context for DGs access, with a certain request-ID as prefix.
-If Id is not passed as part of input param, then a random Id will be generated and put to properties in "org.onap.appc.adapter.saltstack.Id" field. All the output message from the execution will be appended with reqId. 
+If request Id (Id) is not passed as part of input param, then a random Id will be generated and put to properties in "org.onap.appc.adapter.saltstack.Id" field. All the output message from the execution will be appended with reqId. 
 1) Execute a single command on SaltState server : Example command will look like: 
+    In the context set the "slsName" to "test.sls"
+    In the context set the "applyTo" to "minion1" //to the minions or VNFCs you want to apply the SLS file to.
+    "applyTo" can be empty or set to "*" is the SLS has to be applied to all the minions or VNFCs. 
+In this case, params that will hold the command execution result for DG access in Key:
+Result code at: org.onap.appc.adapter.saltstack.result.code (On success: This will be 200, this means the command was executed successfully and also configuration change made using the SLS file was also successful) 
+Message at: org.onap.appc.adapter.saltstack.message
+Both user inputted/auto generated req Id at:  org.onap.appc.adapter.saltstack.Id
+The result code here will be the execution of configuration SLS file on the server. 
+
+***Using Saltstack Adaptor Commands and params to pass in: reqExecSLSFile API:***
+
+Method to execute a single sls on SaltState server (Where the SLS file in the adaptor). The command entered will only be the SLS file location on the APPC/ODL container and the output from server will be in JSON format automatically. 
+The response from Saltstack comes in json format and it is automatically put to context for DGs access, with a certain request-ID as prefix.
+If request Id (Id) is not passed as part of input param, then a random Id will be generated and put to properties in "org.onap.appc.adapter.saltstack.Id" field. All the output message from the execution will be appended with reqId. 
+1) Execute a single command on SaltState server : Example command will look like: 
+    In the context set the "slsFile" to "/path/to/test.sls" //mention the path of the SLS file in ODL container.
+    In the context set the "applyTo" to "minion1" //to the minions or VNFCs you want to apply the SLS file to.
+    "applyTo" can be empty or set to "*" is the SLS has to be applied to all the minions or VNFCs. 
+In this case, params that will hold the command execution result for DG access in Key:
+Result code at: org.onap.appc.adapter.saltstack.result.code (On success: This will be 200, this means the command was executed successfully and also configuration change made using the SLS file was also successful) 
+Message at: org.onap.appc.adapter.saltstack.message
+Both user inputted/auto generated req Id at:  org.onap.appc.adapter.saltstack.Id
+The result code here will be the execution of configuration SLS file on the server. 
+
+
diff --git a/saltstack-adapter/saltstack-adapter-features/ccsdk-saltstack-adapter/pom.xml b/saltstack-adapter/saltstack-adapter-features/ccsdk-saltstack-adapter/pom.xml
index 01b330e..cf151ca 100644
--- a/saltstack-adapter/saltstack-adapter-features/ccsdk-saltstack-adapter/pom.xml
+++ b/saltstack-adapter/saltstack-adapter-features/ccsdk-saltstack-adapter/pom.xml
@@ -47,4 +47,4 @@
            </dependency>
        </dependencies>
        -->
-</project>
\ No newline at end of file
+</project>
diff --git a/saltstack-adapter/saltstack-adapter-features/src/main/resources/features.xml b/saltstack-adapter/saltstack-adapter-features/src/main/resources/features.xml
index 47db978..5359d80 100644
--- a/saltstack-adapter/saltstack-adapter-features/src/main/resources/features.xml
+++ b/saltstack-adapter/saltstack-adapter-features/src/main/resources/features.xml
@@ -24,17 +24,17 @@
   -->
 
 
-<features name="appc-saltstack-adapter-${project.version}" xmlns="http://karaf.apache.org/xmlns/features/v1.2.0"
+<features name="ccsdk-saltstack-adapter-${project.version}" xmlns="http://karaf.apache.org/xmlns/features/v1.2.0"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://karaf.apache.org/xmlns/features/v1.2.0 http://karaf.apache.org/xmlns/features/v1.2.0">     
 
      <repository>mvn:org.opendaylight.mdsal/features-mdsal/${odl.mdsal.features.version}/xml/features</repository>
     
-    <feature name='appc-saltstack-adapter' description="appc-saltstack-adapter" version='${project.version}'>
+    <feature name='ccsdk-saltstack-adapter' description="ccsdk-saltstack-adapter" version='${project.version}'>
         <feature version="${odl.mdsal.version}">odl-mdsal-broker</feature>
         <feature>sdnc-sli</feature>
          <bundle dependency="true">mvn:org.onap.appc/appc-common/${project.version}</bundle>
-        <bundle>mvn:org.onap.appc/appc-saltstack-adapter-provider/${project.version}</bundle>
+        <bundle>mvn:org.onap.ccsdk.sli.adaptors/saltstack-adapter-provider/${project.version}</bundle>
     </feature>
 
 </features>
diff --git a/saltstack-adapter/saltstack-adapter-provider/src/main/java/org/onap/ccsdk/sli/adaptors/saltstack/impl/ConnectionBuilder.java b/saltstack-adapter/saltstack-adapter-provider/src/main/java/org/onap/ccsdk/sli/adaptors/saltstack/impl/ConnectionBuilder.java
index 65ab598..cc4ce95 100644
--- a/saltstack-adapter/saltstack-adapter-provider/src/main/java/org/onap/ccsdk/sli/adaptors/saltstack/impl/ConnectionBuilder.java
+++ b/saltstack-adapter/saltstack-adapter-provider/src/main/java/org/onap/ccsdk/sli/adaptors/saltstack/impl/ConnectionBuilder.java
@@ -84,7 +84,7 @@
      * @param cmd Commands to execute
      * @return command execution status
      */
-    public SaltstackResult connectNExecute(String cmd) {
+    public SaltstackResult connectNExecute(String cmd) throws IOException {
         return connectNExecute(cmd, -1, -1);
     }
 
@@ -98,9 +98,12 @@
      * @param retryCount number of count retry to make a SSH connection.
      * @return command execution status
      */
-    public SaltstackResult connectNExecute(String cmd, int retryCount, int retryDelay) {
+    public SaltstackResult connectNExecute(String cmd, int retryCount, int retryDelay)
+                            throws IOException{
 
         SaltstackResult result = new SaltstackResult();
+        OutputStream out = null;
+        OutputStream errs = null;
         try {
             if (retryCount != -1) {
                 result = sshConnection.connectWithRetry(retryCount, retryDelay);
@@ -112,12 +115,10 @@
             }
             String outFilePath = "/tmp/" + RandomStringUtils.random(5, true, true);
             String errFilePath = "/tmp/" + RandomStringUtils.random(5, true, true);
-            OutputStream out = new FileOutputStream(outFilePath);
-            OutputStream errs = new FileOutputStream(errFilePath);
+            out = new FileOutputStream(outFilePath);
+            errs = new FileOutputStream(errFilePath);
             result = sshConnection.execCommand(cmd, out, errs);
             sshConnection.disconnect();
-            out.close();
-            errs.close();
             if (result.getSshExitStatus() != 0) {
                 return sortExitStatus(result.getSshExitStatus(), errFilePath, cmd);
             }
@@ -130,6 +131,11 @@
             logger.error("Caught Exception", io);
             result.setStatusCode(SaltstackResultCodes.UNKNOWN_EXCEPTION.getValue());
             result.setStatusMessage(io.getMessage());
+        } finally {
+            if( out != null )
+                out.close();
+            if( errs != null )
+                errs.close();
         }
         return result;
     }
diff --git a/saltstack-adapter/saltstack-adapter-provider/src/main/java/org/onap/ccsdk/sli/adaptors/saltstack/impl/SaltstackAdapterImpl.java b/saltstack-adapter/saltstack-adapter-provider/src/main/java/org/onap/ccsdk/sli/adaptors/saltstack/impl/SaltstackAdapterImpl.java
index 84e5d4f..0b6a5bb 100644
--- a/saltstack-adapter/saltstack-adapter-provider/src/main/java/org/onap/ccsdk/sli/adaptors/saltstack/impl/SaltstackAdapterImpl.java
+++ b/saltstack-adapter/saltstack-adapter-provider/src/main/java/org/onap/ccsdk/sli/adaptors/saltstack/impl/SaltstackAdapterImpl.java
@@ -81,7 +81,7 @@
     private static final String SS_SERVER_HOSTNAME = "org.onap.appc.adapter.saltstack.host";
     private static final String SS_SERVER_PORT = "org.onap.appc.adapter.saltstack.port";
     private static final String SS_SERVER_USERNAME = "org.onap.appc.adapter.saltstack.userName";
-    private static final String SS_SERVER_PASSWORD = "org.onap.appc.adapter.saltstack.userPasswd";
+    private static final String SS_SERVER_PASSWD = "org.onap.appc.adapter.saltstack.userPasswd";
     private static final String SS_SERVER_SSH_KEY = "org.onap.appc.adapter.saltstack.sshKey";
     /**
      * The logger to be used
@@ -186,7 +186,7 @@
                 String sshHost = props.getProperty(SS_SERVER_HOSTNAME);
                 String sshPort = props.getProperty(SS_SERVER_PORT);
                 String sshUserName = props.getProperty(SS_SERVER_USERNAME);
-                String sshPassword = props.getProperty(SS_SERVER_PASSWORD);
+                String sshPassword = props.getProperty(SS_SERVER_PASSWD);
                 sshClient = new ConnectionBuilder(sshHost, sshPort, sshUserName, sshPassword);
             } else if ("SSH_CERT".equalsIgnoreCase(clientType)) {
                 // set path to keystore file
@@ -200,13 +200,10 @@
                 String sshKey = props.getProperty(SS_SERVER_SSH_KEY);
                 String sshHost = props.getProperty(SS_SERVER_HOSTNAME);
                 String sshUserName = props.getProperty(SS_SERVER_USERNAME);
-                String sshPassword = props.getProperty(SS_SERVER_PASSWORD);
+                String sshPassword = props.getProperty(SS_SERVER_PASSWD);
                 String sshPort = props.getProperty(SS_SERVER_PORT);
                 logger.info("Creating ssh client with ssh KEY from " + sshKey);
                 sshClient = new ConnectionBuilder(sshHost, sshPort, sshUserName, sshPassword, sshKey);
-            } else if ("NONE".equalsIgnoreCase(clientType)) {
-                logger.info("No saltstack-adapter.properties defined so reading from DG props");
-                sshClient = null;
             } else {
                 logger.info("No saltstack-adapter.properties defined so reading from DG props");
                 sshClient = null;
@@ -317,12 +314,17 @@
         boolean slsExec;
         SaltstackResult testResult;
         setSSHClient(params);
-        reqID = messageProcessor.reqId(params);
-        String commandToExecute = messageProcessor.reqCmd(params);
-        slsExec = messageProcessor.reqIsSLSExec(params);
-        testResult = execCommand(params, commandToExecute);
-        testResult = messageProcessor.parseResponse(ctx, reqID, testResult, slsExec);
-        checkResponseStatus(testResult, ctx, reqID, slsExec);
+        try {
+            reqID = messageProcessor.reqId(params);
+            String commandToExecute = messageProcessor.reqCmd(params);
+            slsExec = messageProcessor.reqIsSLSExec(params);
+            testResult = execCommand(ctx, params, commandToExecute);
+            testResult = messageProcessor.parseResponse(ctx, reqID, testResult, slsExec);
+            checkResponseStatus(testResult, ctx, reqID, slsExec);
+        } catch (IOException e) {
+            doFailure(ctx, SaltstackResultCodes.IO_EXCEPTION.getValue(),
+                      "IOException in file stream : "+ e.getMessage());
+        }
     }
 
     /**
@@ -338,13 +340,18 @@
         String reqID;
         SaltstackResult testResult;
         setSSHClient(params);
-        reqID = messageProcessor.reqId(params);
-        String slsName = messageProcessor.reqSlsName(params);
-        String applyTo = messageProcessor.reqApplyToDevices(params);
-        String commandToExecute = putToCommands(slsName, applyTo);
-        testResult = execCommand(params, commandToExecute);
-        testResult = messageProcessor.parseResponse(ctx, reqID, testResult, true);
-        checkResponseStatus(testResult, ctx, reqID, true);
+        try {
+            reqID = messageProcessor.reqId(params);
+            String slsName = messageProcessor.reqSlsName(params);
+            String applyTo = messageProcessor.reqApplyToDevices(params);
+            String commandToExecute = putToCommands(slsName, applyTo);
+            testResult = execCommand(ctx, params, commandToExecute);
+            testResult = messageProcessor.parseResponse(ctx, reqID, testResult, true);
+            checkResponseStatus(testResult, ctx, reqID, true);
+        } catch (IOException e) {
+            doFailure(ctx, SaltstackResultCodes.IO_EXCEPTION.getValue(),
+                      "IOException in file stream : "+ e.getMessage());
+        }
     }
 
     /**
@@ -360,13 +367,18 @@
         String reqID;
         SaltstackResult testResult;
         setSSHClient(params);
-        reqID = messageProcessor.reqId(params);
-        String slsFile = messageProcessor.reqSlsFile(params);
-        String applyTo = messageProcessor.reqApplyToDevices(params);
-        String commandToExecute = putToCommands(ctx, slsFile, applyTo);
-        testResult = execCommand(params, commandToExecute);
-        testResult = messageProcessor.parseResponse(ctx, reqID, testResult, true);
-        checkResponseStatus(testResult, ctx, reqID, true);
+        try {
+            reqID = messageProcessor.reqId(params);
+            String slsFile = messageProcessor.reqSlsFile(params);
+            String applyTo = messageProcessor.reqApplyToDevices(params);
+            String commandToExecute = putToCommands(ctx, slsFile, applyTo);
+            testResult = execCommand(ctx, params, commandToExecute);
+            testResult = messageProcessor.parseResponse(ctx, reqID, testResult, true);
+            checkResponseStatus(testResult, ctx, reqID, true);
+        } catch (IOException e) {
+            doFailure(ctx, SaltstackResultCodes.IO_EXCEPTION.getValue(),
+                      "IOException in file stream : "+ e.getMessage());
+        }
     }
 
     /**
@@ -382,22 +394,29 @@
 
     }
 
-    public SaltstackResult execCommand(Map<String, String> params, String commandToExecute) {
-        SaltstackResult testResult;
-        if (params.get(CONNECTION_RETRY_DELAY) != null && params.get(CONNECTION_RETRY_COUNT) != null) {
-            int retryDelay = Integer.parseInt(params.get(CONNECTION_RETRY_DELAY));
-            int retryCount = Integer.parseInt(params.get(CONNECTION_RETRY_COUNT));
-            if (!testMode) {
-                testResult = sshClient.connectNExecute(commandToExecute, retryCount, retryDelay);
+    public SaltstackResult execCommand(SvcLogicContext ctx, Map<String, String> params, String commandToExecute)
+                                    throws SvcLogicException{
+
+        SaltstackResult testResult = new SaltstackResult();
+        try {
+            if (params.get(CONNECTION_RETRY_DELAY) != null && params.get(CONNECTION_RETRY_COUNT) != null) {
+                int retryDelay = Integer.parseInt(params.get(CONNECTION_RETRY_DELAY));
+                int retryCount = Integer.parseInt(params.get(CONNECTION_RETRY_COUNT));
+                if (!testMode) {
+                    testResult = sshClient.connectNExecute(commandToExecute, retryCount, retryDelay);
+                } else {
+                    testResult = testServer.mockReqExec(params);
+                }
             } else {
-                testResult = testServer.MockReqExec(params);
+                if (!testMode) {
+                    testResult = sshClient.connectNExecute(commandToExecute);
+                } else {
+                    testResult = testServer.mockReqExec(params);
+                }
             }
-        } else {
-            if (!testMode) {
-                testResult = sshClient.connectNExecute(commandToExecute);
-            } else {
-                testResult = testServer.MockReqExec(params);
-            }
+        } catch (IOException e) {
+            doFailure(ctx, SaltstackResultCodes.IO_EXCEPTION.getValue(),
+                      "IOException in file stream : "+ e.getMessage());
         }
         return testResult;
     }
diff --git a/saltstack-adapter/saltstack-adapter-provider/src/main/java/org/onap/ccsdk/sli/adaptors/saltstack/model/SaltstackMessageParser.java b/saltstack-adapter/saltstack-adapter-provider/src/main/java/org/onap/ccsdk/sli/adaptors/saltstack/model/SaltstackMessageParser.java
index f282a33..0a6e4eb 100644
--- a/saltstack-adapter/saltstack-adapter-provider/src/main/java/org/onap/ccsdk/sli/adaptors/saltstack/model/SaltstackMessageParser.java
+++ b/saltstack-adapter/saltstack-adapter-provider/src/main/java/org/onap/ccsdk/sli/adaptors/saltstack/model/SaltstackMessageParser.java
@@ -41,6 +41,7 @@
 import java.io.File;
 import java.io.FileInputStream;
 import java.io.FileNotFoundException;
+import java.io.IOException;
 import java.io.InputStream;
 import java.util.Collections;
 import java.util.HashSet;
@@ -289,15 +290,16 @@
      * and returns an SaltstackResult object.
      */
     public SaltstackResult parseResponse(SvcLogicContext ctx, String pfx,
-                                         SaltstackResult saltstackResult, boolean slsExec) {
+                                         SaltstackResult saltstackResult, boolean slsExec) throws IOException{
         int code = saltstackResult.getStatusCode();
+        InputStream in = null;
         boolean executionStatus = true, retCodeFound = false;
         if (code != SaltstackResultCodes.SUCCESS.getValue()) {
             return saltstackResult;
         }
         try {
             File file = new File(saltstackResult.getOutputFileName());
-            InputStream in = new FileInputStream(file);
+            in = new FileInputStream(file);
             byte[] data = new byte[(int) file.length()];
             in.read(data);
             String str = new String(data, "UTF-8");
@@ -324,6 +326,9 @@
         } catch (Exception e) {
             return new SaltstackResult(SaltstackResultCodes.INVALID_RESPONSE_FILE.getValue(), "error parsing response file "
                     + saltstackResult.getOutputFileName() + " : " + e.getMessage());
+        } finally {
+            if( in != null )
+                in.close();
         }
         if (slsExec) {
             if (!retCodeFound)
@@ -337,10 +342,12 @@
         return saltstackResult;
     }
 
-    public SaltstackResult putToProperties(SvcLogicContext ctx, String pfx, SaltstackResult saltstackResult) {
+    public SaltstackResult putToProperties(SvcLogicContext ctx, String pfx,
+                                           SaltstackResult saltstackResult) throws IOException{
+        InputStream in = null;
         try {
             File file = new File(saltstackResult.getOutputFileName());
-            InputStream in = new FileInputStream(file);
+            in = new FileInputStream(file);
             Properties prop = new Properties();
             prop.load(in);
             ctx.setAttribute(pfx + "completeResult", prop.toString());
@@ -355,6 +362,9 @@
         } catch (Exception e) {
             saltstackResult = new SaltstackResult(SaltstackResultCodes.INVALID_RESPONSE_FILE.getValue(), "Error parsing response file = "
                     + saltstackResult.getOutputFileName() + ". Error = " + e.getMessage());
+        } finally {
+            if( in != null )
+                in.close();
         }
         saltstackResult.setStatusCode(SaltstackResultCodes.FINAL_SUCCESS.getValue());
         return saltstackResult;
diff --git a/saltstack-adapter/saltstack-adapter-provider/src/main/java/org/onap/ccsdk/sli/adaptors/saltstack/model/SaltstackServerEmulator.java b/saltstack-adapter/saltstack-adapter-provider/src/main/java/org/onap/ccsdk/sli/adaptors/saltstack/model/SaltstackServerEmulator.java
index ecb36fb..adbf9bd 100644
--- a/saltstack-adapter/saltstack-adapter-provider/src/main/java/org/onap/ccsdk/sli/adaptors/saltstack/model/SaltstackServerEmulator.java
+++ b/saltstack-adapter/saltstack-adapter-provider/src/main/java/org/onap/ccsdk/sli/adaptors/saltstack/model/SaltstackServerEmulator.java
@@ -55,7 +55,7 @@
      * Returns an saltstack object result. The response code is always the ssh code 200 (i.e connection successful)
      * payload is json string as would be sent back by Saltstack Server
      **/
-    public SaltstackResult MockReqExec(Map<String, String> params) {
+    public SaltstackResult mockReqExec(Map<String, String> params) {
         SaltstackResult result = new SaltstackResult();
 
         try {
@@ -75,45 +75,6 @@
         return result;
     }
 
-    /**
-     * Method to emulate response from an Saltstack
-     * Server when presented with a GET request
-     * Returns an saltstack object result. The response code is always the ssh code 200 (i.e connection successful)
-     * payload is json string as would be sent back by Saltstack Server
-     **/
-    public SaltstackResult Execute(String agentUrl) {
-
-        Pattern pattern = Pattern.compile(".*?\\?Id=(.*?)&Type.*");
-        Matcher matcher = pattern.matcher(agentUrl);
-        String id = StringUtils.EMPTY;
-        String vmAddress = "192.168.1.10";
-
-        if (matcher.find()) {
-            id = matcher.group(1);
-        }
-
-        SaltstackResult getResult = new SaltstackResult();
-
-        JSONObject response = new JSONObject();
-        response.put(STATUS_CODE, 200);
-        response.put(STATUS_MESSAGE, "FINISHED");
-
-        JSONObject results = new JSONObject();
-
-        JSONObject vmResults = new JSONObject();
-        vmResults.put(STATUS_CODE, 200);
-        vmResults.put(STATUS_MESSAGE, "SUCCESS");
-        vmResults.put("Id", id);
-        results.put(vmAddress, vmResults);
-
-        response.put("Results", results);
-
-        getResult.setStatusCode(200);
-        getResult.setStatusMessage(response.toString());
-
-        return getResult;
-    }
-
     private SaltstackResult rejectRequest(SaltstackResult result, String Message) {
         result.setStatusCode(SaltstackResultCodes.REJECTED.getValue());
         result.setStatusMessage("Rejected");
diff --git a/saltstack-adapter/saltstack-adapter-provider/src/test/java/org/onap/appc/adapter/impl/TestConnectionBuilder.java b/saltstack-adapter/saltstack-adapter-provider/src/test/java/org/onap/ccsdk/adapter/impl/TestConnectionBuilder.java
similarity index 90%
rename from saltstack-adapter/saltstack-adapter-provider/src/test/java/org/onap/appc/adapter/impl/TestConnectionBuilder.java
rename to saltstack-adapter/saltstack-adapter-provider/src/test/java/org/onap/ccsdk/adapter/impl/TestConnectionBuilder.java
index d9a3841..933f3fc 100644
--- a/saltstack-adapter/saltstack-adapter-provider/src/test/java/org/onap/appc/adapter/impl/TestConnectionBuilder.java
+++ b/saltstack-adapter/saltstack-adapter-provider/src/test/java/org/onap/ccsdk/adapter/impl/TestConnectionBuilder.java
@@ -22,7 +22,7 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.appc.adapter.impl;
+package org.onap.ccsdk.adapter.impl;
 
 import org.junit.After;
 import org.junit.Before;
@@ -41,21 +41,12 @@
 
 public class TestConnectionBuilder {
 
-    private final String PENDING = "100";
-    private final String SUCCESS = "400";
-    private String message = "{\"Results\":{\"192.168.1.10\":{\"Id\":\"101\",\"StatusCode\":200,\"StatusMessage\":\"SUCCESS\"}},\"StatusCode\":200,\"StatusMessage\":\"FINISHED\"}";
-
     private ConnectionBuilder connBuilder;
-    private String TestId;
-    private boolean testMode = true;
     private Map<String, String> params;
-    private SvcLogicContext svcContext;
 
 
     @Before
     public void setup() throws IllegalArgumentException {
-        testMode = true;
-        svcContext = new SvcLogicContext();
         String HostName = "test";
         String Port = "10";
         String User = "test";
@@ -70,10 +61,8 @@
 
     @After
     public void tearDown() {
-        testMode = false;
         connBuilder = null;
         params = null;
-        svcContext = null;
     }
 
     @Test
diff --git a/saltstack-adapter/saltstack-adapter-provider/src/test/java/org/onap/appc/adapter/impl/TestSaltstackAdapterImpl.java b/saltstack-adapter/saltstack-adapter-provider/src/test/java/org/onap/ccsdk/adapter/impl/TestSaltstackAdapterImpl.java
similarity index 95%
rename from saltstack-adapter/saltstack-adapter-provider/src/test/java/org/onap/appc/adapter/impl/TestSaltstackAdapterImpl.java
rename to saltstack-adapter/saltstack-adapter-provider/src/test/java/org/onap/ccsdk/adapter/impl/TestSaltstackAdapterImpl.java
index d60059e..0622a47 100644
--- a/saltstack-adapter/saltstack-adapter-provider/src/test/java/org/onap/appc/adapter/impl/TestSaltstackAdapterImpl.java
+++ b/saltstack-adapter/saltstack-adapter-provider/src/test/java/org/onap/ccsdk/adapter/impl/TestSaltstackAdapterImpl.java
@@ -22,7 +22,7 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.appc.adapter.impl;
+package org.onap.ccsdk.adapter.impl;
 
 import org.junit.After;
 import org.junit.Before;
@@ -40,10 +40,6 @@
 
 public class TestSaltstackAdapterImpl {
 
-    private final String PENDING = "100";
-    private final String SUCCESS = "400";
-    private String message = "{\"Results\":{\"192.168.1.10\":{\"Id\":\"101\",\"StatusCode\":200,\"StatusMessage\":\"SUCCESS\"}},\"StatusCode\":200,\"StatusMessage\":\"FINISHED\"}";
-
     private SaltstackAdapterImpl adapter;
     private String TestId;
     private boolean testMode = true;
@@ -457,7 +453,6 @@
         params.put("Id", "test1");
 
         adapter.reqExecSLSFile(params, svcContext);
-        String status = svcContext.getAttribute("org.onap.appc.adapter.saltstack.result.code");
         TestId = svcContext.getAttribute("org.onap.appc.adapter.saltstack.Id");
         assertEquals(TestId, "test1");
     }
@@ -476,7 +471,6 @@
         params.put("Id", "test1");
 
         adapter.reqExecSLSFile(params, svcContext);
-        String status = svcContext.getAttribute("org.onap.appc.adapter.saltstack.result.code");
         TestId = svcContext.getAttribute("org.onap.appc.adapter.saltstack.Id");
         assertEquals(TestId, "test1");
     }
@@ -495,7 +489,6 @@
         params.put("Id", "test1");
 
         adapter.reqExecSLSFile(params, svcContext);
-        String status = svcContext.getAttribute("org.onap.appc.adapter.saltstack.result.code");
         TestId = svcContext.getAttribute("org.onap.appc.adapter.saltstack.Id");
         assertEquals(TestId, "test1");
     }
@@ -559,7 +552,6 @@
         params.put("applyTo", "minion1");
 
         adapter.reqExecSLSFile(params, svcContext);
-        String status = svcContext.getAttribute("org.onap.appc.adapter.saltstack.result.code");
         TestId = svcContext.getAttribute("org.onap.appc.adapter.saltstack.Id");
         assertEquals(TestId, "test1");
     }
@@ -579,7 +571,6 @@
         params.put("applyTo", "minion1");
 
         adapter.reqExecSLSFile(params, svcContext);
-        String status = svcContext.getAttribute("org.onap.appc.adapter.saltstack.result.code");
         TestId = svcContext.getAttribute("org.onap.appc.adapter.saltstack.Id");
         assertEquals(TestId, "test1");
     }
@@ -621,7 +612,6 @@
         params.put("applyTo", "*");
 
         adapter.reqExecSLSFile(params, svcContext);
-        String status = svcContext.getAttribute("org.onap.appc.adapter.saltstack.result.code");
         TestId = svcContext.getAttribute("org.onap.appc.adapter.saltstack.Id");
         assertEquals(TestId, "test1");
     }
@@ -641,7 +631,6 @@
         params.put("applyTo", "*");
 
         adapter.reqExecSLSFile(params, svcContext);
-        String status = svcContext.getAttribute("org.onap.appc.adapter.saltstack.result.code");
         TestId = svcContext.getAttribute("org.onap.appc.adapter.saltstack.Id");
         assertEquals(TestId, "test1");
     }
@@ -703,7 +692,6 @@
         params.put("Id", "test1");
 
         adapter.reqExecSLS(params, svcContext);
-        String status = svcContext.getAttribute("org.onap.appc.adapter.saltstack.result.code");
         TestId = svcContext.getAttribute("org.onap.appc.adapter.saltstack.Id");
         assertEquals(TestId, "test1");
     }
@@ -747,7 +735,6 @@
         params.put("applyTo", "minion1");
 
         adapter.reqExecSLS(params, svcContext);
-        String status = svcContext.getAttribute("org.onap.appc.adapter.saltstack.result.code");
         TestId = svcContext.getAttribute("org.onap.appc.adapter.saltstack.Id");
         assertEquals(TestId, "test1");
     }
@@ -790,7 +777,6 @@
         params.put("applyTo", "*");
 
         adapter.reqExecSLS(params, svcContext);
-        String status = svcContext.getAttribute("org.onap.appc.adapter.saltstack.result.code");
         TestId = svcContext.getAttribute("org.onap.appc.adapter.saltstack.Id");
         assertEquals(TestId, "test1");
     }
diff --git a/saltstack-adapter/saltstack-adapter-provider/src/test/java/org/onap/appc/adapter/impl/TestSaltstackAdapterPropertiesProviderImpl.java b/saltstack-adapter/saltstack-adapter-provider/src/test/java/org/onap/ccsdk/adapter/impl/TestSaltstackAdapterPropertiesProviderImpl.java
similarity index 97%
rename from saltstack-adapter/saltstack-adapter-provider/src/test/java/org/onap/appc/adapter/impl/TestSaltstackAdapterPropertiesProviderImpl.java
rename to saltstack-adapter/saltstack-adapter-provider/src/test/java/org/onap/ccsdk/adapter/impl/TestSaltstackAdapterPropertiesProviderImpl.java
index 9275918..094e78c 100644
--- a/saltstack-adapter/saltstack-adapter-provider/src/test/java/org/onap/appc/adapter/impl/TestSaltstackAdapterPropertiesProviderImpl.java
+++ b/saltstack-adapter/saltstack-adapter-provider/src/test/java/org/onap/ccsdk/adapter/impl/TestSaltstackAdapterPropertiesProviderImpl.java
@@ -22,7 +22,7 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.appc.adapter.impl;
+package org.onap.ccsdk.adapter.impl;
 
 import org.junit.After;
 import org.junit.Before;
@@ -37,13 +37,9 @@
 import static org.junit.Assert.assertEquals;
 
 public class TestSaltstackAdapterPropertiesProviderImpl {
-    private final String PENDING = "100";
-    private final String SUCCESS = "400";
-    private String message = "{\"Results\":{\"192.168.1.10\":{\"Id\":\"101\",\"StatusCode\":200,\"StatusMessage\":\"SUCCESS\"}},\"StatusCode\":200,\"StatusMessage\":\"FINISHED\"}";
 
     private SaltstackAdapterImpl adapter;
     private Properties params;
-    private SvcLogicContext svcContext;
 
 
     @Before
@@ -55,7 +51,6 @@
     public void tearDown() {
         adapter = null;
         params = null;
-        svcContext = null;
     }
 
     @Test(expected = SvcLogicException.class)
diff --git a/saltstack-adapter/saltstack-adapter-provider/src/test/java/org/onap/appc/adapter/model/TestJsonParser.java b/saltstack-adapter/saltstack-adapter-provider/src/test/java/org/onap/ccsdk/adapter/model/TestJsonParser.java
similarity index 98%
rename from saltstack-adapter/saltstack-adapter-provider/src/test/java/org/onap/appc/adapter/model/TestJsonParser.java
rename to saltstack-adapter/saltstack-adapter-provider/src/test/java/org/onap/ccsdk/adapter/model/TestJsonParser.java
index ae13da6..74e7ed0 100644
--- a/saltstack-adapter/saltstack-adapter-provider/src/test/java/org/onap/appc/adapter/model/TestJsonParser.java
+++ b/saltstack-adapter/saltstack-adapter-provider/src/test/java/org/onap/ccsdk/adapter/model/TestJsonParser.java
@@ -19,7 +19,7 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.appc.adapter.model;
+package org.onap.ccsdk.adapter.model;
 
 import org.codehaus.jettison.json.JSONException;
 import org.junit.Test;
diff --git a/saltstack-adapter/saltstack-adapter-provider/src/test/java/org/onap/appc/adapter/model/TestSaltstackAdapter.java b/saltstack-adapter/saltstack-adapter-provider/src/test/java/org/onap/ccsdk/adapter/model/TestSaltstackAdapter.java
similarity index 94%
rename from saltstack-adapter/saltstack-adapter-provider/src/test/java/org/onap/appc/adapter/model/TestSaltstackAdapter.java
rename to saltstack-adapter/saltstack-adapter-provider/src/test/java/org/onap/ccsdk/adapter/model/TestSaltstackAdapter.java
index 37b6502..0caaf33 100644
--- a/saltstack-adapter/saltstack-adapter-provider/src/test/java/org/onap/appc/adapter/model/TestSaltstackAdapter.java
+++ b/saltstack-adapter/saltstack-adapter-provider/src/test/java/org/onap/ccsdk/adapter/model/TestSaltstackAdapter.java
@@ -21,7 +21,7 @@
  * ECOMP is a trademark and service mark of AT&T Intellectual Property.
  * ============LICENSE_END=========================================================
  */
-package org.onap.appc.adapter.model;
+package org.onap.ccsdk.adapter.model;
 
 import org.junit.Test;
 import org.onap.ccsdk.sli.adaptors.saltstack.model.SaltstackMessageParser;
@@ -39,7 +39,6 @@
     private Class[] parameterTypes;
     private SaltstackMessageParser saltstackMessageParser;
     private Method m;
-    private String name;
 
     @Test
     public void callPrivateConstructorsMethodsForCodeCoverage() throws SecurityException, NoSuchMethodException, IllegalArgumentException, InstantiationException, IllegalAccessException, InvocationTargetException {
@@ -48,21 +47,18 @@
           Class<?>[] classesOne = {SaltstackMessageParser.class};
           for(Class<?> clazz : classesOne) {
                 Constructor<?> constructor = clazz.getDeclaredConstructor();
-                name = constructor.getName();
                 constructor.setAccessible(true);
                 assertNotNull(constructor.newInstance());
           }
           Class<?>[] classesTwo = {SaltstackServerEmulator.class};
           for(Class<?> clazz : classesTwo) {
                 Constructor<?> constructor = clazz.getDeclaredConstructor();
-                name = constructor.getName();
                 constructor.setAccessible(true);
                 assertNotNull(constructor.newInstance());
           }
           Class<?>[] classesThree = {SaltstackResult.class};
           for(Class<?> clazz : classesThree) {
                 Constructor<?> constructor = clazz.getDeclaredConstructor();
-                name = constructor.getName();
                 constructor.setAccessible(true);
                 assertNotNull(constructor.newInstance());
           }
diff --git a/saltstack-adapter/saltstack-adapter-provider/src/test/resources/org/onap/appc/default.properties b/saltstack-adapter/saltstack-adapter-provider/src/test/resources/org/onap/ccsdk/default.properties
similarity index 100%
rename from saltstack-adapter/saltstack-adapter-provider/src/test/resources/org/onap/appc/default.properties
rename to saltstack-adapter/saltstack-adapter-provider/src/test/resources/org/onap/ccsdk/default.properties
