diff --git a/package.json b/package.json
index 7217f1683199c03d278e5c4545690fcfa6138e29..3464b0cbc3d97b3368609dd1d717371518ece815 100755
--- a/package.json
+++ b/package.json
@@ -91,6 +91,7 @@
     "request-promise": "^4.2.4",
     "rfr": "^1.2.3",
     "rimraf": "^2.6.3",
+    "stream-to-array": "^2.3.0",
     "supertest": "^3.0.0",
     "tar": "^4.4.8",
     "tar-fs": "^1.16.3",
diff --git a/server/xpub-server/entities/file/uploadFiles.js b/server/xpub-server/entities/file/uploadFiles.js
index 9086c90afda39d3f7c9f8a4d1e7154260789b101..f22b1e52408b9c33fa17ea5c116c673f0d2dea81 100644
--- a/server/xpub-server/entities/file/uploadFiles.js
+++ b/server/xpub-server/entities/file/uploadFiles.js
@@ -4,8 +4,12 @@ const config = require('config')
 const rfr = require('rfr')
 const { minioClient } = require('express-middleware-minio')
 const { timer } = require('benmark')
+const fs = require('fs')
 
 const FileModel = rfr('server/xpub-model/entities/file/data-access')
+const tar = rfr('server/utils/unTar')
+const fileUtil = rfr('server/utils/files')
+const { xsweetConvert } = rfr('server/xsweet-conversion')
 
 const extractFileExtension = filename => {
   if (filename) {
@@ -14,17 +18,31 @@ const extractFileExtension = filename => {
   return ''
 }
 
-const handleFile = async file => {
+const handleFile = async (file, manuscriptId, type) => {
   const { stream, filename, mimetype } = await file
 
   let newFilename = uuidv1()
+  let extension = ''
+
   if (filename) {
-    const extension = extractFileExtension(filename)
+    extension = extractFileExtension(filename)
     if (extension) {
       newFilename += `.${extension}`
     }
   }
 
+  // case when manuscript is a docx file
+  if (type === 'manuscript' && extension === 'docx') {
+    const tmpPath = await tar.createTempDir()
+    const wstreamTmp = fs.createWriteStream(`${tmpPath}/${filename}`)
+    stream.pipe(wstreamTmp)
+    wstreamTmp.on('finish', async () => {
+      await xsweetConvert(`${tmpPath}/${filename}`, manuscriptId)
+      logger.info('xsweet conversion is DONE!')
+      fileUtil.tidyUp(tmpPath)
+    })
+  }
+
   try {
     await timer(`S3 uploading file ${filename}`)(minioClient.uploadFileSteam)(
       newFilename,
@@ -40,10 +58,15 @@ const handleFile = async file => {
 
 async function uploadFiles(_, { id, files, type = '' }, { user }) {
   const resolvedFiles = await files
+
   const savedFiles = []
   await Promise.all(
     resolvedFiles.map(async resolvedFile => {
-      const { err, filename, url, mimetype } = await handleFile(resolvedFile)
+      const { err, filename, url, mimetype } = await handleFile(
+        resolvedFile,
+        id,
+        type,
+      )
       if (err || !filename) {
         logger.error('Minio error: ', err)
         return
@@ -61,6 +84,7 @@ async function uploadFiles(_, { id, files, type = '' }, { user }) {
       const savedFile = await file.save()
       logger.debug('savedFile: ', savedFile)
       savedFiles.push(savedFile)
+      // xsweetConvert()
     }),
   )
 
diff --git a/yarn.lock b/yarn.lock
index 80bf8855e860155223e7448e2d154b82841c03d9..0ed77bae365e3512a7f9a6529b835b9bf3bc09ec 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -1017,6 +1017,11 @@ any-observable@^0.2.0:
   resolved "https://registry.yarnpkg.com/any-observable/-/any-observable-0.2.0.tgz#c67870058003579009083f54ac0abafb5c33d242"
   integrity sha1-xnhwBYADV5AJCD9UrAq6+1wz0kI=
 
+any-promise@^1.1.0:
+  version "1.3.0"
+  resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f"
+  integrity sha1-q8av7tzqUugJzcA3au0845Y10X8=
+
 anymatch@^1.3.0:
   version "1.3.2"
   resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-1.3.2.tgz#553dcb8f91e3c889845dfdba34c77721b90b9d7a"
@@ -13191,6 +13196,13 @@ stream-shift@^1.0.0:
   resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.0.tgz#d5c752825e5367e786f78e18e445ea223a155952"
   integrity sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=
 
+stream-to-array@^2.3.0:
+  version "2.3.0"
+  resolved "https://registry.yarnpkg.com/stream-to-array/-/stream-to-array-2.3.0.tgz#bbf6b39f5f43ec30bc71babcb37557acecf34353"
+  integrity sha1-u/azn19D7DC8cbq8s3VXrOzzQ1M=
+  dependencies:
+    any-promise "^1.1.0"
+
 stream-to-observable@^0.1.0:
   version "0.1.0"
   resolved "https://registry.yarnpkg.com/stream-to-observable/-/stream-to-observable-0.1.0.tgz#45bf1d9f2d7dc09bed81f1c307c430e68b84cffe"