diff --git a/saltstack-adapter/saltstack-adapter-provider/pom.xml b/saltstack-adapter/saltstack-adapter-provider/pom.xml
index c93558e..81e9ba9 100644
--- a/saltstack-adapter/saltstack-adapter-provider/pom.xml
+++ b/saltstack-adapter/saltstack-adapter-provider/pom.xml
@@ -11,144 +11,132 @@
 	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========================================================= -->
-<project xmlns="http://maven.apache.org/POM/4.0.0"
-	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-	<modelVersion>4.0.0</modelVersion>
-	<parent>
-		<groupId>org.onap.ccsdk.parent</groupId>
-		<artifactId>binding-parent</artifactId>
-		<version>1.1.0-SNAPSHOT</version>
-		<relativePath />
-	</parent>
+<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xmlns="http://maven.apache.org/POM/4.0.0"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <groupId>org.onap.ccsdk.parent</groupId>
+        <artifactId>binding-parent</artifactId>
+        <version>1.1.0-SNAPSHOT</version>
+        <relativePath/>
+    </parent>
 
-	<groupId>org.onap.ccsdk.sli.adaptors</groupId>
-	<artifactId>saltstack-adapter-provider</artifactId>
-	<version>0.3.0-SNAPSHOT</version>
-	<packaging>bundle</packaging>
-	<name>ccsdk-sli-adaptors :: saltstack-adapter :: ${project.artifactId}</name>
+    <groupId>org.onap.ccsdk.sli.adaptors</groupId>
+    <artifactId>saltstack-adapter-provider</artifactId>
+    <version>0.3.0-SNAPSHOT</version>
+    <packaging>bundle</packaging>
+    <name>ccsdk-sli-adaptors :: saltstack-adapter :: ${project.artifactId}
+    </name>
 
-	<dependencies>
-		<dependency>
-			<groupId>com.att.eelf</groupId>
-			<artifactId>eelf-core</artifactId>
-		</dependency>
-		<dependency>
-			<groupId>commons-codec</groupId>
-			<artifactId>commons-codec</artifactId>
-		</dependency>
-		<dependency>
-			<groupId>commons-logging</groupId>
-			<artifactId>commons-logging</artifactId>
-			<version>1.2</version>
-		</dependency>
+    <dependencies>
+        <dependency>
+            <groupId>com.att.eelf</groupId>
+            <artifactId>eelf-core</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>commons-codec</groupId>
+            <artifactId>commons-codec</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>commons-logging</groupId>
+            <artifactId>commons-logging</artifactId>
+            <version>1.2</version>
+        </dependency>
 
-		<!-- Needed to run SSH -->
-		<dependency>
-			<groupId>org.apache.sshd</groupId>
-			<artifactId>sshd-core</artifactId>
-			<version>0.12.0</version>
-			<scope>provided</scope>
-		</dependency>
+        <!-- Needed to run SSH -->
+        <dependency>
+            <groupId>org.apache.sshd</groupId>
+            <artifactId>sshd-core</artifactId>
+            <version>0.12.0</version>
+            <scope>provided</scope>
+        </dependency>
 
-		<dependency>
-			<groupId>org.onap.appc</groupId>
-			<artifactId>appc-common</artifactId>
-			<version>1.4.0-SNAPSHOT</version>
-		</dependency>
+        <dependency>
+            <groupId>org.onap.appc</groupId>
+            <artifactId>appc-common</artifactId>
+            <version>1.3.0</version>
+        </dependency>
 
-		<!-- Needed to run test cases -->
-		<dependency>
-			<groupId>org.glassfish.jersey.core</groupId>
-			<artifactId>jersey-common</artifactId>
-			<version>2.9.1</version>
-			<scope>test</scope>
-		</dependency>
+        <dependency>
+            <groupId>org.onap.appc</groupId>
+            <artifactId>appc-ssh-adapter-api</artifactId>
+            <version>1.3.0</version>
+            <scope>provided</scope>
+        </dependency>
 
-		<dependency>
-			<groupId>org.codehaus.jackson</groupId>
-			<artifactId>jackson-jaxrs</artifactId>
-			<version>1.9.13</version>
-			<scope>test</scope>
-		</dependency>
+        <!-- Needed to run test cases -->
+        <dependency>
+            <groupId>org.glassfish.jersey.core</groupId>
+            <artifactId>jersey-common</artifactId>
+            <version>2.9.1</version>
+            <scope>test</scope>
+        </dependency>
 
-		<dependency>
-			<groupId>org.apache.commons</groupId>
-			<artifactId>commons-io</artifactId>
-			<version>1.3.2</version>
-		</dependency>
+        <dependency>
+            <groupId>org.codehaus.jackson</groupId>
+            <artifactId>jackson-jaxrs</artifactId>
+            <version>1.9.13</version>
+            <scope>test</scope>
+        </dependency>
 
-		<dependency>
-			<groupId>org.codehaus.jettison</groupId>
-			<artifactId>jettison</artifactId>
-			<scope>provided</scope>
-		</dependency>
+        <dependency>
+            <groupId>org.apache.commons</groupId>
+            <artifactId>commons-io</artifactId>
+            <version>1.3.2</version>
+        </dependency>
 
-		<dependency>
-			<groupId>junit</groupId>
-			<artifactId>junit</artifactId>
-			<scope>test</scope>
-		</dependency>
-		<dependency>
-			<groupId>org.mockito</groupId>
-			<artifactId>mockito-core</artifactId>
-			<scope>test</scope>
-		</dependency>
-		<dependency>
-			<groupId>org.onap.ccsdk.sli.core</groupId>
-			<artifactId>sli-common</artifactId>
-		</dependency>
+        <dependency>
+            <groupId>org.codehaus.jettison</groupId>
+            <artifactId>jettison</artifactId>
+            <scope>provided</scope>
+        </dependency>
 
