--- a/Allura/allura/model/project.py
+++ b/Allura/allura/model/project.py
@@ -114,7 +114,8 @@
             ('neighborhood_id', 'name'),
             'shortname',
             'parent_id',
-            ('deleted', 'shortname', 'neighborhood_id')]
+            ('deleted', 'shortname', 'neighborhood_id'),
+            ('neighborhood_id', 'is_nbhd_project', 'deleted')]
         extensions = [ ProjectMapperExtension ]
 
     # Project schema
@@ -162,6 +163,7 @@
     trove_natlanguage=FieldProperty([S.ObjectId])
     trove_environment=FieldProperty([S.ObjectId])
     tracking_id = FieldProperty(str, if_missing='')
+    is_nbhd_project=FieldProperty(bool, if_missing=False)
 
     @property
     def permissions(self):
@@ -223,7 +225,7 @@
             return url
 
     def url(self):
-        if self.shortname.endswith('--init--'):
+        if self.is_nbhd_project:
             return self.neighborhood.url()
         shortname = self.shortname[len(self.neighborhood.shortname_prefix):]
         url = self.neighborhood.url_prefix + shortname + '/'
@@ -714,8 +716,11 @@
     def script_name(self):
         return self.project.script_name + self.options.mount_point + '/'
 
-    def url(self):
-        return self.project.url() + self.options.mount_point + '/'
+    def url(self, project=None):
+        'return the URL for the app config.  project parameter is for optimization'
+        if not project:
+            project = self.project
+        return project.url() + self.options.mount_point + '/'
 
     def breadcrumbs(self):
         return self.project.breadcrumbs() + [