diff --git a/app/components/Dashboard/Dashboard.jsx b/app/components/Dashboard/Dashboard.jsx
index 61f0ee5d1aab2924909b17aa42da3a3959828acb..14fd32bbad51c42253697c63dc557dfdd4fd77f2 100644
--- a/app/components/Dashboard/Dashboard.jsx
+++ b/app/components/Dashboard/Dashboard.jsx
@@ -15,8 +15,10 @@ export class Dashboard extends React.Component {
     super(props)
 
     this.createBook = this.createBook.bind(this)
-    this.makeTeamsForBook = this.makeTeamsForBook.bind(this)
+    this.createTeamsForBook = this.createTeamsForBook.bind(this)
+    this.findBooksWithNoTeams = this.findBooksWithNoTeams.bind(this)
     this.removeBook = this.removeBook.bind(this)
+    this.removeTeamsForBook = this.removeTeamsForBook.bind(this)
     this.toggleModal = this.toggleModal.bind(this)
 
     this.state = {
@@ -24,67 +26,123 @@ export class Dashboard extends React.Component {
     }
   }
 
-  componentWillMount () {
-    const { getTeams } = this.props.actions
-    getTeams()
-  }
-
   /*
-    If a book has no teams, it is a new one.
-    Make the default teams for it automatically.
+    Get books and teams.
+    Make sure all books have teams associated with them.
   */
-  componentDidUpdate () {
-    // console.log('did')
-    const { books, teams } = this.props
-
-    each(books, book => {
-      const teamsForBook = filter(teams, t => {
-        return t.object.id === book.id
-      })
+  componentWillMount () {
+    const { actions } = this.props
+    const { getCollections, getTeams } = actions
 
-      if (isEmpty(teamsForBook)) this.makeTeamsForBook(book)
-    })
+    getCollections().then(
+      () => getTeams()
+    ).then(
+      () => this.findBooksWithNoTeams()
+    )
   }
 
+  /*
+    Toggle showing 'add book' modal
+  */
   toggleModal () {
     this.setState({
       showModal: !this.state.showModal
     })
   }
 
+  /*
+    Create a new book with the given title.
+    Once you have the new book's db id, make the teams for it as well.
+  */
   createBook (newTitle) {
     const { createCollection } = this.props.actions
 
-    const collection = {
+    const book = {
       title: newTitle || 'Untitled'
     }
 
-    createCollection(collection)
+    createCollection(book).then(res => {
+      const createdBook = res.collection
+      this.createTeamsForBook(createdBook)
+    })
   }
 
-  removeBook (collection) {
+  /*
+    Remove the given book.
+    Also remove all teams associated with it.
+  */
+  removeBook (book) {
     const { deleteCollection } = this.props.actions
-    deleteCollection(collection)
+
+    deleteCollection(book).then(res => {
+      this.removeTeamsForBook(book)
+    })
   }
 
-  makeTeamsForBook (book) {
+  /*
+    Find all books that have no teams associated with them.
+    If one is found, make the teams for it.
+    This will most likely only happen once:
+      # The first time the app is run, on the collection created by
+      # the command 'pubsweet setupdb'.
+  */
+  // TODO -- refactor so that less operations run most of the time
+  findBooksWithNoTeams () {
+    const { books, teams } = this.props
+
+    each(books, book => {
+      const teamsForBook = filter(teams, t => {
+        return t.object.id === book.id
+      })
+
+      if (isEmpty(teamsForBook)) {
+        this.createTeamsForBook(book)
+      }
+    })
+  }
+
+  /*
+    Create the teams found in the config file for the given book.
+    This should run either when a new book is created,
+    or when a book with no teams associated with it is found.
+  */
+  createTeamsForBook (book) {
     const { createTeam } = this.props.actions
 
     each(teamTypes, teamType => {
       // TODO -- Review the idea that the name needs to be plural for some teams
-      // const name = teamType.name === 'Production Editor' ? teamType.name : teamType.name + 's'
-      //
-      // const newTeam = {
-      //   members: [],
-      //   name: name,
-      //   object: {
-      //     id: book.id,
-      //     type: 'collection'
-      //   },
-      //   teamType: teamType
-      // }
-      //
-      // createTeam(newTeam)
+      const name = (teamType.name === 'Production Editor')
+      ? teamType.name
+      : teamType.name + 's'
+
+      const newTeam = {
+        members: [],
+        name: name,
+        object: {
+          id: book.id,
+          type: 'collection'
+        },
+        teamType: teamType
+      }
+
+      createTeam(newTeam)
+    })
+  }
+
+  /*
+    Delete all teams associated with the given book.
+    This should only run after a book is deleted.
+  */
+  removeTeamsForBook (book) {
+    const { actions, teams } = this.props
+    const { deleteTeam } = actions
+
+    const teamsToDelete = filter(teams, team => {
+      return team.object.id === book.id
+    })
+
+    each(teamsToDelete, team => {
+      deleteTeam(team)
     })
   }
 
diff --git a/app/components/utils/config.js b/app/components/utils/config.js
index 66b42058729dd4caaf3489e6d349d0c966c528f6..5da4c9929dd36d3aae31275b44aad93e8e96eeac 100644
--- a/app/components/utils/config.js
+++ b/app/components/utils/config.js
@@ -1,3 +1,4 @@
+/* global CONFIG */
 const teamTypes = CONFIG.authsome.teams
 
 const chapter = {