Index: wp-includes/default-filters.php
===================================================================
--- wp-includes/default-filters.php	(revision 6328)
+++ wp-includes/default-filters.php	(working copy)
@@ -108,6 +108,7 @@
 add_filter('single_post_title', 'wptexturize');
 
 // RSS filters
+add_filter('feed_format', 'wp_feed_selector');
 add_filter('the_title_rss', 'strip_tags');
 add_filter('the_title_rss', 'ent2ncr', 8);
 add_filter('the_title_rss', 'wp_specialchars');
Index: wp-includes/link-template.php
===================================================================
--- wp-includes/link-template.php	(revision 6328)
+++ wp-includes/link-template.php	(working copy)
@@ -226,7 +226,7 @@
 	}
 }
 
-function get_feed_link($feed='rss2') {
+function get_feed_link($feed='') {
 	global $wp_rewrite;
 	$do_perma = 0;
 	$feed_url = get_option('siteurl');
@@ -239,7 +239,7 @@
 			$permalink = $wp_rewrite->get_comment_feed_permastruct();
 		}
 
-		if ( 'rss2' == $feed )
+		if ( get_default_feed() == $feed )
 			$feed = '';
 
 		$permalink = str_replace('%feed%', $feed, $permalink);
@@ -255,7 +255,7 @@
 	return apply_filters('feed_link', $output, $feed);
 }
 
