diff --git a/Allura/allura/lib/widgets/project_list.py b/Allura/allura/lib/widgets/project_list.py
index b5e0828..c4916af 100644
--- a/Allura/allura/lib/widgets/project_list.py
+++ b/Allura/allura/lib/widgets/project_list.py
@@ -28,8 +28,6 @@
         if response['icon_url'] is None:
             if value.icon:
                 response['icon_url'] = value.url()+'icon'
-            else:
-                response['icon_url'] = g.forge_static('images/project_default.png')
         if response['accolades'] is None:
             response['accolades'] = value.accolades
 
diff --git a/Allura/allura/model/project.py b/Allura/allura/model/project.py
index bdffc75..5ca3f4c 100644
--- a/Allura/allura/model/project.py
+++ b/Allura/allura/model/project.py
@@ -358,7 +358,7 @@
     def icon_urls(cls, projects):
         '''Return a dict[project_id] = icon_url, efficiently'''
         project_index = dict((p._id, p) for p in projects)
-        result = dict((p._id, g.forge_static('images/project_default.png')) for p in projects)
+        result = dict((p._id, None) for p in projects)
         for icon in ProjectFile.query.find(dict(
                 project_id={'$in': result.keys()},
                 category='icon')):
diff --git a/Allura/allura/templates/jinja_master/nav_menu.html b/Allura/allura/templates/jinja_master/nav_menu.html
index 341703e..2203800 100644
--- a/Allura/allura/templates/jinja_master/nav_menu.html
+++ b/Allura/allura/templates/jinja_master/nav_menu.html
@@ -11,8 +11,6 @@
       {{lib.gravatar(c.project.user_project_of, size=48, className='project_icon')}}
     {% elif c.project.icon %}
       <img src="{{c.project.url()}}/icon" class="project_icon" alt="Project Logo">
-    {% else %}
-      <img src="{{g.forge_static('images/project_default.png')}}" class="project_icon" alt="Default Project Icon">
     {% endif %}
 	<h1 class="project_title">
       {% if c.project.shortname.endswith('--init--') %}
diff --git a/Allura/allura/templates/jinja_master/neigh_nav_menu.html b/Allura/allura/templates/jinja_master/neigh_nav_menu.html
index 00ef89a..cd43f13 100644
--- a/Allura/allura/templates/jinja_master/neigh_nav_menu.html
+++ b/Allura/allura/templates/jinja_master/neigh_nav_menu.html
@@ -5,8 +5,6 @@
   <a href="{{neighborhood.url()}}">
     {% if neighborhood.icon %}
       <img src="{{neighborhood.url()}}/icon" class="project_icon" alt="{{neighborhood.name}} Logo"/>
-    {% else %}
-      <img src="{{g.forge_static('images/project_default.png')}}" class="project_icon" alt="Default Neighborhood Icon"/>
     {% endif %}
 	<h1 class="project_title">{{neighborhood.name}}</h1>
 	</a>
diff --git a/Allura/allura/templates/widgets/project_summary.html b/Allura/allura/templates/widgets/project_summary.html
index 6581864..6cb9839 100644
--- a/Allura/allura/templates/widgets/project_summary.html
+++ b/Allura/allura/templates/widgets/project_summary.html
@@ -1,17 +1,17 @@
 {% if display_mode == 'list' %}
 <div class="list card{% if show_proj_icon%} proj_icon{% endif %}"
 	{%- if columns == 2 %} style="width: 330px"{% elif columns == 3 %} style="width: 220px"{% endif %}>
-  {% if show_proj_icon == True %}
-   {% if accolades and show_awards_banner == True %}
+  {% if accolades and show_awards_banner == True %}
     <div class="box notch sponsor">
       <div class="feature">{{accolades[0].award.short}}</div>
-      <img src="{{icon_url}}" alt="{{value.name}} Logo"/>
+      {% if show_proj_icon == True and icon_url %}<img src="{{icon_url}}" alt="{{value.name}} Logo"/>{% endif %}
     </div>
-   {% else %}
+  {% else %}
+    {% if show_proj_icon == True and icon_url %}
     <div class="box">
       <img src="{{icon_url}}" alt="{{value.name}} Logo"/>
     </div>
-   {% endif %}
+    {% endif %}
   {% endif %}
   <h2><a href="{{value.url()}}">{{value.name}}</a></h2>
   <p class="desc">{% if value.summary %}{{value.summary}}{% else %}{{h.text.truncate(value.short_description, 50)}}{% endif %}</p>
