Index: wp-includes/default-filters.php
===================================================================
--- wp-includes/default-filters.php	(revision 11972)
+++ wp-includes/default-filters.php	(working copy)
@@ -144,7 +144,6 @@
 add_filter('the_title_rss', 'strip_tags');
 add_filter('the_title_rss', 'ent2ncr', 8);
 add_filter('the_title_rss', 'esc_html');
-add_filter('the_content_rss', 'ent2ncr', 8);
 add_filter('the_excerpt_rss', 'convert_chars');
 add_filter('the_excerpt_rss', 'ent2ncr', 8);
 add_filter('comment_author_rss', 'ent2ncr', 8);
Index: wp-includes/deprecated.php
===================================================================
--- wp-includes/deprecated.php	(revision 11972)
+++ wp-includes/deprecated.php	(working copy)
@@ -1690,4 +1690,70 @@
 	the_author_meta('ID');
 }
 
-?>
\ No newline at end of file
+/**
+ * Display the post content for the feed.
+ *
+ * For encoding the html or the $encode_html parameter, there are three possible
+ * values. '0' will make urls footnotes and use make_url_footnote(). '1' will
+ * encode special characters and automatically display all of the content. The
+ * value of '2' will strip all HTML tags from the content.
+ *
+ * Also note that you cannot set the amount of words and not set the html
+ * encoding. If that is the case, then the html encoding will default to 2,
+ * which will strip all HTML tags.
+ *
+ * To restrict the amount of words of the content, you can use the cut
+ * parameter. If the content is less than the amount, then there won't be any
+ * dots added to the end. If there is content left over, then dots will be added
+ * and the rest of the content will be removed.
+ *
+ * @package WordPress
+ * @subpackage Feed
+ * @since 0.71
+ * @deprecated 2.9
+ * @uses apply_filters() Calls 'the_content_rss' on the content before processing.
+ * @see get_the_content() For the $more_link_text, $stripteaser, and $more_file
+ *		parameters.
+ *
+ * @param string $more_link_text Optional. Text to display when more content is available but not displayed.
+ * @param int|bool $stripteaser Optional. Default is 0.
+ * @param string $more_file Optional.
+ * @param int $cut Optional. Amount of words to keep for the content.
+ * @param int $encode_html Optional. How to encode the content.
+ */
+function the_content_rss($more_link_text='(more...)', $stripteaser=0, $more_file='', $cut = 0, $encode_html = 0) {
+	_deprecated_function(__FUNCTION__, '2.9', 'the_content_feed' );
+
+	$content = get_the_content($more_link_text, $stripteaser, $more_file);
+	$content = apply_filters('the_content_rss', $content);
+	if ( $cut && !$encode_html )
+		$encode_html = 2;
+	if ( 1== $encode_html ) {
+		$content = esc_html($content);
+		$cut = 0;
+	} elseif ( 0 == $encode_html ) {
+		$content = make_url_footnote($content);
+	} elseif ( 2 == $encode_html ) {
+		$content = strip_tags($content);
+	}
+	if ( $cut ) {
+		$blah = explode(' ', $content);
+		if ( count($blah) > $cut ) {
+			$k = $cut;
+			$use_dotdotdot = 1;
+		} else {
+			$k = count($blah);
+			$use_dotdotdot = 0;
+		}
+
+		/** @todo Check performance, might be faster to use array slice instead. */
+		$excerpt = '';
+		for ( $i=0; $i<$k; $i++ )
+			$excerpt .= $blah[$i].' ';
+		$excerpt .= ($use_dotdotdot) ? '...' : '';
+		$content = $excerpt;
+	}
+	$content = str_replace(']]>', ']]&gt;', $content);
+	echo $content;
+}
+add_filter('the_content_rss', 'ent2ncr', 8);
\ No newline at end of file
Index: wp-includes/feed-atom.php
===================================================================
--- wp-includes/feed-atom.php	(revision 11972)
+++ wp-includes/feed-atom.php	(working copy)
@@ -43,7 +43,7 @@
 		<?php the_category_rss('atom') ?>
 		<summary type="<?php html_type_rss(); ?>"><![CDATA[<?php the_excerpt_rss(); ?>]]></summary>
 <?php if ( !get_option('rss_use_excerpt') ) : ?>
