Index: django/db/models/base.py
===================================================================
--- django/db/models/base.py	(revision 15796)
+++ django/db/models/base.py	(working copy)
@@ -677,23 +677,25 @@
         # Gather a list of checks for fields declared as unique and add them to
         # the list of checks.
 
-        fields_with_class = [(self.__class__, self._meta.local_fields)]
-        for parent_class in self._meta.parents.keys():
-            fields_with_class.append((parent_class, parent_class._meta.local_fields))
+        fields_with_class = []
+        for field in self._meta.fields:
+            name, model_class, junk, junk = self._meta.get_field_by_name(field.name)
+            if model_class == None:
+                model_class = self.__class__
+            fields_with_class.append((model_class, field))
 
-        for model_class, fields in fields_with_class:
-            for f in fields:
-                name = f.name
-                if name in exclude:
-                    continue
-                if f.unique:
-                    unique_checks.append((model_class, (name,)))
-                if f.unique_for_date and f.unique_for_date not in exclude:
-                    date_checks.append((model_class, 'date', name, f.unique_for_date))
-                if f.unique_for_year and f.unique_for_year not in exclude:
-                    date_checks.append((model_class, 'year', name, f.unique_for_year))
-                if f.unique_for_month and f.unique_for_month not in exclude:
-                    date_checks.append((model_class, 'month', name, f.unique_for_month))
+        for model_class, f in fields_with_class:
+            name = f.name
+            if name in exclude:
+                continue
+            if f.unique:
+                unique_checks.append((model_class, (name,)))
+            if f.unique_for_date and f.unique_for_date not in exclude:
+                date_checks.append((model_class, 'date', name, f.unique_for_date))
+            if f.unique_for_year and f.unique_for_year not in exclude:
+                date_checks.append((model_class, 'year', name, f.unique_for_year))
+            if f.unique_for_month and f.unique_for_month not in exclude:
+                date_checks.append((model_class, 'month', name, f.unique_for_month))
         return unique_checks, date_checks
 
     def _perform_unique_checks(self, unique_checks):
Index: tests/modeltests/validation/models.py
===================================================================
--- tests/modeltests/validation/models.py	(revision 15796)
+++ tests/modeltests/validation/models.py	(working copy)
@@ -27,6 +27,12 @@
     unique_integerfield = models.IntegerField(unique=True)
     non_unique_field = models.IntegerField()
 
+class SubUniqueFieldsModel(UniqueFieldsModel):
+    pass
+
+class SubSubUniqueFieldsModel(SubUniqueFieldsModel):
+    pass
+
 class CustomPKModel(models.Model):
     my_pk_field = models.CharField(max_length=100, primary_key=True)
 
Index: tests/modeltests/validation/test_unique.py
===================================================================
--- tests/modeltests/validation/test_unique.py	(revision 15796)
+++ tests/modeltests/validation/test_unique.py	(working copy)
@@ -7,7 +7,8 @@
 from django.utils import unittest
 
 from models import (CustomPKModel, UniqueTogetherModel, UniqueFieldsModel,
-    UniqueForDateModel, ModelToValidate, Post, FlexibleDatePost)
+    UniqueForDateModel, ModelToValidate, Post, FlexibleDatePost,
+    SubSubUniqueFieldsModel)
 
 
 class GetUniqueCheckTests(unittest.TestCase):
@@ -149,3 +150,9 @@
             self.fail("unique_for_month checks shouldn't trigger when the associated DateField is None.")
         except:
             self.fail("unique_for_month checks shouldn't explode when the associated DateField is None.")
+
+    def test_sub_sub_unique_check(self):
+        unique_sub_sub = SubSubUniqueFieldsModel.objects.create(unique_charfield="unique_charfield", unique_integerfield=1, non_unique_field=2)
+        unique_sub_sub2 = SubSubUniqueFieldsModel(unique_charfield="unique_charfield", unique_integerfield=1, non_unique_field=2)
+        self.assertRaises(ValidationError, unique_sub_sub2.full_clean)
+
