diff --git a/Bugzilla/Template.pm b/Bugzilla/Template.pm
index dcbe37b3fd57ba7c9551ad77aa574b35a541eed2..78c537cc374be7d65f37a7827f05e7856d63d7e5 100644
--- a/Bugzilla/Template.pm
+++ b/Bugzilla/Template.pm
@@ -912,7 +912,15 @@ sub create {
                     Bugzilla->fields({ by_name => 1 });
                 return $cache->{template_bug_fields};
             },
-            
+
+            # A general purpose cache to store rendered templates for reuse.
+            # Make sure to not mix language-specific data.
+            'template_cache' => sub {
+                my $cache = Bugzilla->request_cache->{template_cache} ||= {};
+                $cache->{users} ||= {};
+                return $cache;
+            },
+
             'css_files' => \&css_files,
             yui_resolve_deps => \&yui_resolve_deps,
 
diff --git a/Bugzilla/User.pm b/Bugzilla/User.pm
index bda055af4ea45f7abfbfaca4fdf2ffa8c9a6bf74..5462b33db23ffa9ad9bc36aa925f5dbb38b338c0 100644
--- a/Bugzilla/User.pm
+++ b/Bugzilla/User.pm
@@ -774,6 +774,15 @@ sub in_group_id {
     return grep($_->id == $id, @{ $self->groups }) ? 1 : 0;
 }
 
+# This is a helper to get all groups which have an icon to be displayed
+# besides the name of the commenter.
+sub groups_with_icon {
+    my $self = shift;
+
+    my @groups = grep { $_->icon_url } @{ $self->groups };
+    return \@groups;
+}
+
 sub get_products_by_permission {
     my ($self, $group) = @_;
     # Make sure $group exists on a per-product basis.
diff --git a/template/en/default/attachment/list.html.tmpl b/template/en/default/attachment/list.html.tmpl
index 5bcda0a46823ca43a705467a028510a5edc23767..e30492c36568c8968d17d2757acb9f57d943dc17 100644
--- a/template/en/default/attachment/list.html.tmpl
+++ b/template/en/default/attachment/list.html.tmpl
@@ -51,6 +51,7 @@ function toggle_display(link) {
 
   [% count = 0 %]
   [% obsolete_attachments = 0 %]
+  [% user_cache = template_cache.users %]
 
   [% FOREACH attachment = attachments %]
     [% count = count + 1 %]
@@ -89,7 +90,14 @@ function toggle_display(link) {
                title="Go to the comment associated with the attachment">
               [%- attachment.attached FILTER time %]</a>,
 
-            [% INCLUDE global/user.html.tmpl who = attachment.attacher %]
+            [%# No need to recreate the exact same template if we already have it. %]
+            [% attacher_id = attachment.attacher.id %]
+            [% UNLESS user_cache.$attacher_id %]
+              [% user_cache.$attacher_id = BLOCK %]
+                [% INCLUDE global/user.html.tmpl who = attachment.attacher %]
+              [% END %]
+            [% END %]
+            [% user_cache.$attacher_id FILTER none %]
           </span>
         </td>
 
diff --git a/template/en/default/bug/comments.html.tmpl b/template/en/default/bug/comments.html.tmpl
index d6a9fcca203be1d3e554efcd12f4a302ffb22ed7..0bdb375869c5023daccf618eabb8a97ed34fd76b 100644
--- a/template/en/default/bug/comments.html.tmpl
+++ b/template/en/default/bug/comments.html.tmpl
@@ -46,6 +46,7 @@
 
 [% DEFAULT start_at = 0 mode = "show" %]
 [% sort_order = user.settings.comment_sort_order.value %]
+[% user_cache = template_cache.users %]
 
 [%# NOTE: (start_at > 0) means we came here from a midair collision,
   #       in which case we don't care what the user's preference is.
@@ -170,12 +171,18 @@
         </span>
 
         <span class="bz_comment_user">
-          [% INCLUDE global/user.html.tmpl who = comment.author %]
+          [%# No need to recreate the exact same template if we already have it. %]
+          [% commenter_id = comment.author.id %]
+          [% UNLESS user_cache.$commenter_id %]
+            [% user_cache.$commenter_id = BLOCK %]
+              [% INCLUDE global/user.html.tmpl who = comment.author %]
+            [% END %]
+          [% END %]
+          [% user_cache.$commenter_id FILTER none %]
         </span>
 
         <span class="bz_comment_user_images">
-          [% FOREACH group = comment.author.groups %]
-            [% NEXT UNLESS group.icon_url %]
+          [% FOREACH group = comment.author.groups_with_icon %]
             <img src="[% group.icon_url FILTER html %]"
                  alt="[% group.name FILTER html %]"
                  title="[% group.name FILTER html %] - [% group.description FILTER html %]">