-		<content type="<?php html_type_rss(); ?>" xml:base="<?php the_permalink_rss() ?>"><![CDATA[<?php the_content('', 0, '') ?>]]></content>
+		<content type="<?php html_type_rss(); ?>" xml:base="<?php the_permalink_rss() ?>"><![CDATA[<?php the_content_feed() ?>]]></content>
 <?php endif; ?>
 <?php atom_enclosure(); ?>
 <?php do_action('atom_entry'); ?>
Index: wp-includes/feed-rdf.php
===================================================================
--- wp-includes/feed-rdf.php	(revision 11972)
+++ wp-includes/feed-rdf.php	(working copy)
@@ -43,11 +43,11 @@
 	 <dc:date><?php echo mysql2date('Y-m-d\TH:i:s\Z', $post->post_date_gmt, false); ?></dc:date>
 	<dc:creator><?php the_author() ?></dc:creator>
 	<?php the_category_rss('rdf') ?>
-<?php if (get_option('rss_use_excerpt')) : ?>
-	<description><?php the_excerpt_rss() ?></description>
+<?php if ( get_option('rss_use_excerpt') ) : ?>
+	<description><?php the_excerpt_rss(); ?></description>
 <?php else : ?>
-	<description><?php the_content_rss('', 0, '', get_option('rss_excerpt_length'), 2) ?></description>
-	<content:encoded><![CDATA[<?php the_content('', 0, '') ?>]]></content:encoded>
+	<description><?php the_content_feed( true ); ?></description>
+	<content:encoded><![CDATA[<?php the_content_feed(); ?>]]></content:encoded>
 <?php endif; ?>
 	<?php do_action('rdf_item'); ?>
 </item>
Index: wp-includes/feed-rss.php
===================================================================
--- wp-includes/feed-rss.php	(revision 11972)
+++ wp-includes/feed-rss.php	(working copy)
@@ -23,10 +23,10 @@
 <?php while (have_posts()) : the_post(); ?>
 	<item>
 		<title><?php the_title_rss() ?></title>
