Index: wp-includes/feed.php
===================================================================
--- wp-includes/feed.php	(revision 10613)
+++ wp-includes/feed.php	(working copy)
@@ -534,4 +534,16 @@
 	return apply_filters( 'feed_content_type', $content_type, $type );
 }
 
+function fetch_feed($url) {
+	require_once (ABSPATH . WPINC . '/simplepie.inc');
+
+	$feed = new SimplePie();
+	$feed->set_feed_url($url);
+	$feed->enable_cache(false); // TODO Create custom cache class that uses get_transient() and set_transient().
+	$feed->init();
+	$feed->handle_content_type();
+
+	return $feed;
+}
+
 ?>
Index: wp-includes/widgets.php
===================================================================
--- wp-includes/widgets.php	(revision 10613)
+++ wp-includes/widgets.php	(working copy)
@@ -1501,16 +1501,14 @@
 	if ( empty($url) )
 		return;
 
-	require_once(ABSPATH . WPINC . '/rss.php');
-
-	$rss = fetch_rss($url);
-	$link = clean_url(strip_tags($rss->channel['link']));
+	$rss = fetch_feed($url);
+	$link = clean_url(strip_tags($rss->get_permalink()));
 	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) )
@@ -1541,13 +1539,11 @@
  */
 function wp_widget_rss_output( $rss, $args = array() ) {
 	if ( is_string( $rss ) ) {
-		require_once(ABSPATH . WPINC . '/rss.php');
-		if ( !$rss = fetch_rss($rss) )
+		if ( !$rss = fetch_feed($rss) )
 			return;
 	} elseif ( is_array($rss) && isset($rss['url']) ) {
-		require_once(ABSPATH . WPINC . '/rss.php');
 		$args = $rss;
-		if ( !$rss = fetch_rss($rss['url']) )
+		if ( !$rss = fetch_feed($rss['url']) )
 			return;
 	} elseif ( !is_object($rss) ) {
 		return;
@@ -1564,66 +1560,61 @@
 	$show_author   = (int) $show_author;
 	$show_date     = (int) $show_date;
 
-	if ( is_array( $rss->items ) && !empty( $rss->items ) ) {
-		$rss->items = array_slice($rss->items, 0, $items);
-		echo '<ul>';
-		foreach ( (array) $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 ( empty($title) )
-				$title = __('Untitled');
-			$desc = '';
-			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))));
-			elseif ( isset( $item['summary'] ) && is_string( $item['summary'] ) )
-				$desc = str_replace(array("\n", "\r"), ' ', attribute_escape(strip_tags(html_entity_decode($item['summary'], ENT_QUOTES))));
-			if ( 360 < strlen( $desc ) )
-				$desc = wp_html_excerpt( $desc, 360 ) . ' [&hellip;]';
-			$summary = $desc;
+	if ( !$rss->get_item_quantity() ) {
+		echo '<ul><li>' . __( 'An error has occurred; the feed is probably down. Try again later.' ) . '</li></ul>';
+		return;
+	}
 
-			if ( $show_summary ) {
-				$desc = '';
-				$summary = wp_specialchars( $summary );
-				$summary = "<div class='rssSummary'>$summary</div>";
-			} else {
-				$summary = '';
-			}
+	echo '<ul>';
+	$count = 0;
+	foreach ( $rss->get_items() as $item ) {
+		$link = $item->get_link();
+		while ( strstr($link, 'http') != $link )
+			$link = substr($link, 1);
+		$link = clean_url(strip_tags($link));
+		$title = attribute_escape(strip_tags($item->get_title()));
+		if ( empty($title) )
+			$title = __('Untitled');
 
-			$date = '';
-			if ( $show_date ) {
-				if ( isset($item['pubdate']) )
-					$date = $item['pubdate'];
-				elseif ( isset($item['published']) )
-					$date = $item['published'];
+		$desc = str_replace(array("\n", "\r"), ' ', attribute_escape(strip_tags(html_entity_decode($item->get_description(), ENT_QUOTES))));
+		$desc = wp_html_excerpt( $desc, 360 ) . ' [&hellip;]';
+		$desc = wp_specialchars( $desc );
 
-				if ( $date ) {
-					if ( $date_stamp = strtotime( $date ) )
-						$date = ' <span class="rss-date">' . date_i18n( get_option( 'date_format' ), $date_stamp ) . '</span>';
-					else
-						$date = '';
-				}
-			}
+		if ( $show_summary ) {
+			$summary = "<div class='rssSummary'>$desc</div>";
+		} else {
+			$summary = '';
+		}
 
-			$author = '';
-			if ( $show_author ) {
-				if ( isset($item['dc']['creator']) )
-					$author = ' <cite>' . wp_specialchars( strip_tags( $item['dc']['creator'] ) ) . '</cite>';
-				elseif ( isset($item['author_name']) )
-					$author = ' <cite>' . wp_specialchars( strip_tags( $item['author_name'] ) ) . '</cite>';
-			}
+		$date = '';
+		if ( $show_date ) {
+			$date = $item->get_date();
 
-			if ( $link == '' ) {
-				echo "<li>$title{$date}{$summary}{$author}</li>";
-			} else {
-				echo "<li><a class='rsswidget' href='$link' title='$desc'>$title</a>{$date}{$summary}{$author}</li>";
+			if ( $date ) {
+				if ( $date_stamp = strtotime( $date ) )
+					$date = ' <span class="rss-date">' . date_i18n( get_option( 'date_format' ), $date_stamp ) . '</span>';
+				else
+					$date = '';
 			}
-}
-		echo '</ul>';
-	} else {
-		echo '<ul><li>' . __( 'An error has occurred; the feed is probably down. Try again later.' ) . '</li></ul>';
+		}
+
+		$author = '';
+		if ( $show_author ) {
+			$author = $item->get_author();
+			$author = $author->get_name();
+			$author = ' <cite>' . wp_specialchars( strip_tags( $author ) ) . '</cite>';
+		}
+
+		if ( $link == '' ) {
+			echo "<li>$title{$date}{$summary}{$author}</li>";
+		} else {
+			echo "<li><a class='rsswidget' href='$link' title='$desc'>$title</a>{$date}{$summary}{$author}</li>";
+		}
+		$count++;
+		if ( $count >= $items )
+			break;
 	}
+	echo '</ul>';
 }
 
 /**
@@ -1810,15 +1801,14 @@
 	$show_date     = (int) $widget_rss['show_date'];
 
 	if ( $check_feed ) {
-		require_once(ABSPATH . WPINC . '/rss.php');
-		$rss = fetch_rss($url);
+		$rss = fetch_feed($url);
 		$error = false;
 		$link = '';
 		if ( !is_object($rss) ) {
 			$url = wp_specialchars(__('Error: could not find an RSS or ATOM feed at that URL.'), 1);
 			$error = sprintf(__('Error in RSS %1$d'), $widget_number );
 		} else {
-			$link = clean_url(strip_tags($rss->channel['link']));
+			$link = clean_url(strip_tags($rss->get_permalink()));
 			while ( strstr($link, 'http') != $link )
 				$link = substr($link, 1);
 		}
Index: wp-admin/includes/dashboard.php
===================================================================
--- wp-admin/includes/dashboard.php	(revision 10613)
+++ wp-admin/includes/dashboard.php	(working copy)
@@ -670,21 +670,11 @@
 function wp_dashboard_secondary_output() {
 	$widgets = get_option( 'dashboard_widget_options' );
 	@extract( @$widgets['dashboard_secondary'], EXTR_SKIP );
-	$rss = @fetch_rss( $url );
+	$rss = @fetch_feed( $url );
 
-	if ( !isset($rss->items) || 0 == count($rss->items) )
+	if ( !$rss->get_item_quantity() )
 		return false;
 
-	$rss->items = array_slice($rss->items, 0, $items);
-
-	if ( 'http://planet.wordpress.org/' == $rss->channel['link'] ) {
-		foreach ( array_keys($rss->items) as $i ) {
-			list($site, $description) = explode( ':', wp_specialchars($rss->items[$i]['title']), 2 );
-			$rss->items[$i]['dc']['creator'] = trim($site);
-			$rss->items[$i]['title'] = trim($description);
-		}
-	}
-
 	echo "<div class='rss-widget'>";
 	wp_widget_rss_output( $rss, $widgets['dashboard_secondary'] );
 	echo "</div>";
@@ -778,18 +768,15 @@
 	}
 
 
-	require_once( ABSPATH . WPINC . '/rss.php' );
-	init(); // initialize rss constants
-
-	$cache = new RSSCache( MAGPIE_CACHE_DIR, MAGPIE_CACHE_AGE );
-
+	/* TODO Cache check here.
 	foreach ( $check_urls as $check_url ) {
-		$status = $cache->check_cache( $check_url );
+
 		if ( 'HIT' !== $status ) {
 			echo $loading;
 			return false;
 		}
 	}
+	*/
 
 	if ( $callback && is_callable( $callback ) ) {
 		$args = array_slice( func_get_args(), 2 );
