diff --git a/src/Protocol/ActivityPub/Processor.php b/src/Protocol/ActivityPub/Processor.php
index 60793f8026..fe7a4c5967 100644
--- a/src/Protocol/ActivityPub/Processor.php
+++ b/src/Protocol/ActivityPub/Processor.php
@@ -284,9 +284,16 @@ class Processor
 			$recursion_depth = $activity['recursion-depth'] ?? 0;
 			Logger::notice('Parent not found. Try to refetch it.', ['parent' => $activity['reply-to-id'], 'recursion-depth' => $recursion_depth]);
 			if ($recursion_depth < 10) {
-				self::fetchMissingActivity($activity['reply-to-id'], $activity, '', Receiver::COMPLETION_AUTO);
+				$result = self::fetchMissingActivity($activity['reply-to-id'], $activity, '', Receiver::COMPLETION_AUTO);
+				$fetch_by_worker = empty($result);
 			} else {
-				Logger::notice('Recursion level is too high, fetching is done by worker.', ['parent' => $activity['reply-to-id'], 'recursion-depth' => $recursion_depth]);
+				Logger::notice('Recursion level is too high.', ['parent' => $activity['reply-to-id'], 'recursion-depth' => $recursion_depth]);
+				$activity['recursion-depth'] = 0;
+				$fetch_by_worker = true;
+			}
+
+			if ($fetch_by_worker) {
+				Logger::notice('Fetching is done by worker.', ['parent' => $activity['reply-to-id'], 'recursion-depth' => $recursion_depth]);
 				Worker::add(PRIORITY_HIGH, 'FetchMissingActivity', $activity['reply-to-id'], $activity, '', Receiver::COMPLETION_AUTO);
 				return [];
 			}
diff --git a/src/Protocol/ActivityPub/Queue.php b/src/Protocol/ActivityPub/Queue.php
index c3605ebb64..c5cfd522ae 100644
--- a/src/Protocol/ActivityPub/Queue.php
+++ b/src/Protocol/ActivityPub/Queue.php
@@ -126,8 +126,16 @@ class Queue
 		while ($entry = DBA::fetch($entries)) {
 			self::process($entry['id']);
 		}
+	}
 
-		DBA::delete('inbox-entry', ["`received` < ?", DateTimeFormat::utc('now - 1 days')]);
+	/**
+	 * Process all activities
+	 *
+	 * @return void
+	 */
+	public static function clear()
+	{
+		DBA::delete('inbox-entry', ["`received` < ?", DateTimeFormat::utc('now - 2 days')]);
 	}
 
 	/**
diff --git a/src/Worker/Cron.php b/src/Worker/Cron.php
index ee3fafe4bb..68ad218014 100644
--- a/src/Worker/Cron.php
+++ b/src/Worker/Cron.php
@@ -89,8 +89,8 @@ class Cron
 			Tag::setLocalTrendingHashtags(24, 20);
 			Tag::setGlobalTrendingHashtags(24, 20);
 
-			// Process pending posts in the queue
-			Queue::processAll();
+			// Remove old pending posts from the queue
+			Queue::clear();
 
 			// Search for new contacts in the directory
 			if (DI::config()->get('system', 'synchronize_directory')) {
diff --git a/src/Worker/FetchMissingActivity.php b/src/Worker/FetchMissingActivity.php
index 5aabe89ced..ceab8b7338 100644
--- a/src/Worker/FetchMissingActivity.php
+++ b/src/Worker/FetchMissingActivity.php
@@ -22,6 +22,7 @@
 namespace Friendica\Worker;
 
 use Friendica\Core\Logger;
+use Friendica\Core\Worker;
 use Friendica\Protocol\ActivityPub;
 use Friendica\Protocol\ActivityPub\Receiver;
 
@@ -35,6 +36,13 @@ class FetchMissingActivity
 	{
 		Logger::info('Start fetching missing activity', ['url' => $url]);
 		$result = ActivityPub\Processor::fetchMissingActivity($url, $child, $relay_actor, $completion);
-		Logger::info('Finished fetching missing activity', ['url' => $url, 'result' => $result]);
+		if ($result) {
+			Logger::info('Successfully fetched missing activity', ['url' => $url]);
+		} elseif (!Worker::defer()) {
+			Logger::info('Activity could not be fetched', ['url' => $url]);
+			// Possibly we should recursively remove child activities at this point.
+		} else {
+			Logger::info('Fetching deferred', ['url' => $url]);
+		}
 	}
 }