diff --git a/packages/component-helper-service/src/services/Fragment.js b/packages/component-helper-service/src/services/Fragment.js
index 4b9e5edd4fefe8c3864698ba2ea205be4c3ecbac..17fdd5939e33b5f958a4081ae857c910142b6e96 100644
--- a/packages/component-helper-service/src/services/Fragment.js
+++ b/packages/component-helper-service/src/services/Fragment.js
@@ -1,6 +1,9 @@
 const { get, remove } = require('lodash')
+const config = require('config')
 const User = require('./User')
 
+const { recommendations: confRecommendations } = config
+
 class Fragment {
   constructor({ fragment }) {
     this.fragment = fragment
@@ -146,6 +149,50 @@ class Fragment {
       rec => rec.recommendationType === 'review' && rec.submittedOn,
     )
   }
+
+  async getReviewersAndEditorsData({ collection, UserModel }) {
+    const { recommendations } = this.fragment
+    const revAndEditorData = await Promise.all(
+      recommendations.map(async rec => {
+        const user = await UserModel.find(rec.userId)
+
+        let assignmentDate, submissionDate, isReviewer
+
+        if (rec.recommendationType === confRecommendations.type.editor) {
+          if (user.id === collection.handlingEditor.id) {
+            const editorInvitation = collection.invitations.find(
+              inv => inv.userId === user.id,
+            )
+            assignmentDate = editorInvitation.respondedOn
+          } else {
+            assignmentDate = this.fragment.submitted
+          }
+
+          isReviewer = false
+        } else {
+          const reviewerInvitation = this.fragment.invitations.find(
+            inv => inv.userId === user.id,
+          )
+          assignmentDate = reviewerInvitation.respondedOn
+          submissionDate = rec.createdOn
+          isReviewer = true
+        }
+
+        return {
+          isReviewer,
+          submissionDate,
+          assignmentDate,
+          email: user.email,
+          title: user.title,
+          recommendation: rec,
+          lastName: user.lastName,
+          firstName: user.firstName,
+        }
+      }),
+    )
+
+    return revAndEditorData
+  }
 }
 
 module.exports = Fragment