-		<dependency>
-			<groupId>org.onap.ccsdk.sli.core</groupId>
-			<artifactId>sli-provider</artifactId>
-		</dependency>
+        <dependency>
+            <groupId>junit</groupId>
+            <artifactId>junit</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.mockito</groupId>
+            <artifactId>mockito-core</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.onap.ccsdk.sli.core</groupId>
+            <artifactId>sli-common</artifactId>
+        </dependency>
 
-		<dependency>
-			<groupId>org.osgi</groupId>
-			<artifactId>org.osgi.core</artifactId>
-			<scope>provided</scope>
-		</dependency>
-		<dependency>
-			<groupId>org.slf4j</groupId>
-			<artifactId>slf4j-api</artifactId>
-		</dependency>
+        <dependency>
+            <groupId>org.onap.ccsdk.sli.core</groupId>
+            <artifactId>sli-provider</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.osgi</groupId>
+            <artifactId>org.osgi.core</artifactId>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.slf4j</groupId>
+            <artifactId>slf4j-api</artifactId>
+        </dependency>
 
-		<dependency>
-			<groupId>org.slf4j</groupId>
-			<artifactId>jcl-over-slf4j</artifactId>
-		</dependency>
+        <dependency>
+            <groupId>org.slf4j</groupId>
+            <artifactId>jcl-over-slf4j</artifactId>
+        </dependency>
 
-		<dependency>
-			<groupId>org.json</groupId>
-			<artifactId>json</artifactId>
-		</dependency>
+        <dependency>
+            <groupId>org.json</groupId>
+            <artifactId>json</artifactId>
+        </dependency>
 
 
-		<dependency>
-			<groupId>com.google.guava</groupId>
-			<artifactId>guava</artifactId>
-		</dependency>
+        <dependency>
+            <groupId>com.google.guava</groupId>
+            <artifactId>guava</artifactId>
+        </dependency>
 
+    </dependencies>
 
-	</dependencies>
-
-	<build>
-		<plugins>
-			<plugin>
-				<groupId>org.apache.felix</groupId>
-				<artifactId>maven-bundle-plugin</artifactId>
-				<extensions>true</extensions>
-				<configuration>
-					<instructions>
-						<Export-Service>org.onap.appc.adapter.ssh.SshAdapter</Export-Service>
-						<Private-Package>org.onap.appc.adapter.ssh.impl.*</Private-Package>
-						<Import-Package>!org.apache.log,!org.apache.commons.logging,!groovy.lang,!javax.jms,!org.codehaus.commons.compiler,!org.codehaus.groovy.*,!org.codehaus.janino,!com.ibm.icu.*,!com.sun.faces.*,!org.jasypt.*,*</Import-Package>
-						<Embed-Dependency>!dblib-provider,jasypt,eelf-core,logback-core,logback-classic;scope=compile|runtime;inline=false</Embed-Dependency>
-						<Embed-Transitive>true</Embed-Transitive>
-					</instructions>
-				</configuration>
-			</plugin>
-		</plugins>
-	</build>
 </project>
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 f6b3b70..6e5feb4 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
@@ -26,18 +26,11 @@
 
 import com.att.eelf.configuration.EELFLogger;
 import com.att.eelf.configuration.EELFManager;
-import org.apache.commons.io.IOUtils;
-import org.apache.commons.lang.RandomStringUtils;
 import org.onap.ccsdk.sli.adaptors.saltstack.model.SaltstackResult;
 import org.onap.ccsdk.sli.adaptors.saltstack.model.SaltstackResultCodes;
 
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.FileOutputStream;
+import java.io.ByteArrayOutputStream;
 import java.io.IOException;
-import java.io.OutputStream;
-import java.io.StringWriter;
 
 /**
  * Returns a custom SSH client
@@ -98,11 +91,11 @@
      * @return command execution status
      */
     public SaltstackResult connectNExecute(String cmd, int retryCount, int retryDelay, long execTimeout)
-                            throws IOException{
+            throws IOException {
 
         SaltstackResult result = new SaltstackResult();
-        OutputStream out = null;
-        OutputStream errs = null;
+        ByteArrayOutputStream out = null;
+        ByteArrayOutputStream errs = null;
         if (execTimeout >= 0) {
             sshConnection.setExecTimeout(execTimeout);
         }
@@ -116,69 +109,59 @@
             if (result.getStatusCode() != SaltstackResultCodes.SUCCESS.getValue()) {
                 return result;
             }
-            String outFilePath = "/tmp/" + RandomStringUtils.random(5, true, true);
-            String errFilePath = "/tmp/" + RandomStringUtils.random(5, true, true);
-            out = new FileOutputStream(outFilePath);
-            errs = new FileOutputStream(errFilePath);
+            out = new ByteArrayOutputStream();
+            errs = new ByteArrayOutputStream();
             result = sshConnection.execCommand(cmd, out, errs, result);
             sshConnection.disconnect();
             if (result.getSshExitStatus() != 0) {
-                return sortExitStatus(result.getSshExitStatus(), errFilePath, cmd);
+                return sortExitStatus(result.getSshExitStatus(), errs.toString(), cmd);
             }
             if (result.getStatusCode() != SaltstackResultCodes.SUCCESS.getValue()) {
                 return result;
             }
             result.setStatusMessage("Success");
-            result.setOutputFileName(outFilePath);
+            result.setOutputMessage(out);
         } catch (Exception io) {
             logger.error("Caught Exception", io);
             result.setStatusCode(SaltstackResultCodes.UNKNOWN_EXCEPTION.getValue());
             result.setStatusMessage(io.getMessage());
         } finally {
-            if( out != null )
+            if (out != null) {
                 out.close();
-            if( errs != null )
+            }
+            if (errs != null) {
                 errs.close();
+            }
         }
         return result;
     }
 
