diff --git a/django/contrib/admin/templates/admin/app_index.html b/django/contrib/admin/templates/admin/app_index.html
index 120433d..89d5e66 100644
--- a/django/contrib/admin/templates/admin/app_index.html
+++ b/django/contrib/admin/templates/admin/app_index.html
@@ -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 %}
diff --git a/django/contrib/admin/templatetags/log.py b/django/contrib/admin/templatetags/log.py
index 663830b..20db05a 100644
--- a/django/contrib/admin/templatetags/log.py
+++ b/django/contrib/admin/templatetags/log.py
@@ -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 @@ class AdminLogNode(template.Node):
             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 @@ class DoGetAdminLog:
 
     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 @@ class DoGetAdminLog:
         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'))
diff --git a/tests/regressiontests/admin_log/__init__.py b/tests/regressiontests/admin_log/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/tests/regressiontests/admin_log/models.py b/tests/regressiontests/admin_log/models.py
new file mode 100644
index 0000000..855dcee
--- /dev/null
+++ b/tests/regressiontests/admin_log/models.py
@@ -0,0 +1,7 @@
+from django.db import models
+
+class Person(models.Model):
+    name = models.CharField(max_length=128)
+
+class Building(models.Model):
+    name = models.CharField(max_length=128)
diff --git a/tests/regressiontests/admin_log/tests.py b/tests/regressiontests/admin_log/tests.py
new file mode 100644
index 0000000..e6855f0
--- /dev/null
+++ b/tests/regressiontests/admin_log/tests.py
@@ -0,0 +1,71 @@
+from django.contrib.admin.models import LogEntry, ADDITION
+from django.contrib.auth.models import User
+from django.contrib.contenttypes.models import ContentType
+from django.template import Context, Template
+from django.test import TransactionTestCase
+
+from models import Building, Person
+
+
+class GetAdminLogTemplateTagTests(TransactionTestCase):
+
+    def test_get_admin_log(self):
+        user = User.objects.create(
+            username="testuser",
+        )
+
+        b1 = Building.objects.create(name="The Colosseum")
+        b2 = Building.objects.create(name="Eiffel Tower")
+        p1 = Person.objects.create(name="Caesar")
+
+        LogEntry.objects.log_action(
+            user_id = user.pk,
+            content_type_id = ContentType.objects.get_for_model(User).pk,
+            object_id = user.pk,
+            object_repr = "testuser",
+            action_flag = ADDITION,
+        )
+
+        LogEntry.objects.log_action(
+            user_id = user.pk,
+            content_type_id = ContentType.objects.get_for_model(Building).pk,
+            object_id = b1.pk,
+            object_repr = "colosseum",
+            action_flag = ADDITION,
+        )
+
+        LogEntry.objects.log_action(
+            user_id = user.pk,
+            content_type_id = ContentType.objects.get_for_model(Building).pk,
+            object_id = b2.pk,
+            object_repr = "eiffeltower",
+            action_flag = ADDITION,
+        )
+
+        LogEntry.objects.log_action(
+            user_id = user.pk,
+            content_type_id = ContentType.objects.get_for_model(Person).pk,
+            object_id = p1.pk,
+            object_repr = "caesar",
+            action_flag = ADDITION,
+        )
+
+        template = Template('{% load log %}{% spaceless %}{% get_admin_log 10 as admin_log for_user ' + str(user.pk) + ' %}{% for entry in admin_log %}{{ entry.object_repr }}{% endfor %}{% endspaceless %}')
+        context = Context()
+        output = template.render(context)
+        self.assertEqual(output, "caesareiffeltowercolosseumtestuser")
+
+        template = Template('{% load log %}{% spaceless %}{% get_admin_log 10 as admin_log for_user ' + str(user.pk) + ' for_app "auth" %}{% for entry in admin_log %}{{ entry.object_repr }}{% endfor %}{% endspaceless %}')
+        context = Context()
+        output = template.render(context)
+        self.assertEqual(output, "testuser")
+
+        template = Template('{% load log %}{% spaceless %}{% get_admin_log 10 as admin_log for_user ' + str(user.pk) + ' for_app app_name %}{% for entry in admin_log %}{{ entry.object_repr }}{% endfor %}{% endspaceless %}')
+        context = Context(dict(app_name="admin_log"))
+        output = template.render(context)
+        self.assertEqual(output, "caesareiffeltowercolosseum")
+
+    def test_get_empty_admin_log(self):
+        template = Template('{% load log %}{% spaceless %}{% get_admin_log 10 as admin_log for_user 1 %}{% for entry in admin_log %}{{ entry.object_repr }}{% endfor %}{% endspaceless %}')
+        context = Context()
+        self.assertEqual(template.render(context), "")
