--- a/Allura/allura/model/project.py
+++ b/Allura/allura/model/project.py
@@ -378,8 +378,6 @@
                         ('admin', 'admin'),
                         ('search', 'search')]
         with h.push_config(c, project=self, user=users[0]):
-            assert M.ProjectRole.query.find().count() == 0, \
-                'Project roles already exist'
             # Configure flyway migration info
             mi = project_doc_session.get(MigrationInfo)
             if mi is None:
@@ -391,11 +389,11 @@
                 if mc.__mongometa__.session == project_orm_session:
                     project_orm_session.ensure_indexes(mc)
             # Install default named roles (#78)
-            role_owner = M.ProjectRole(name='Admin')
-            role_developer = M.ProjectRole(name='Developer')
-            role_member = M.ProjectRole(name='Member')
-            role_auth = M.ProjectRole(name='*authenticated')
-            role_anon = M.ProjectRole(name='*anonymous')
+            role_owner = M.ProjectRole.upsert(name='Admin')
+            role_developer = M.ProjectRole.upsert(name='Developer')
+            role_member = M.ProjectRole.upsert(name='Member')
+            role_auth = M.ProjectRole.upsert(name='*authenticated')
+            role_anon = M.ProjectRole.upsert(name='*anonymous')
             # Setup subroles
             role_owner.roles = [ role_developer._id ]
             role_developer.roles = [ role_member._id ]