diff --git a/Allura/allura/lib/plugin.py b/Allura/allura/lib/plugin.py
index 6067e27..dbd159e 100644
--- a/Allura/allura/lib/plugin.py
+++ b/Allura/allura/lib/plugin.py
@@ -427,7 +427,7 @@
 
         p = M.Project.query.get(shortname=shortname, neighborhood_id=neighborhood._id)
         if p:
-            raise forge_exc.ProjectConflict()
+            raise forge_exc.ProjectConflict('%s already exists in nbhd %s' % (shortname, neighborhood._id))
 
     def _create_project(self, neighborhood, shortname, project_name, user, user_project, private_project, apps):
         '''
diff --git a/Allura/allura/model/auth.py b/Allura/allura/model/auth.py
index 1493400..b9b11d5 100644
--- a/Allura/allura/model/auth.py
+++ b/Allura/allura/model/auth.py
@@ -5,7 +5,6 @@
 import urllib
 import hmac
 import hashlib
-import pytz
 from urlparse import urlparse
 from email import header
 from hashlib import sha256
@@ -22,6 +21,7 @@
 from ming.orm import session, state
 from ming.orm import FieldProperty, RelationProperty, ForeignIdProperty
 from ming.orm.declarative import MappedClass
+from ming.orm.ormsession import ThreadLocalORMSession
 
 import allura.tasks.mail_tasks
 from allura.lib import helpers as h
@@ -582,14 +582,19 @@
         '''
         Returns the personal user-project for the user
         '''
-        from .project import Project
+        from allura import model as M
+        n = M.Neighborhood.query.get(name='Users')
         auth_provider = plugin.AuthenticationProvider.get(request)
         project_shortname = auth_provider.user_project_shortname(self)
-        p = Project.query.get(shortname=project_shortname, deleted=False)
+        p = M.Project.query.get(shortname=project_shortname, neighborhood_id=n._id)
+        if p and p.deleted:
+            # really delete it, since registering a new project would conflict with the "deleted" one
+            log.info('completely deleting user project (was already flagged as deleted) %s', project_shortname)
+            p.delete()
+            ThreadLocalORMSession.flush_all()
+            p = None
         if not p and self != User.anonymous():
             # create user-project on demand if it is missing
-            from allura import model as M
-            n = M.Neighborhood.query.get(name='Users')
             p = n.register_project(project_shortname, user=self, user_project=True)
         return p
 
diff --git a/Allura/allura/tests/model/test_auth.py b/Allura/allura/tests/model/test_auth.py
index 46bdf97..191e382 100644
--- a/Allura/allura/tests/model/test_auth.py
+++ b/Allura/allura/tests/model/test_auth.py
@@ -93,6 +93,17 @@
     assert M.Project.query.get(shortname='u/foobar123')
 
 @with_setup(setUp)
+def test_user_project_already_deleted_creates_on_demand():
+    u = M.User.register(dict(username='foobar123'), make_project=True)
+    p = M.Project.query.get(shortname='u/foobar123')
+    p.deleted = True
+    ThreadLocalORMSession.flush_all()
+    assert not M.Project.query.get(shortname='u/foobar123', deleted=False)
+    assert u.private_project()
+    ThreadLocalORMSession.flush_all()
+    assert M.Project.query.get(shortname='u/foobar123', deleted=False)
+
+@with_setup(setUp)
 def test_project_role():
     role = M.ProjectRole(project_id=c.project._id, name='test_role')
     c.user.project_role().roles.append(role._id)