@@ -19,17 +19,17 @@
 </div>
 {% else %}
   <div class="border card">
-    {% if show_proj_icon == True %}
-     {% if accolades and show_awards_banner == True %}
+    {% if accolades and show_awards_banner == True %}
       <div class="box notch sponsor">
         <div class="feature">{{accolades[0].award.short}}</div>
-        <img src="{{icon_url}}" alt="{{value.name}} Logo"/>
+        {% if show_proj_icon == True and icon_url %}<img src="{{icon_url}}" alt="{{value.name}} Logo"/>{% endif %}
       </div>
-     {% else %}
+    {% else %}
+      {% if show_proj_icon == True and icon_url %}
       <div class="box">
         <img src="{{icon_url}}" alt="{{value.name}} Logo"/>
       </div>
-     {% endif %}
+      {% endif %}
     {% endif %}
     <h2><a href="{{value.url()}}">{{value.name}}</a></h2>
     <p class="desc">{% if value.summary %}{{value.summary}}{% else %}{{h.text.truncate(value.short_description, 50)}}{% endif %}</p>
diff --git a/Allura/allura/tests/functional/test_root.py b/Allura/allura/tests/functional/test_root.py
index 6d89187..411d998 100644
--- a/Allura/allura/tests/functional/test_root.py
+++ b/Allura/allura/tests/functional/test_root.py
@@ -33,7 +33,6 @@
         assert_equal(response.html.find('h2',{'class':'dark title'}).contents[0].strip(), 'All Projects')
         projects = response.html.findAll('div',{'class':'border card'})
         assert projects[0].find('a').get('href') == '/adobe/adobe-1/'
-        assert projects[0].find('img').get('alt') == 'adobe-1 Logo'
         cat_links = response.html.find('div',{'id':'sidebar'}).findAll('li')
         assert len(cat_links) == 4
         assert cat_links[0].find('a').get('href') == '/browse/clustering'
@@ -52,20 +51,19 @@
         fax_cat = M.ProjectCategory.query.find(dict(label='Fax')).first()
         M.Project.query.find(dict(name='adobe-1')).first().category_id = com_cat._id
         response = self.app.get('/browse')
-        assert len(response.html.findAll('img',{'alt':'adobe-1 Logo'})) == 1
-        assert len(response.html.findAll('img',{'alt':'adobe-2 Logo'})) == 1
+        assert len(response.html.findAll('a',{'href':'/adobe/adobe-1/'})) == 1
+        assert len(response.html.findAll('a',{'href':'/adobe/adobe-2/'})) == 1
         response = self.app.get('/browse/communications')
-        assert len(response.html.findAll('img',{'alt':'adobe-1 Logo'})) == 1
-        assert len(response.html.findAll('img',{'alt':'adobe-2 Logo'})) == 0
+        assert len(response.html.findAll('a',{'href':'/adobe/adobe-1/'})) == 1
+        assert len(response.html.findAll('a',{'href':'/adobe/adobe-2/'})) == 0
         response = self.app.get('/browse/communications/fax')
-        assert len(response.html.findAll('img',{'alt':'adobe-1 Logo'})) == 0
-        assert len(response.html.findAll('img',{'alt':'adobe-2 Logo'})) == 0
+        assert len(response.html.findAll('a',{'href':'/adobe/adobe-1/'})) == 0
+        assert len(response.html.findAll('a',{'href':'/adobe/adobe-2/'})) == 0
 
     def test_neighborhood_index(self):
         response = self.app.get('/adobe/')
         projects = response.html.findAll('div',{'class':'border card'})
         assert len(projects) == 2
-        assert projects[0].find('img').get('alt') == 'adobe-1 Logo'
         cat_links = response.html.find('div',{'id':'sidebar'}).findAll('ul')[1].findAll('li')
         assert len(cat_links) == 3, cat_links
         assert cat_links[0].find('a').get('href') == '/adobe/browse/clustering'
@@ -77,14 +75,14 @@
         M.Project.query.find(dict(name='adobe-1')).first().category_id = com_cat._id
         M.Project.query.find(dict(name='adobe-2')).first().category_id = fax_cat._id
         response = self.app.get('/adobe/browse')
-        assert len(response.html.findAll('img',{'alt':'adobe-1 Logo'})) == 1
-        assert len(response.html.findAll('img',{'alt':'adobe-2 Logo'})) == 1
+        assert len(response.html.findAll('a',{'href':'/adobe/adobe-1/'})) == 1
+        assert len(response.html.findAll('a',{'href':'/adobe/adobe-2/'})) == 1
         response = self.app.get('/adobe/browse/communications')
