Index: wp-admin/index-extra.php
===================================================================
--- wp-admin/index-extra.php	(revision 5767)
+++ wp-admin/index-extra.php	(working copy)
@@ -7,16 +7,17 @@
 switch ( $_GET['jax'] ) {
 
 case 'incominglinks' :
-$rss = @fetch_rss(apply_filters( 'dashboard_incoming_links_feed', 'http://feeds.technorati.com/cosmos/rss/?url='. trailingslashit(get_option('home')) .'&partner=wordpress' ));
-if ( isset($rss->items) && 1 < count($rss->items) ) { // Technorati returns a 1-item feed when it has no results
+$rss = new SimplePie( (apply_filters( 'dashboard_incoming_links_feed', 'http://feeds.technorati.com/cosmos/rss/?url='. trailingslashit(get_option('home')) .'&partner=wordpress' ) ), ABSPATH . '/wp-content/rsscache', ABSPATH . '/wp-content/rsscache' );
+$rss->enable_cache(false);
+if (1 < count($rss->get_items() ) ) { // Technorati returns a 1-item feed when it has no results
 ?>
 <h3><?php _e('Incoming Links'); ?> <cite><a href="<?php echo apply_filters( 'dashboard_incoming_links_link', 'http://www.technorati.com/search/'. trailingslashit(get_option('home')) .'?partner=wordpress' ); ?>"><?php _e('More &raquo;'); ?></a></cite></h3>
 <ul>
 <?php
-$rss->items = array_slice($rss->items, 0, 10);
-foreach ($rss->items as $item ) {
+$items = $rss->get_items(0, 10);
+foreach ($items as $item ) {
 ?>
-	<li><a href="<?php echo wp_filter_kses($item['link']); ?>"><?php echo wptexturize(wp_specialchars($item['title'])); ?></a></li>
+	<li><a href="<?php echo wp_filter_kses( $item->get_link() ); ?>"><?php echo wptexturize(wp_specialchars($item->get_title() ) ); ?></a></li>
 <?php } ?>
 </ul>
 <?php
@@ -24,16 +25,17 @@
 break;
 
 case 'devnews' :
-$rss = @fetch_rss(apply_filters( 'dashboard_primary_feed', 'http://wordpress.org/development/feed/' ));
-if ( isset($rss->items) && 0 != count($rss->items) ) {
+$rss = new SimplePie( apply_filters( 'dashboard_primary_feed', 'http://wordpress.org/development/feed/' ), ABSPATH . '/wp-content/rsscache' );
+$rss->enable_cache(false);
+if ( 0 != count($rss->get_items() ) ) {
 ?>
 <h3><?php echo apply_filters( 'dashboard_primary_title', __('WordPress Development Blog') ); ?></h3>
 <?php
-$rss->items = array_slice($rss->items, 0, 3);
-foreach ($rss->items as $item ) {
+$items = $rss->get_items(0, 3);
+foreach ($items as $item ) {
 ?>
-<h4><a href='<?php echo wp_filter_kses($item['link']); ?>'><?php echo wp_specialchars($item['title']); ?></a> &#8212; <?php printf(__('%s ago'), human_time_diff(strtotime($item['pubdate'], time() ) ) ); ?></h4>
-<p><?php echo $item['description']; ?></p>
+<h4><a href='<?php echo wp_filter_kses($item->get_link); ?>'><?php echo wp_specialchars($item->get_title() ); ?></a> &#8212; <?php printf(__('%s ago'), human_time_diff($item->get_date('U'), time() ) ); ?></h4>
+<p><?php echo $item->get_description(); ?></p>
 <?php
 	}
 }
@@ -43,19 +45,20 @@
 break;
 
 case 'planetnews' :
-$rss = @fetch_rss(apply_filters( 'dashboard_secondary_feed', 'http://planet.wordpress.org/feed/' ));
-if ( isset($rss->items) && 0 != count($rss->items) ) {
+$rss = new SimplePie( apply_filters( 'dashboard_secondary_feed', 'http://planet.wordpress.org/feed/' ), ABSPATH . '/wp-content/rsscache' );
+
+if ( 0 != count($rss->get_items() ) ) {
 ?>
 <h3><?php echo apply_filters( 'dashboard_secondary_title', __('Other WordPress News') ); ?></h3>
 <ul>
 <?php
-$rss->items = array_slice($rss->items, 0, 20);
-foreach ($rss->items as $item ) {
-$title = wp_specialchars($item['title']);
-$author = preg_replace( '|(.+?):.+|s', '$1', $item['title'] );
-$post = preg_replace( '|.+?:(.+)|s', '$1', $item['title'] );
+$items = $rss->get_items(0, 20);
+foreach ($items as $item ) {
+$title = wp_specialchars($item->get_title() );
+$author = preg_replace( '|(.+?):.+|s', '$1', $item->get_title() );
+$post = preg_replace( '|.+?:(.+)|s', '$1', $item->get_title() );
 ?>
-<li><a href='<?php echo wp_filter_kses($item['link']); ?>'><span class="post"><?php echo $post; ?></span><span class="hidden"> - </span><cite><?php echo $author; ?></cite></a></li>
+<li><a href='<?php echo wp_filter_kses($item->get_link() ); ?>'><span class="post"><?php echo $post; ?></span><span class="hidden"> - </span><cite><?php echo $author; ?></cite></a></li>
 <?php
 	}
 ?>
Index: wp-includes/widgets.php
===================================================================
--- wp-includes/widgets.php	(revision 5767)
+++ wp-includes/widgets.php	(working copy)
@@ -932,7 +932,7 @@
 }
 
 function wp_widget_rss($args, $number = 1) {
-	require_once(ABSPATH . WPINC . '/rss.php');
+	require_once(ABSPATH . WPINC . '/class-Simplepie.php');
 	extract($args);
 	$options = get_option('widget_rss');
 	if ( isset($options['error']) && $options['error'] )
@@ -945,14 +945,14 @@
 		$url = substr($url, 1);
 	if ( empty($url) )
 		return;
-	$rss = fetch_rss($url);
-	$link = clean_url(strip_tags($rss->channel['link']));
+	$rss = new SimplePie( $url, ABSPATH . '/wp-content/rsscache' );
+	$link = clean_url( strip_tags( $rss->get_link() ) );
 	while ( strstr($link, 'http') != $link )
 		$link = substr($link, 1);
-	$desc = attribute_escape(strip_tags(html_entity_decode($rss->channel['description'], ENT_QUOTES)));
+	$desc = attribute_escape(strip_tags(html_entity_decode($rss->get_description(), ENT_QUOTES)));
 	$title = $options[$number]['title'];
 	if ( empty($title) )
-		$title = htmlentities(strip_tags($rss->channel['title']));
+		$title = htmlentities( strip_tags( $rss->get_title() ) );
 	if ( empty($title) )
 		$title = $desc;
 	if ( empty($title) )
@@ -968,21 +968,21 @@
 			<?php $title ? print($before_title . $title . $after_title) : null; ?>
 			<ul>
 <?php
-	if ( is_array( $rss->items ) ) {
-		$rss->items = array_slice($rss->items, 0, $num_items);
-		foreach ($rss->items as $item ) {
-			while ( strstr($item['link'], 'http') != $item['link'] )
-				$item['link'] = substr($item['link'], 1);
-			$link = clean_url(strip_tags($item['link']));
-			$title = attribute_escape(strip_tags($item['title']));
+	if ( is_array( $items = $rss->get_items() ) ) {
+		$items = $rss->get_items(0, $num_items);
+		foreach ($items as $item ) {
+			while ( strstr($item->get_link(), 'http') != $item->get_link() )
+				$item->link = substr($item->get_link(), 1);
+			$link = clean_url( strip_tags( $item->link ) );
+			$title = attribute_escape( strip_tags( $item->get_title() ) );
 			if ( empty($title) )
 				$title = __('Untitled');
 			$desc = '';
 			if ( $show_summary ) {
-				$summary = '<div class="rssSummary">' . $item['description'] . '</div>';
+				$summary = '<div class="rssSummary">' . $item->get_description() . '</div>';
 			} else {
-				if ( isset( $item['description'] ) && is_string( $item['description'] ) )
-					$desc = str_replace(array("\n", "\r"), ' ', attribute_escape(strip_tags(html_entity_decode($item['description'], ENT_QUOTES))));
+				if ( isset( $item->description ) && is_string( $item->get_description() ) )
+					$desc = str_replace(array("\n", "\r"), ' ', attribute_escape(strip_tags(html_entity_decode($item->get_content(), ENT_QUOTES))));
 				$summary = '';
 			}
 			echo "<li><a class='rsswidget' href='$link' title='$desc'>$title</a>$summary</li>";
@@ -1003,8 +1003,8 @@
 		$url = clean_url(strip_tags(stripslashes($_POST["rss-url-$number"])));
 		$newoptions[$number]['title'] = trim(strip_tags(stripslashes($_POST["rss-title-$number"])));
 		if ( $url !== $options[$number]['url'] ) {
-			require_once(ABSPATH . WPINC . '/rss.php');
-			$rss = fetch_rss($url);
+			require_once(ABSPATH . WPINC . '/class-Simplepie.php');
+			$rss = new SimplePie( $url, ABSPATH . '/wp-content/rsscache' );
 			if ( is_object($rss) ) {
 				$newoptions[$number]['url'] = $url;
 				$newoptions[$number]['error'] = false;
