Index: contrib/comments/__init__.py
===================================================================
--- contrib/comments/__init__.py	(revision 8966)
+++ contrib/comments/__init__.py	(working copy)
@@ -22,12 +22,6 @@
         raise ImproperlyConfigured("The COMMENTS_APP setting refers to "\
                                    "a non-existing package.")
 
-    # Make sure some specific attributes exist inside that package.
-    for attribute in REQUIRED_COMMENTS_APP_ATTRIBUTES:
-        if not hasattr(package, attribute):
-            raise ImproperlyConfigured("The COMMENTS_APP package %r does not "\
-                                       "define the (required) %r function" % \
-                                            (package, attribute))
 
     return package
 
@@ -39,15 +33,24 @@
     return getattr(settings, 'COMMENTS_APP', 'django.contrib.comments')
 
 def get_model():
-    from django.contrib.comments.models import Comment
-    return Comment
+    if get_comment_app_name() != __name__ and hasattr(get_comment_app(), "get_model"):
+        return get_comment_app().get_model()
+    else:
+        from django.contrib.comments.models import Comment
+        return Comment
 
 def get_form():
-    from django.contrib.comments.forms import CommentForm
-    return CommentForm
+    if get_comment_app_name() != __name__ and hasattr(get_comment_app(), "get_form"):
+        return get_comment_app().get_form()
+    else:
+        from django.contrib.comments.forms import CommentForm
+        return CommentForm
 
 def get_form_target():
-    return urlresolvers.reverse("django.contrib.comments.views.comments.post_comment")
+    if get_comment_app_name() != __name__ and hasattr(get_comment_app(), "get_form_target"):
+        return get_comment_app().get_form_target()
+    else:
+        return urlresolvers.reverse("django.contrib.comments.views.comments.post_comment")
 
 def get_flag_url(comment):
     """
