diff --git a/packages/components/packages/UsersManager/src/User.jsx b/packages/components/packages/UsersManager/src/User.jsx
index e3cd2c53d15e38fd63212f9a0fdc15d0ecb1c821..1a85cb9f76e7d719625eb7f0f66fde63a73e7050 100644
--- a/packages/components/packages/UsersManager/src/User.jsx
+++ b/packages/components/packages/UsersManager/src/User.jsx
@@ -16,24 +16,27 @@ class User extends React.Component {
     )
   }
 
-  processTeamMembership(teamType) {
-    const { user, createTeam, updateTeam, teams, configuredTeams } = this.props
-
-    const existingTeam = teams.find(
+  findExistingTeam(teamType) {
+    const { teams } = this.props
+    return teams.find(
       team => team.teamType === teamType && team.object === undefined,
     )
+  }
 
+  addMember(teamType) {
+    const { user, createTeam, updateTeam, configuredTeams } = this.props
+    const existingTeam = this.findExistingTeam(teamType)
     if (existingTeam) {
-      // console.log('found team', existingTeam, 'would add user', user)
-      existingTeam.members.push(user.id)
-      updateTeam(existingTeam)
+      if (!existingTeam.members.includes(user.id)) {
+        // console.log('found team', existingTeam, 'would add user', user)
+        existingTeam.members.push(user.id)
+        updateTeam(existingTeam)
+      } else {
+        // console.log('user already member of', existingTeam)
+      }
     } else {
-      // console.log(
-      //   'theme not found',
-      //   existingTeam,
-      //   'would create team for',
-      //   user,
-      // )
+      // console.log('team not found', teamType, 'would create team with', user)
+
       createTeam({
         teamType,
         name: configuredTeams[teamType].name,
@@ -42,25 +45,47 @@ class User extends React.Component {
     }
   }
 
+  removeMember(teamType) {
+    const { user, updateTeam } = this.props
+    const existingTeam = this.findExistingTeam(teamType)
+    if (!existingTeam) {
+      return
+    }
+
+    if (existingTeam) {
+      if (existingTeam.members.includes(user.id)) {
+        // console.log('found team', existingTeam, 'would remove user', user)
+        existingTeam.members = existingTeam.members.filter(
+          member => member !== user.id,
+        )
+        updateTeam(existingTeam)
+      }
+    }
+  }
+
   onTeamChange(teamTypes) {
-    teamTypes.each(teamType => this.processTeamMembership(teamType))
+    const { configuredTeams } = this.props
+
+    // Idempotently add member
+    teamTypes.forEach(teamType => this.addMember(teamType))
+
+    // Idempotently remove member
+    const teamsDifference = Object.keys(configuredTeams).filter(
+      teamType => !teamTypes.includes(teamType),
+    )
+    teamsDifference.forEach(teamType => this.removeMember(teamType))
   }
 
   render() {
     const { user, teams, configuredTeams } = this.props
-    const activeTeams = Object.entries(configuredTeams).find(
-      ([teamType, _]) => {
-        const teamsOfType = teams.find(
-          team => team.teamType === teamType && team.object === undefined,
-        )
-        if (teamsOfType) {
-          const isMember = teamsOfType.find(team =>
+    const activeTeams = Object.entries(configuredTeams).filter(
+      ([teamType, _]) =>
+        teams.find(
+          team =>
+            team.teamType === teamType &&
+            team.object === undefined &&
             team.members.includes(user.id),
-          )
-          return isMember
-        }
-        return false
-      },
+        ),
     )
     const checkBoxValue = activeTeams
       ? activeTeams.map(([teamType, _]) => teamType)