diff --git a/packages/component-review/src/components/Decision.js b/packages/component-review/src/components/Decision.js
index f9bd6dc45d3784eaf72b6ed4ac0fb1c649c4beb5..e106241058cc50e4ee11f2b464ef4d97cbe36455 100644
--- a/packages/component-review/src/components/Decision.js
+++ b/packages/component-review/src/components/Decision.js
@@ -6,37 +6,41 @@ import { withJournal } from 'xpub-journal'
 import { required } from '../lib/validators'
 import classes from './Decision.local.scss'
 
-const Decision = ({journal, decision, valid, handleSubmit, uploadFile}) => (
-  <form onSubmit={handleSubmit}>
-    <div className={classes.section}>
-      <ValidatedField
-        name="note"
-        validate={[required]}
-        component={input =>
-          <NoteEditor
-            placeholder="Enter your decision…"
-            title="Decision"
-            {...input}/>
-        }/>
-    </div>
+const Decision = ({journal, decision, valid, handleSubmit, uploadFile}) => {
+  const NoteInput = input =>
+    <NoteEditor
+      placeholder="Enter your decision…"
+      title="Decision"
+      {...input}/>
 
-    <div className={classes.section}>
-      <ValidatedField
-        name="recommendation"
-        validate={[required]}
-        component={input =>
-          <RadioGroup
-            inline
-            options={journal.recommendations}
-            {...input}/>
-        }/>
-    </div>
+  const RecommendationInput = input =>
+    <RadioGroup
+      inline
+      options={journal.recommendations}
+      {...input}/>
 
-    <div>
-      {/*<Button type="button" onClick={handleSave}>Save</Button>*/}
-      <Button type="submit" primary>Submit</Button>
-    </div>
-  </form>
-)
+  return (
+    <form onSubmit={handleSubmit}>
+      <div className={classes.section}>
+        <ValidatedField
+          name="note"
+          validate={[required]}
+          component={NoteInput}/>
+      </div>
+
+      <div className={classes.section}>
+        <ValidatedField
+          name="recommendation"
+          validate={[required]}
+          component={RecommendationInput}/>
+      </div>
+
+      <div>
+        {/*<Button type="button" onClick={handleSave}>Save</Button>*/}
+        <Button type="submit" primary>Submit</Button>
+      </div>
+    </form>
+  )
+}
 
 export default withJournal(Decision)
diff --git a/packages/component-review/src/components/Review.js b/packages/component-review/src/components/Review.js
index fa802d4e21d5601a85630a9186fbd39167c8f42a..d356bcbf9e0a66eb7b492bc2c52a491fe37914a0 100644
--- a/packages/component-review/src/components/Review.js
+++ b/packages/component-review/src/components/Review.js
@@ -6,37 +6,41 @@ import { withJournal } from 'xpub-journal'
 import { required } from '../lib/validators'
 import classes from './Review.local.scss'
 
-const Review = ({ journal, review, valid, handleSubmit, uploadFile }) => (
-  <form onSubmit={handleSubmit}>
-    <div className={classes.section}>
-      <ValidatedField
-        name="note"
-        validate={[required]}
-        component={input =>
-          <NoteEditor
-            placeholder="Enter your review…"
-            title="Review"
-            {...input}/>
-        }/>
-    </div>
+const Review = ({ journal, review, valid, handleSubmit, uploadFile }) => {
+  const NoteInput = input =>
+    <NoteEditor
+      placeholder="Enter your review…"
+      title="Review"
+      {...input}/>
 
-    <div className={classes.section}>
-      <ValidatedField
-        name="recommendation"
-        validate={[required]}
-        component={input =>
-          <RadioGroup
-            inline
-            options={journal.recommendations}
-            {...input}/>
-        }/>
-    </div>
+  const RecommendationInput = input =>
+    <RadioGroup
+      inline
+      options={journal.recommendations}
+      {...input}/>
 
-    <div>
-      {/*<Button type="button" onClick={handleSave}>Save</Button>*/}
-      <Button type="submit" primary>Submit</Button>
-    </div>
-  </form>
-)
+  return (
+    <form onSubmit={handleSubmit}>
+      <div className={classes.section}>
+        <ValidatedField
+          name="note"
+          validate={[required]}
+          component={NoteInput}/>
+      </div>
+
+      <div className={classes.section}>
+        <ValidatedField
+          name="recommendation"
+          validate={[required]}
+          component={RecommendationInput}/>
+      </div>
+
+      <div>
+        {/*<Button type="button" onClick={handleSave}>Save</Button>*/}
+        <Button type="submit" primary>Submit</Button>
+      </div>
+    </form>
+  )
+}
 
 export default withJournal(Review)
diff --git a/packages/component-submit/src/components/Declarations.js b/packages/component-submit/src/components/Declarations.js
index 6ab6d3f2e099eb4b0d8ffaa606064f3526dac389..be1899a95e75cace21dc6bc1d730dd73546bbf93 100644
--- a/packages/component-submit/src/components/Declarations.js
+++ b/packages/component-submit/src/components/Declarations.js
@@ -3,30 +3,34 @@ import classnames from 'classnames'
 import { FormSection } from 'redux-form'
 import { ValidatedField, YesOrNo } from 'xpub-ui'
 import { withJournal } from 'xpub-journal'
-import { required, minChars } from '../lib/validators'
+import { required } from '../lib/validators'
 import classes from './Declarations.local.scss'
 
-const Declarations = ({ journal }) => (
-  <FormSection name="declarations">
-    {journal.declarations.questions.map(question => (
-      <div
-        key={question.id}
-        id={`declarations.${question.id}`}
-        className={classnames(classes.section, classes.spread)}>
-        <div className={classes.legend}>
-          { question.legend }
-        </div>
+const Declarations = ({ journal }) => {
+  const DeclarationInput = input => (
+    <YesOrNo inline={true} {...input}/>
+  )
+
+  return (
+    <FormSection name="declarations">
+      {journal.declarations.questions.map(question => (
+        <div
+          key={question.id}
+          id={`declarations.${question.id}`}
+          className={classnames(classes.section, classes.spread)}>
+          <div className={classes.legend}>
+            {question.legend}
+          </div>
 
-        <ValidatedField
-          name={question.id}
-          required
-          validate={[required]}
-          component={input =>
-            <YesOrNo inline={true} {...input}/>
-          }/>
-      </div>
-    ))}
-  </FormSection>
-)
+          <ValidatedField
+            name={question.id}
+            required
+            validate={[required]}
+            component={DeclarationInput}/>
+        </div>
+      ))}
+    </FormSection>
+  )
+}
 
 export default withJournal(Declarations)
diff --git a/packages/component-submit/src/components/Metadata.js b/packages/component-submit/src/components/Metadata.js
index d02f3752157ff35f941e8a5d3ba0ed5d40673149..0d36ebcbc72d9c35d38338d410d08ab9494724e7 100644
--- a/packages/component-submit/src/components/Metadata.js
+++ b/packages/component-submit/src/components/Metadata.js
@@ -12,94 +12,102 @@ const minChars100 = minChars(100)
 const maxChars500 = maxChars(500)
 const maxChars5000 = maxChars(5000)
 
