diff --git a/packages/component-helper-service/src/services/Fragment.js b/packages/component-helper-service/src/services/Fragment.js
index f07543c772ed58d48839fd1ab46357f27eeb3a94..d4be48eec23c41fd8e08e2d5695a34a705454fb1 100644
--- a/packages/component-helper-service/src/services/Fragment.js
+++ b/packages/component-helper-service/src/services/Fragment.js
@@ -21,25 +21,6 @@ class Fragment {
       heRecommendation,
     }
   }
-
-  async addAuthor({ user, isSubmitting, isCorresponding }) {
-    const { fragment } = this
-    fragment.authors = fragment.authors || []
-    const author = {
-      id: user.id,
-      firstName: user.firstName || '',
-      lastName: user.lastName || '',
-      email: user.email,
-      title: user.title || '',
-      affiliation: user.affiliation || '',
-      isSubmitting,
-      isCorresponding,
-    }
-    fragment.authors.push(author)
-    await fragment.save()
-
-    return author
-  }
 }
 
 module.exports = Fragment
diff --git a/packages/component-user-manager/src/routes/fragmentsUsers/delete.js b/packages/component-user-manager/src/routes/fragmentsUsers/delete.js
index 907b689dea2cbd211b821187877ed0fd4c090b5d..86073f5d5d467b23878dc792c088a86877c28e88 100644
--- a/packages/component-user-manager/src/routes/fragmentsUsers/delete.js
+++ b/packages/component-user-manager/src/routes/fragmentsUsers/delete.js
@@ -10,7 +10,6 @@ module.exports = models => async (req, res) => {
       return res.status(400).json({
         error: `Fragment ${fragmentId} does not match collection ${collectionId}`,
       })
-    const fragment = await models.Fragment.find(fragmentId)
     const teamHelper = new Team({ TeamModel: models.Team, fragmentId })
 
     const team = await teamHelper.getTeam({
@@ -18,8 +17,6 @@ module.exports = models => async (req, res) => {
       objectType: 'fragment',
     })
 
-    fragment.authors = fragment.authors.filter(author => author.id !== userId)
-    await fragment.save()
     await teamHelper.removeTeamMember({ teamId: team.id, userId })
     user.teams = user.teams.filter(userTeamId => team.id !== userTeamId)
     delete user.passwordResetToken
diff --git a/packages/component-user-manager/src/routes/fragmentsUsers/post.js b/packages/component-user-manager/src/routes/fragmentsUsers/post.js
index 9a752bfb7f2838bb4f3855dad6af35eaf59d8e6a..e298dbebcb66ceb1020d6f8e6b53b733a930f115 100644
--- a/packages/component-user-manager/src/routes/fragmentsUsers/post.js
+++ b/packages/component-user-manager/src/routes/fragmentsUsers/post.js
@@ -1,11 +1,16 @@
+const { pick } = require('lodash')
 const mailService = require('pubsweet-component-mail-service')
 
-const {
-  User,
-  Team,
-  services,
-  Fragment,
-} = require('pubsweet-component-helper-service')
+const { User, Team, services } = require('pubsweet-component-helper-service')
+
+const authorKeys = [
+  'id',
+  'email',
+  'title',
+  'lastName',
+  'firstName',
+  'affiliation',
+]
 
 module.exports = models => async (req, res) => {
   const { email, role, isSubmitting, isCorresponding } = req.body
@@ -36,7 +41,6 @@ module.exports = models => async (req, res) => {
     })
   }
   const baseUrl = services.getBaseUrl(req)
-  const fragmentHelper = new Fragment({ fragment })
   const UserModel = models.User
   const teamHelper = new Team({ TeamModel: models.Team, fragmentId })
 
@@ -56,13 +60,11 @@ module.exports = models => async (req, res) => {
         }
       }
 