-function get_post_comments_feed_link($post_id = '', $feed = 'rss2') {
+function get_post_comments_feed_link($post_id = '', $feed = '') {
 	global $id;
 
 	if ( empty($post_id) )
@@ -263,7 +263,7 @@
 
 	if ( '' != get_option('permalink_structure') ) {
 		$url = trailingslashit( get_permalink($post_id) ) . 'feed';
-		if ( 'rss2' != $feed )
+		if ( ('' != $feed) && (get_default_feed() != $feed) )
 			$url .= "/$feed";
 		$url = user_trailingslashit($url, 'single_feed');
 	} else {
Index: wp-includes/general-template.php
===================================================================
--- wp-includes/general-template.php	(revision 6328)
+++ wp-includes/general-template.php	(working copy)
@@ -83,6 +83,18 @@
 		case 'description':
 			$output = get_option('blogdescription');
 			break;
+		case 'feed_type_name':
+			$output = get_feed_info( 'display_name' );
+			break;
+		case 'feed_type_short_name':
+			$output = get_feed_info( 'short_name' );
+			break;
+		case 'feed_type_long_name':
+			$output = get_feed_info( 'long_name' );
+			break;
+		case 'feed_mime_type':
+			$output =  get_feed_info( 'mime_type' );
+			break;
 		case 'rdf_url':
 			$output = get_feed_link('rdf');
 			break;
@@ -92,9 +104,13 @@
 		case 'rss2_url':
 			$output = get_feed_link('rss2');
 			break;
+		case 'feed_url':
+			return bloginfo(get_default_feed()."_url");
 		case 'atom_url':
 			$output = get_feed_link('atom');
 			break;
+		case 'comments_feed_url':
+			return bloginfo('comments_'.get_default_feed()."_url");
 		case 'comments_atom_url':
 			$output = get_feed_link('comments_atom');
 			break;
@@ -195,7 +211,7 @@
 
 	if ( !empty($tag) ) {
 		$tag = get_term($tag, 'post_tag', OBJECT, 'display');
-		if ( is_wp_error( $tag ) ) 
+		if ( is_wp_error( $tag ) )
 			return $tag;
 		if ( ! empty($tag->name) )
 			$title = apply_filters('single_tag_title', $tag->name);
@@ -291,7 +307,7 @@
 
 	if ( !empty($tag_id) ) {
 		$my_tag = &get_term($tag_id, 'post_tag', OBJECT, 'display');
-		if ( is_wp_error( $my_tag ) ) 
+		if ( is_wp_error( $my_tag ) )
 			return false;
 		$my_tag_name = apply_filters('single_tag_title', $my_tag->name);
 		if ( !empty($my_tag_name) ) {
@@ -969,7 +985,7 @@
 				e = e ? e : window.event;
 				if (e.keyCode == 9 && !e.shiftKey && !e.controlKey && !e.altKey) {
 					var i = tinyMCE.getInstanceById('<?php echo $id; ?>');
-					if(typeof i ==  'undefined')
+					if(typeof i ==	'undefined')
 						return true;
 					tinyMCE.execCommand("mceStartTyping");
 					this.blur();
@@ -983,7 +999,7 @@
 				e = e ? e : window.event;
 				if (e.keyCode == 9 && !e.shiftKey && !e.controlKey && !e.altKey) {
 					var i = tinyMCE.getInstanceById('<?php echo $id; ?>');
-					if(typeof i ==  'undefined')
+					if(typeof i ==	'undefined')
 						return true;
 					tinyMCE.execCommand("mceStartTyping");
 					this.blur();
@@ -1042,7 +1058,7 @@
 	extract($args, EXTR_SKIP);
 
 	// Who knows what else people pass in $args
-	$total    = (int) $total;
+	$total	  = (int) $total;
 	if ( $total < 2 )
 		return;
 	$current  = (int) $current;
Index: wp-includes/feed.php
===================================================================
--- wp-includes/feed.php	(revision 6328)
+++ wp-includes/feed.php	(working copy)
@@ -1,5 +1,67 @@
 <?php
 
+/**
+ * get_default_feed() - determines the default feed format using the
+ * pluggable 'feed-format' filter.
+ *
+ * @package WordPress
+ * @subpackage Feed
+ * @since 2.4
+ *
+ * @return string $result feed format name (rss2, atom, rdf, rss)
+ */
+function get_default_feed() {
+	return apply_filters('feed_format','name');
+}
+ 
+/**
+ * get_feed_info() - retrieves the name, mime_type, display_name, short_name
+ * or long_name of the default feed type using the pluggable feed_format
+ * filter.
+ *
+ * @package WordPress
+ * @subpackage Feed
+ * @since 2.4
+ *
+ * @param string $attr desired feed attribute
+ * @return string $result the value of the desired feed attribute
+ */
+function get_feed_info($attr) {
+	return apply_filters('feed_format',$attr);
+}
+ 
+/**
+ * wp_feed_selector() - the default 'feed_format' filter.  This one is
+ * selects rss2, others could select rss, rdf, or atom.	 For the given
+ * feed type, a name, mime_type, display_name, short_name, or
+ * long_name may be obtained using this filter.
+ *
+ * Custom themes and plugin combinations could define additional
+ * attributes.
+ *
+ * @package WordPress
+ * @subpackage Feed
+ * @since 2.4
+ *
+ * @param string $attr desired feed attribute
+ * @return string $result the value of the desired feed attribute
+ */
+function wp_feed_selector($attr = 'name') {
+	switch ( $attr ) :
+		case 'mime_type' :
+			return 'application/rss+xml';
+		case 'display_name' :
+			return 'RSS 2.0';
+		case 'short_name' :
+			return 'RSS';
+		case 'long_name' :
+			return '<abbr title="Really Simple Syndication">RSS</abbr>';
+		default :
+			// must be 'rss2', 'rss', 'rdf', or 'atom'
+			return 'rss2';
+	endswitch;
+}
+
 function get_bloginfo_rss($show = '') {
 	$info = strip_tags(get_bloginfo($show));
 	return apply_filters('get_bloginfo_rss', convert_chars($info));
@@ -99,11 +161,15 @@
 
 
 function comments_rss_link($link_text = 'Comments RSS', $commentsrssfilename = 'nolongerused') {
+	comments_feed_link($link_text);
+}
+
+function comments_feed_link($link_text = '') {
+	if ( '' == $link_text ) $link_text = get_feed_info('display_name');
 	$url = get_post_comments_feed_link();
 	echo "<a href='$url'>$link_text</a>";
 }
 
-
 function comments_rss($commentsrssfilename = 'nolongerused') {
 	return get_post_comments_feed_link();
 }
@@ -114,7 +180,7 @@
 	$permalink_structure = get_option('permalink_structure');
 
 	if ( '' == $permalink_structure ) {
-		$link = get_option('home') . '?feed=rss2&amp;author=' . $author_id;
+		$link = get_option('home') . '?feed='.get_default_feed().'&amp;author=' . $author_id;
 	} else {
 		$link = get_author_posts_url($author_id, $author_nicename);
 		$link = trailingslashit($link) . user_trailingslashit('feed', 'feed');
@@ -151,7 +217,7 @@
 	$permalink_structure = get_option('permalink_structure');
 
 	if ( '' == $permalink_structure ) {
-		$link = get_option('home') . "?feed=$feed&amp;cat=" . $cat_id;
+		$link = get_option('home') . '?feed='.get_default_feed()."&amp;cat=" . $cat_ID;
 	} else {
 		$link = get_category_link($cat_id);
 		if( 'rss2' == $feed )
@@ -215,8 +281,9 @@
 	echo get_the_category_rss($type);
 }
 
-function get_tag_feed_link($tag_id, $feed = 'rss2') {
+function get_tag_feed_link($tag_id, $feed = '') {
 	$tag_id = (int) $tag_id;
+	if ( $feed = '' ) $feed = get_default_feed();
 
 	$tag = get_tag($tag_id);
 
@@ -229,7 +296,7 @@
 		$link = get_option('home') . "?feed=$feed&amp;tag=" . $tag->slug;
 	} else {
 		$link = get_tag_link($tag->term_id);
-		if ( 'rss2' == $feed )
+		if ( get_default_feed() == $feed )
 			$feed_link = 'feed';
 		else
 			$feed_link = "feed/$feed";
@@ -292,7 +359,7 @@
  *
  * @package WordPress
  * @subpackage Feed
- * @since 2.4 
+ * @since 2.4
  *
  * @param string $data input string
  * @return array $result array(type, value)
@@ -311,10 +378,10 @@
 	if (!$code) {
 		       if (strpos($data, '<') === false) {
 			       return array('text', $data);
-                       } else {
+		       } else {
 			       $data = "<div xmlns='http://www.w3.org/1999/xhtml'>$data</div>";
 			       return array('xhtml', $data);
-                       }
+		       }
 	}
 
 	if (strpos($data, ']]>') == false) {
Index: wp-includes/functions.php
===================================================================
--- wp-includes/functions.php	(revision 6328)
+++ wp-includes/functions.php	(working copy)
@@ -95,11 +95,11 @@
 	// see http://en.wikipedia.org/wiki/Byte
 	$quant = array(
 		// ========================= Origin ====
-		'TB' => 1099511627776,  // pow( 1024, 4)
-		'GB' => 1073741824,     // pow( 1024, 3)
-		'MB' => 1048576,        // pow( 1024, 2)
-		'kB' => 1024,           // pow( 1024, 1)
-		'B ' => 1,              // pow( 1024, 0)
+		'TB' => 1099511627776,	// pow( 1024, 4)
+		'GB' => 1073741824,	// pow( 1024, 3)
+		'MB' => 1048576,	// pow( 1024, 2)
+		'kB' => 1024,		// pow( 1024, 1)
+		'B ' => 1,		// pow( 1024, 0)
 	);
 
 	foreach ( $quant as $unit => $mag )
@@ -404,7 +404,7 @@
 
 
 function gzip_compression() {
-	if ( !get_option( 'gzipcompression' ) || ini_get( 'zlib.output_compression' ) == 'On' || ini_get( 'zlib.output_compression_level' ) > 0  || ini_get( 'output_handler' ) == 'ob_gzhandler' || !extension_loaded( 'zlib' ) )
+	if ( !get_option( 'gzipcompression' ) || ini_get( 'zlib.output_compression' ) == 'On' || ini_get( 'zlib.output_compression_level' ) > 0	 || ini_get( 'output_handler' ) == 'ob_gzhandler' || !extension_loaded( 'zlib' ) )
 		return false;
 	ob_start( 'ob_gzhandler' );
 }
@@ -861,7 +861,7 @@
 	$feed = preg_replace( '/^_+/', '', $feed );
 
 	if ( $feed == '' || $feed == 'feed' )
-		$feed = 'rss2';
+		$feed = get_default_feed();
 
 	$hook = 'do_feed_' . $feed;
 	do_action( $hook, $wp_query->is_comment_feed );
@@ -911,7 +911,7 @@
 function is_blog_installed() {
 	global $wpdb;
 
-	// Check cache first.  If options table goes away and we have true cached, oh well.  
+	// Check cache first.  If options table goes away and we have true cached, oh well.
 	if ( wp_cache_get('is_blog_installed') )
 		return true;
 
@@ -1167,9 +1167,9 @@
 		$trans['add']['bookmark']      = array( __( 'Are you sure you want to add this link?' ), false );
 		$trans['delete']['bookmark']   = array( __( 'Are you sure you want to delete this link: &quot;%s&quot;?' ), 'use_id' );
 		$trans['update']['bookmark']   = array( __( 'Are you sure you want to edit this link: &quot;%s&quot;?' ), 'use_id' );
-		$trans['bulk']['bookmarks']    = array( __( 'Are you sure you want to bulk modify links?' ), false ); 
+		$trans['bulk']['bookmarks']    = array( __( 'Are you sure you want to bulk modify links?' ), false );
 
-		$trans['add']['page']          = array( __( 'Are you sure you want to add this page?' ), false );
+		$trans['add']['page']	       = array( __( 'Are you sure you want to add this page?' ), false );
 		$trans['delete']['page']       = array( __( 'Are you sure you want to delete this page: &quot;%s&quot;?' ), 'get_the_title' );
 		$trans['update']['page']       = array( __( 'Are you sure you want to edit this page: &quot;%s&quot;?' ), 'get_the_title' );
 
@@ -1177,20 +1177,20 @@
 		$trans['activate']['plugin']   = array( __( 'Are you sure you want to activate this plugin: &quot;%s&quot;?' ), 'use_id' );
 		$trans['deactivate']['plugin'] = array( __( 'Are you sure you want to deactivate this plugin: &quot;%s&quot;?' ), 'use_id' );
 
-		$trans['add']['post']          = array( __( 'Are you sure you want to add this post?' ), false );
+		$trans['add']['post']	       = array( __( 'Are you sure you want to add this post?' ), false );
 		$trans['delete']['post']       = array( __( 'Are you sure you want to delete this post: &quot;%s&quot;?' ), 'get_the_title' );
 		$trans['update']['post']       = array( __( 'Are you sure you want to edit this post: &quot;%s&quot;?' ), 'get_the_title' );
 
-		$trans['add']['user']          = array( __( 'Are you sure you want to add this user?' ), false );
+		$trans['add']['user']	       = array( __( 'Are you sure you want to add this user?' ), false );
 		$trans['delete']['users']      = array( __( 'Are you sure you want to delete users?' ), false );
-		$trans['bulk']['users']        = array( __( 'Are you sure you want to bulk modify users?' ), false );
+		$trans['bulk']['users']	       = array( __( 'Are you sure you want to bulk modify users?' ), false );
 		$trans['update']['user']       = array( __( 'Are you sure you want to edit this user: &quot;%s&quot;?' ), 'get_author_name' );
 		$trans['update']['profile']    = array( __( 'Are you sure you want to modify the profile for: &quot;%s&quot;?' ), 'get_author_name' );
 
 		$trans['update']['options']    = array( __( 'Are you sure you want to edit your settings?' ), false );
 		$trans['update']['permalink']  = array( __( 'Are you sure you want to change your permalink structure to: %s?' ), 'use_id' );
-		$trans['edit']['file']         = array( __( 'Are you sure you want to edit this file: &quot;%s&quot;?' ), 'use_id' );
-		$trans['edit']['theme']        = array( __( 'Are you sure you want to edit this theme file: &quot;%s&quot;?' ), 'use_id' );
+		$trans['edit']['file']	       = array( __( 'Are you sure you want to edit this file: &quot;%s&quot;?' ), 'use_id' );
+		$trans['edit']['theme']	       = array( __( 'Are you sure you want to edit this theme file: &quot;%s&quot;?' ), 'use_id' );
 		$trans['switch']['theme']      = array( __( 'Are you sure you want to switch to this theme: &quot;%s&quot;?' ), 'use_id' );
 
 		if ( isset( $trans[$verb][$noun] ) ) {
@@ -1219,7 +1219,7 @@
 
 	$title = __( 'WordPress Confirmation' );
 	// Remove extra layer of slashes.
-	$_POST   = stripslashes_deep( $_POST );
+	$_POST	 = stripslashes_deep( $_POST );
 	if ( $_POST ) {
 		$q = http_build_query( $_POST );
 		$q = explode( ini_get( 'arg_separator.output' ), $q);
@@ -1264,10 +1264,10 @@
 		$message = "<p>$message</p>";
 	}
 
-	if ( defined( 'WP_SITEURL' ) && '' != WP_SITEURL ) 
-		$admin_dir = WP_SITEURL . '/wp-admin/'; 
+	if ( defined( 'WP_SITEURL' ) && '' != WP_SITEURL )
+		$admin_dir = WP_SITEURL . '/wp-admin/';
 	elseif ( function_exists( 'get_bloginfo' ) && '' != get_bloginfo( 'wpurl' ) )
-		$admin_dir = get_bloginfo( 'wpurl' ) . '/wp-admin/'; 
+		$admin_dir = get_bloginfo( 'wpurl' ) . '/wp-admin/';
 	elseif ( strpos( $_SERVER['PHP_SELF'], 'wp-admin' ) !== false )
 		$admin_dir = '';
 	else
@@ -1484,4 +1484,4 @@
 	return abs( intval( $maybeint ) );
 }
 
-?>
\ No newline at end of file
+?>
Index: wp-content/themes/default/footer.php
===================================================================
--- wp-content/themes/default/footer.php	(revision 6328)
+++ wp-content/themes/default/footer.php	(working copy)
@@ -5,8 +5,8 @@
 	<p>
 		<?php bloginfo('name'); ?> is proudly powered by
 		<a href="http://wordpress.org/">WordPress</a>
-		<br /><a href="<?php bloginfo('rss2_url'); ?>">Entries (RSS)</a>
-		and <a href="<?php bloginfo('comments_rss2_url'); ?>">Comments (RSS)</a>.
+		<br /><a href="<?php bloginfo('feed_url'); ?>">Entries (<?php bloginfo('feed_type_short_name'); ?>)</a>
+		and <a href="<?php bloginfo('comments_feed_url'); ?>">Comments (<?php bloginfo('feed_type_short_name'); ?>)</a>.
 		<!-- <?php echo get_num_queries(); ?> queries. <?php timer_stop(1); ?> seconds. -->
 	</p>
 </div>
Index: wp-content/themes/default/single.php
===================================================================
--- wp-content/themes/default/single.php	(revision 6328)
+++ wp-content/themes/default/single.php	(working copy)
@@ -27,7 +27,7 @@
 							/* $entry_datetime = abs(strtotime($post->post_date) - (60*120)); echo time_since($entry_datetime); echo ' ago'; */ ?>
 						on <?php the_time('l, F jS, Y') ?> at <?php the_time() ?>
 						and is filed under <?php the_category(', ') ?>.
-						You can follow any responses to this entry through the <?php comments_rss_link('RSS 2.0'); ?> feed.
+						You can follow any responses to this entry through the <?php comments_feed_link(); ?> feed.
 
 						<?php if (('open' == $post-> comment_status) && ('open' == $post->ping_status)) {
 							// Both Comments and Pings are open ?>
Index: wp-content/themes/default/header.php
===================================================================
--- wp-content/themes/default/header.php	(revision 6328)
+++ wp-content/themes/default/header.php	(working copy)
@@ -7,7 +7,7 @@
 <title><?php bloginfo('name'); ?> <?php if ( is_single() ) { ?> &raquo; Blog Archive <?php } ?> <?php wp_title(); ?></title>
 
 <link rel="stylesheet" href="<?php bloginfo('stylesheet_url'); ?>" type="text/css" media="screen" />
-<link rel="alternate" type="application/rss+xml" title="<?php bloginfo('name'); ?> RSS Feed" href="<?php bloginfo('rss2_url'); ?>" />
+<link rel="alternate" type="<?php bloginfo('feed_mime_type'); ?>" title="<?php bloginfo('name'); ?> <?php bloginfo('feed_type_short_name'); ?> Feed" href="<?php bloginfo('feed_url'); ?>" />
 <link rel="pingback" href="<?php bloginfo('pingback_url'); ?>" />
 
 <style type="text/css" media="screen">
Index: wp-content/themes/default/attachment.php
===================================================================
--- wp-content/themes/default/attachment.php	(revision 6328)
+++ wp-content/themes/default/attachment.php	(working copy)
@@ -28,7 +28,7 @@
 							/* $entry_datetime = abs(strtotime($post->post_date) - (60*120)); echo time_since($entry_datetime); echo ' ago'; */ ?>
 						on <?php the_time('l, F jS, Y') ?> at <?php the_time() ?>
 						and is filed under <?php the_category(', ') ?>.
-						You can follow any responses to this entry through the <?php comments_rss_link('RSS 2.0'); ?> feed.
+						You can follow any responses to this entry through the <?php comments_feed_link(); ?> feed.
 
 						<?php if (('open' == $post-> comment_status) && ('open' == $post->ping_status)) {
 							// Both Comments and Pings are open ?>

