Index: django/contrib/admin/options.py
===================================================================
--- django/contrib/admin/options.py	(revision 6051)
+++ django/contrib/admin/options.py	(working copy)
@@ -118,6 +118,8 @@
     fields = None
     filter_vertical = ()
     filter_horizontal = ()
+    prepopulated_fields = {}
+
     def formfield_for_dbfield(self, db_field, **kwargs):
         """
         Hook for specifying the form Field instance for a given database Field
@@ -155,7 +157,7 @@
                 # Wrap the widget's render() method with a method that adds
                 # extra HTML to the end of the rendered output.
                 formfield = db_field.formfield(**kwargs)
-                formfield.widget.render = widgets.RelatedFieldWidgetWrapper(formfield.widget.render, db_field.rel)
+                formfield.widget.render = widgets.RelatedFieldWidgetWrapper(formfield.widget.render, db_field.rel, self.admin_site)
                 return formfield
 
         # For any other type of field, just call its formfield() method.
@@ -175,12 +177,12 @@
     save_as = False
     save_on_top = False
     ordering = None
-    prepopulated_fields = {}
     inlines = []
 
-    def __init__(self, model):
+    def __init__(self, model, admin_site):
         self.model = model
         self.opts = model._meta
+        self.admin_site = admin_site
 
     def __call__(self, request, url):
         # Check that LogEntry, ContentType and the auth context processor are installed.
@@ -610,7 +612,7 @@
 
     def get_inline_formsets(self):
         inline_formset_classes = []
-        for opts in self.inlines:
+        for opts in [obj(self.admin_site) for obj in self.inlines]:
             inline = forms.inline_formset(self.model, opts.model, formfield_callback=opts.formfield_for_dbfield, fields=opts.fields, extra=opts.extra)
             inline_formset_classes.append(inline)
         return inline_formset_classes
@@ -623,23 +625,26 @@
     ``model`` to its parent. This is required if ``model`` has more than one
     ``ForeignKey`` to its parent.
     """
-    def __init__(self, model, name=None, extra=3, fields=None, template=None, raw_id_fields=None):
-        self.model = model
-        self.opts = model._meta
-        self.name = name
-        self.extra = extra
-        self.fields = fields
-        self.template = template or self.default_template
-        self.verbose_name = model._meta.verbose_name
-        self.verbose_name_plural = model._meta.verbose_name_plural
-        self.prepopulated_fields = {}
-        self.raw_id_fields = raw_id_fields or ()
+    model = None
+    name = None
+    extra = 3
+    template = None
+    verbose_name = None
+    verbose_name_plural = None
 
+    def __init__(self, admin_site):
+        self.admin_site = admin_site
+        self.opts = self.model._meta
+        if not self.verbose_name:
+            self.verbose_name = self.model._meta.verbose_name
+        if not self.verbose_name_plural:
+            self.verbose_name_plural = self.model._meta.verbose_name_plural
+
 class StackedInline(InlineModelAdmin):
-    default_template = 'admin/edit_inline_stacked.html'
+    template = 'admin/edit_inline_stacked.html'
 
 class TabularInline(InlineModelAdmin):
-    default_template = 'admin/edit_inline_tabular.html'
+    template = 'admin/edit_inline_tabular.html'
 
 class BoundInline(object):
     def __init__(self, inline_admin, formset):
Index: django/contrib/admin/widgets.py
===================================================================
--- django/contrib/admin/widgets.py	(revision 6051)
+++ django/contrib/admin/widgets.py	(working copy)
@@ -91,15 +91,17 @@
     This class is a wrapper whose __call__() method mimics the interface of a
     Widget's render() method.
     """
-    def __init__(self, render_func, rel):
+    def __init__(self, render_func, rel, admin_site):
         self.render_func, self.rel = render_func, rel
+        # so we can check if the related object is registered with this AdminSite
+        self.admin_site = admin_site
 
     def __call__(self, name, value, *args, **kwargs):
         from django.conf import settings
         rel_to = self.rel.to
         related_url = '../../../%s/%s/' % (rel_to._meta.app_label, rel_to._meta.object_name.lower())
         output = [self.render_func(name, value, *args, **kwargs)]
-        if rel_to._meta.admin: # If the related object has an admin interface:
+        if rel_to in self.admin_site._registry: # If the related object has an admin interface:
             # TODO: "id_" is hard-coded here. This should instead use the correct
             # API to determine the ID dynamically.
             output.append(u'<a href="%sadd/" class="add-another" id="add_id_%s" onclick="return showAddAnotherPopup(this);"> ' % \
Index: django/contrib/admin/sites.py
===================================================================
--- django/contrib/admin/sites.py	(revision 6051)
+++ django/contrib/admin/sites.py	(working copy)
@@ -77,7 +77,7 @@
         for model in model_or_iterable:
             if model in self._registry:
                 raise AlreadyRegistered('The model %s is already registered' % model.__name__)
-            self._registry[model] = admin_class(model)
+            self._registry[model] = admin_class(model, self)
 
     def unregister(self, model_or_iterable):
         """
