Index: django/contrib/admin/options.py
===================================================================
--- django/contrib/admin/options.py	(revision 13679)
+++ django/contrib/admin/options.py	(working copy)
@@ -31,6 +31,10 @@
 class IncorrectLookupParameters(Exception):
     pass
 
+def changelist_request_is_popup(request):
+    from django.contrib.admin.views.main import IS_POPUP_VAR
+    return IS_POPUP_VAR in request.GET
+
 # Defaults for formfield_overrides. ModelAdmin subclasses can change this
 # by adding to ModelAdmin.formfield_overrides.
 
@@ -480,6 +484,10 @@
         if self.actions is None:
             return []
 
+        # Do not show actions in popups
+        if changelist_request_is_popup(request):
+            return []
+
         actions = []
 
         # Gather actions from the admin site first
@@ -962,10 +970,19 @@
             except ValueError:
                 pass
 
+        # disallow list-editing in popups
+        if changelist_request_is_popup(request):
+            list_editable_for_request = ()
+        else:
+            list_editable_for_request = self.list_editable
+
         ChangeList = self.get_changelist(request)
         try:
-            cl = ChangeList(request, self.model, list_display, self.list_display_links, self.list_filter,
-                self.date_hierarchy, self.search_fields, self.list_select_related, self.list_per_page, self.list_editable, self)
+            cl = ChangeList(request, self.model, list_display,
+                            self.list_display_links, self.list_filter,
+                            self.date_hierarchy, self.search_fields,
+                            self.list_select_related, self.list_per_page,
+                            list_editable_for_request, self)
         except IncorrectLookupParameters:
             # Wacky lookup parameters were given, so redirect to the main
             # changelist page, without parameters, and pass an 'invalid=1'
@@ -1016,7 +1033,7 @@
         formset = cl.formset = None
 
         # Handle POSTed bulk-edit data.
-        if (request.method == "POST" and self.list_editable and
+        if (request.method == "POST" and list_editable_for_request and
                 '_save' in request.POST and not action_failed):
             FormSet = self.get_changelist_formset(request)
             formset = cl.formset = FormSet(request.POST, request.FILES, queryset=cl.result_list)
@@ -1046,7 +1063,7 @@
                 return HttpResponseRedirect(request.get_full_path())
 
         # Handle GET -- construct a formset for display.
-        elif self.list_editable:
+        elif list_editable_for_request:
             FormSet = self.get_changelist_formset(request)
             formset = cl.formset = FormSet(queryset=cl.result_list)
 
Index: tests/regressiontests/admin_views/tests.py
===================================================================
--- tests/regressiontests/admin_views/tests.py	(revision 13679)
+++ tests/regressiontests/admin_views/tests.py	(working copy)
@@ -1317,9 +1317,14 @@
         self.failUnlessEqual(Person.objects.get(name="John Mauchly").alive, False)
         self.failUnlessEqual(Person.objects.get(name="Grace Hopper").gender, 2)
 
+    def test_list_editable_popup(self):
+        """ Fields should not be list-editable in popups. """
+        response = self.client.get('/test_admin/admin/admin_views/person/')
+        self.assertNotEqual(response.context['cl'].list_editable, ())
+        response = self.client.get('/test_admin/admin/admin_views/person/?pop')
+        self.assertEqual(response.context['cl'].list_editable, ())
 
 
-
 class AdminSearchTest(TestCase):
     fixtures = ['admin-views-users','multiple-child-classes']
 
@@ -1555,7 +1560,15 @@
         response = self.client.get('/test_admin/admin/admin_views/subscriber/')
         self.assertContains(response, '0 of 2 selected')
 
+    def test_popup_actions(self):
+        """ Actions should not be shown in popups. """
+        response = self.client.get('/test_admin/admin/admin_views/subscriber/')
+        self.assertNotEquals(response.context["action_form"], None)
+        response = self.client.get(
+            '/test_admin/admin/admin_views/subscriber/?pop')
+        self.assertEquals(response.context["action_form"], None)
 
+
 class TestCustomChangeList(TestCase):
     fixtures = ['admin-views-users.xml']
     urlbit = 'admin'
