diff --git a/core/modules/rest/lib/Drupal/rest/Plugin/views/style/Serializer.php b/core/modules/rest/lib/Drupal/rest/Plugin/views/style/Serializer.php
index c3e0b5d..18035a0 100644
--- a/core/modules/rest/lib/Drupal/rest/Plugin/views/style/Serializer.php
+++ b/core/modules/rest/lib/Drupal/rest/Plugin/views/style/Serializer.php
@@ -7,6 +7,7 @@
 
 namespace Drupal\rest\Plugin\views\style;
 
+use Drupal\serialization\EntityCollection;
 use Drupal\views\ViewExecutable;
 use Drupal\views\Plugin\views\display\DisplayPluginBase;
 use Drupal\views\Plugin\views\style\StylePluginBase;
@@ -126,7 +127,15 @@ public function render() {
       $rows[] = $this->view->rowPlugin->render($row);
     }
 
-    return $this->serializer->serialize($rows, $this->displayHandler->getContentType());
+    $collection = new EntityCollection();
+    $collection->setTitle($this->view->getTitle());
+    // @todo Use the real description.
+    $collection->setDescription('foobar');
+    $uri = url('test/serialize/entity', array('absolute' => TRUE));
+    $collection->setUri($uri);
+    $collection->setItems($rows);
+
+    return $this->serializer->serialize($collection, $this->displayHandler->getContentType());
   }
 
   /**
diff --git a/core/modules/rest/lib/Drupal/rest/Tests/Views/RssTest.php b/core/modules/rest/lib/Drupal/rest/Tests/Views/RssTest.php
new file mode 100644
index 0000000..1c521eb
--- /dev/null
+++ b/core/modules/rest/lib/Drupal/rest/Tests/Views/RssTest.php
@@ -0,0 +1,104 @@
+<?php
+/**
+ * @file
+ * Contains \Drupal\rest\Tests\ViewsRssTest
+ */
+
+namespace Drupal\rest\Tests\Views;
+
+use Drupal\views\Tests\Plugin\PluginTestBase;
+use Drupal\views\Tests\ViewTestData;
+
+/**
+ * Test the RSS encoder when used in Views.
+ */
+class RssTest extends PluginTestBase  {
+
+  /**
+   * Modules to enable.
+   *
+   * @var array
+   */
+  public static $modules = array('views_ui', 'entity_test', 'rest_test_views');
+
+  /**
+   * Views used by this test.
+   *
+   * @var array
+   */
+  public static $testViews = array('test_serializer_display_field', 'test_serializer_display_entity');
+
+  /**
+   * A user with administrative privileges to look at test entity and configure views.
+   */
+  protected $adminUser;
+
+  public static function getInfo() {
+    return array(
+      'name' => 'Style: Serializer plugin (RSS)',
+      'description' => 'Tests the RSS ouput of the serializer style plugin.',
+      'group' => 'Views Plugins',
+    );
+  }
+
+  protected function setUp() {
+    parent::setUp();
+
+    ViewTestData::importTestViews(get_class($this), array('rest_test_views'));
+
+    $this->adminUser = $this->drupalCreateUser(array(
+      'administer views',
+      'administer entity_test content',
+      'access user profiles',
+      'view test entity')
+    );
+
+    // Save some entity_test entities.
+    for ($i = 1; $i <= 2; $i++) {
+      entity_create('entity_test', array('name' => 'test_' . $i, 'user_id' => $this->adminUser->id()))->save();
+    }
+
+    $this->enableViewsTestModule();
+  }
+
+  public function testRssOutput() {
+    // Test the serialize callback.
+    $view = views_get_view('test_serializer_display_entity');
+    $view->initDisplay();
+    $this->executeView($view);
+
+    $actual_rss = $this->drupalGet('test/serialize/entity', array(), array('Accept: application/rss+xml'));
+    $this->assertResponse(200);
+
+    // Test the http Content-type.
+    $headers = $this->drupalGetHeaders();
+    $this->assertEqual($headers['content-type'], 'application/rss+xml', 'The header Content-type is correct.');
+
+    // Zend Writer formats with whitespace. Remove it for testing.
+    $actual_rss = trim(preg_replace( '/(?<=>)\s+(?=<)/', '', $actual_rss));
+    // Create the expected string.
+    $expected_rss = '<?xml version="1.0" encoding="UTF-8"?>';
+    $expected_rss .= '<rss version="2.0" xmlns:slash="http://purl.org/rss/1.0/modules/slash/">';
+    $expected_rss .= '<channel>';
+    $expected_rss .= '<title>Test serialize</title>';
+    $expected_rss .= '<description>foobar</description>';
+    $expected_rss .= '<generator>Zend_Feed_Writer 2 (http://framework.zend.com)</generator>';
+    $expected_rss .= '<link>' . url('test/serialize/entity', array('absolute' => TRUE)) . '</link>';
+    // Second item.
+    $expected_rss .= '<item>';
+    $expected_rss .= '<title>label callback test_2</title>';
+    $expected_rss .= '<slash:comments>0</slash:comments>';
+    $expected_rss .= '</item>';
+    // First item.
+    $expected_rss .= '<item>';
+    $expected_rss .= '<title>label callback test_1</title>';
+    $expected_rss .= '<slash:comments>0</slash:comments>';
+    $expected_rss .= '</item>';
+    // Closing tags.
+    $expected_rss .= '</channel>';
+    $expected_rss .= '</rss>';
+
+    $this->assertEqual($actual_rss, $expected_rss);
+  }
+
+}
\ No newline at end of file
diff --git a/core/modules/serialization/lib/Drupal/serialization/Encoder/RssEncoder.php b/core/modules/serialization/lib/Drupal/serialization/Encoder/RssEncoder.php
new file mode 100644
index 0000000..0eba511
--- /dev/null
+++ b/core/modules/serialization/lib/Drupal/serialization/Encoder/RssEncoder.php
@@ -0,0 +1,51 @@
+<?php
+/**
+ * @file
+ * Contains \Drupal\serialization\EncoderRssEncoder
+ */
+
+namespace Drupal\serialization\Encoder;
+
+use Drupal\serialization\EntityCollection;
+use Symfony\Component\HttpKernel\Exception\NotAcceptableHttpException;
+use Symfony\Component\Serializer\Encoder\EncoderInterface;
+use Symfony\Component\Serializer\Encoder\NormalizationAwareInterface;
+use Symfony\Component\Serializer\Encoder\SerializerAwareEncoder;
+use Zend\Feed\Writer\Feed;
+
+class RssEncoder extends SerializerAwareEncoder implements EncoderInterface, NormalizationAwareInterface {
+
+  /**
+   * {@inheritdoc}
+   */
+  public function encode($data, $format, array $context = array()) {
+    // Because this is an Encoder and not a Normalizer, we can't check the
+    // class in supportsEncoding. Instead, throw an exception if the data is not
+    // an EntityCollection.
+    if (!($data instanceof EntityCollection)) {
+      throw new NotAcceptableHttpException('RSS is only supported for EntityCollections.');
+    }
+
+    $feed = new Feed();
+    // Add channel data.
+    $feed->setTitle($data->getTitle());
+    $feed->setDescription($data->getDescription());
+    $feed->setLink($data->getUri());
+
+    // Add entries.
+    foreach ($data->getItems() as $item) {
+      $entry = $feed->createEntry();
+      $entry->setTitle($item->label());
+      $feed->addEntry($entry);
+    }
+
+    return $feed->export('rss');
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function supportsEncoding($format) {
+    return $format == 'rss';
+  }
+}
diff --git a/core/modules/serialization/lib/Drupal/serialization/EntityCollection.php b/core/modules/serialization/lib/Drupal/serialization/EntityCollection.php
new file mode 100644
index 0000000..7d2b7b9
--- /dev/null
+++ b/core/modules/serialization/lib/Drupal/serialization/EntityCollection.php
@@ -0,0 +1,114 @@
+<?php
+/**
+ * @file
+ * Contains \Drupal\serializationEntityCollection
+ */
+
+namespace Drupal\serialization;
+
+/**
+ * Provides a wrapper for a collection of entities, e.g. a feed channel.
+ */
+class EntityCollection {
+
+  /**
+   * The entities in the collection.
+   *
+   * var array
+   */
+  protected $items;
+
+  /**
+   * The title of the collection.
+   *
+   * @var string
+   */
+  protected $title;
+
+  /**
+   * The URI of the channel.
+   *
+   * @var string
+   */
+  protected $uri;
+
+  /**
+   * The description of the channel.
+   *
+   * @var string
+   */
+  protected $description;
+
+  /**
+   * Get the items list.
+   *
+   * @return array
+   */
+  public function getItems() {
+    return $this->items;
+  }
+
+  /**
+   * Set the items list.
+   *
+   * @param array $items
+   */
+  public function setItems($items) {
+    $this->items = $items;
+  }
+
+  /**
+   * Get the collection title.
+   *
+   * @return string
+   */
+  public function getTitle() {
+    return $this->title;
+  }
+
+  /**
+   * Set the collection title.
+   *
+   * @param string $title
+   */
+  public function setTitle($title) {
+    $this->title = $title;
+  }
+
+  /**
+   * Get the collection URI.
+   *
+   * @return string
+   */
+  public function getUri() {
+    return $this->uri;
+  }
+
+  /**
+   * Set the collection URI.
+   *
+   * @param string $uri
+   */
+  public function setUri($uri) {
+    $this->uri = $uri;
+  }
+
+  /**
+   * Get the collection description.
+   *
+   * @return string
+   */
+  public function getDescription() {
+    return $this->description;
+  }
+
+  /**
+   * Set the collection URI.
+   *
+   * @param string $description
+   */
+  public function setDescription($description) {
+    $this->description = $description;
+  }
+
+}
\ No newline at end of file
diff --git a/core/modules/serialization/lib/Drupal/serialization/Tests/EntitySerializationTest.php b/core/modules/serialization/lib/Drupal/serialization/Tests/EntitySerializationTest.php
index 46ad0cc..63c36ff 100644
--- a/core/modules/serialization/lib/Drupal/serialization/Tests/EntitySerializationTest.php
+++ b/core/modules/serialization/lib/Drupal/serialization/Tests/EntitySerializationTest.php
@@ -63,7 +63,7 @@ protected function setUp() {
     $this->entity = entity_create('entity_test_mulrev', $this->values);
     $this->entity->save();
 
-    $this->serializer = $this->container->get('serializer');
+    $this->serializer = $this->serializer;
 
     $this->installConfig(array('field'));
   }
diff --git a/core/modules/serialization/lib/Drupal/serialization/Tests/RssEntitySerializationTest.php b/core/modules/serialization/lib/Drupal/serialization/Tests/RssEntitySerializationTest.php
new file mode 100644
index 0000000..e0e2e07
--- /dev/null
+++ b/core/modules/serialization/lib/Drupal/serialization/Tests/RssEntitySerializationTest.php
@@ -0,0 +1,58 @@
+<?php
+/**
+ * @file
+ * Contains \Drupal\serialization\TestsRssEntitySerializationTest
+ */
+
+namespace Drupal\serialization\Tests;
+
+use Drupal\serialization\Encoder\RssEncoder;
+use Drupal\serialization\EntityCollection;
+use Drupal\simpletest\DrupalUnitTestBase;
+use Zend\Feed\Reader\Reader;
+
+class RssEntitySerializationTest extends DrupalUnitTestBase {
+
+  /**
+   * Modules to enable.
+   *
+   * @var array
+   */
+  public static $modules = array();
+
+  public static function getInfo() {
+    return array(
+      'name' => 'RSS Entity Serialization Test',
+      'description' => 'Tests that a list of entities can be output as RSS.',
+      'group' => 'Serialization',
+    );
+  }
+
+  /**
+   * Test that entity collections can be properly serialized to RSS.
+   */
+  function testRssOutput() {
+    $values = array(
+      'title' => $this->randomName(),
+      'description' => $this->randomName(),
+      'uri' => 'http://test.com/feed',
+    );
+
+    // Set up the Entity Collection.
+    $collection = new EntityCollection();
+    $collection->setTitle($values['title']);
+    $collection->setDescription($values['description']);
+    $collection->setUri($values['uri']);
+
+    // Serialize the collection.
+    $encoder = new RssEncoder();
+    $rss = $encoder->encode($collection, 'rss');
+    debug($rss);
+
+    // Parse the collection to test the values.
+    $feed = Reader::importString($rss);
+    $this->assertEqual($feed->getTitle(), $values['title'], 'Collection title was serialized correctly.');
+    $this->assertEqual($feed->getDescription(), $values['description'], 'Collection description was serialized correctly.');
+    $this->assertEqual($feed->getLink(), $values['uri'], 'Collection URI was serialized correctly.');
+  }
+}
\ No newline at end of file
diff --git a/core/modules/serialization/serialization.services.yml b/core/modules/serialization/serialization.services.yml
index 160d8b0..a876d81 100644
--- a/core/modules/serialization/serialization.services.yml
+++ b/core/modules/serialization/serialization.services.yml
@@ -18,6 +18,10 @@ services:
     class: Drupal\serialization\Encoder\JsonEncoder
     tags:
       - { name: encoder, format: json }
+  serializer.encoder.rss:
+    class: Drupal\serialization\Encoder\RssEncoder
+    tags:
+      - { name: encoder, format: rss }
   serializer.encoder.xml:
     class: Drupal\serialization\Encoder\XmlEncoder
     tags:
diff --git a/core/modules/system/tests/modules/entity_test/lib/Drupal/entity_test/Plugin/Core/Entity/EntityTest.php b/core/modules/system/tests/modules/entity_test/lib/Drupal/entity_test/Plugin/Core/Entity/EntityTest.php
index 6ce0c1b..fe2f6a2 100644
--- a/core/modules/system/tests/modules/entity_test/lib/Drupal/entity_test/Plugin/Core/Entity/EntityTest.php
+++ b/core/modules/system/tests/modules/entity_test/lib/Drupal/entity_test/Plugin/Core/Entity/EntityTest.php
@@ -27,6 +27,7 @@
  *     },
  *     "translation" = "Drupal\content_translation\ContentTranslationControllerNG"
  *   },
+ *   label_callback = "entity_test_label_callback",
  *   base_table = "entity_test",
  *   fieldable = TRUE,
  *   entity_keys = {
