diff --git a/Allura/allura/lib/plugin.py b/Allura/allura/lib/plugin.py
index cd0ed23..eb08d67 100644
--- a/Allura/allura/lib/plugin.py
+++ b/Allura/allura/lib/plugin.py
@@ -662,17 +662,24 @@
                 sp.install_app('admin', 'admin', ordinal=1)
                 sp.install_app('search', 'search', ordinal=2)
             g.post_event('project_created')
+        project.has_direct_subprojects = True
         return sp
 
     def delete_project(self, project, user):
         for sp in project.subprojects:
             self.delete_project(sp, user)
         project.deleted = True
+        if not project.is_root:
+            project.parent_project.has_direct_subprojects = bool(
+                    project.parent_project.direct_subprojects)
+
 
     def undelete_project(self, project, user):
         project.deleted = False
         for sp in project.subprojects:
             self.undelete_project(sp, user)
+        if not project.is_root:
+            project.parent_project.has_direct_subprojects = True
 
     def best_download_url(self, project):
         '''This is the url needed to render a download button.
diff --git a/Allura/allura/model/project.py b/Allura/allura/model/project.py
index 21b4792..327059e 100644
--- a/Allura/allura/model/project.py
+++ b/Allura/allura/model/project.py
@@ -223,6 +223,7 @@
     trove_environment = FieldProperty([S.ObjectId])
     tracking_id = FieldProperty(str, if_missing='')
     is_nbhd_project = FieldProperty(bool, if_missing=False)
+    has_direct_subprojects = FieldProperty(bool)
 
     # transient properties
     notifications_disabled = False
@@ -254,12 +255,11 @@
             p = self.parent_project
             result.append(SitemapEntry('Parent Project'))
             result.append(SitemapEntry(p.name or p.script_name, p.script_name))
-        sps = self.direct_subprojects
-        if sps:
+        if self.has_direct_subprojects:
             result.append(SitemapEntry('Child Projects'))
             result += [
                 SitemapEntry(sp.name or sp.script_name, sp.script_name)
-                for sp in sps]
+                for sp in self.direct_subprojects]
         return result
 
     def troves_by_type(self, trove_type):
@@ -481,12 +481,13 @@
         delta_ordinal = i
         max_ordinal = i
 
-        for sub in self.direct_subprojects:
-            ordinal = sub.ordinal + delta_ordinal
-            if ordinal > max_ordinal:
-                max_ordinal = ordinal
-            entries.append({'ordinal': sub.ordinal + delta_ordinal,
-                           'entry': SitemapEntry(sub.name, sub.url())})
+        if self.has_direct_subprojects:
+            for sub in self.direct_subprojects:
+                ordinal = sub.ordinal + delta_ordinal
+                if ordinal > max_ordinal:
+                    max_ordinal = ordinal
+                entries.append({'ordinal': sub.ordinal + delta_ordinal,
+                               'entry': SitemapEntry(sub.name, sub.url())})
         for ac in self.app_configs + [a.config for a in new_tools]:
             if excluded_tools and ac.tool_name in excluded_tools:
                 continue
@@ -700,9 +701,10 @@
         i = len(anchored_tools)
         self.install_anchored_tools()
 
-        for sub in self.direct_subprojects:
-            result.append(
-                {'ordinal': int(sub.ordinal + i), 'sub': sub, 'rank': 1})
+        if self.has_direct_subprojects:
+            for sub in self.direct_subprojects:
+                result.append(
+                    {'ordinal': int(sub.ordinal + i), 'sub': sub, 'rank': 1})
         for ac in self.app_configs:
             App = g.entry_points['tool'].get(ac.tool_name)
             if include_hidden or App and not App.hidden:
