diff --git a/core/modules/aggregator/aggregator.module b/core/modules/aggregator/aggregator.module
index f247d26..9f2a48f 100644
--- a/core/modules/aggregator/aggregator.module
+++ b/core/modules/aggregator/aggregator.module
@@ -600,6 +600,7 @@ function _aggregator_get_variables() {
 function aggregator_refresh($feed) {
   // Store feed URL to track changes.
   $feed_url = $feed->url;
+  $clear_cache = FALSE;
 
   // Fetch the feed.
   list($fetcher, $parser, $processors) = _aggregator_get_variables();
@@ -641,6 +642,7 @@ function aggregator_refresh($feed) {
           module_invoke($processor, 'aggregator_process', $feed);
         }
       }
+      $clear_cache = TRUE;
     }
   }
   else {
@@ -654,8 +656,13 @@ function aggregator_refresh($feed) {
     ->execute();
 
   // Expire old feed items.
-  if (function_exists('aggregator_expire')) {
-    aggregator_expire($feed);
+  if (function_exists('aggregator_expire') && aggregator_expire($feed)) {
+    $clear_cache = TRUE;
+  }
+
+  // Clear the cache if necessary.
+  if ($clear_cache) {
+    cache_clear_all();
   }
 }
 
diff --git a/core/modules/aggregator/aggregator.parser.inc b/core/modules/aggregator/aggregator.parser.inc
index 556f3d3..4e1855c 100644
--- a/core/modules/aggregator/aggregator.parser.inc
+++ b/core/modules/aggregator/aggregator.parser.inc
@@ -44,9 +44,6 @@ function aggregator_aggregator_parse($feed) {
     $feed->etag = $etag;
     $feed->modified = $modified;
 
-    // Clear the cache.
-    cache_clear_all();
-
     return TRUE;
   }
 
diff --git a/core/modules/aggregator/aggregator.processor.inc b/core/modules/aggregator/aggregator.processor.inc
index 79261b6..0ef9918 100644
--- a/core/modules/aggregator/aggregator.processor.inc
+++ b/core/modules/aggregator/aggregator.processor.inc
@@ -179,9 +179,13 @@ function aggregator_save_item($edit) {
  *
  * @param $feed
  *   Object describing feed.
+ *
+ * @return int
+ *   The number of items expired from the feed.
  */
 function aggregator_expire($feed) {
   $aggregator_clear = variable_get('aggregator_clear', 9676800);
+  $ret = 0;
 
   if ($aggregator_clear != AGGREGATOR_CLEAR_NEVER) {
     // Remove all items that are older than flush item timer.
@@ -198,6 +202,8 @@ function aggregator_expire($feed) {
       db_delete('aggregator_item')
         ->condition('iid', $iids, 'IN')
         ->execute();
+      $ret++;
     }
   }
+  return $ret;
 }