-    public SaltstackResult sortExitStatus(int exitStatus, String errFilePath, String cmd) {
+    public SaltstackResult sortExitStatus(int exitStatus, String errMess, String cmd) {
         SaltstackResult result = new SaltstackResult();
-        String err = "";
-        StringWriter writer = new StringWriter();
-        try {
-            IOUtils.copy(new FileInputStream(new File(errFilePath)), writer, "UTF-8");
-            err = writer.toString();
-        } catch (FileNotFoundException e){
-            logger.info("Error stream file doesn't exist");
-        } catch (IOException e){
-            logger.info("Error stream file doesn't exist");
-        }
         if (exitStatus == 255 || exitStatus == 1) {
             String errMessage = "Error executing command [" + cmd + "] over SSH [" + sshConnection.toString()
                     + "]. Exit Code " + exitStatus + " and Error message : " +
-                    "Malformed configuration. " + err;
+                    "Malformed configuration. " + errMess;
             logger.error(errMessage);
             result.setStatusCode(SaltstackResultCodes.INVALID_COMMAND.getValue());
             result.setStatusMessage(errMessage);
         } else if (exitStatus == 5 || exitStatus == 65) {
             String errMessage = "Error executing command [" + cmd + "] over SSH [" + sshConnection.toString()
                     + "]. Exit Code " + exitStatus + " and Error message : " +
-                    "Host not allowed to connect. " + err;
+                    "Host not allowed to connect. " + errMess;
             logger.error(errMessage);
             result.setStatusCode(SaltstackResultCodes.USER_UNAUTHORIZED.getValue());
             result.setStatusMessage(errMessage);
         } else if (exitStatus == 67 || exitStatus == 73) {
             String errMessage = "Error executing command [" + cmd + "] over SSH [" + sshConnection.toString()
                     + "]. Exit Code " + exitStatus + " and Error message : " +
-                    "Key exchange failed. " + err;
+                    "Key exchange failed. " + errMess;
             logger.error(errMessage);
             result.setStatusCode(SaltstackResultCodes.CERTIFICATE_ERROR.getValue());
             result.setStatusMessage(errMessage);
         } else {
             String errMessage = "Error executing command [" + cmd + "] over SSH [" + sshConnection.toString()
-                    + "]. Exit Code " + exitStatus + " and Error message : " + err;
+                    + "]. Exit Code " + exitStatus + " and Error message : " + errMess;
             logger.error(errMessage);
             result.setStatusCode(SaltstackResultCodes.UNKNOWN_EXCEPTION.getValue());
             result.setStatusMessage(errMessage);
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 5e0cc77..a48b67a 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
@@ -108,11 +108,11 @@
     /**
      * This default constructor is used as a work around because the activator wasn't getting called
      */
-    public SaltstackAdapterImpl() throws SvcLogicException{
+    public SaltstackAdapterImpl() throws SvcLogicException {
         initialize(new SaltstackAdapterPropertiesProviderImpl());
     }
 
-    public SaltstackAdapterImpl(SaltstackAdapterPropertiesProvider propProvider) throws SvcLogicException{
+    public SaltstackAdapterImpl(SaltstackAdapterPropertiesProvider propProvider) throws SvcLogicException {
         initialize(propProvider);
     }
 
@@ -152,7 +152,7 @@
     /**
      * initialize the Saltstack adapter based on default and over-ride configuration data
      */
-    private void initialize(SaltstackAdapterPropertiesProvider propProvider) throws SvcLogicException{
+    private void initialize(SaltstackAdapterPropertiesProvider propProvider) throws SvcLogicException {
 
 
         Properties props = propProvider.getProperties();
@@ -176,7 +176,7 @@
                 logger.info("Creating ssh client connection");
                 // set path to keystore file
                 String sshHost = props.getProperty(SS_SERVER_HOSTNAME);
-                String sshPort = reqServerPort(props) ;
+                String sshPort = reqServerPort(props);
                 String sshUserName = props.getProperty(SS_SERVER_USERNAME);
                 String sshPassword = props.getProperty(SS_SERVER_PASSWD);
                 sshClient = new ConnectionBuilder(sshHost, sshPort, sshUserName, sshPassword);
@@ -212,8 +212,9 @@
 
     private String reqServerPort(Properties props) {
         // use default port if null
-        if (props.getProperty(SS_SERVER_PORT) == null)
+        if (props.getProperty(SS_SERVER_PORT) == null) {
             return "22";
+        }
         return props.getProperty(SS_SERVER_PORT);
     }
 
@@ -235,11 +236,11 @@
     private String parseEnvParam(JSONObject envParams) {
         StringBuilder envParamBuilder = new StringBuilder();
         if (envParams != null) {
-            for(Object key : envParams.keySet()) {
-                if(envParamBuilder.length() > 0) {
+            for (Object key : envParams.keySet()) {
+                if (envParamBuilder.length() > 0) {
                     envParamBuilder.append(", ");
                 }
-                envParamBuilder.append(key+"="+envParams.get((String) key));
+                envParamBuilder.append(key + "=" + envParams.get((String) key));
                 logger.info("EnvParameters : " + envParamBuilder);
             }
         }
@@ -249,7 +250,7 @@
     private String parseFileParam(JSONObject fileParams) {
         StringBuilder fileParamBuilder = new StringBuilder();
         if (fileParams != null) {
-            for(Object key : fileParams.keySet()) {
+            for (Object key : fileParams.keySet()) {
                 fileParamBuilder.append("echo -e \"" + fileParams.get((String) key) + "\" > /srv/salt/" + key).append("; ");
                 logger.info("FileParameters : " + fileParamBuilder);
             }
@@ -258,7 +259,7 @@
     }
 
     private String putToCommands(SvcLogicContext ctx, String slsFileName,
-                                    String applyTo, JSONObject envParams, JSONObject fileParams) throws SvcLogicException {
+                                 String applyTo, JSONObject envParams, JSONObject fileParams) throws SvcLogicException {
 
         StringBuilder constructedCommand = new StringBuilder();
         try {
@@ -283,10 +284,10 @@
 
         } catch (FileNotFoundException e) {
             doFailure(ctx, SaltstackResultCodes.IO_EXCEPTION.getValue(), "Input SLS file " +
-                    "not found in path : " + slsFileName+". "+ e.getMessage());
+                    "not found in path : " + slsFileName + ". " + e.getMessage());
         } catch (IOException e) {
             doFailure(ctx, SaltstackResultCodes.IO_EXCEPTION.getValue(), "Input SLS file " +
-                    "error in path : " + slsFileName +". "+ e.getMessage());
+                    "error in path : " + slsFileName + ". " + e.getMessage());
         } catch (StringIndexOutOfBoundsException e) {
             doFailure(ctx, SaltstackResultCodes.IO_EXCEPTION.getValue(), "Input file " +
                     "is not of type .sls");
@@ -294,10 +295,14 @@
         return constructedCommand.toString();
     }
 
-    private String stripExtension (String str) {
-        if (str == null) return null;
+    private String stripExtension(String str) {
+        if (str == null) {
+            return null;
+        }
         int pos = str.lastIndexOf(".");
-        if (pos == -1) return str;
+        if (pos == -1) {
+            return str;
+        }
         return str.substring(0, pos);
     }
 
@@ -348,7 +353,7 @@
             checkResponseStatus(testResult, ctx, reqID, slsExec);
         } catch (IOException e) {
             doFailure(ctx, SaltstackResultCodes.IO_EXCEPTION.getValue(),
-                      "IOException in file stream : "+ e.getMessage());
+                      "IOException in file stream : " + e.getMessage());
         }
     }
 
@@ -379,7 +384,7 @@
             checkResponseStatus(testResult, ctx, reqID, true);
         } catch (IOException e) {
             doFailure(ctx, SaltstackResultCodes.IO_EXCEPTION.getValue(),
-                      "IOException in file stream : "+ e.getMessage());
+                      "IOException in file stream : " + e.getMessage());
         } catch (JSONException e) {
             doFailure(ctx, SaltstackResultCodes.INVALID_COMMAND.getValue(), e.getMessage());
         }
@@ -412,13 +417,13 @@
             checkResponseStatus(testResult, ctx, reqID, true);
         } catch (IOException e) {
             doFailure(ctx, SaltstackResultCodes.IO_EXCEPTION.getValue(),
-                      "IOException in file stream : "+ e.getMessage());
+                      "IOException in file stream : " + e.getMessage());
         }
     }
 
     public SaltstackResult execCommand(SvcLogicContext ctx, Map<String, String> params, String commandToExecute,
                                        long execTimeout)
-                                    throws SvcLogicException{
+            throws SvcLogicException {
 
         SaltstackResult testResult = new SaltstackResult();
         try {
@@ -439,7 +444,7 @@
             }
         } catch (IOException e) {
             doFailure(ctx, SaltstackResultCodes.IO_EXCEPTION.getValue(),
-                      "IOException in file stream : "+ e.getMessage());
+                      "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/impl/SshConnection.java b/saltstack-adapter/saltstack-adapter-provider/src/main/java/org/onap/ccsdk/sli/adaptors/saltstack/impl/SshConnection.java
index 62724c3..71ca5cf 100644
--- a/saltstack-adapter/saltstack-adapter-provider/src/main/java/org/onap/ccsdk/sli/adaptors/saltstack/impl/SshConnection.java
+++ b/saltstack-adapter/saltstack-adapter-provider/src/main/java/org/onap/ccsdk/sli/adaptors/saltstack/impl/SshConnection.java
@@ -163,19 +163,19 @@
 
     public void setExecTimeout(long timeout) {
         //convert seconds to milliseconds
-        this.timeout = timeout*1000;
+        this.timeout = timeout * 1000;
     }
 
-    public SaltstackResult execCommand(String cmd, OutputStream out, OutputStream err, SaltstackResult result ) {
+    public SaltstackResult execCommand(String cmd, OutputStream out, OutputStream err, SaltstackResult result) {
         return execCommand(cmd, out, err, false, result);
     }
 
-    public SaltstackResult execCommandWithPty(String cmd, OutputStream out, SaltstackResult result ) {
+    public SaltstackResult execCommandWithPty(String cmd, OutputStream out, SaltstackResult result) {
         return execCommand(cmd, out, out, true, result);
     }
 
     private SaltstackResult execCommand(String cmd, OutputStream out, OutputStream err,
-                                        boolean usePty, SaltstackResult result ) {
+                                        boolean usePty, SaltstackResult result) {
 
         try {
             if (logger.isDebugEnabled()) {
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 8548efc..2d810ae 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
@@ -31,16 +31,14 @@
 
 import com.google.common.base.Strings;
 import org.json.JSONException;
-import org.json.JSONArray;
 import org.json.JSONObject;
 import org.onap.ccsdk.sli.core.sli.SvcLogicContext;
 import org.onap.ccsdk.sli.core.sli.SvcLogicException;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
 import java.io.IOException;
 import java.io.InputStream;
 import java.util.Collections;
@@ -79,8 +77,9 @@
      */
     public String reqPortResult(Map<String, String> params) throws SvcLogicException {
         // use default port if null
-        if (params.get(SS_AGENT_PORT_KEY) == null)
+        if (params.get(SS_AGENT_PORT_KEY) == null) {
             return "22";
+        }
         return params.get(SS_AGENT_PORT_KEY);
     }
 
@@ -200,7 +199,7 @@
     public JSONObject reqEnvParameters(Map<String, String> params) throws JSONException {
 
         JSONObject jsonPayload = new JSONObject();
-        final String[] optionalTestParam = { SaltstackMessageParser.ENV_PARAMETERS_OPT_KEY };
+        final String[] optionalTestParam = {SaltstackMessageParser.ENV_PARAMETERS_OPT_KEY};
         parseParam(params, optionalTestParam, jsonPayload);
 
         return (JSONObject) jsonPayload.remove(SaltstackMessageParser.ENV_PARAMETERS_OPT_KEY);
@@ -214,7 +213,7 @@
     public JSONObject reqFileParameters(Map<String, String> params) throws JSONException {
 
         JSONObject jsonPayload = new JSONObject();
-        final String[] optionalTestParam = { SaltstackMessageParser.FILE_PARAMETERS_OPT_KEY };
+        final String[] optionalTestParam = {SaltstackMessageParser.FILE_PARAMETERS_OPT_KEY};
         parseParam(params, optionalTestParam, jsonPayload);
 
         return (JSONObject) jsonPayload.remove(SaltstackMessageParser.FILE_PARAMETERS_OPT_KEY);
@@ -308,19 +307,13 @@
     public SaltstackResult parseResponse(SvcLogicContext ctx, String pfx,
                                          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;
         }
+        ByteArrayOutputStream str = saltstackResult.getOutputMessage();
         try {
-            File file = new File(saltstackResult.getOutputFileName());
-            in = new FileInputStream(file);
-            byte[] data = new byte[(int) file.length()];
-            in.read(data);
-            String str = new String(data, "UTF-8");
-            in.close();
-            Map<String, String> mm = JsonParser.convertToProperties(str);
+            Map<String, String> mm = JsonParser.convertToProperties(str.toString());
             if (mm != null) {
                 for (Map.Entry<String, String> entry : mm.entrySet()) {
                     if (entry.getKey().contains("retcode")) {
@@ -333,18 +326,19 @@
                     LOGGER.info("+++ " + pfx + "." + entry.getKey() + ": [" + entry.getValue() + "]");
                 }
             }
-        } catch (FileNotFoundException e) {
-            return new SaltstackResult(SaltstackResultCodes.INVALID_RESPONSE_FILE.getValue(), "error parsing response file "
-                    + saltstackResult.getOutputFileName() + " : " + e.getMessage());
         } catch (org.codehaus.jettison.json.JSONException e) {
+            if (slsExec) {
+                return new SaltstackResult(SaltstackResultCodes.INVALID_RESPONSE.getValue(), "error parsing response file"
+                        + " : Output has to be in JSON format");
+            }
             LOGGER.info("Output not in JSON format");
             return putToProperties(ctx, pfx, saltstackResult);
         } catch (Exception e) {
-            return new SaltstackResult(SaltstackResultCodes.INVALID_RESPONSE_FILE.getValue(), "error parsing response file "
-                    + saltstackResult.getOutputFileName() + " : " + e.getMessage());
+            return new SaltstackResult(SaltstackResultCodes.INVALID_RESPONSE_FILE.getValue(), "error parsing response file"
+                    + " : " + e.getMessage());
         } finally {
-            if (in != null) {
-                in.close();
+            if (str != null) {
+                str.close();
             }
         }
         if (slsExec) {
@@ -363,12 +357,14 @@
 
     public SaltstackResult putToProperties(SvcLogicContext ctx, String pfx,
                                            SaltstackResult saltstackResult) throws IOException {
-        InputStream in = null;
+
+        ByteArrayOutputStream buffer = saltstackResult.getOutputMessage();
+        InputStream inputStream = null;
         try {
-            File file = new File(saltstackResult.getOutputFileName());
-            in = new FileInputStream(file);
+            byte[] bytes = buffer.toByteArray();
             Properties prop = new Properties();
-            prop.load(in);
+            inputStream = new ByteArrayInputStream(bytes);
+            prop.load(inputStream);
             ctx.setAttribute(pfx + "completeResult", prop.toString());
             for (Object key : prop.keySet()) {
                 String name = (String) key;
@@ -379,11 +375,12 @@
                 }
             }
         } catch (Exception e) {
-            saltstackResult = new SaltstackResult(SaltstackResultCodes.INVALID_RESPONSE_FILE.getValue(), "Error parsing response file = "
-                    + saltstackResult.getOutputFileName() + ". Error = " + e.getMessage());
+            saltstackResult = new SaltstackResult(SaltstackResultCodes.INVALID_RESPONSE_FILE.getValue(), "Error parsing response file." +
+                    " Error = " + e.getMessage());
         } finally {
-            if (in != null) {
-                in.close();
+            if (buffer != null && inputStream != null) {
+                buffer.close();
+                inputStream.close();
             }
         }
         saltstackResult.setStatusCode(SaltstackResultCodes.FINAL_SUCCESS.getValue());
diff --git a/saltstack-adapter/saltstack-adapter-provider/src/main/java/org/onap/ccsdk/sli/adaptors/saltstack/model/SaltstackResult.java b/saltstack-adapter/saltstack-adapter-provider/src/main/java/org/onap/ccsdk/sli/adaptors/saltstack/model/SaltstackResult.java
index b29dd8e..727cfe3 100644
--- a/saltstack-adapter/saltstack-adapter-provider/src/main/java/org/onap/ccsdk/sli/adaptors/saltstack/model/SaltstackResult.java
+++ b/saltstack-adapter/saltstack-adapter-provider/src/main/java/org/onap/ccsdk/sli/adaptors/saltstack/model/SaltstackResult.java
@@ -24,6 +24,8 @@
 
 package org.onap.ccsdk.sli.adaptors.saltstack.model;
 
+import java.io.ByteArrayOutputStream;
+
 /**
  * Simple class to store code and message returned by POST/GET to an Saltstack Server
  */
@@ -34,7 +36,7 @@
     private int statusCode;
     private String statusMessage;
     private String results;
-    private String out;
+    private ByteArrayOutputStream out;
     private int sshExitStatus;
 
     public SaltstackResult() {
@@ -58,11 +60,11 @@
         this.results = results;
     }
 
-    public String getOutputFileName() {
+    public ByteArrayOutputStream getOutputMessage() {
         return out;
     }
 
-    public void setOutputFileName(String out) {
+    public void setOutputMessage(ByteArrayOutputStream out) {
         this.out = out;
     }
 
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 55beb22..bac2cfe 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
@@ -34,12 +34,13 @@
 
 import com.att.eelf.configuration.EELFLogger;
 import com.att.eelf.configuration.EELFManager;
-import org.apache.commons.lang.StringUtils;
-import org.json.JSONObject;
 
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
 import java.util.Map;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
 
 public class SaltstackServerEmulator {
 
@@ -60,13 +61,10 @@
                 result = rejectRequest(result, "Mocked: Fail");
             } else {
                 String fileName = params.get(SALTSTATE_FILE_NAME);
-                if (fileName == null)
-                    result = acceptRequest(result, "");
-                else
-                    result = acceptRequest(result, fileName);
+                result = acceptRequest(result, fileName);
             }
         } catch (Exception e) {
-            logger.error("JSONException caught", e);
+            logger.error("Exception caught", e);
             rejectRequest(result, e.getMessage());
         }
         return result;
@@ -78,10 +76,14 @@
         return result;
     }
 
-    private SaltstackResult acceptRequest(SaltstackResult result, String fileName) {
+    private SaltstackResult acceptRequest(SaltstackResult result, String fileName) throws IOException {
         result.setStatusCode(SaltstackResultCodes.SUCCESS.getValue());
         result.setStatusMessage("Success");
-        result.setOutputFileName(fileName);
+        Path path = Paths.get(fileName);
+        byte[] data = Files.readAllBytes(path);
+        ByteArrayOutputStream byteOut = new ByteArrayOutputStream(data.length);
+        byteOut.write(data, 0, data.length);
+        result.setOutputMessage(byteOut);
         return result;
     }
 }
\ No newline at end of file
diff --git a/saltstack-adapter/saltstack-adapter-provider/src/main/resources/org/opendaylight/blueprint/saltstack-adapter-blueprint.xml b/saltstack-adapter/saltstack-adapter-provider/src/main/resources/org/opendaylight/blueprint/saltstack-adapter-blueprint.xml
index 446ab3e..e360f81 100755
--- a/saltstack-adapter/saltstack-adapter-provider/src/main/resources/org/opendaylight/blueprint/saltstack-adapter-blueprint.xml
+++ b/saltstack-adapter/saltstack-adapter-provider/src/main/resources/org/opendaylight/blueprint/saltstack-adapter-blueprint.xml
@@ -20,19 +20,22 @@
   ============LICENSE_END=========================================================
   -->
 
-<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
-           xmlns:odl="http://opendaylight.org/xmlns/blueprint/v1.0.0"
+<blueprint xmlns:odl="http://opendaylight.org/xmlns/blueprint/v1.0.0"
+           xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
            odl:use-default-for-reference-types="true">
 
-    <bean id="propProvider" class="org.onap.ccsdk.sli.adaptors.saltstack.impl.SaltstackAdapterPropertiesProviderImpl" />
+    <bean id="propProvider"
+          class="org.onap.ccsdk.sli.adaptors.saltstack.impl.SaltstackAdapterPropertiesProviderImpl"/>
 
-    <bean id="saltstackAdapterInstance" class="org.onap.ccsdk.sli.adaptors.saltstack.impl.SaltstackAdapterImpl">
+    <bean id="saltstackAdapterInstance"
+          class="org.onap.ccsdk.sli.adaptors.saltstack.impl.SaltstackAdapterImpl">
         <argument ref="propProvider"/>
     </bean>
 
     <service ref="saltstackAdapterInstance">
         <interfaces>
-            <value>org.onap.ccsdk.sli.adaptors.saltstack.SaltstackAdapter</value>
+            <value>org.onap.ccsdk.sli.adaptors.saltstack.SaltstackAdapter
+            </value>
         </interfaces>
     </service>
 
diff --git a/saltstack-adapter/saltstack-adapter-provider/src/main/resources/saltstack-adapter.properties b/saltstack-adapter/saltstack-adapter-provider/src/main/resources/saltstack-adapter.properties
index 0b07752..1755f7a 100644
--- a/saltstack-adapter/saltstack-adapter-provider/src/main/resources/saltstack-adapter.properties
+++ b/saltstack-adapter/saltstack-adapter-provider/src/main/resources/saltstack-adapter.properties
@@ -21,7 +21,6 @@
 #
 # ============LICENSE_END=========================================================
 ###
-
 #
 # Default properties for the APP-C TestService Adapter
 #
@@ -31,17 +30,13 @@
 # to supply configuration options
 org.onap.appc.bootstrap.file=appc.properties
 org.onap.appc.bootstrap.path=${user.home},/opt/opendaylight/current/properties
-
 appc.application.name=APPC
-
 #
 # Define the message resource bundle name to be loaded
 org.onap.appc.resources=org.onap/appc/i18n/MessageResources
 #
 # The name of the adapter.
 org.onap.appc.provider.adaptor.name=org.onap.appc.appc_saltstack_adapter
-
-
 # Default truststore path and password
 org.onap.appc.adapter.saltstack.trustStore=/opt/opendaylight/tls-client/mykeystore.js
 org.onap.appc.adapter.saltstack.trustStore.trustPasswd=changeit
diff --git a/saltstack-adapter/saltstack-adapter-provider/src/test/java/org/onap/ccsdk/adapter/impl/TestConnectionBuilder.java b/saltstack-adapter/saltstack-adapter-provider/src/test/java/org/onap/ccsdk/adapter/impl/TestConnectionBuilder.java
index 266147a..8cd7af2 100644
--- a/saltstack-adapter/saltstack-adapter-provider/src/test/java/org/onap/ccsdk/adapter/impl/TestConnectionBuilder.java
+++ b/saltstack-adapter/saltstack-adapter-provider/src/test/java/org/onap/ccsdk/adapter/impl/TestConnectionBuilder.java
@@ -29,14 +29,11 @@
 import org.junit.Test;
 import org.onap.ccsdk.sli.adaptors.saltstack.impl.ConnectionBuilder;
 import org.onap.ccsdk.sli.adaptors.saltstack.model.SaltstackResult;
-import org.onap.ccsdk.sli.core.sli.SvcLogicContext;
-import org.onap.ccsdk.sli.core.sli.SvcLogicException;
 
 import java.util.HashMap;
 import java.util.Map;
 
 import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.fail;
 
 
 public class TestConnectionBuilder {
diff --git a/saltstack-adapter/saltstack-adapter-provider/src/test/java/org/onap/ccsdk/adapter/impl/TestSaltstackAdapterImpl.java b/saltstack-adapter/saltstack-adapter-provider/src/test/java/org/onap/ccsdk/adapter/impl/TestSaltstackAdapterImpl.java
index a0d3604..50530ec 100644
--- a/saltstack-adapter/saltstack-adapter-provider/src/test/java/org/onap/ccsdk/adapter/impl/TestSaltstackAdapterImpl.java
+++ b/saltstack-adapter/saltstack-adapter-provider/src/test/java/org/onap/ccsdk/adapter/impl/TestSaltstackAdapterImpl.java
@@ -801,7 +801,7 @@
             TestId = svcContext.getAttribute("org.onap.appc.adapter.saltstack.Id");
             assertEquals("200", status);
             assertEquals(TestId, "test1");
-        } catch (Exception e){
+        } catch (Exception e) {
             //if local ssh is not enabled
             System.out.print(e.getMessage());
         }
@@ -829,7 +829,7 @@
             assertEquals(TestId, "test1");
             TestId = svcContext.getAttribute("test1.minion1");
             assertEquals(TestId, "true");
-        } catch (Exception e){
+        } catch (Exception e) {
             //if saltstack ssh IP is not enabled
             System.out.print(e.getMessage());
         }
@@ -855,7 +855,7 @@
             TestId = svcContext.getAttribute("org.onap.appc.adapter.saltstack.Id");
             assertEquals("200", status);
             assertEquals(TestId, "test1");
-        } catch (Exception e){
+        } catch (Exception e) {
             //if saltstack ssh IP is not enabled
             System.out.print(e.getMessage());
         }
@@ -881,7 +881,7 @@
             TestId = svcContext.getAttribute("org.onap.appc.adapter.saltstack.Id");
             assertEquals("200", status);
             assertEquals(TestId, "test1");
-        } catch (Exception e){
+        } catch (Exception e) {
             //if saltstack ssh IP is not enabled
             System.out.print(e.getMessage());
         }
@@ -908,7 +908,7 @@
             TestId = svcContext.getAttribute("org.onap.appc.adapter.saltstack.Id");
             assertEquals("200", status);
             assertEquals(TestId, "test1");
-        } catch (Exception e){
+        } catch (Exception e) {
             //if saltstack ssh IP is not enabled
             System.out.print(e.getMessage());
         }
@@ -936,7 +936,7 @@
             TestId = svcContext.getAttribute("org.onap.appc.adapter.saltstack.Id");
             assertEquals("200", status);
             assertEquals(TestId, "test1");
-        } catch (Exception e){
+        } catch (Exception e) {
             //if saltstack ssh IP is not enabled
             System.out.print(e.getMessage());
         }
@@ -964,7 +964,7 @@
             TestId = svcContext.getAttribute("org.onap.appc.adapter.saltstack.Id");
             assertEquals("200", status);
             assertEquals(TestId, "test1");
-        } catch (Exception e){
+        } catch (Exception e) {
             //if saltstack ssh IP is not enabled
             System.out.print(e.getMessage());
         }
@@ -992,7 +992,7 @@
             TestId = svcContext.getAttribute("org.onap.appc.adapter.saltstack.Id");
             assertEquals("200", status);
             assertEquals(TestId, "test1");
-        } catch (Exception e){
+        } catch (Exception e) {
             //if saltstack ssh IP is not enabled
             System.out.print(e.getMessage());
         }
@@ -1018,7 +1018,7 @@
             TestId = svcContext.getAttribute("org.onap.appc.adapter.saltstack.Id");
             assertEquals("200", status);
             assertEquals(TestId, "test1");
-        } catch (Exception e){
+        } catch (Exception e) {
             //if saltstack ssh IP is not enabled
             System.out.print(e.getMessage());
         }
@@ -1046,7 +1046,7 @@
             TestId = svcContext.getAttribute("org.onap.appc.adapter.saltstack.Id");
             assertEquals("200", status);
             assertEquals(TestId, "test1");
-        } catch (Exception e){
+        } catch (Exception e) {
             //if saltstack ssh IP is not enabled
             System.out.print(e.getMessage());
         }
diff --git a/saltstack-adapter/saltstack-adapter-provider/src/test/java/org/onap/ccsdk/adapter/impl/TestSaltstackAdapterPropertiesProviderImpl.java b/saltstack-adapter/saltstack-adapter-provider/src/test/java/org/onap/ccsdk/adapter/impl/TestSaltstackAdapterPropertiesProviderImpl.java
index 29d0880..57590ba 100644
--- a/saltstack-adapter/saltstack-adapter-provider/src/test/java/org/onap/ccsdk/adapter/impl/TestSaltstackAdapterPropertiesProviderImpl.java
+++ b/saltstack-adapter/saltstack-adapter-provider/src/test/java/org/onap/ccsdk/adapter/impl/TestSaltstackAdapterPropertiesProviderImpl.java
@@ -29,7 +29,6 @@
 import org.junit.Test;
 import org.onap.ccsdk.sli.adaptors.saltstack.SaltstackAdapterPropertiesProvider;
 import org.onap.ccsdk.sli.adaptors.saltstack.impl.SaltstackAdapterImpl;
-import org.onap.ccsdk.sli.core.sli.SvcLogicContext;
 import org.onap.ccsdk.sli.core.sli.SvcLogicException;
 
 import java.util.Properties;
@@ -258,7 +257,6 @@
     }
 
 
-
     @Test
     public void reqExecCommand_setPropertiesElsePortNull() throws SvcLogicException,
             IllegalStateException, IllegalArgumentException {
diff --git a/saltstack-adapter/saltstack-adapter-provider/src/test/java/org/onap/ccsdk/adapter/model/TestJsonParser.java b/saltstack-adapter/saltstack-adapter-provider/src/test/java/org/onap/ccsdk/adapter/model/TestJsonParser.java
index d082285..71798fb 100644
--- a/saltstack-adapter/saltstack-adapter-provider/src/test/java/org/onap/ccsdk/adapter/model/TestJsonParser.java
+++ b/saltstack-adapter/saltstack-adapter-provider/src/test/java/org/onap/ccsdk/adapter/model/TestJsonParser.java
@@ -8,9 +8,9 @@
  * 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.
@@ -23,8 +23,8 @@
 
 import org.codehaus.jettison.json.JSONException;
 import org.junit.Test;
-import org.onap.ccsdk.sli.core.sli.SvcLogicException;
 import org.onap.ccsdk.sli.adaptors.saltstack.model.JsonParser;
+import org.onap.ccsdk.sli.core.sli.SvcLogicException;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
diff --git a/saltstack-adapter/saltstack-adapter-provider/src/test/resources/org/onap/ccsdk/default.properties b/saltstack-adapter/saltstack-adapter-provider/src/test/resources/org/onap/ccsdk/default.properties
index 3e7e2bc..e5650e8 100644
--- a/saltstack-adapter/saltstack-adapter-provider/src/test/resources/org/onap/ccsdk/default.properties
+++ b/saltstack-adapter/saltstack-adapter-provider/src/test/resources/org/onap/ccsdk/default.properties
@@ -21,7 +21,6 @@
 #
 # ============LICENSE_END=========================================================
 ###
-
 #
 # Default properties for the APP-C Provider Adapter
 #
@@ -31,9 +30,7 @@
 # to supply configuration options 
 org.onap.appc.bootstrap.file=appc.properties
 org.onap.appc.bootstrap.path=/opt/onap/appc/data/properties,${user.home},.
-
 appc.application.name=APPC
-
 #
 # Define the message resource bundle name to be loaded 
 org.onap.appc.resources=org/onap/appc/i18n/MessageResources
@@ -53,15 +50,13 @@
 # means that the upper bound on the pool is unbounded. 
 org.onap.appc.provider.min.pool=1
 org.onap.appc.provider.max.pool=0
-
 #
 # The following properties are used to configure the retry logic for connection to the 
 # IaaS provider(s).  The retry delay property is the amount of time, in seconds, the
 # application waits between retry attempts.  The retry limit is the number of retries
 # that are allowed before the request is failed.
-org.onap.appc.provider.retry.delay = 30
-org.onap.appc.provider.retry.limit = 10
-
+org.onap.appc.provider.retry.delay=30
+org.onap.appc.provider.retry.limit=10
 #
 # The trusted hosts list for SSL access when a certificate is not provided.
 #
@@ -85,21 +80,17 @@
 # the values for a different provider.  Any number of providers can be defined in this 
 # way. 
 #
-
 # Don't change these 2 right now since they are hard coded in the DG
 #provider1.type=appc
 #provider1.name=appc
-
 #These you can change
 #provider1.identity=appc
 #provider1.tenant1.name=appc
 #provider1.tenant1.userid=appc
 #provider1.tenant1.password=appc
-
 # After a change to the provider make sure to recheck these values with an api call to provider1.identity/tokens
 test.expected-regions=1
 test.expected-endpoints=1
-
 #Your OpenStack IP
 #test.ip=192.168.1.2
 # Your OpenStack Platform's Keystone Port (default is 5000)
diff --git a/saltstack-adapter/saltstack-adapter-provider/src/test/resources/test-invalid.json b/saltstack-adapter/saltstack-adapter-provider/src/test/resources/test-invalid.json
index 53158ca..d16bfcc 100644
--- a/saltstack-adapter/saltstack-adapter-provider/src/test/resources/test-invalid.json
+++ b/saltstack-adapter/saltstack-adapter-provider/src/test/resources/test-invalid.json
@@ -6,8 +6,8 @@
 "equipment-id": "Server1",
 "server-model": "Unknown",
 "server-id": "Server1",
-"test-node" : {
-"test-inner-node" : "Test-Value"
+"test-node": {
+"test-inner-node": "Test-Value"
 }
 }
 ],
diff --git a/saltstack-adapter/saltstack-adapter-provider/src/test/resources/test.json b/saltstack-adapter/saltstack-adapter-provider/src/test/resources/test.json
index cd76486..81131d6 100644
--- a/saltstack-adapter/saltstack-adapter-provider/src/test/resources/test.json
+++ b/saltstack-adapter/saltstack-adapter-provider/src/test/resources/test.json
@@ -7,8 +7,8 @@
       "equipment-id": "Server1",
       "server-model": "Unknown",
       "server-id": "Server1",
-      "test-node" : {
-        "test-inner-node" : "Test-Value"
+      "test-node": {
+        "test-inner-node": "Test-Value"
       }
     }
   ],