diff --git a/packages/component-manuscript-manager/src/routes/fragments/post.js b/packages/component-manuscript-manager/src/routes/fragments/post.js
index 7b541025809ee4dea338b7f5cd6f2136e47dd034..66360a6f3b5848ab5d618565bfc177af379bfd30 100644
--- a/packages/component-manuscript-manager/src/routes/fragments/post.js
+++ b/packages/component-manuscript-manager/src/routes/fragments/post.js
@@ -13,10 +13,10 @@ const { features = {} } = config
 const sendMTSPackage = async (collection, fragment) => {
   const s3Config = get(config, 'pubsweet-component-aws-s3', {})
   const mtsConfig = get(config, 'mts-service', {})
-  const MTSService = require('pubsweet-component-mts-package')
+  const { sendPackage } = require('pubsweet-component-mts-package')
 
   const { journal, xmlParser, ftp } = mtsConfig
-  const MTS = new MTSService(journal, xmlParser, s3Config, ftp)
+  // const MTS = new MTSService(journal, xmlParser, s3Config, ftp)
   const packageFragment = {
     ...fragment,
     metadata: {
@@ -25,7 +25,14 @@ const sendMTSPackage = async (collection, fragment) => {
     },
   }
 
-  await MTS.sendPackage({ fragment: packageFragment })
+  // await MTS.sendPackage({ fragment: packageFragment })
+  await sendPackage({
+    s3Config,
+    ftpConfig: ftp,
+    config: journal,
+    options: xmlParser,
+    fragment: packageFragment,
+  })
 }
 
 module.exports = models => async (req, res) => {
diff --git a/packages/component-manuscript-manager/src/routes/fragmentsRecommendations/post.js b/packages/component-manuscript-manager/src/routes/fragmentsRecommendations/post.js
index f5c5ccc81d4eae507099fb2f74081df3b09056d6..80fc1588c6078179f2f2b5883bf0e8967be37794 100644
--- a/packages/component-manuscript-manager/src/routes/fragmentsRecommendations/post.js
+++ b/packages/component-manuscript-manager/src/routes/fragmentsRecommendations/post.js
@@ -51,13 +51,13 @@ module.exports = models => async (req, res) => {
       error: 'Unauthorized.',
     })
 
+  const fragmentHelper = new Fragment({ fragment })
   if (
     recommendation === recommendations.publish &&
     recommendationType === recommendations.type.editor &&
     collection.handlingEditor &&
     collection.handlingEditor.id === req.user
   ) {
-    const fragmentHelper = new Fragment({ fragment })
     if (!fragmentHelper.hasReviewReport()) {
       return res
         .status(400)
@@ -94,7 +94,17 @@ module.exports = models => async (req, res) => {
     // the manuscript has not yet passed through the EQA process so we need to upload it to the FTP server
     if (isEditorInChief && recommendation === 'publish' && !hasEQA) {
       if (features.mts) {
-        await sendMTSPackage({ collection, fragment, isEQA: true })
+        const fragmentUsers = await fragmentHelper.getReviewersAndEditorsData({
+          collection,
+          UserModel: models.User,
+        })
+
+        await sendMTSPackage({
+          collection,
+          fragment,
+          isEQA: true,
+          fragmentUsers,
+        })
       }
 
       collection.status = 'inQA'
@@ -168,7 +178,12 @@ module.exports = models => async (req, res) => {
   return res.status(200).json(newRecommendation)
 }
 
-const sendMTSPackage = async ({ collection, fragment, isEQA = false }) => {
+const sendMTSPackage = async ({
+  fragment,
+  collection,
+  isEQA = false,
+  fragmentUsers = [],
+}) => {
   const s3Config = get(config, 'pubsweet-component-aws-s3', {})
   const mtsConfig = get(config, 'mts-service', {})
   const { sendPackage } = require('pubsweet-component-mts-package')
@@ -185,6 +200,7 @@ const sendMTSPackage = async ({ collection, fragment, isEQA = false }) => {
   await sendPackage({
     isEQA,
     s3Config,
+    fragmentUsers,
     ftpConfig: ftp,
     config: journal,
     options: xmlParser,
diff --git a/packages/component-mts-package/src/MTS.js b/packages/component-mts-package/src/MTS.js
index f0fc9d0c705373f7941192ea108edca483ebdd6b..6199218055dd68d9803115ae62d6ca9ab51e9a39 100644
--- a/packages/component-mts-package/src/MTS.js
+++ b/packages/component-mts-package/src/MTS.js
@@ -15,12 +15,19 @@ module.exports = {
   sendPackage({
     fragment = {},
     isEQA = false,
+    fragmentUsers = [],
     config = defaultConfig,
     s3Config = defaultS3Config,
     ftpConfig = defaultFTPConfig,
     options = defaultParseXmlOptions,
   }) {
-    const composedJson = composeJson({ fragment, config, options })
+    const composedJson = composeJson({
+      isEQA,
+      config,
+      options,
+      fragment,
+      fragmentUsers,
+    })
     const xmlFile = convertToXML({
       options,
       json: composedJson,
diff --git a/packages/component-mts-package/src/helpers.js b/packages/component-mts-package/src/helpers.js
index 66a7fa02b11672c3e5f9c07d6e7a50915c34eacb..3490eeb2d7d8b1fa7ddb39f36fe85f1a1d122821 100644
--- a/packages/component-mts-package/src/helpers.js
+++ b/packages/component-mts-package/src/helpers.js
@@ -8,6 +8,7 @@ const {
   setHistory,
   setMetadata,
   setQuestions,
+  setReviewers,
   createFileName,
   setContributors,
 } = require('./templateSetters')
@@ -26,7 +27,13 @@ module.exports = {
       content,
     }
   },
-  composeJson: ({ fragment = {}, config, options }) => {
+  composeJson: ({
+    config,
+    options,
+    isEQA = false,
+    fragment = {},
+    fragmentUsers = [],
+  }) => {
     const {
       authors = [],
       files = [],
@@ -36,18 +43,29 @@ module.exports = {
     } = fragment
 
     const jsonTemplate = getJsonTemplate(config)
-    return {
+    const fileName = createFileName({
+      id: metadata.customId,
+      prefix: config.prefix,
+    })
+
+    let composedJson = {
       ...jsonTemplate,
       ...setMetadata({
         options,
         metadata,
+        fileName,
         jsonTemplate,
-        prefix: config.prefix,
       }),
       ...setContributors(authors, jsonTemplate),
       ...setHistory(submitted, jsonTemplate),
       ...setFiles(files, jsonTemplate),
       ...setQuestions(conflicts, jsonTemplate),
     }
+
+    if (isEQA) {
+      composedJson = setReviewers(fragmentUsers, jsonTemplate)
+    }
+
+    return composedJson
   },
 }
diff --git a/packages/component-mts-package/src/templateSetters.js b/packages/component-mts-package/src/templateSetters.js
index 06a21fb58efd00c980332987fecc25372649d15a..4ede2d0289a3453d4f996a9e88edff3b7a051328 100644
--- a/packages/component-mts-package/src/templateSetters.js
+++ b/packages/component-mts-package/src/templateSetters.js
@@ -8,8 +8,7 @@ const manuscriptTypes = config.get('journalConfig.manuscriptTypes')
 // const { defaultConfig, defaultParseXmlOptions } = require('../config/default')
 
 module.exports = {
-  setMetadata({ metadata, jsonTemplate, prefix, options }) {
-    const fileName = this.createFileName({ id: metadata.customId, prefix })
+  setMetadata: ({ metadata, jsonTemplate, options, fileName }) => {
     const titleGroup = {
       'article-title': parseHtml(metadata.title, options),
     }
@@ -227,48 +226,90 @@ module.exports = {
     return jsonTemplate
   },
   createFileName: ({ id = Date.now(), prefix }) => `${prefix}${id}`,
-  setReviewers: (reviewers = [], jsonTemplate) => {
-    const contrib = reviewers.map((rev, i) => ({
-      _attributes: {
-        'rev-type': 'reviewer',
-      },
-      name: {
-        surname: {
-          _text: rev.lastName,
+  setReviewers: (users = [], jsonTemplate) => {
+    const xmlReviewers = users.map((user, i) => {
+      const assigmentDate = new Date(user.assignmentDate)
+      const revType = user.isReviewer ? 'reviewer' : 'editor'
+      const revObj = {
+        _attributes: {
+          'rev-type': revType,
         },
-        'given-names': {
-          _text: rev.firstName,
+        name: {
+          surname: {
+            _text: user.lastName,
+          },
+          'given-names': {
+            _text: user.firstName,
+          },
+          prefix: {
+            _text: user.title || 'Dr.',
+          },
         },
-        prefix: {
-          _text: rev.title || 'Dr.',
+        email: {
+          _text: user.email,
         },
-      },
-      email: {
-        _text: rev.email,
-      },
-      xref: {
-        _attributes: {
-          'ref-type': 'aff',
-          rid: `aff${i + 1}`,
+        xref: {
+          _attributes: {
+            'ref-type': 'aff',
+            rid: `aff${i + 1}`,
+          },
         },
-      },
-    }))
-    const aff = reviewers.map((rev, i) => ({
+        date: [
+          {
+            _attributes: {
+              'date-type': 'assignment',
+            },
+            day: {
+              _text: assigmentDate.getDate(),
+            },
+            month: {
+              _text: assigmentDate.getMonth() + 1,
+            },
+            year: {
+              _text: assigmentDate.getFullYear(),
+            },
+          },
+        ],
+      }
+
+      if (user.recommendation) {
+        const submissionDate = new Date(user.submissionDate)
+        revObj.date.push({
+          _attributes: {
+            'date-type': 'submission',
+          },
+          day: {
+            _text: submissionDate.getDate(),
+          },
+          month: {
+            _text: submissionDate.getMonth() + 1,
+          },
+          year: {
+            _text: submissionDate.getFullYear(),
+          },
+        })
+        revObj.comment = user.recommendation.comments.map(comm => ({
+          _attributes: {
+            'comment-type': comm.public ? 'comment' : 'Confidential',
+          },
+          _text: comm.content,
+        }))
+      }
+
+      return revObj
+    })
+    const aff = users.map((user, i) => ({
       _attributes: {
         id: `aff${i + 1}`,
       },
-      country: rev.country || 'UK',
+      country: user.country || 'UK',
       'addr-line': {
-        _text: rev.affiliation || '',
+        _text: user.affiliation || '',
       },
     }))
 
-    set(
-      jsonTemplate,
-      'article.front.article-meta.contrib-group.contrib',
-      contrib,
-    )
-    set(jsonTemplate, 'article.front.article-meta.contrib-group.aff', aff)
+    set(jsonTemplate, 'article.front.rev-group.rev', xmlReviewers)
+    set(jsonTemplate, 'article.front.rev-group.aff', aff)
 
     return jsonTemplate
   },
diff --git a/packages/component-mts-package/tests/sampleWithReviewers.xml b/packages/component-mts-package/tests/sampleWithReviewers.xml
index 9a7c38c5ddd6ea1d7830ecd41d40b26e7052e55f..2f20d2d52f213c7c667012c07f4f26584d006f12 100644
--- a/packages/component-mts-package/tests/sampleWithReviewers.xml
+++ b/packages/component-mts-package/tests/sampleWithReviewers.xml
@@ -50,7 +50,7 @@
       </abstract>
       <funding-group></funding-group>
     </article-meta>
-      <rev-group>
+    <rev-group>
         <rev rev-type="reviewer">
 
           <name>