diff --git a/packages/xpub-aws/config/upload-validations-test.js b/packages/xpub-aws/config/upload-validations-test.js
new file mode 100644
index 0000000000000000000000000000000000000000..23fa37d7d5a7b0403731429eb910f5f402799000
--- /dev/null
+++ b/packages/xpub-aws/config/upload-validations-test.js
@@ -0,0 +1,19 @@
+const Joi = require('joi')
+
+module.exports = {
+  manuscripts: Joi.any()
+    .valid([
+      'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
+      'application/pdf',
+      'application/msword',
+    ])
+    .error(new Error('Only Word documents and PDFs are allowed')),
+  supplementary: Joi.any(),
+  coverLetter: Joi.any()
+    .valid([
+      'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
+      'application/pdf',
+      'application/msword',
+    ])
+    .error(new Error('Only Word documents and PDFs are allowed')),
+}
diff --git a/packages/xpub-aws/src/middeware/upload.js b/packages/xpub-aws/src/middeware/upload.js
index e15c07ff36589eecaf6ded895da7e2a417fe2fa2..73d9a14367f4708d162d916f0fcfeba84fa14fda 100644
--- a/packages/xpub-aws/src/middeware/upload.js
+++ b/packages/xpub-aws/src/middeware/upload.js
@@ -1,6 +1,12 @@
 const multer = require('multer')
 const multerS3 = require('multer-s3')
 const uuid = require('uuid')
+const Joi = require('joi')
+const _ = require('lodash')
+const config = require('config')
+
+const s3Config = _.get(config, 'pubsweet-component-aws-s3')
+const uploadValidations = require(s3Config.validations)
 
 const setupMulter = s3 => {
   const upload = multer({
@@ -22,21 +28,16 @@ const setupMulter = s3 => {
 }
 
 const validateFile = (req, file, cb) => {
-  if (
-    req.body.fileType === 'manuscripts' ||
-    req.body.fileType === 'coverLetter'
-  ) {
-    if (
-      file.mimetype === 'application/pdf' ||
-      file.mimetype === 'application/msword' ||
-      file.mimetype ===
-        'application/vnd.openxmlformats-officedocument.wordprocessingml.document'
-    ) {
-      return cb(null, true)
-    }
-    req.fileValidationError = 'Only Word documents and PDFs are allowed'
+  const fileType = req.body.fileType
+  const mimetype = file.mimetype
+
+  const valid = Joi.validate({ [fileType]: mimetype }, uploadValidations)
+
+  if (valid.error) {
+    req.fileValidationError = valid.error.message
     return cb(null, false)
   }
+
   return cb(null, true)
 }
 
diff --git a/packages/xpub-faraday/app/config/journal/wizard-validators.js b/packages/xpub-faraday/app/config/journal/wizard-validators.js
index 7816aee812bfed54a505ccb95dfb240c3a7a0c14..8504e61f02765ae8e83a9f2f43063801258e2d10 100644
--- a/packages/xpub-faraday/app/config/journal/wizard-validators.js
+++ b/packages/xpub-faraday/app/config/journal/wizard-validators.js
@@ -31,7 +31,8 @@ export const editModeEnabled = value => {
 }
 
 export const requiredFiles = (valus, formValues) => {
-  if (get(formValues, 'files.manuscripts').length === 0) {
+  const manuscripts = get(formValues, 'files.manuscripts')
+  if (manuscripts && manuscripts.length === 0) {
     return 'At least one main manuscript file is needed.'
   }
   return undefined
diff --git a/packages/xpub-faraday/config/default.js b/packages/xpub-faraday/config/default.js
index ac142cf190c5a2949aeb6142ab589fbb04fa27e3..66110156bd835611193475733fbc26f0c23635d1 100644
--- a/packages/xpub-faraday/config/default.js
+++ b/packages/xpub-faraday/config/default.js
@@ -46,5 +46,17 @@ module.exports = {
       'editoria-typescript': '2',
     },
   },
-  publicKeys: ['pubsweet-client', 'authsome', 'validations'],
+  'pubsweet-component-aws-s3': {
+    secretAccessKey: process.env.AWS_SECRET_KEY,
+    accessKeyId: process.env.AWS_ACCESS_KEY,
+    region: process.env.AWS_REGION,
+    sender: process.env.PUBSWEET_EMAIL_SENDER || 'dev@mailinator.com',
+    validations: path.resolve(__dirname, 'upload-validations.js'),
+  },
+  publicKeys: [
+    'pubsweet-client',
+    'authsome',
+    'validations',
+    'pubsweet-component-aws-s3',
+  ],
 }
diff --git a/packages/xpub-faraday/config/upload-validations.js b/packages/xpub-faraday/config/upload-validations.js
new file mode 100644
index 0000000000000000000000000000000000000000..23fa37d7d5a7b0403731429eb910f5f402799000
--- /dev/null
+++ b/packages/xpub-faraday/config/upload-validations.js
@@ -0,0 +1,19 @@
+const Joi = require('joi')
+
+module.exports = {
+  manuscripts: Joi.any()
+    .valid([
+      'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
+      'application/pdf',
+      'application/msword',
+    ])
+    .error(new Error('Only Word documents and PDFs are allowed')),
+  supplementary: Joi.any(),
+  coverLetter: Joi.any()
+    .valid([
+      'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
+      'application/pdf',
+      'application/msword',
+    ])
+    .error(new Error('Only Word documents and PDFs are allowed')),
+}