diff --git a/vnf-sdk-function-test/src/main/java/org/onap/vnfsdk/functest/TaskExecution.java b/vnf-sdk-function-test/src/main/java/org/onap/vnfsdk/functest/TaskExecution.java
index b7f674a..8796baa 100644
--- a/vnf-sdk-function-test/src/main/java/org/onap/vnfsdk/functest/TaskExecution.java
+++ b/vnf-sdk-function-test/src/main/java/org/onap/vnfsdk/functest/TaskExecution.java
@@ -47,12 +47,8 @@
         String confDir = curDir + nl + ApplicationConstants.CONF + nl + ApplicationConstants.ROBOT + nl;
 
         // Read the MetaData from the VNF package
-//        ObjectMapper mapper = new ObjectMapper();
-
         Map<String, String> mapValues = null;
         try {
-//            mapValues =
-//                    mapper.readValue(new FileInputStream(confDir + ApplicationConstants.ROBOTMETADATA_JSON), Map.class);
             mapValues = new Gson().fromJson(new JsonReader(new FileReader(confDir + ApplicationConstants.ROBOTMETADATA_JSON)), Map.class);
         } catch (IOException e) {
 
@@ -123,11 +119,8 @@
         String confDir = curDir + nl + ApplicationConstants.CONF + nl + ApplicationConstants.ROBOT + nl;
 
         // Read the MetaData from the VNF package
-//        ObjectMapper mapper = new ObjectMapper();
         Map<String, String> mapValues = null;
         try {
-//            mapValues =
-//                    mapper.readValue(new FileInputStream(confDir + ApplicationConstants.ROBOTMETADATA_JSON), Map.class);
             mapValues = new Gson().fromJson(new JsonReader(new FileReader(confDir + ApplicationConstants.ROBOTMETADATA_JSON)), Map.class);
         } catch (IOException e) {
 
@@ -211,12 +204,9 @@
         String confDir = curDir + nl + ApplicationConstants.CONF + nl + ApplicationConstants.ROBOT + nl;
 
         // Read the MetaData from the VNF package
-//        ObjectMapper mapper = new ObjectMapper();
 
         Map<String, String> mapValues = null;
         try {
-//            mapValues =
-//                    mapper.readValue(new FileInputStream(confDir + ApplicationConstants.ROBOTMETADATA_JSON), Map.class);
             mapValues = new Gson().fromJson(new JsonReader(new FileReader(confDir + ApplicationConstants.ROBOTMETADATA_JSON)), Map.class);
         } catch (Exception e) {
 
diff --git a/vnf-sdk-function-test/src/main/java/org/onap/vnfsdk/functest/db/TaskMgrCaseTblDAO.java b/vnf-sdk-function-test/src/main/java/org/onap/vnfsdk/functest/db/TaskMgrCaseTblDAO.java
index f228ab5..837ff07 100644
--- a/vnf-sdk-function-test/src/main/java/org/onap/vnfsdk/functest/db/TaskMgrCaseTblDAO.java
+++ b/vnf-sdk-function-test/src/main/java/org/onap/vnfsdk/functest/db/TaskMgrCaseTblDAO.java
@@ -28,7 +28,6 @@
     }
 
     public CaseRecord findByTaskID(String taskID) {
-        //return Optional.ofNullable(get(taskID));
         return get(taskID);
     }
 
diff --git a/vnf-sdk-function-test/src/main/java/org/onap/vnfsdk/functest/responsehandler/VnfFuncTestResponseHandler.java b/vnf-sdk-function-test/src/main/java/org/onap/vnfsdk/functest/responsehandler/VnfFuncTestResponseHandler.java
index 0dce5a0..1efced0 100644
--- a/vnf-sdk-function-test/src/main/java/org/onap/vnfsdk/functest/responsehandler/VnfFuncTestResponseHandler.java
+++ b/vnf-sdk-function-test/src/main/java/org/onap/vnfsdk/functest/responsehandler/VnfFuncTestResponseHandler.java
@@ -60,10 +60,8 @@
     private static void loadConfigurations() {
         String curDir = System.getProperty("user.dir");
         String confDir = curDir + File.separator + "conf" + File.separator + "robot" + File.separator;
-//        ObjectMapper mapper = new ObjectMapper();
 
         try {
-//            mapConfigValues = mapper.readValue(new FileInputStream(confDir + "robotMetaData.json"), Map.class);
             mapConfigValues = new Gson().fromJson(new JsonReader(new FileReader(confDir + "robotMetaData.json")), Map.class);
         } catch (IOException e) {
             logger.error("Reading Json Meta data file failed or file do not exist", e);
diff --git a/vnf-sdk-function-test/src/main/java/org/onap/vnfsdk/functest/scriptmgr/ScriptManager.java b/vnf-sdk-function-test/src/main/java/org/onap/vnfsdk/functest/scriptmgr/ScriptManager.java
index 8b1ff4c..c46f7b5 100644
--- a/vnf-sdk-function-test/src/main/java/org/onap/vnfsdk/functest/scriptmgr/ScriptManager.java
+++ b/vnf-sdk-function-test/src/main/java/org/onap/vnfsdk/functest/scriptmgr/ScriptManager.java
@@ -102,8 +102,6 @@
             final UUID envID = UUID.randomUUID();
 
             // Convert input string to Environment class
-//            ObjectMapper mapper = new ObjectMapper();
-//            Environment envObj = mapper.readValue(env, Environment.class);
             Environment envObj = new Gson().fromJson(env, Environment.class);
             if (null == envObj) {
                 // Converting input to Env object failed
