diff --git a/agent/service/src/main/java/org/apache/airavata/mft/agent/TransportConfig.java b/agent/service/src/main/java/org/apache/airavata/mft/agent/TransportConfig.java
index 9e12970..3de940c 100644
--- a/agent/service/src/main/java/org/apache/airavata/mft/agent/TransportConfig.java
+++ b/agent/service/src/main/java/org/apache/airavata/mft/agent/TransportConfig.java
@@ -1,3 +1,20 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
 package org.apache.airavata.mft.agent;
 
 import org.springframework.boot.context.properties.ConfigurationProperties;
diff --git a/agent/service/src/main/resources/agent-application.properties b/agent/service/src/main/resources/agent-application.properties
index f28d6b3..045b6ce 100644
--- a/agent/service/src/main/resources/agent-application.properties
+++ b/agent/service/src/main/resources/agent-application.properties
@@ -41,7 +41,7 @@
 agent.transport.directory=plugins
 
 ### agent transport configurations ###
-agent.transport.local.dma = true
-agent.transport.local.linux = true
+#agent.transport.local.dma = true
+agent.transport.local.buffLen = 16777216
 agent.transport.s3.chunkSize = 10
 agent.transport.s3.multipart = true
\ No newline at end of file
diff --git a/common/common-clients/src/main/java/org/apache/airavata/mft/admin/TransportProperties.java b/common/common-clients/src/main/java/org/apache/airavata/mft/admin/TransportProperties.java
new file mode 100644
index 0000000..ccbb859
--- /dev/null
+++ b/common/common-clients/src/main/java/org/apache/airavata/mft/admin/TransportProperties.java
@@ -0,0 +1,33 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.airavata.mft.admin;
+
+public final class TransportProperties {
+
+    private final String dma = "false";
+
+    public String getDma() {
+        return dma;
+    }
+
+    private final int buffLen = 1024 * 1024 * 16;
+
+    public int getBuffLen() {
+        return buffLen;
+    }
+}
diff --git a/transport/local-transport/pom.xml b/transport/local-transport/pom.xml
index d8e0306..4259f4a 100644
--- a/transport/local-transport/pom.xml
+++ b/transport/local-transport/pom.xml
@@ -38,6 +38,11 @@
             <artifactId>mft-core</artifactId>
             <version>0.01-SNAPSHOT</version>
         </dependency>
+        <dependency>
+            <groupId>org.apache.airavata</groupId>
+            <artifactId>mft-common-clients</artifactId>
+            <version>${project.version}</version>
+        </dependency>
     </dependencies>
     <build>
         <plugins>
diff --git a/transport/local-transport/src/main/java/org/apache/airavata/mft/transport/local/LocalIncomingChunkedConnector.java b/transport/local-transport/src/main/java/org/apache/airavata/mft/transport/local/LocalIncomingChunkedConnector.java
index 9fa51e2..787a65e 100644
--- a/transport/local-transport/src/main/java/org/apache/airavata/mft/transport/local/LocalIncomingChunkedConnector.java
+++ b/transport/local-transport/src/main/java/org/apache/airavata/mft/transport/local/LocalIncomingChunkedConnector.java
@@ -18,6 +18,7 @@
 package org.apache.airavata.mft.transport.local;
 
 
+import org.apache.airavata.mft.admin.TransportProperties;
 import org.apache.airavata.mft.core.api.ConnectorConfig;
 import org.apache.airavata.mft.core.api.IncomingChunkedConnector;
 
@@ -34,13 +35,17 @@
     private long resourceSize;
     private boolean dmaFlag;
 
+    private int buffLen;
+
     private static final Logger logger = LoggerFactory.getLogger(LocalIncomingChunkedConnector.class);
+    private static final TransportProperties transportProperties = new TransportProperties();
 
     @Override
     public void init(ConnectorConfig connectorConfig) throws Exception {
         this.resourcePath = connectorConfig.getResourcePath();
         this.resourceSize = connectorConfig.getMetadata().getFile().getResourceSize();
-        this.dmaFlag = connectorConfig.getTransportConfig().get("local.dma").toString().equals("true");
+        this.dmaFlag = connectorConfig.getTransportConfig().getOrDefault("local.dma", transportProperties.getDma()).toString().equals("true");
+        this.buffLen = Integer.valueOf(connectorConfig.getTransportConfig().getOrDefault("local.buffLen",transportProperties.getBuffLen()).toString());
     }
 
     @Override
@@ -60,7 +65,7 @@
         logger.info("Downloading chunk {} with start byte {} and end byte {} to file {} from resource path {}",
                 chunkId, startByte, endByte, downloadFile, this.resourcePath);
 
-        if (this.dmaFlag) {
+        if (dmaFlag) {
             if (resourceSize <= endByte - startByte) {
                 Files.copy(Path.of(this.resourcePath), Path.of(downloadFile));
             } else {
@@ -74,7 +79,6 @@
                 }
             }
         }   else {
-            int buffLen = 1024 * 1024 * 16;
             try (BufferedInputStream bis = new BufferedInputStream(new FileInputStream(this.resourcePath), buffLen);
                  BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(downloadFile))) {
                 byte[] buffer = new byte[buffLen];
