diff --git a/django/contrib/admin/filters.py b/django/contrib/admin/filters.py
index c1fc979..341b46e 100644
--- a/django/contrib/admin/filters.py
+++ b/django/contrib/admin/filters.py
@@ -148,12 +148,10 @@ class RelatedFieldListFilter(FieldListFilter):
             field, request, params, model, model_admin, field_path)
 
         other_model = get_model_from_relation(field)
-        if isinstance(field, (models.ManyToManyField,
-                          models.related.RelatedObject)):
-            # no direct field on this model, get name from other model
-            self.lookup_title = other_model._meta.verbose_name
+        if hasattr(field, 'verbose_name') and field.verbose_name != u'':
+            self.lookup_title = field.verbose_name
         else:
-            self.lookup_title = field.verbose_name # use field name
+            self.lookup_title = other_model._meta.verbose_name
         rel_name = other_model._meta.pk.name
         self.lookup_kwarg = '%s__%s__exact' % (self.field_path, rel_name)
         self.lookup_kwarg_isnull = '%s__isnull' % (self.field_path)
diff --git a/tests/regressiontests/admin_filters/models.py b/tests/regressiontests/admin_filters/models.py
index 80d54c7..beb0089 100644
--- a/tests/regressiontests/admin_filters/models.py
+++ b/tests/regressiontests/admin_filters/models.py
@@ -4,8 +4,8 @@ from django.contrib.auth.models import User
 class Book(models.Model):
     title = models.CharField(max_length=50)
     year = models.PositiveIntegerField(null=True, blank=True)
-    author = models.ForeignKey(User, related_name='books_authored', blank=True, null=True)
-    contributors = models.ManyToManyField(User, related_name='books_contributed', blank=True, null=True)
+    author = models.ForeignKey(User, verbose_name='author_verbose', related_name='books_authored', blank=True, null=True)
+    contributors = models.ManyToManyField(User, verbose_name='contributors_verbose', related_name='books_contributed', blank=True, null=True)
     is_best_seller = models.NullBooleanField(default=0)
     date_registered = models.DateField(null=True)
 
diff --git a/tests/regressiontests/admin_filters/tests.py b/tests/regressiontests/admin_filters/tests.py
index 7717984..c1c0b52 100644
--- a/tests/regressiontests/admin_filters/tests.py
+++ b/tests/regressiontests/admin_filters/tests.py
@@ -232,7 +232,7 @@ class ListFiltersTests(TestCase):
 
         # Make sure the last choice is None and is selected
         filterspec = changelist.get_filters(request)[0][1]
-        self.assertEqual(force_unicode(filterspec.title), u'author')
+        self.assertEquals(force_unicode(filterspec.title), u'author_verbose')
         choices = list(filterspec.choices(changelist))
         self.assertEqual(choices[-1]['selected'], True)
         self.assertEqual(choices[-1]['query_string'], '?author__isnull=True')
@@ -242,7 +242,7 @@ class ListFiltersTests(TestCase):
 
         # Make sure the correct choice is selected
         filterspec = changelist.get_filters(request)[0][1]
-        self.assertEqual(force_unicode(filterspec.title), u'author')
+        self.assertEquals(force_unicode(filterspec.title), u'author_verbose')
         # order of choices depends on User model, which has no order
         choice = select_by(filterspec.choices(changelist), "display", "alfred")
         self.assertEqual(choice['selected'], True)
@@ -260,7 +260,7 @@ class ListFiltersTests(TestCase):
 
         # Make sure the last choice is None and is selected
         filterspec = changelist.get_filters(request)[0][2]
-        self.assertEqual(force_unicode(filterspec.title), u'user')
+        self.assertEquals(force_unicode(filterspec.title), u'contributors_verbose')
         choices = list(filterspec.choices(changelist))
         self.assertEqual(choices[-1]['selected'], True)
         self.assertEqual(choices[-1]['query_string'], '?contributors__isnull=True')
@@ -270,7 +270,7 @@ class ListFiltersTests(TestCase):
 
         # Make sure the correct choice is selected
         filterspec = changelist.get_filters(request)[0][2]
-        self.assertEqual(force_unicode(filterspec.title), u'user')
+        self.assertEquals(force_unicode(filterspec.title), u'contributors_verbose')
         choice = select_by(filterspec.choices(changelist), "display", "bob")
         self.assertEqual(choice['selected'], True)
         self.assertEqual(choice['query_string'], '?contributors__id__exact=%d' % self.bob.pk)
@@ -471,7 +471,7 @@ class ListFiltersTests(TestCase):
         self.assertEqual(choices[3]['query_string'], '?publication-decade=the+00s&author__id__exact=%s' % self.alfred.pk)
 
         filterspec = changelist.get_filters(request)[0][0]
-        self.assertEqual(force_unicode(filterspec.title), u'author')
+        self.assertEquals(force_unicode(filterspec.title), u'author_verbose')
         choice = select_by(filterspec.choices(changelist), "display", "alfred")
         self.assertEqual(choice['selected'], True)
         self.assertEqual(choice['query_string'], '?publication-decade=the+00s&author__id__exact=%s' % self.alfred.pk)
