Index: docs/topics/auth.txt
===================================================================
--- docs/topics/auth.txt	(revision 15550)
+++ docs/topics/auth.txt	(working copy)
@@ -1334,7 +1334,7 @@
 
 The currently logged-in user's permissions are stored in the template variable
 ``{{ perms }}``. This is an instance of
-:class:`django.core.context_processors.PermWrapper`, which is a
+:class:`django.contrib.auth.context_processors.PermWrapper`, which is a
 template-friendly proxy of permissions.
 
 In the ``{{ perms }}`` object, single-attribute lookup is a proxy to
Index: docs/ref/templates/api.txt
===================================================================
--- docs/ref/templates/api.txt	(revision 15550)
+++ docs/ref/templates/api.txt	(working copy)
@@ -423,9 +423,13 @@
       via the :doc:`messages framework </ref/contrib/messages>`.
 
     * ``perms`` -- An instance of
-      ``django.core.context_processors.PermWrapper``, representing the
+      ``django.contrib.auth.context_processors.PermWrapper``, representing the
       permissions that the currently logged-in user has.
 
+.. versionchanged:: 1.3
+    ``perms`` was moved in this release from
+    ``django.core.context_processors.auth`` to its current location.
+
 .. versionchanged:: 1.2
     This context processor was moved in this release from
     ``django.core.context_processors.auth`` to its current location.
Index: django/core/context_processors.py
===================================================================
--- django/core/context_processors.py	(revision 15550)
+++ django/core/context_processors.py	(working copy)
@@ -86,6 +86,9 @@
 # PermWrapper and PermLookupDict proxy the permissions system into objects that
 # the template system can understand.
 
+# Deprecation Warning: PermWrapper would be accessible from django.contrib.auth.context_processors from version 1.3 
+# and it would be removed from django.core.context_processors in future versions.
+
 class PermLookupDict(object):
     def __init__(self, user, module_name):
         self.user, self.module_name = user, module_name
@@ -99,8 +102,15 @@
     def __nonzero__(self):
         return self.user.has_module_perms(self.module_name)
 
+
 class PermWrapper(object):
     def __init__(self, user):
+        import warnings
+        warnings.warn(
+            'PermWrapper would be accessible from django.contrib.auth.context_processors
+            from version 1.3 and it would be removed from django.core.context_processors in future versions.',
+            DeprecationWarning
+        )
         self.user = user
 
     def __getitem__(self, module_name):
Index: django/contrib/auth/context_processors.py
===================================================================
--- django/contrib/auth/context_processors.py	(revision 15550)
+++ django/contrib/auth/context_processors.py	(working copy)
@@ -1,7 +1,34 @@
-from django.core.context_processors import PermWrapper
 from django.utils.functional import lazy, memoize, SimpleLazyObject
 from django.contrib import messages
 
+# PermWrapper and PermLookupDict proxy the permissions system into objects that
+# the template system can understand.
+
+class PermLookupDict(object):
+    def __init__(self, user, module_name):
+        self.user, self.module_name = user, module_name
+
+    def __repr__(self):
+        return str(self.user.get_all_permissions())
+
+    def __getitem__(self, perm_name):
+        return self.user.has_perm("%s.%s" % (self.module_name, perm_name))
+
+    def __nonzero__(self):
+        return self.user.has_module_perms(self.module_name)
+
+
+class PermWrapper(object):
+    def __init__(self, user):
+        self.user = user
+
+    def __getitem__(self, module_name):
+        return PermLookupDict(self.user, module_name)
+
+    def __iter__(self):
+        # I am large, I contain multitudes.
+        raise TypeError("PermWrapper is not iterable.")
+
 def auth(request):
     """
     Returns context variables required by apps that use Django's authentication
Index: docs/internals/deprecation.txt
===================================================================
--- docs/internals/deprecation.txt	(revision 15550)
+++ docs/internals/deprecation.txt	(working copy)
@@ -18,6 +18,10 @@
         * The :mod:`django.contrib.gis.db.backend` module, including the
           ``SpatialBackend`` interface, is deprecated since the 1.2 release.
 
+        * In this release :class:`django.core.context_processors.PermWrapper` will be 
+          moved to :class:`django.contrib.auth.context_processors.PermWrapper`. The 
+          former location is deprecated from 1.3 and would be removed in future releases. 
+
     * 1.4
         * ``CsrfResponseMiddleware``.  This has been deprecated since the 1.2
           release, in favour of the template tag method for inserting the CSRF