-      const fragmentAuthor = await fragmentHelper.addAuthor({
-        user,
+      return res.status(200).json({
+        ...pick(user, authorKeys),
         isSubmitting,
         isCorresponding,
       })
-
-      return res.status(200).json(fragmentAuthor)
     }
     return res.status(400).json({
       error: `${role} is not defined`,
@@ -97,12 +99,6 @@ module.exports = models => async (req, res) => {
         return res.status(200).json(newUser)
       }
 
-      const fragmentAuthor = await fragmentHelper.addAuthor({
-        user: newUser,
-        isSubmitting,
-        isCorresponding,
-      })
-
       mailService.sendSimpleEmail({
         toEmail: newUser.email,
         user: newUser,
@@ -110,7 +106,11 @@ module.exports = models => async (req, res) => {
         dashboardUrl: baseUrl,
       })
 
-      return res.status(200).json(fragmentAuthor)
+      return res.status(200).json({
+        ...pick(newUser, authorKeys),
+        isSubmitting,
+        isCorresponding,
+      })
     }
     return res.status(e.status).json({
       error: `Something went wrong: ${e.name}`,
diff --git a/packages/components-faraday/src/components/AuthorList/AuthorAdder.js b/packages/components-faraday/src/components/AuthorList/AuthorAdder.js
index 8ebff1e8601b712f666530dd2a79a9ea8dace0c8..82f7305564a4aae1b3cd23b14e01421bfa7f7e4e 100644
--- a/packages/components-faraday/src/components/AuthorList/AuthorAdder.js
+++ b/packages/components-faraday/src/components/AuthorList/AuthorAdder.js
@@ -1,10 +1,10 @@
 import React from 'react'
 import { get } from 'lodash'
 import { connect } from 'react-redux'
-import { reduxForm } from 'redux-form'
 import styled from 'styled-components'
 import { Button, th } from '@pubsweet/ui'
 import { selectCurrentUser } from 'xpub-selectors'
+import { reduxForm, change as changeForm } from 'redux-form'
 import { compose, withProps, setDisplayName } from 'recompose'
 
 import { emailValidator } from '../utils'
@@ -76,6 +76,7 @@ export default compose(
       currentUser: selectCurrentUser(state),
     }),
     {
+      changeForm,
       authorSuccess,
       authorFailure,
     },
@@ -104,23 +105,27 @@ export default compose(
     onSubmit: (
       values,
       dispatch,
-      { authors = [], addAuthor, setEditMode, setFormAuthors, reset, match },
+      {
+        reset,
+        match,
+        changeForm,
+        addAuthor,
+        setEditMode,
+        setFormAuthors,
+        authors = [],
+      },
     ) => {
       const collectionId = get(match, 'params.project')
       const fragmentId = get(match, 'params.version')
       const isFirstAuthor = authors.length === 0
-
-      addAuthor(
-        {
-          ...values,
-          isSubmitting: isFirstAuthor,
-          isCorresponding: isFirstAuthor,
-        },
-        collectionId,
-        fragmentId,
-      ).then(authors => {
+      const newAuthor = {
+        ...values,
+        isSubmitting: isFirstAuthor,
+        isCorresponding: isFirstAuthor,
+      }
+      addAuthor(newAuthor, collectionId, fragmentId).then(author => {
+        changeForm('wizard', 'authors', [...authors, author])
         setEditMode(false)()
-        setFormAuthors(authors)
         reset()
       })
     },
diff --git a/packages/components-faraday/src/components/AuthorList/AuthorList.js b/packages/components-faraday/src/components/AuthorList/AuthorList.js
index fde8948620a2f2898c1a896ee4618a3c1c1bb727..5045a061586ab5b43411370fbb0a0dfdf6ad2848 100644
--- a/packages/components-faraday/src/components/AuthorList/AuthorList.js
+++ b/packages/components-faraday/src/components/AuthorList/AuthorList.js
@@ -102,11 +102,8 @@ export default compose(
   })),
   withHandlers({
     setFormAuthors: ({ setAuthors, changeForm }) => (authors = []) => {
-      const mappedAuthors = authors
-        .filter(utils.filterEmptyAuthors)
-        .map(utils.getAuthorProperties)
-      setAuthors(mappedAuthors)
-      changeForm('wizard', 'authors', mappedAuthors)
+      setAuthors(authors)
+      changeForm('wizard', 'authors', authors)
     },
   }),
   withHandlers({
@@ -139,7 +136,11 @@ export default compose(
         setFormAuthors(newAuthors)
       })
     },
-    setAsCorresponding: ({ authors, setFormAuthors }) => id => () => {
+    setAsCorresponding: ({
+      authors,
+      setAuthors,
+      setFormAuthors,
+    }) => id => () => {
       const newAuthors = authors.map(utils.setCorresponding(id))
       setFormAuthors(newAuthors)
     },
diff --git a/packages/components-faraday/src/components/AuthorList/utils.js b/packages/components-faraday/src/components/AuthorList/utils.js
index 2127775a2d2d30aa2907b1e4d941b5357a2b21e6..ea68ddb2b232bf3492a932d064bf99812d78329e 100644
--- a/packages/components-faraday/src/components/AuthorList/utils.js
+++ b/packages/components-faraday/src/components/AuthorList/utils.js
@@ -1,5 +1,3 @@
-import { pick, isEmpty } from 'lodash'
-
 export const authorKeys = [
   'id',
   'email',
@@ -10,10 +8,6 @@ export const authorKeys = [
   'isCorresponding',
 ]
 
-export const filterEmptyAuthors = author => !isEmpty(author)
-
-export const getAuthorProperties = author => pick(author, authorKeys)
-
 export const setCorresponding = id => author =>
   author.id === id
     ? {
diff --git a/packages/components-faraday/src/redux/authors.js b/packages/components-faraday/src/redux/authors.js
index d50c86c9d7ef458b66bfcec25554b50ba2989a14..324cc26adabc74a3ecc2c4d38111903757c27ab3 100644
--- a/packages/components-faraday/src/redux/authors.js
+++ b/packages/components-faraday/src/redux/authors.js
@@ -31,21 +31,19 @@ export const addAuthor = (author, collectionId, fragmentId) => dispatch => {
     email: author.email,
     role: 'author',
     ...author,
-  }).then(
-    () =>
-      getAuthors(collectionId, fragmentId).then(data => {
-        dispatch(authorSuccess())
-        return data
-      }, handleError(authorFailure, dispatch)),
-    handleError(authorFailure, dispatch),
-  )
+  }).then(author => {
+    dispatch(authorSuccess())
+    return author
+  }, handleError(authorFailure, dispatch))
 }
 
 export const deleteAuthor = (collectionId, fragmentId, userId) => dispatch => {
   dispatch(authorRequest())
   return remove(
     `/collections/${collectionId}/fragments/${fragmentId}/users/${userId}`,
-  ).catch(handleError(authorFailure, dispatch))
+  )
+    .then(() => dispatch(authorSuccess()))
+    .catch(handleError(authorFailure, dispatch))
 }
 
 // selectors