-<?php if (get_option('rss_use_excerpt')) { ?>
+<?php if ( get_option('rss_use_excerpt') ) { ?>
 		<description><![CDATA[<?php the_excerpt_rss() ?>]]></description>
 <?php } else { // use content ?>
-		<description><?php the_content_rss('', 0, '', get_option('rss_excerpt_length')) ?></description>
+		<description><?php the_content_feed( true ); ?></description>
 <?php } ?>
 		<link><?php the_permalink_rss() ?></link>
 		<?php do_action('rss_item'); ?>
Index: wp-includes/feed-rss2.php
===================================================================
--- wp-includes/feed-rss2.php	(revision 11972)
+++ wp-includes/feed-rss2.php	(working copy)
@@ -41,16 +41,18 @@
 		<?php the_category_rss() ?>
 
 		<guid isPermaLink="false"><?php the_guid(); ?></guid>
-<?php if (get_option('rss_use_excerpt')) : ?>
 		<description><![CDATA[<?php the_excerpt_rss() ?>]]></description>
+<?php
+if ( !get_option('rss_use_excerpt') ) :
+	if ( strlen( $post->post_content ) > 0 ) :
+?>
+		<content:encoded><![CDATA[<?php the_content_feed() ?>]]></content:encoded>
 <?php else : ?>
-		<description><![CDATA[<?php the_excerpt_rss() ?>]]></description>
-	<?php if ( strlen( $post->post_content ) > 0 ) : ?>
-		<content:encoded><![CDATA[<?php the_content() ?>]]></content:encoded>
-	<?php else : ?>
 		<content:encoded><![CDATA[<?php the_excerpt_rss() ?>]]></content:encoded>
-	<?php endif; ?>
-<?php endif; ?>
+<?php
+	endif;
+endif;
+?>
 		<wfw:commentRss><?php echo get_post_comments_feed_link(null, 'rss2'); ?></wfw:commentRss>
 		<slash:comments><?php echo get_comments_number(); ?></slash:comments>
 <?php rss_enclosure(); ?>
Index: wp-includes/feed.php
===================================================================
--- wp-includes/feed.php	(revision 11972)
+++ wp-includes/feed.php	(working copy)
@@ -132,64 +132,34 @@
 /**
  * Display the post content for the feed.
  *
- * For encoding the html or the $encode_html parameter, there are three possible
- * values. '0' will make urls footnotes and use make_url_footnote(). '1' will
- * encode special characters and automatically display all of the content. The
- * value of '2' will strip all HTML tags from the content.
- *
- * Also note that you cannot set the amount of words and not set the html
- * encoding. If that is the case, then the html encoding will default to 2,
- * which will strip all HTML tags.
- *
- * To restrict the amount of words of the content, you can use the cut
- * parameter. If the content is less than the amount, then there won't be any
- * dots added to the end. If there is content left over, then dots will be added
- * and the rest of the content will be removed.
- *
  * @package WordPress
  * @subpackage Feed
- * @since 0.71
- * @uses apply_filters() Calls 'the_content_rss' on the content before processing.
- * @see get_the_content() For the $more_link_text, $stripteaser, and $more_file
- *		parameters.
+ * @since 2.9
+ * @uses apply_filters() Calls 'the_content' hook on the content.
+ * @uses apply_filters() Calls 'the_content_feed' hook on the content.
  *
- * @param string $more_link_text Optional. Text to display when more content is available but not displayed.
- * @param int|bool $stripteaser Optional. Default is 0.
- * @param string $more_file Optional.
- * @param int $cut Optional. Amount of words to keep for the content.
- * @param int $encode_html Optional. How to encode the content.
+ * @param boolean $short Optional. Trims the content short if true.
  */
-function the_content_rss($more_link_text='(more...)', $stripteaser=0, $more_file='', $cut = 0, $encode_html = 0) {
-	$content = get_the_content($more_link_text, $stripteaser, $more_file);
-	$content = apply_filters('the_content_rss', $content);
-	if ( $cut && !$encode_html )
-		$encode_html = 2;
-	if ( 1== $encode_html ) {
-		$content = esc_html($content);
-		$cut = 0;
-	} elseif ( 0 == $encode_html ) {
-		$content = make_url_footnote($content);
-	} elseif ( 2 == $encode_html ) {
-		$content = strip_tags($content);
-	}
-	if ( $cut ) {
-		$blah = explode(' ', $content);
-		if ( count($blah) > $cut ) {
-			$k = $cut;
-			$use_dotdotdot = 1;
-		} else {
-			$k = count($blah);
-			$use_dotdotdot = 0;
-		}
+function the_content_feed( $short = false ) {
+	$content = get_the_content( '' );
 
-		/** @todo Check performance, might be faster to use array slice instead. */
-		for ( $i=0; $i<$k; $i++ )
-			$excerpt .= $blah[$i].' ';
-		$excerpt .= ($use_dotdotdot) ? '...' : '';
-		$content = $excerpt;
+	if ( $short ) {
+		$content = strip_shortcodes( $content );
+		$content = ent2ncr( $content );
+		$content = str_replace( ']]>', ']]&gt;', $content );
+		$content = strip_tags( $content );
+		$length = (int) get_option( 'rss_excerpt_length' );
+		$words = explode(' ', $content, $length + 1);
+		if ( count( $words ) > $length ) {
+			array_pop( $words );
+			array_push( $words, apply_filters( 'feed_more', '...' ) );
+			$content = implode( ' ', $words );
+		}
+	} else {
+		$content = apply_filters( 'the_content', $content );
 	}
-	$content = str_replace(']]>', ']]&gt;', $content);
-	echo $content;
+
+	echo apply_filters( 'the_content_feed', $content, $short );
 }
 
 /**
