diff --git a/django/contrib/syndication/views.py b/django/contrib/syndication/views.py
index e4ff6e6..cb453df 100644
--- a/django/contrib/syndication/views.py
+++ b/django/contrib/syndication/views.py
@@ -138,6 +138,7 @@ class Feed(object):
             feed_copyright=self.__get_dynamic_attr('feed_copyright', obj),
             feed_guid=self.__get_dynamic_attr('feed_guid', obj),
             ttl=self.__get_dynamic_attr('ttl', obj),
+            stylesheets = self.__get_dynamic_attr('stylesheets', obj),
             **self.feed_extra_kwargs(obj)
         )
 
diff --git a/django/utils/feedgenerator.py b/django/utils/feedgenerator.py
index 52c0ecc..ac94d37 100644
--- a/django/utils/feedgenerator.py
+++ b/django/utils/feedgenerator.py
@@ -87,13 +87,15 @@ class SyndicationFeed(object):
     "Base class for all syndication feeds. Subclasses should provide write()"
     def __init__(self, title, link, description, language=None, author_email=None,
             author_name=None, author_link=None, subtitle=None, categories=None,
-            feed_url=None, feed_copyright=None, feed_guid=None, ttl=None, **kwargs):
+            feed_url=None, feed_copyright=None, feed_guid=None, ttl=None, stylesheets=None, **kwargs):
         to_unicode = lambda s: force_text(s, strings_only=True)
         if categories:
             categories = [force_text(c) for c in categories]
         if ttl is not None:
             # Force ints to unicode
             ttl = force_text(ttl)
+        if stylesheets:
+            stylesheets = [iri_to_uri(s) for s in stylesheets]
         self.feed = {
             'title': to_unicode(title),
             'link': iri_to_uri(link),
@@ -108,6 +110,7 @@ class SyndicationFeed(object):
             'feed_copyright': to_unicode(feed_copyright),
             'id': feed_guid or link,
             'ttl': ttl,
+            'stylesheets': stylesheets or (),
         }
         self.feed.update(kwargs)
         self.items = []
@@ -223,6 +226,9 @@ class RssFeed(SyndicationFeed):
     def write(self, outfile, encoding):
         handler = SimplerXMLGenerator(outfile, encoding)
         handler.startDocument()
+        for s in self.feed['stylesheets']:
+            # http://www.w3.org/TR/xml-stylesheet/
+            handler.processingInstruction('xml-stylesheet', 'type="text/css" href="%s"' % s)
         handler.startElement("rss", self.rss_attributes())
         handler.startElement("channel", self.root_attributes())
         self.add_root_elements(handler)
@@ -322,6 +328,9 @@ class Atom1Feed(SyndicationFeed):
     def write(self, outfile, encoding):
         handler = SimplerXMLGenerator(outfile, encoding)
         handler.startDocument()
+        for s in self.feed['stylesheets']:
+            # http://www.w3.org/TR/xml-stylesheet/
+            handler.processingInstruction('xml-stylesheet', 'type="text/css" href="%s"' % s)
         handler.startElement('feed', self.root_attributes())
         self.add_root_elements(handler)
         self.write_items(handler)
diff --git a/docs/ref/contrib/syndication.txt b/docs/ref/contrib/syndication.txt
index 7e31eb0..9a213b6 100644
--- a/docs/ref/contrib/syndication.txt
+++ b/docs/ref/contrib/syndication.txt
@@ -323,6 +323,14 @@ Atom feeds require a ``<link rel="self">`` that defines the feed's current
 location. The syndication framework populates this automatically, using the
 domain of the current site according to the :setting:`SITE_ID` setting.
 
+Stylesheets
+-----------
+
+.. versionadded:: 1.8
+
+RSS and Atom feeds support the inclusion of stylesheets via the ``stylesheets``
+attribute, as a sequence of stylesheets to be added to the feed.
+
 Publishing Atom and RSS feeds in tandem
 ---------------------------------------
 
@@ -587,6 +595,8 @@ This example illustrates all possible attributes and methods for a
 
         ttl = 600 # Hard-coded Time To Live.
 
+        stylesheets = ('http://www.example.com/example.css',) # Hard-coded stylesheets to be added to feed
+
         # ITEMS -- One of the following three is required. The framework looks
         # for them in this order.
 
@@ -914,12 +924,13 @@ They share this interface:
     * ``feed_copyright``
     * ``feed_guid``
     * ``ttl``
+    * ``stylesheets``
 
     Any extra keyword arguments you pass to ``__init__`` will be stored in
     ``self.feed`` for use with `custom feed generators`_.
 
-    All parameters should be Unicode objects, except ``categories``, which
-    should be a sequence of Unicode objects.
+    All parameters should be Unicode objects, except ``categories`` and
+    ``stylesheets``, which should be sequences of Unicode objects.
 
 :meth:`.SyndicationFeed.add_item`
     Add an item to the feed with the given parameters.
diff --git a/tests/syndication_tests/tests.py b/tests/syndication_tests/tests.py
index 8da3d5e..33952ea 100644
--- a/tests/syndication_tests/tests.py
+++ b/tests/syndication_tests/tests.py
@@ -70,6 +70,10 @@ class SyndicationFeedTest(FeedTestCase):
         feed = feed_elem[0]
         self.assertEqual(feed.getAttribute('version'), '2.0')
 
+        # Verify document has a stylesheet element (processing instruction <?xml-stylesheet ... ?>)
+        self.assertEqual(doc.firstChild.target, 'xml-stylesheet')
+        self.assertEqual(doc.firstChild.data, 'type="text/css" href="http://www.example.com/example.css"')
+
         # Making sure there's only one `channel` element w/in the
         # `rss` element.
         chan_elem = feed.getElementsByTagName('channel')