-const Metadata = ({ journal }) => (
-  <FormSection name="metadata">
-    <div className={classes.section} id="metadata.title">
-      <ValidatedField
-        name="title"
-        required
-        validate={[minChars20, maxChars500]}
-        component={input =>
-          <TitleEditor
-            placeholder="Enter the title…"
-            title="Title"
-            {...input}/>
-        }/>
-    </div>
-
-    <div className={classes.section} id="metadata.abstract">
-      <ValidatedField
-        name="abstract"
-        required
-        validate={[minChars100, maxChars5000]}
-        component={input =>
-          <AbstractEditor
-            title="Abstract"
-            placeholder="Enter the abstract…"
-            {...input}/>
-        }/>
-    </div>
-
-    <div className={classes.section} id="metadata.authors">
-      <div className={classes.label}>Authors</div>
-
-      <ValidatedField
-        name="authors"
-        required
-        format={join()}
-        parse={split()}
-        validate={[minSize1]}
-        component={input =>
-          <TextField
-            placeholder="Enter author names…"
-            {...input}/>
-        }/>
-    </div>
-
-    <div className={classes.section} id="metadata.keywords">
-      <div className={classes.label}>Keywords</div>
-
-      <ValidatedField
-        name="keywords"
-        required
-        format={join()}
-        parse={split()}
-        validate={[minSize1]}
-        component={input =>
-          <TextField
-            placeholder="Enter keywords…"
-            {...input}/>
-        }/>
-    </div>
-
-    <div className={classes.section} id="metadata.articleType">
-      <div className={classes.label}>Type of article</div>
-
-      <ValidatedField
-        name="articleType"
-        required
-        validate={[required]}
-        component={input =>
-          <Menu
-            options={journal.articleTypes}
-            {...input}/>
-        }/>
-    </div>
-
-    <div className={classes.section} id="metadata.articleSection">
-      <div className={classes.label}>Section</div>
-
-      <ValidatedField
-        name="articleSection"
-        required
-        validate={[required]}
-        component={input =>
-          <CheckboxGroup
-            options={journal.articleSections}
-            {...input}/>
-        }/>
-    </div>
-  </FormSection>
-)
+const Metadata = ({ journal }) => {
+  const TitleInput = input =>
+    <TitleEditor
+      placeholder="Enter the title…"
+      title="Title"
+      {...input}/>
+
+  const AbstractInput = input =>
+    <AbstractEditor
+      title="Abstract"
+      placeholder="Enter the abstract…"
+      {...input}/>
+
+  const AuthorsInput = input =>
+    <TextField
+      placeholder="Enter author names…"
+      {...input}/>
+
+  const KeywordsInput = input =>
+    <TextField
+      placeholder="Enter keywords…"
+      {...input}/>
+
+  const ArticleTypeInput = input =>
+    <Menu
+      options={journal.articleTypes}
+      {...input}/>
+
+  const ArticleSectionInput = input =>
+    <CheckboxGroup
+      options={journal.articleSections}
+      {...input}/>
+
+  return (
+    <FormSection name="metadata">
+      <div className={classes.section} id="metadata.title">
+        <ValidatedField
+          name="title"
+          required
+          validate={[minChars20, maxChars500]}
+          component={TitleInput}/>
+      </div>
+
+      <div className={classes.section} id="metadata.abstract">
+        <ValidatedField
+          name="abstract"
+          required
+          validate={[minChars100, maxChars5000]}
+          component={AbstractInput}/>
+      </div>
+
+      <div className={classes.section} id="metadata.authors">
+        <div className={classes.label}>Authors</div>
+
+        <ValidatedField
+          name="authors"
+          required
+          format={join()}
+          parse={split()}
+          validate={[minSize1]}
+          component={AuthorsInput}/>
+      </div>
+
+      <div className={classes.section} id="metadata.keywords">
+        <div className={classes.label}>Keywords</div>
+
+        <ValidatedField
+          name="keywords"
+          required
+          format={join()}
+          parse={split()}
+          validate={[minSize1]}
+          component={KeywordsInput}/>
+      </div>
+
+      <div className={classes.section} id="metadata.articleType">
+        <div className={classes.label}>Type of article</div>
+
+        <ValidatedField
+          name="articleType"
+          required
+          validate={[required]}
+          component={ArticleTypeInput}/>
+      </div>
+
+      <div className={classes.section} id="metadata.articleSection">
+        <div className={classes.label}>Section</div>
+
+        <ValidatedField
+          name="articleSection"
+          required
+          validate={[required]}
+          component={ArticleSectionInput}/>
+      </div>
+    </FormSection>
+  )
+}
 
 export default withJournal(Metadata)
