Index: django/contrib/gis/sitemaps/georss.py
===================================================================
--- django/contrib/gis/sitemaps/georss.py	(revision 14111)
+++ django/contrib/gis/sitemaps/georss.py	(working copy)
@@ -36,12 +36,12 @@
             else:
                 self.locations.append(section)
  
-    def get_urls(self, page=1):
+    def get_urls(self, page=1, site=None):
         """
         This method is overrridden so the appropriate `geo_format` attribute
         is placed on each URL element.
         """
-        urls = Sitemap.get_urls(self, page=page)
+        urls = Sitemap.get_urls(self, page=page, site=site)
         for url in urls: url['geo_format'] = 'georss'
         return urls
 
Index: django/contrib/gis/sitemaps/kml.py
===================================================================
--- django/contrib/gis/sitemaps/kml.py	(revision 14111)
+++ django/contrib/gis/sitemaps/kml.py	(working copy)
@@ -40,12 +40,12 @@
                 raise TypeError('KML Sources must be a model or a 3-tuple.')
         return kml_sources
 
-    def get_urls(self, page=1):
+    def get_urls(self, page=1, site=None):
         """
         This method is overrridden so the appropriate `geo_format` attribute
         is placed on each URL element.
         """
-        urls = Sitemap.get_urls(self, page=page)
+        urls = Sitemap.get_urls(self, page=page, site=site)
         for url in urls: url['geo_format'] = self.geo_format
         return urls
 
Index: django/contrib/gis/sitemaps/views.py
===================================================================
--- django/contrib/gis/sitemaps/views.py	(revision 14111)
+++ django/contrib/gis/sitemaps/views.py	(working copy)
@@ -46,12 +46,13 @@
         maps = sitemaps.values()
 
     page = request.GET.get("p", 1)
+    current_site = get_current_site(request)
     for site in maps:
         try:
             if callable(site):
-                urls.extend(site().get_urls(page))
+                urls.extend(site().get_urls(page, current_site))
             else:
-                urls.extend(site.get_urls(page))
+                urls.extend(site.get_urls(page, current_site))
         except EmptyPage:
             raise Http404("Page %s empty" % page)
         except PageNotAnInteger:
Index: django/contrib/sitemaps/__init__.py
===================================================================
--- django/contrib/sitemaps/__init__.py	(revision 14111)
+++ django/contrib/sitemaps/__init__.py	(working copy)
@@ -1,4 +1,4 @@
-from django.contrib.sites.models import get_current_site
+from django.contrib.sites.models import Site, get_current_site
 from django.core import urlresolvers, paginator
 import urllib
 
@@ -60,11 +60,15 @@
         return self._paginator
     paginator = property(_get_paginator)
 
-    def get_urls(self, page=1):
-        current_site = get_current_site(self.request)
+    def get_urls(self, page=1, site=None):
+        if site is None:
+            try:
+                site = Site.objects.get_current()
+            except Site.DoesNotExist:
+                raise ImproperlyConfigured("In order to use Sitemaps you must either use the sites framework or pass in a Site or RequestSite object in your view code.")
         urls = []
         for item in self.paginator.page(page).object_list:
-            loc = "http://%s%s" % (current_site.domain, self.__get('location', item))
+            loc = "http://%s%s" % (site.domain, self.__get('location', item))
             priority = self.__get('priority', item, None)
             url_info = {
                 'location':   loc,
@@ -77,11 +81,8 @@
 
 class FlatPageSitemap(Sitemap):
     def items(self):
-        current_site = get_current_site(self.request)
-        if hasattr(current_site, "flatpage_set"):
-            return current_site.flatpage_set.filter(registration_required=False)
-        else:
-            return ()
+        current_site = Site.objects.get_current()
+        return current_site.flatpage_set.filter(registration_required=False)
 
 class GenericSitemap(Sitemap):
     priority = None
Index: django/contrib/sitemaps/views.py
===================================================================
--- django/contrib/sitemaps/views.py	(revision 14111)
+++ django/contrib/sitemaps/views.py	(working copy)
@@ -32,13 +32,13 @@
     else:
         maps = sitemaps.values()
     page = request.GET.get("p", 1)
+    current_site = get_current_site(request)
     for site in maps:
-        site.request = request
         try:
             if callable(site):
-                urls.extend(site().get_urls(page))
+                urls.extend(site().get_urls(page, current_site))
             else:
-                urls.extend(site.get_urls(page))
+                urls.extend(site.get_urls(page, current_site))
         except EmptyPage:
             raise Http404("Page %s empty" % page)
         except PageNotAnInteger:
