diff --git a/django/contrib/admin/filterspecs.py b/django/contrib/admin/filterspecs.py
index d887af2..f017512 100644
--- a/django/contrib/admin/filterspecs.py
+++ b/django/contrib/admin/filterspecs.py
@@ -68,12 +68,10 @@ class RelatedFilterSpec(FilterSpec):
             f, request, params, model, model_admin, field_path=field_path)
 
         other_model = get_model_from_relation(f)
-        if isinstance(f, (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(f, 'verbose_name') and f.verbose_name != u'':
+            self.lookup_title = f.verbose_name
         else:
-            self.lookup_title = f.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_filterspecs/models.py b/tests/regressiontests/admin_filterspecs/models.py
index fe9fdfe..cea88d0 100644
--- a/tests/regressiontests/admin_filterspecs/models.py
+++ b/tests/regressiontests/admin_filterspecs/models.py
@@ -4,8 +4,8 @@ from django.contrib.auth.models import User
 class Book(models.Model):
     title = models.CharField(max_length=25)
     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)
 
     def __unicode__(self):
         return self.title
diff --git a/tests/regressiontests/admin_filterspecs/tests.py b/tests/regressiontests/admin_filterspecs/tests.py
index 64a6ac7..e4b1bfe 100644
--- a/tests/regressiontests/admin_filterspecs/tests.py
+++ b/tests/regressiontests/admin_filterspecs/tests.py
@@ -70,7 +70,7 @@ class FilterSpecsTests(TestCase):
 
         # Make sure the last choice is None and is selected
         filterspec = changelist.get_filters(request)[0][1]
-        self.assertEquals(force_unicode(filterspec.title()), u'author')
+        self.assertEquals(force_unicode(filterspec.title()), u'author_verbose')
         choices = list(filterspec.choices(changelist))
         self.assertEquals(choices[-1]['selected'], True)
         self.assertEquals(choices[-1]['query_string'], '?author__isnull=True')
@@ -80,7 +80,7 @@ class FilterSpecsTests(TestCase):
 
         # Make sure the correct choice is selected
         filterspec = changelist.get_filters(request)[0][1]
-        self.assertEquals(force_unicode(filterspec.title()), u'author')
+        self.assertEquals(force_unicode(filterspec.title()), u'author_verbose')
         choices = list(filterspec.choices(changelist))
         self.assertEquals(choices[1]['selected'], True)
         self.assertEquals(choices[1]['query_string'], '?author__id__exact=1')
@@ -96,7 +96,7 @@ class FilterSpecsTests(TestCase):
 
         # Make sure the last choice is None and is selected
         filterspec = changelist.get_filters(request)[0][2]
-        self.assertEquals(force_unicode(filterspec.title()), u'user')
+        self.assertEquals(force_unicode(filterspec.title()), u'contributors_verbose')
         choices = list(filterspec.choices(changelist))
         self.assertEquals(choices[-1]['selected'], True)
         self.assertEquals(choices[-1]['query_string'], '?contributors__isnull=True')
@@ -106,7 +106,7 @@ class FilterSpecsTests(TestCase):
 
         # Make sure the correct choice is selected
         filterspec = changelist.get_filters(request)[0][2]
-        self.assertEquals(force_unicode(filterspec.title()), u'user')
+        self.assertEquals(force_unicode(filterspec.title()), u'contributors_verbose')
         choices = list(filterspec.choices(changelist))
         self.assertEquals(choices[2]['selected'], True)
         self.assertEquals(choices[2]['query_string'], '?contributors__id__exact=2')
