Index: wp-includes/functions.php
===================================================================
--- wp-includes/functions.php	(revision 10506)
+++ wp-includes/functions.php	(working copy)
@@ -625,6 +625,79 @@
 }
 
 /**
+ * Delete a transient
+ *
+ * @since 2.8.0
+ * @package WordPress
+ * @subpackage Transient
+ *
+ * @param string $transient Transient name. Expected to not be SQL-escaped
+ * @return bool true if successful, false otherwise
+ */
+function delete_transient($transient) {
+	global $_wp_using_ext_object_cache, $wpdb;
+
+	if ( $_wp_using_ext_object_cache ) {
+		return wp_cache_delete($transient, 'transient');
+	} else {
+		$transient = $wpdb->escape($transient);
+		return delete_option($transient);
+	}
+}
+
+/**
+ * Get the value of a transient
+ *
+ * If the transient does not exist or does not have a value, then the return value
+ * will be false.
+ * 
+ * @since 2.8.0
+ * @package WordPress
+ * @subpackage Transient
+ *
+ * @param string $transient Transient name. Expected to not be SQL-escaped
+ * @return mixed Value of transient
+ */
+function get_transient($transient) {
+	global $_wp_using_ext_object_cache, $wpdb;
+
+	if ( $_wp_using_ext_object_cache ) {
+		return wp_cache_get($transient, 'transient');
+	} else {
+		$transient = $wpdb->escape($transient);
+		return get_option($transient);
+	}
+}
+
+/**
+ * Set/update the value of a transient
+ *
+ * You do not need to serialize values, if the value needs to be serialize, then
+ * it will be serialized before it is set.
+ *
+ * @since 2.8.0
+ * @package WordPress
+ * @subpackage Transient
+ *
+ * @param string $transient Transient name. Expected to not be SQL-escaped
+ * @param mixed $value Transient value.
+ * @return bool False if value was not set and true if value was set.
+ */
+function set_transient($transient, $value) {
+	global $_wp_using_ext_object_cache, $wpdb;
+
+	if ( $_wp_using_ext_object_cache ) {
+		return wp_cache_set($transient, $value, 'transient');
+	} else {
+		$safe_transient = $wpdb->escape($transient);
+		if ( false === get_option( $safe_transient ) )
+			return add_option($transient, $value, '', 'no');
+		else
+			return update_option($transient, $value);
+	}
+}
+
+/**
  * Saves and restores user interface settings stored in a cookie.
  *
  * Checks if the current user-settings cookie is updated and stores it. When no
Index: wp-includes/rewrite.php
===================================================================
--- wp-includes/rewrite.php	(revision 10506)
+++ wp-includes/rewrite.php	(working copy)
@@ -1596,11 +1596,11 @@
 	 * @return array Rewrite rules.
 	 */
 	function wp_rewrite_rules() {
-		$this->rules = get_option('rewrite_rules');
+		$this->rules = get_transient('rewrite_rules');
 		if ( empty($this->rules) ) {
 			$this->matches = 'matches';
 			$this->rewrite_rules();
-			update_option('rewrite_rules', $this->rules);
+			set_transient('rewrite_rules', $this->rules);
 		}
 
 		return $this->rules;
@@ -1783,7 +1783,7 @@
 	 * @access public
 	 */
 	function flush_rules() {
-		delete_option('rewrite_rules');
+		delete_transient('rewrite_rules');
 		$this->wp_rewrite_rules();
 		if ( function_exists('save_mod_rewrite_rules') )
 			save_mod_rewrite_rules();
Index: wp-includes/rss.php
===================================================================
--- wp-includes/rss.php	(revision 10506)
+++ wp-includes/rss.php	(working copy)
@@ -714,15 +714,9 @@
 		$cache_option = 'rss_' . $this->file_name( $url );
 		$cache_timestamp = 'rss_' . $this->file_name( $url ) . '_ts';
 
-		// shouldn't these be using get_option() ?
-		if ( !$wpdb->get_var( $wpdb->prepare( "SELECT option_name FROM $wpdb->options WHERE option_name = %s", $cache_option ) ) )
-			add_option($cache_option, '', '', 'no');
-		if ( !$wpdb->get_var( $wpdb->prepare( "SELECT option_name FROM $wpdb->options WHERE option_name = %s", $cache_timestamp ) ) )
-			add_option($cache_timestamp, '', '', 'no');
+		set_transient($cache_option, $rss);
+		set_transient($cache_timestamp, time() );
 
-		update_option($cache_option, $rss);
-		update_option($cache_timestamp, time() );
-
 		return $cache_option;
 	}
 
@@ -736,15 +730,13 @@
 		$this->ERROR = "";
 		$cache_option = 'rss_' . $this->file_name( $url );
 
-		if ( ! get_option( $cache_option ) ) {
+		if ( ! $rss = get_transient( $cache_option ) ) {
 			$this->debug(
 				"Cache doesn't contain: $url (cache option: $cache_option)"
 			);
 			return 0;
 		}
 
-		$rss = get_option( $cache_option );
-
 		return $rss;
 	}
 
@@ -760,7 +752,7 @@
 		$cache_option = $this->file_name( $url );
 		$cache_timestamp = 'rss_' . $this->file_name( $url ) . '_ts';
 
-		if ( $mtime = get_option($cache_timestamp) ) {
+		if ( $mtime = get_transient($cache_timestamp) ) {
 			// find how long ago the file was added to the cache
 			// and whether that is longer then MAX_AGE
 			$age = time() - $mtime;
Index: wp-settings.php
===================================================================
--- wp-settings.php	(revision 10506)
+++ wp-settings.php	(working copy)
@@ -257,10 +257,13 @@
 if ( is_wp_error($prefix) )
 	wp_die(/*WP_I18N_BAD_PREFIX*/'<strong>ERROR</strong>: <code>$table_prefix</code> in <code>wp-config.php</code> can only contain numbers, letters, and underscores.'/*/WP_I18N_BAD_PREFIX*/);
 
-if ( file_exists(WP_CONTENT_DIR . '/object-cache.php') )
+if ( file_exists(WP_CONTENT_DIR . '/object-cache.php') ) {
 	require_once (WP_CONTENT_DIR . '/object-cache.php');
-else
+	$_wp_using_ext_object_cache = true;
+} else {
 	require_once (ABSPATH . WPINC . '/cache.php');
+	$_wp_using_ext_object_cache = false;
+}
 
 wp_cache_init();
 if ( function_exists('wp_cache_add_global_groups') ) {
