diff --git a/app/components/component-xpub-submit/src/components/SubmitPage.js b/app/components/component-xpub-submit/src/components/SubmitPage.js
index d8ddaa6fb295206a2d52351fe02dad4d610189ac..9f64e1796b5feedabe18687a3a6b24738d446754 100644
--- a/app/components/component-xpub-submit/src/components/SubmitPage.js
+++ b/app/components/component-xpub-submit/src/components/SubmitPage.js
@@ -90,6 +90,7 @@ const fragmentFields = `
     email
     affiliation
   }
+  submission
 `
 
 const query = gql`
@@ -237,7 +238,10 @@ export default compose(
   })),
   withFormik({
     initialValues: {},
-    mapPropsToValues: ({ manuscript }) => manuscript,
+    mapPropsToValues: ({ manuscript }) =>
+      Object.assign({}, manuscript, {
+        submission: JSON.parse(manuscript.submission),
+      }),
     displayName: 'submit',
     handleSubmit: (
       props,
diff --git a/server/manuscript/src/index.js b/server/model-manuscript/src/index.js
similarity index 100%
rename from server/manuscript/src/index.js
rename to server/model-manuscript/src/index.js
diff --git a/server/manuscript/src/manuscript.js b/server/model-manuscript/src/manuscript.js
similarity index 99%
rename from server/manuscript/src/manuscript.js
rename to server/model-manuscript/src/manuscript.js
index 682b1f86276576e6dbb010de034ba1cb60c471c6..dfba3ae900b46e57319b69c917af3e270a124529 100644
--- a/server/manuscript/src/manuscript.js
+++ b/server/model-manuscript/src/manuscript.js
@@ -248,10 +248,12 @@ class Manuscript extends BaseModel {
             keywords: { type: ['string', 'null'] },
           },
         },
+        submission: {},
       },
     }
   }
 
+  // TODO: Do this on the DB level with cascading deletes
   async $beforeDelete() {
     // const Review = require('../../review/src/review')
     const { Review, Team, File } = require('@pubsweet/models')
diff --git a/server/manuscript/src/migrations/1537450834-manuscript.sql b/server/model-manuscript/src/migrations/1537450834-manuscript.sql
similarity index 93%
rename from server/manuscript/src/migrations/1537450834-manuscript.sql
rename to server/model-manuscript/src/migrations/1537450834-manuscript.sql
index 9c4ec1ede1e66e29c5677f046efdd72adb508e41..1fe9713efa673e157a3e6118e33280972c377f46 100644
--- a/server/manuscript/src/migrations/1537450834-manuscript.sql
+++ b/server/model-manuscript/src/migrations/1537450834-manuscript.sql
@@ -8,5 +8,6 @@ CREATE TABLE manuscripts (
     authors JSONB,
     suggestions JSONB,
     meta JSONB,
+    submission JSONB,
     type TEXT NOT NULL
 );
\ No newline at end of file
diff --git a/server/manuscript/src/resolvers.js b/server/model-manuscript/src/resolvers.js
similarity index 89%
rename from server/manuscript/src/resolvers.js
rename to server/model-manuscript/src/resolvers.js
index 003b0a8e04225dcaa719e4497d62f763a99df62f..2d1e49a89a86f29c9ce3a624f50cdbd6bbb0fca1 100644
--- a/server/manuscript/src/resolvers.js
+++ b/server/model-manuscript/src/resolvers.js
@@ -7,6 +7,13 @@ const resolvers = {
       const { Team } = require('@pubsweet/models')
 
       const { meta, files } = vars.input
+
+      // We want the submission information to be stored as JSONB
+      // but we want the input to come in as a JSON string
+      const submission = vars.input.submission
+        ? JSON.parse(vars.input.submission)
+        : {}
+
       const emptyManuscript = {
         meta: Object.assign(meta, {
           notes: [
@@ -21,7 +28,9 @@ const resolvers = {
           ],
         }),
         status: 'new',
+        submission,
       }
+
       // eslint-disable-next-line
       const manuscript = await new ctx.connectors.Manuscript.model(
         emptyManuscript,
@@ -173,6 +182,14 @@ const resolvers = {
       return form
     },
   },
+  // We want submission into to come out as a stringified JSON, so that we don't have to
+  // change our queries if the submission form changes. We still want to store it as JSONB
+  // so that we can easily search through the information within.
+  Manuscript: {
+    submission(parent, args, ctx) {
+      return JSON.stringify(parent.submission)
+    },
+  },
 }
 
 module.exports = resolvers
diff --git a/server/manuscript/src/typeDefs.js b/server/model-manuscript/src/typeDefs.js
similarity index 97%
rename from server/manuscript/src/typeDefs.js
rename to server/model-manuscript/src/typeDefs.js
index 26c8cbdcc541137d4ecc6d24ab60db4b710df3ac..878abbd5965b741d554fd229083a833d5b96b1a6 100644
--- a/server/manuscript/src/typeDefs.js
+++ b/server/model-manuscript/src/typeDefs.js
@@ -27,6 +27,7 @@ const typeDefs = `
     suggestions: Suggestions
     authors: [Author]
     meta: ManuscriptMeta
+    submission: String
   }
 
   type ManuscriptVersion implements Object {
@@ -42,11 +43,13 @@ const typeDefs = `
     suggestions: Suggestions
     authors: [Author]
     meta: ManuscriptMeta
+    submission: String
   }
 
   input ManuscriptInput {
     files: [FileInput]
     meta: ManuscriptMetaInput
+    submission: String
   }
 
   input ManuscriptMetaInput {