diff --git a/modules/aggregator/aggregator.module b/modules/aggregator/aggregator.module
index f247d26..2916cef 100644
--- a/modules/aggregator/aggregator.module
+++ b/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/modules/aggregator/aggregator.processor.inc b/modules/aggregator/aggregator.processor.inc
index 6eb2c66..7f9a856 100644
--- a/modules/aggregator/aggregator.processor.inc
+++ b/modules/aggregator/aggregator.processor.inc
@@ -176,9 +176,13 @@ function aggregator_save_item($edit) {
  *
  * @param $feed
  *   Object describing feed.
+ *
+ * @return boolean
+ *   true if items were expired, else false
  */
 function aggregator_expire($feed) {
   $aggregator_clear = variable_get('aggregator_clear', 9676800);
+  $ret = FALSE;
 
   if ($aggregator_clear != AGGREGATOR_CLEAR_NEVER) {
     // Remove all items that are older than flush item timer.
@@ -195,6 +199,8 @@ function aggregator_expire($feed) {
       db_delete('aggregator_item')
         ->condition('iid', $iids, 'IN')
         ->execute();
+      $ret = TRUE;
     }
   }
+  return $ret;
 }
