diff --git a/packages/component-mts-package/config/default.js b/packages/component-mts-package/config/default.js
index 7b41e3827b47698ee0affbd05ca07970578c0b32..bf1f239eb09ce13400de74acb78501622867fb33 100644
--- a/packages/component-mts-package/config/default.js
+++ b/packages/component-mts-package/config/default.js
@@ -23,8 +23,19 @@ const defaultS3Config = {
   bucket: process.env.AWS_S3_BUCKET,
 }
 
+const defaultFTPConfig = {
+  user: 'dlpuser@dlptest.com',
+  password: '3D6XZV9MKdhM5fF',
+  host: 'ftp.dlptest.com',
+  port: 21,
+  localRoot: `../files`,
+  remoteRoot: '/',
+  exclude: ['*.js'],
+}
+
 module.exports = {
   defaultConfig,
   defaultParseXmlOptions,
   defaultS3Config,
+  defaultFTPConfig,
 }
diff --git a/packages/component-mts-package/package.json b/packages/component-mts-package/package.json
index 53f5f6dbf1a523dafda8d5bb10ee93321edd4a72..20b9f9c86d65c196ad5da70e266fa8bbf45b9e28 100644
--- a/packages/component-mts-package/package.json
+++ b/packages/component-mts-package/package.json
@@ -3,7 +3,9 @@
   "version": "1.0.0",
   "description": "Create package for MTS integration",
   "main": "index.js",
