Index: django/contrib/admin/templatetags/log.py
===================================================================
--- django/contrib/admin/templatetags/log.py	(revision 16086)
+++ django/contrib/admin/templatetags/log.py	(working copy)
@@ -1,11 +1,12 @@
 from django import template
 from django.contrib.admin.models import LogEntry
+from django.contrib.contenttypes.models import ContentType
 
 register = template.Library()
 
 class AdminLogNode(template.Node):
-    def __init__(self, limit, varname, user):
-        self.limit, self.varname, self.user = limit, varname, user
+    def __init__(self, limit, varname, user, for_app):
+        self.limit, self.varname, self.user, self.for_app = limit, varname, user, for_app
 
     def __repr__(self):
         return "<GetAdminLog Node>"
@@ -17,7 +18,15 @@
             user_id = self.user
             if not user_id.isdigit():
                 user_id = context[self.user].id
-            context[self.varname] = LogEntry.objects.filter(user__id__exact=user_id).select_related('content_type', 'user')[:self.limit]
+            filters = {'user__id__exact': user_id}
+
+            if self.for_app:
+                app_name = template.FilterExpression(self.for_app, template.Parser('')).resolve(context)
+                contenttypes = ContentType.objects.filter(app_label=app_name.lower())
+                ids = [contenttype.id for contenttype in contenttypes]
+                filters['content_type__in'] = ids
+
+            context[self.varname] = LogEntry.objects.filter(**filters).select_related('content_type', 'user')[:self.limit]
         return ''
 
 class DoGetAdminLog:
@@ -26,10 +35,11 @@
 
     Usage::
 
-        {% get_admin_log [limit] as [varname] for_user [context_var_containing_user_obj] %}
+        {% get_admin_log [limit] as [varname] for_user [context_var_containing_user_obj] for_app [appname] %}
 
     Examples::
 
+        {% get_admin_log 10 as admin_log for_user 23 for_app "appname" %}
         {% get_admin_log 10 as admin_log for_user 23 %}
         {% get_admin_log 10 as admin_log for_user user %}
         {% get_admin_log 10 as admin_log %}
@@ -52,6 +62,9 @@
         if len(tokens) > 4:
             if tokens[4] != 'for_user':
                 raise template.TemplateSyntaxError("Fourth argument in '%s' must be 'for_user'" % self.tag_name)
-        return AdminLogNode(limit=tokens[1], varname=tokens[3], user=(len(tokens) > 5 and tokens[5] or None))
+        if len(tokens) > 6:
+            if tokens[6] != 'for_app':
+                raise template.TemplateSyntaxError("Fifth argument in '%s' must be 'for_app'" % self.tag_name)
+        return AdminLogNode(limit=tokens[1], varname=tokens[3], user=(len(tokens) > 5 and tokens[5] or None), for_app=(len(tokens) > 7 and tokens[7] or None))
 
 register.tag('get_admin_log', DoGetAdminLog('get_admin_log'))
Index: django/contrib/admin/templates/admin/app_index.html
===================================================================
--- django/contrib/admin/templates/admin/app_index.html	(revision 16086)
+++ django/contrib/admin/templates/admin/app_index.html	(working copy)
@@ -12,4 +12,34 @@
 
 {% endif %} 
 
-{% block sidebar %}{% endblock %}
\ No newline at end of file
+{% block sidebar %}
+<div id="content-related">
+    <div class="module" id="recent-actions-module">
+        <h2>{% trans 'Recent Actions' %}</h2>
+        <h3>{% trans 'My Actions' %}</h3>
+            {% load log %}
+            {% get_admin_log 10 as admin_log for_user user for_app app_list.0.name %}
+            {% if not admin_log %}
+            <p>{% trans 'None available' %}</p>
+            {% else %}
+            <ul class="actionlist">
+            {% for entry in admin_log %}
+            <li class="{% if entry.is_addition %}addlink{% endif %}{% if entry.is_change %}changelink{% endif %}{% if entry.is_deletion %}deletelink{% endif %}">
+                {% if entry.is_deletion or not entry.get_admin_url %}
+                    {{ entry.object_repr }}
+                {% else %}
+                    <a href="{{ entry.get_admin_url }}">{{ entry.object_repr }}</a>
+                {% endif %}
+                <br/>
+                {% if entry.content_type %}
+                    <span class="mini quiet">{% filter capfirst %}{% trans entry.content_type.name %}{% endfilter %}</span>
+                {% else %}
+                    <span class="mini quiet">{% trans 'Unknown content' %}</span>
+                {% endif %}
+            </li>
+            {% endfor %}
+            </ul>
+            {% endif %}
+    </div>
+</div>
+{% endblock %}