-        assert len(response.html.findAll('img',{'alt':'adobe-1 Logo'})) == 1
-        assert len(response.html.findAll('img',{'alt':'adobe-2 Logo'})) == 1
+        assert len(response.html.findAll('a',{'href':'/adobe/adobe-1/'})) == 1
+        assert len(response.html.findAll('a',{'href':'/adobe/adobe-2/'})) == 1
         response = self.app.get('/adobe/browse/communications/fax')
-        assert len(response.html.findAll('img',{'alt':'adobe-1 Logo'})) == 0
-        assert len(response.html.findAll('img',{'alt':'adobe-2 Logo'})) == 1
+        assert len(response.html.findAll('a',{'href':'/adobe/adobe-1/'})) == 0
+        assert len(response.html.findAll('a',{'href':'/adobe/adobe-2/'})) == 1
 
     @td.with_wiki
     def test_markdown_to_html(self):
diff --git a/Allura/allura/tests/test_globals.py b/Allura/allura/tests/test_globals.py
index 0557672..ccc673c 100644
--- a/Allura/allura/tests/test_globals.py
+++ b/Allura/allura/tests/test_globals.py
@@ -1,4 +1,5 @@
 import re
+import os, allura
 from urllib import quote
 
 from bson import ObjectId
@@ -37,10 +38,35 @@
 
 @with_setup(setUp)
 def test_macros():
+    file_name = 'neo-icon-set-454545-256x350.png'
+    file_path = os.path.join(allura.__path__[0],'nf','allura','images',file_name)
+    curr_project = c.project
+
     p_nbhd = M.Neighborhood.query.get(name='Projects')
     p_test = M.Project.query.get(shortname='test', neighborhood_id=p_nbhd._id)
+    c.project = p_test
+    icon_file = open(file_path)
+    M.ProjectFile.save_image(
+                file_name, icon_file, content_type='image/png',
+                square=True, thumbnail_size=(48,48),
+                thumbnail_meta=dict(project_id=c.project._id,category='icon'))
+    icon_file.close()
     p_test2 = M.Project.query.get(shortname='test2', neighborhood_id=p_nbhd._id)
+    c.project = p_test2
+    icon_file = open(file_path)
+    M.ProjectFile.save_image(
+                file_name, icon_file, content_type='image/png',
+                square=True, thumbnail_size=(48,48),
+                thumbnail_meta=dict(project_id=c.project._id,category='icon'))
+    icon_file.close()
     p_sub1 =  M.Project.query.get(shortname='test/sub1', neighborhood_id=p_nbhd._id)
+    c.project = p_sub1
+    icon_file = open(file_path)
+    M.ProjectFile.save_image(
+                file_name, icon_file, content_type='image/png',
+                square=True, thumbnail_size=(48,48),
+                thumbnail_meta=dict(project_id=c.project._id,category='icon'))
+    icon_file.close()
     p_test.labels = [ 'test', 'root' ]
     p_sub1.labels = [ 'test', 'sub1' ]
     # Make one project private
@@ -85,7 +111,12 @@
         assert '<img alt="test2 Logo"' in r, r
         assert '<img alt="test Logo"' not in r, r
         assert '<img alt="sub1 Logo"' not in r, r
+        r = g.markdown_wiki.convert('[[projects show_proj_icon=True]]')
+        assert '<img alt="test Logo"' in r
+        r = g.markdown_wiki.convert('[[projects show_proj_icon=False]]')
+        assert '<img alt="test Logo"' not in r
 
+    c.project = curr_project
     r = g.markdown_wiki.convert('[[project_admins]]')
     assert r == '<div class="markdown_content"><p><a href="/u/test-admin/">Test Admin</a><br /></p></div>'
     r = g.markdown_wiki.convert('[[download_button]]')
@@ -215,12 +246,6 @@
         r = g.markdown_wiki.convert('[[projects display_mode=list columns=3]]')
         assert two_column_style not in r
 
-        # test project icon
-        r = g.markdown_wiki.convert('[[projects display_mode=list show_proj_icon=True]]')
-        assert 'test Logo' in r
-        r = g.markdown_wiki.convert('[[projects display_mode=list show_proj_icon=False]]')
-        assert 'test Logo' not in r
-
         # test project download button
         r = g.markdown_wiki.convert('[[projects display_mode=list show_download_button=True]]')
         assert 'download-button' in r