diff --git a/packages/component-submit/src/components/Notes.js b/packages/component-submit/src/components/Notes.js
index 03ee89be4c82f34d4f2f2a894d447da1b7d8c57f..37f9174e1439b5986b9e70cf4548f189d65a1c33 100644
--- a/packages/component-submit/src/components/Notes.js
+++ b/packages/component-submit/src/components/Notes.js
@@ -5,31 +5,35 @@ import { ValidatedField } from 'xpub-ui'
 import { required } from '../lib/validators'
 import classes from './Metadata.local.scss'
 
-const Notes = () => (
-  <FormSection name="notes">
-    <div className={classes.section} id="notes.fundingAcknowledgement">
-      <ValidatedField
-        name="fundingAcknowledgement"
-        validate={[required]}
-        component={input =>
-          <NoteEditor
-            placeholder="Enter an acknowledgment…"
-            title="Funding body acknowledgement"
-            {...input}/>
-        }/>
-    </div>
+const Notes = () => {
+  const FundingInput = input =>
+    <NoteEditor
+      placeholder="Enter an acknowledgment…"
+      title="Funding body acknowledgement"
+      {...input}/>
 
-    <div className={classes.section} id="notes.specialInstructions">
-      <ValidatedField
-        name="specialInstructions"
-        component={input =>
-          <NoteEditor
-            placeholder="Enter instructions for the editor…"
-            title="Special instructions (confidential)"
-            {...input}/>
-        }/>
-    </div>
-  </FormSection>
-)
+  const InstructionsInput = input =>
+    <NoteEditor
+      placeholder="Enter instructions for the editor…"
+      title="Special instructions (confidential)"
+      {...input}/>
+
+  return (
+    <FormSection name="notes">
+      <div className={classes.section} id="notes.fundingAcknowledgement">
+        <ValidatedField
+          name="fundingAcknowledgement"
+          validate={[required]}
+          component={FundingInput}/>
+      </div>
+
+      <div className={classes.section} id="notes.specialInstructions">
+        <ValidatedField
+          name="specialInstructions"
+          component={InstructionsInput}/>
+      </div>
+    </FormSection>
+  )
+}
 
 export default Notes
diff --git a/packages/component-submit/src/components/Suggestions.js b/packages/component-submit/src/components/Suggestions.js
index dbde9c2f6ea39e0cef53bba6fceb2e419664f06d..0e6886c72879c187bedbb6f794148f83612d58b6 100644
--- a/packages/component-submit/src/components/Suggestions.js
+++ b/packages/component-submit/src/components/Suggestions.js
@@ -7,80 +7,86 @@ import classes from './Suggestions.local.scss'
 const joinComma = join(',')
 const splitComma = split(',')
 