-  "files": ["src"],
+  "files": [
+    "src"
+  ],
   "scripts": {
     "test": "jest",
     "convert": "xml-js xml.xml --spaces 4 --out test.json"
@@ -33,6 +35,7 @@
   "dependencies": {
     "archiver": "^2.1.1",
     "aws-sdk": "^2.185.0",
+    "ftp-deploy": "^2.1.2",
     "lodash": "^4.17.10",
     "xml-js": "^1.6.7"
   }
diff --git a/packages/component-mts-package/src/AWS.js b/packages/component-mts-package/src/AWS.js
index 7a64ffdcd2c9d1986bb586565118bd3717b4d450..2ea9b7f0aafc7212f0214f94deb12c7d50d49f64 100644
--- a/packages/component-mts-package/src/AWS.js
+++ b/packages/component-mts-package/src/AWS.js
@@ -4,11 +4,12 @@ const { get } = require('lodash')
 const { promisify } = require('util')
 const nodeArchiver = require('archiver')
 const logger = require('@pubsweet/logger')
+const FtpDeploy = require('ftp-deploy')
 
 const filterByType = (fileTypes = []) => ({ Metadata: { filetype } }) =>
   fileTypes.length > 0 ? fileTypes.includes(filetype) : true
 
-const createFilesPackage = (s3Config, archiver = nodeArchiver) => {
+const createFilesPackage = (s3Config, ftpConfig, archiver = nodeArchiver) => {
   AWS.config.update({
     secretAccessKey: s3Config.secretAccessKey,
     accessKeyId: s3Config.accessKeyId,
@@ -57,11 +58,13 @@ const createFilesPackage = (s3Config, archiver = nodeArchiver) => {
             throw err
           })
           archive.on('end', err => {
+            const filename = `${manuscriptName}.zip`
             if (err) throw err
-            uploadToS3({
+            uploadFiles({
               s3,
-              filename: `${manuscriptName}.zip`,
+              filename,
               Bucket: s3Config.bucket,
+              config: ftpConfig,
             })
           })
           archive.finalize()
@@ -85,28 +88,35 @@ const readFile = filename =>
     })
   })
 
-const uploadToS3 = async ({ s3, filename, Bucket }) => {
+const uploadFiles = async ({ s3, filename, Bucket, config }) => {
   const data = await readFile(filename)
   const params = {
     Bucket,
     Body: data,
     Key: `mts/${filename}`,
   }
-  s3.upload(params, (err, data) => {
+  s3.upload(params, async err => {
+    await uploadFTP({ filename, config })
+      .then(res => {
+        logger.info(`Successfully uploaded ${filename} to FTP`)
+      })
+      .catch(err => {
+        logger.error(err)
+      })
+
     deleteFile(filename)
+
     if (err) {
       throw err
     } else {
-      logger.info(`Successfully uploaded ${filename}`)
+      logger.info(`Successfully uploaded ${filename} to S3`)
     }
   })
 }
 
 const deleteFile = filename => {
   fs.access(filename, fs.constants.F_OK, err => {
-    if (err) {
-      if (err) throw err
-    } else {
+    if (!err) {
       fs.unlink(filename, err => {
         if (err) throw err
         logger.info(`Deleted ${filename}`)
@@ -115,4 +125,13 @@ const deleteFile = filename => {
   })
 }
 
+const uploadFTP = ({ filename, config }) => {
+  const ftpDeploy = new FtpDeploy()
+  const configs = {
+    ...config,
+    include: [filename],
+  }
+  return ftpDeploy.deploy(configs)
+}
+
 module.exports = createFilesPackage
diff --git a/packages/component-mts-package/src/MTS.js b/packages/component-mts-package/src/MTS.js
index 5a69b65989e93114a3524fe888828a7c0023d386..436b5b92e7557f778efa5aa3240416263bb81381 100644
--- a/packages/component-mts-package/src/MTS.js
+++ b/packages/component-mts-package/src/MTS.js
@@ -7,6 +7,7 @@ const {
   defaultConfig,
   defaultParseXmlOptions,
   defaultS3Config,
+  defaultFTPConfig,
 } = require('../config/default')
 
 class MTS {
@@ -14,11 +15,13 @@ class MTS {
     config = defaultConfig,
     options = defaultParseXmlOptions,
     s3Config = defaultS3Config,
+    ftpConfig = defaultFTPConfig,
   ) {
     this.config = config
     this.options = options
     this.jsonTemplate = mts.getJsonTemplate(config)
     this.s3Config = s3Config
+    this.ftpConfig = ftpConfig
   }
 
   createFileName(id = Date.now()) {
@@ -208,7 +211,10 @@ class MTS {
 
   async createMTSPackage(fragment = {}) {
     const xmlFile = this.convertFragmentToXML(fragment)
-    await createFilesPackage(this.s3Config)({ fragment, xmlFile })
+    await createFilesPackage(this.s3Config, this.ftpConfig)({
+      fragment,
+      xmlFile,
+    })
   }
 }
 
diff --git a/yarn.lock b/yarn.lock
index 9c6cec2c5d3d979294320476e8e4331f050e7eda..965f00ccb37aa4b27d827dd63a31af4e9d7b5447 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -85,6 +85,13 @@
     lodash "^4.2.0"
     to-fast-properties "^2.0.0"
 
+"@icetee/ftp@^0.3.15":
+  version "0.3.15"
+  resolved "https://registry.yarnpkg.com/@icetee/ftp/-/ftp-0.3.15.tgz#d32efd91ab7585f0a3b6cbed9ceffe2763b04ec6"
+  dependencies:
+    readable-stream "1.1.x"
+    xregexp "2.0.0"
+
 "@pubsweet/component-aws-s3@^1.1.2":
   version "1.1.2"
   resolved "https://registry.yarnpkg.com/@pubsweet/component-aws-s3/-/component-aws-s3-1.1.2.tgz#ef7c6c7f22a19ce6f547412b73ab8de3fc81c3ee"
@@ -844,20 +851,6 @@ aws-sdk@^2.185.0, aws-sdk@^2.197.0, aws-sdk@^2.2.36:
     xml2js "0.4.17"
     xmlbuilder "4.2.1"
 
-aws-sdk@^2.281.1:
-  version "2.281.1"
-  resolved "https://registry.yarnpkg.com/aws-sdk/-/aws-sdk-2.281.1.tgz#12ef82cf8a70a2c97c90e644038684a01cb8cc0c"
-  dependencies:
-    buffer "4.9.1"
-    events "1.1.1"
-    ieee754 "1.1.8"
-    jmespath "0.15.0"
-    querystring "0.2.0"
-    sax "1.2.1"
-    url "0.10.3"
-    uuid "3.1.0"
-    xml2js "0.4.19"
-
 aws-sign2@~0.6.0:
   version "0.6.0"
   resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.6.0.tgz#14342dd38dbcc94d0e5b87d763cd63612c0e794f"
@@ -1647,6 +1640,10 @@ block-stream@*:
   dependencies:
     inherits "~2.0.0"
 
+bluebird@2.x:
+  version "2.11.0"
+  resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-2.11.0.tgz#534b9033c022c9579c56ba3b3e5a5caafbb650e1"
+
 bluebird@^3.4.7, bluebird@^3.5.0, bluebird@^3.5.1:
   version "3.5.1"
   resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.1.tgz#d9551f9de98f1fcda1e683d17ee91a0602ee2eb9"
@@ -3658,7 +3655,7 @@ eventemitter2@0.4.14:
   version "0.4.14"
   resolved "https://registry.yarnpkg.com/eventemitter2/-/eventemitter2-0.4.14.tgz#8f61b75cde012b2e9eb284d4545583b5643b61ab"
 
-events@1.1.1, events@^1.0.0, events@^1.1.1:
+events@^1.0.0, events@^1.1.1:
   version "1.1.1"
   resolved "https://registry.yarnpkg.com/events/-/events-1.1.1.tgz#9ebdb7635ad099c70dcc4c2a1f5004288e8bd924"
 
@@ -4097,6 +4094,16 @@ fstream@^1.0.0, fstream@^1.0.10, fstream@^1.0.2:
     mkdirp ">=0.5 0"
     rimraf "2"
 
+ftp-deploy@^2.1.2:
+  version "2.1.2"
+  resolved "https://registry.yarnpkg.com/ftp-deploy/-/ftp-deploy-2.1.2.tgz#d8b4c6619f563eff189fa64ee1f5c8159ca15960"
+  dependencies:
+    bluebird "^3.5.1"
+    minimatch "3.0.4"
+    promise-ftp "^1.3.5"
+    read "^1.0.7"
+    upath "^1.0.5"
+
 function-bind@^1.0.2, function-bind@^1.1.0, function-bind@^1.1.1:
   version "1.1.1"
   resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d"
@@ -4674,7 +4681,7 @@ icss-utils@^2.1.0:
   dependencies:
     postcss "^6.0.1"
 
-ieee754@1.1.8, ieee754@^1.1.4:
+ieee754@^1.1.4:
   version "1.1.8"
   resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.8.tgz#be33d40ac10ef1926701f6f08a2d86fbfd1ad3e4"
 
@@ -6267,7 +6274,7 @@ minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1:
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a"
 
-minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.3, minimatch@^3.0.4, minimatch@~3.0.2:
+minimatch@3.0.4, minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.3, minimatch@^3.0.4, minimatch@~3.0.2:
   version "3.0.4"
   resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083"
   dependencies:
@@ -7548,6 +7555,18 @@ progress@^2.0.0:
   version "2.0.0"
   resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.0.tgz#8a1be366bf8fc23db2bd23f10c6fe920b4389d1f"
 
+promise-ftp-common@^1.1.5:
+  version "1.1.5"
+  resolved "https://registry.yarnpkg.com/promise-ftp-common/-/promise-ftp-common-1.1.5.tgz#b4f8082a74035647703506763edb14230d9865da"
+
+promise-ftp@^1.3.5:
+  version "1.3.5"
+  resolved "https://registry.yarnpkg.com/promise-ftp/-/promise-ftp-1.3.5.tgz#ecfa4a5e5b779a6bfdd4dd3096957b58286f5104"
+  dependencies:
+    "@icetee/ftp" "^0.3.15"
+    bluebird "2.x"
+    promise-ftp-common "^1.1.5"
+
 promise-inflight@^1.0.1:
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3"
@@ -8255,7 +8274,7 @@ read-pkg@^3.0.0:
     normalize-package-data "^2.3.2"
     path-type "^3.0.0"
 
-read@1.0.x:
+read@1.0.x, read@^1.0.7:
   version "1.0.7"
   resolved "https://registry.yarnpkg.com/read/-/read-1.0.7.tgz#b3da19bd052431a97671d44a42634adf710b40c4"
   dependencies:
@@ -9890,6 +9909,10 @@ unzip-response@^2.0.1:
   version "2.0.1"
   resolved "https://registry.yarnpkg.com/unzip-response/-/unzip-response-2.0.1.tgz#d2f0f737d16b0615e72a6935ed04214572d56f97"
 
+upath@^1.0.5:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/upath/-/upath-1.1.0.tgz#35256597e46a581db4793d0ce47fa9aebfc9fabd"
+
 upper-case@^1.1.1:
   version "1.1.3"
   resolved "https://registry.yarnpkg.com/upper-case/-/upper-case-1.1.3.tgz#f6b4501c2ec4cdd26ba78be7222961de77621598"
@@ -10323,23 +10346,12 @@ xml2js@0.4.17:
     sax ">=0.6.0"
     xmlbuilder "^4.1.0"
 
-xml2js@0.4.19:
-  version "0.4.19"
-  resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.4.19.tgz#686c20f213209e94abf0d1bcf1efaa291c7827a7"
-  dependencies:
-    sax ">=0.6.0"
-    xmlbuilder "~9.0.1"
-
 xmlbuilder@4.2.1, xmlbuilder@^4.1.0:
   version "4.2.1"
   resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-4.2.1.tgz#aa58a3041a066f90eaa16c2f5389ff19f3f461a5"
   dependencies:
     lodash "^4.0.0"
 
-xmlbuilder@~9.0.1:
-  version "9.0.7"
-  resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-9.0.7.tgz#132ee63d2ec5565c557e20f4c22df9aca686b10d"
-
 xpub-connect@^0.0.10:
   version "0.0.10"
   resolved "https://registry.yarnpkg.com/xpub-connect/-/xpub-connect-0.0.10.tgz#453fa33f6717c4b70afdd1248baee63c478facfc"
@@ -10439,6 +10451,10 @@ xpub-validators@^0.0.3:
   dependencies:
     striptags "^3.1.0"
 
+xregexp@2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/xregexp/-/xregexp-2.0.0.tgz#52a63e56ca0b84a7f3a5f3d61872f126ad7a5943"
+
 xtend@^4.0.0, xtend@^4.0.1, xtend@~4.0.1:
   version "4.0.1"
   resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af"