Index: django/contrib/admin/options.py
===================================================================
--- django/contrib/admin/options.py	(revision 10129)
+++ django/contrib/admin/options.py	(working copy)
@@ -207,7 +207,7 @@
         for inline_class in self.inlines:
             inline_instance = inline_class(self.model, self.admin_site)
             self.inline_instances.append(inline_instance)
-        if 'action_checkbox' not in self.list_display:
+        if 'action_checkbox' not in self.list_display and self.actions is not None:
             self.list_display = ['action_checkbox'] +  list(self.list_display)
         if not self.list_display_links:
             for name in self.list_display:
@@ -421,7 +421,10 @@
         """
         actions = {}
         for klass in [self.admin_site] + self.__class__.mro()[::-1]:
-            for action in getattr(klass, 'actions', []):
+            class_actions = getattr(klass, 'actions', [])
+            if not class_actions:
+                continue # avoid iteration over None value
+            for action in class_actions:
                 func, name, description = self.get_action(action)
                 actions[name] = (func, name, description)
         return actions
@@ -948,8 +951,15 @@
             media = self.media
             
         # Build the action form and populate it with available actions.
-        action_form = self.action_form(auto_id=None)
-        action_form.fields['action'].choices = self.get_action_choices(request)        
+        if self.actions is None:
+            action_form = False
+            actions_on_top = False
+            actions_on_bottom = False
+        else:
+            action_form = self.action_form(auto_id=None)
+            action_form.fields['action'].choices = self.get_action_choices(request)
+            actions_on_top = self.actions_on_top
+            actions_on_bottom = self.actions_on_bottom
 
         context = {
             'title': cl.title,
@@ -960,8 +970,8 @@
             'root_path': self.admin_site.root_path,
             'app_label': app_label,
             'action_form': action_form,
-            'actions_on_top': self.actions_on_top,
-            'actions_on_bottom': self.actions_on_bottom,
+            'actions_on_top': actions_on_top,
+            'actions_on_bottom': actions_on_bottom,
         }
         context.update(extra_context or {})
         return render_to_response(self.change_list_template or [
Index: django/contrib/admin/templates/admin/change_list.html
===================================================================
--- django/contrib/admin/templates/admin/change_list.html	(revision 10129)
+++ django/contrib/admin/templates/admin/change_list.html	(working copy)
@@ -9,6 +9,11 @@
     <script type="text/javascript" src="../../jsi18n/"></script>
   {% endif %}
   {{ media }}
+  {% if not actions_on_top and not actions_on_bottom %}
+    <style>
+      #changelist table thead th:first-child {width: inherit}
+    </style>
+  {% endif %}
 {% endblock %}
 
 {% block bodyclass %}change-list{% endblock %}
Index: tests/regressiontests/admin_views/tests.py
===================================================================
--- tests/regressiontests/admin_views/tests.py	(revision 10129)
+++ tests/regressiontests/admin_views/tests.py	(working copy)
@@ -939,3 +939,10 @@
         }
         response = self.client.post('/test_admin/admin/admin_views/externalsubscriber/', action_data)
         self.failUnlessEqual(response.status_code, 302)
+
+    def test_model_without_action(self):
+        "Tests a ModelAdmin without any action"
+        response = self.client.get('/test_admin/admin/admin_views/oldsubscriber/')
+        self.assertEquals(response.context["action_form"], False)
+        self.assertEquals(response.context["actions_on_top"], False)
+        self.assertEquals(response.context["actions_on_bottom"], False)
Index: tests/regressiontests/admin_views/models.py
===================================================================
--- tests/regressiontests/admin_views/models.py	(revision 10129)
+++ tests/regressiontests/admin_views/models.py	(working copy)
@@ -221,6 +221,9 @@
 class ExternalSubscriber(Subscriber):
     pass
 
+class OldSubscriber(Subscriber):
+    pass
+
 def external_mail(request, selected):
     EmailMessage(
         'Greetings from a function action',
@@ -236,6 +239,9 @@
 class ExternalSubscriberAdmin(admin.ModelAdmin):
     actions = [external_mail, redirect_to]
 
+class OldSubscriberAdmin(admin.ModelAdmin):
+    actions = None
+
 admin.site.register(Article, ArticleAdmin)
 admin.site.register(CustomArticle, CustomArticleAdmin)
 admin.site.register(Section, inlines=[ArticleInline])
@@ -246,6 +252,7 @@
 admin.site.register(Persona, PersonaAdmin)
 admin.site.register(Subscriber, SubscriberAdmin)
 admin.site.register(ExternalSubscriber, ExternalSubscriberAdmin)
+admin.site.register(OldSubscriber, OldSubscriberAdmin)
 
 # We intentionally register Promo and ChapterXtra1 but not Chapter nor ChapterXtra2.
 # That way we cover all four cases:
Index: docs/ref/contrib/admin/actions.txt
===================================================================
--- docs/ref/contrib/admin/actions.txt	(revision 10129)
+++ docs/ref/contrib/admin/actions.txt	(working copy)
@@ -237,3 +237,9 @@
         
     admin.site.add_action(export_selected_objects)
     
+Removing actions
+----------------
+
+If you set ``None`` in ``actions``, this tells the :class:`ModelAdmin` to do
+not display any dropdown menu nor checkboxes related to admin actions.
+
