diff --git a/src/main/java/org/apache/geode/kafka/sink/GeodeKafkaSink.java b/src/main/java/org/apache/geode/kafka/sink/GeodeKafkaSink.java
index 2bdd99a..edf2f97 100644
--- a/src/main/java/org/apache/geode/kafka/sink/GeodeKafkaSink.java
+++ b/src/main/java/org/apache/geode/kafka/sink/GeodeKafkaSink.java
@@ -45,8 +45,7 @@
     // All tasks will build up the topic to regions map. A few might not use certain keys but we
     // have no control over partitioning in kafka and which tasks will fire
     for (int i = 0; i < maxTasks; i++) {
-      Map<String, String> taskProps = new HashMap<>();
-      taskProps.putAll(sharedProps);
+      Map<String, String> taskProps = new HashMap<>(sharedProps);
       taskProps.put(GeodeConnectorConfig.TASK_ID, "" + i);
       taskConfigs.add(taskProps);
     }
diff --git a/src/main/java/org/apache/geode/kafka/source/GeodeKafkaSource.java b/src/main/java/org/apache/geode/kafka/source/GeodeKafkaSource.java
index d2418fb..89054a6 100644
--- a/src/main/java/org/apache/geode/kafka/source/GeodeKafkaSource.java
+++ b/src/main/java/org/apache/geode/kafka/source/GeodeKafkaSource.java
@@ -49,8 +49,7 @@
     List<List<String>> bindingsPerTask = ConnectorUtils.groupPartitions(bindings, maxTasks);
 
     for (int i = 0; i < maxTasks; i++) {
-      Map<String, String> taskProps = new HashMap<>();
-      taskProps.putAll(sharedProps);
+      Map<String, String> taskProps = new HashMap<>(sharedProps);
       taskProps.put(GeodeConnectorConfig.TASK_ID, "" + i);
       taskProps.put(GeodeSourceConnectorConfig.CQS_TO_REGISTER,
           GeodeConnectorConfig.reconstructString(bindingsPerTask.get(i)));
diff --git a/src/test/java/org/apache/geode/kafka/utilities/JavaProcess.java b/src/test/java/org/apache/geode/kafka/utilities/JavaProcess.java
index 2d20244..cb66f84 100644
--- a/src/test/java/org/apache/geode/kafka/utilities/JavaProcess.java
+++ b/src/test/java/org/apache/geode/kafka/utilities/JavaProcess.java
@@ -37,23 +37,13 @@
     processBuilderCommand[1] = "-cp";
     processBuilderCommand[2] = classpath;
     processBuilderCommand[3] = className;
-    for (int i = 0; i < args.length; i++) {
-      processBuilderCommand[4 + i] = args[i];
-    }
+    System.arraycopy(args, 0, processBuilderCommand, 4, args.length);
     ProcessBuilder builder = new ProcessBuilder(
         processBuilderCommand);
 
     process = builder.inheritIO().start();
   }
 
-  private String convertArgsToString(String... args) {
-    String string = "";
-    for (String arg : args) {
-      string += arg;
-    }
-    return string;
-  }
-
   public void waitFor() throws InterruptedException {
     process.waitFor();
   }