-const Suggestions = () => (
-  <FormSection name="suggestions">
-    <div className={classes.section} id="suggestions.reviewers">
-      <FormSection name="reviewers">
-        <div className={classes.legend}>
-          Suggested or opposed reviewers
-        </div>
-
-        <div className={classes.inline}>
-          <div className={classes.legend}>Suggested reviewers</div>
-
-          <ValidatedField
-            name="suggested"
-            format={joinComma}
-            parse={splitComma}
-            component={input =>
-              <TextField
-                placeholder="Add reviewer names"
-                {...input}/>
-            }/>
-        </div>
-
-        <div className={classes.inline}>
-          <div className={classes.legend}>Opposed reviewers</div>
-
-          <ValidatedField
-            name="opposed"
-            format={joinComma}
-            parse={splitComma}
-            component={input =>
-              <TextField
-                placeholder="Add reviewer names"
-                {...input}/>
-            }/>
-        </div>
-      </FormSection>
-    </div>
-
-    <div className={classes.section} id="suggestions.editors">
-      <FormSection name="editors">
-        <div className={classes.legend}>
-          Suggested or opposed editors
-        </div>
-
-        <div className={classes.inline}>
-          <div className={classes.legend}>Suggested editors</div>
-
-          <ValidatedField
-            name="suggested"
-            format={joinComma}
-            parse={splitComma}
-            component={input =>
-              <TextField
-                placeholder="Add editor names"
-                {...input}/>
-            }/>
-        </div>
-
-        <div className={classes.inline}>
-          <div className={classes.legend}>Opposed editors</div>
-
-          <ValidatedField
-            name="opposed"
-            format={joinComma}
-            parse={splitComma}
-            component={input =>
-              <TextField
-                placeholder="Add editor names"
-                {...input}/>
-            }/>
-        </div>
-      </FormSection>
-    </div>
-  </FormSection>
-)
+const Suggestions = () => {
+  const SuggestedReviewerInput = input =>
+    <TextField
+      placeholder="Add reviewer names"
+      {...input}/>
+
+  const OpposedReviewerInput = input =>
+    <TextField
+      placeholder="Add reviewer names"
+      {...input}/>
+
+  const SuggestedEditorInput = input =>
+    <TextField
+      placeholder="Add editor names"
+      {...input}/>
+
+  const OpposedEditorInput = input =>
+    <TextField
+      placeholder="Add editor names"
+      {...input}/>
+
+  return (
+    <FormSection name="suggestions">
+      <div className={classes.section} id="suggestions.reviewers">
+        <FormSection name="reviewers">
+          <div className={classes.legend}>
+            Suggested or opposed reviewers
+          </div>
+
+          <div className={classes.inline}>
+            <div className={classes.legend}>Suggested reviewers</div>
+
+            <ValidatedField
+              name="suggested"
+              format={joinComma}
+              parse={splitComma}
+              component={SuggestedReviewerInput}/>
+          </div>
+
+          <div className={classes.inline}>
+            <div className={classes.legend}>Opposed reviewers</div>
+
+            <ValidatedField
+              name="opposed"
+              format={joinComma}
+              parse={splitComma}
+              component={OpposedReviewerInput}/>
+          </div>
+        </FormSection>
+      </div>
+
+      <div className={classes.section} id="suggestions.editors">
+        <FormSection name="editors">
+          <div className={classes.legend}>
+            Suggested or opposed editors
+          </div>
+
+          <div className={classes.inline}>
+            <div className={classes.legend}>Suggested editors</div>
+
+            <ValidatedField
+              name="suggested"
+              format={joinComma}
+              parse={splitComma}
+              component={SuggestedEditorInput}/>
+          </div>
+
+          <div className={classes.inline}>
+            <div className={classes.legend}>Opposed editors</div>
+
+            <ValidatedField
+              name="opposed"
+              format={joinComma}
+              parse={splitComma}
+              component={OpposedEditorInput}/>
+          </div>
+        </FormSection>
+      </div>
+    </FormSection>
+  )
+}
 
 export default Suggestions
diff --git a/packages/component-submit/src/components/SupplementaryFiles.js b/packages/component-submit/src/components/SupplementaryFiles.js
index c0e76bab5e432a8461a0a9ce0a6637e266e1bd02..95875b1194ae14bed9cbeceb3746e6ac489dbca1 100644
--- a/packages/component-submit/src/components/SupplementaryFiles.js
+++ b/packages/component-submit/src/components/SupplementaryFiles.js
@@ -3,22 +3,26 @@ import { FormSection } from 'redux-form'
 import { Files, ValidatedField } from 'xpub-ui'
 import classes from './Metadata.local.scss'
 
-const SupplementaryFiles = ({ uploadFile }) => (
-  <FormSection name="files">
-    <div className={classes.section} id="files.supplementary">
-      <div
-        className={classes.label}
-        htmlFor="supplementary">Upload supplementary materials</div>
+const SupplementaryFiles = ({ uploadFile }) => {
+  const FileInput = input =>
+    <Files
+      uploadFile={uploadFile}
+      {...input}/>
 
-      <ValidatedField
-        name="supplementary"
-        component={input =>
-          <Files
-            uploadFile={uploadFile}
-            {...input}/>
-        }/>
-    </div>
-  </FormSection>
-)
+  return (
+    <FormSection name="files">
+      <div className={classes.section} id="files.supplementary">
+        <div
+          className={classes.label}
+          htmlFor="supplementary">Upload supplementary materials
+        </div>
+
+        <ValidatedField
+          name="supplementary"
+          component={FileInput}/>
+      </div>
+    </FormSection>
+  )
+}
 
 export default SupplementaryFiles