diff --git a/src/Model/Post/UserNotification.php b/src/Model/Post/UserNotification.php
index f4e700f0bc..d16ec4936f 100644
--- a/src/Model/Post/UserNotification.php
+++ b/src/Model/Post/UserNotification.php
@@ -308,7 +308,7 @@ class UserNotification
 			return;
 		}
 
-		$notification = (new Notifications\Factory\Notification(DI::baseUrl(), DI::l10n(), DI::localRelationship(), DI::logger()))->createForUser(
+		$notification = DI::notificationFactory()->createForUser(
 			$uid,
 			$item['vid'],
 			$type,
@@ -336,7 +336,7 @@ class UserNotification
 	 */
 	public static function insertNotification(int $actor, string $verb, int $uid): bool
 	{
-		$notification = (new Notifications\Factory\Notification(DI::baseUrl(), DI::l10n(), DI::localRelationship(), DI::logger()))->createForRelationship(
+		$notification = DI::notificationFactory()->createForRelationship(
 			$uid,
 			$actor,
 			$verb
diff --git a/src/Navigation/Notifications/Factory/Notification.php b/src/Navigation/Notifications/Factory/Notification.php
index ea74357c03..b2132beaff 100644
--- a/src/Navigation/Notifications/Factory/Notification.php
+++ b/src/Navigation/Notifications/Factory/Notification.php
@@ -25,7 +25,10 @@ use Friendica\App\BaseURL;
 use Friendica\BaseFactory;
 use Friendica\Capabilities\ICanCreateFromTableRow;
 use Friendica\Contact\LocalRelationship\Repository\LocalRelationship;
+use Friendica\Content\Text\BBCode;
 use Friendica\Content\Text\Plaintext;
+use Friendica\Core\Cache\Enum\Duration;
+use Friendica\Core\Cache\Capability\ICanCache;
 use Friendica\Core\L10n;
 use Friendica\Model\Contact;
 use Friendica\Model\Post;
@@ -43,14 +46,17 @@ class Notification extends BaseFactory implements ICanCreateFromTableRow
 	private $l10n;
 	/** @var LocalRelationship */
 	private $localRelationshipRepo;
+	/** @var ICanCache */
+	private $cache;
 
-	public function __construct(\Friendica\App\BaseURL $baseUrl, \Friendica\Core\L10n $l10n, \Friendica\Contact\LocalRelationship\Repository\LocalRelationship $localRelationshipRepo, LoggerInterface $logger)
+	public function __construct(\Friendica\App\BaseURL $baseUrl, \Friendica\Core\L10n $l10n, \Friendica\Contact\LocalRelationship\Repository\LocalRelationship $localRelationshipRepo, LoggerInterface $logger, ICanCache $cache)
 	{
 		parent::__construct($logger);
 
 		$this->baseUrl = $baseUrl;
 		$this->l10n = $l10n;
 		$this->localRelationshipRepo = $localRelationshipRepo;
+		$this->cache = $cache;
 	}
 
 	public function createFromTableRow(array $row): Entity\Notification
@@ -107,6 +113,12 @@ class Notification extends BaseFactory implements ICanCreateFromTableRow
 	{
 		$message = [];
 
+		$cachekey = 'Notification:' . $Notification->id;
+		$result = $this->cache->get($cachekey);
+		if (!is_null($result)) {
+			return $result;
+		}
+
 		$causer = $author = Contact::getById($Notification->actorId, ['id', 'name', 'url', 'contact-type', 'pending']);
 		if (empty($causer)) {
 			$this->logger->info('Causer not found', ['contact' => $Notification->actorId]);
@@ -132,7 +144,7 @@ class Notification extends BaseFactory implements ICanCreateFromTableRow
 				$this->logger->info('Thread is ignored', ['parent-uri-id' => $Notification->parentUriId, 'type' => $Notification->type]);
 				return $message;
 			}
-	
+
 			if (in_array($Notification->type, [Post\UserNotification::TYPE_THREAD_COMMENT, Post\UserNotification::TYPE_COMMENT_PARTICIPATION, Post\UserNotification::TYPE_ACTIVITY_PARTICIPATION, Post\UserNotification::TYPE_EXPLICIT_TAGGED])) {
 				$item = Post::selectFirst([], ['uri-id' => $Notification->parentUriId, 'uid' => [0, $Notification->uid]], ['order' => ['uid' => true]]);
 				if (empty($item)) {
@@ -170,11 +182,10 @@ class Notification extends BaseFactory implements ICanCreateFromTableRow
 
 			$link = $this->baseUrl . '/display/' . urlencode($link_item['guid']);
 
-			$content = Plaintext::getPost($item, 70);
-			if (!empty($content['text'])) {
-				$title = '"' . trim(str_replace("\n", " ", $content['text'])) . '"';
-			} else {
-				$title = '';
+			$body = BBCode::toPlaintext($item['body'], false);
+			$title = Plaintext::shorten($body, 70);
+			if (!empty($title)) {
+				$title = '"' . trim(str_replace("\n", " ", $title)) . '"';
 			}
 
 			$this->logger->debug('Got verb and type', ['verb' => $Notification->verb, 'type' => $Notification->type, 'causer' => $causer['id'], 'author' => $author['id'], 'item' => $item['id'], 'uid' => $Notification->uid]);
@@ -306,6 +317,7 @@ class Notification extends BaseFactory implements ICanCreateFromTableRow
 				'[url=' . $link . ']' . $title . '[/url]',
 				'[url=' . $author['url'] . ']' . $author['name'] . '[/url]');
 			$message['link'] = $link;
+			$this->cache->set($cachekey, $message, Duration::HOUR);
 		} else {
 			$this->logger->debug('Unhandled notification', ['notification' => $Notification]);
 		}
diff --git a/src/Navigation/Notifications/Repository/Notify.php b/src/Navigation/Notifications/Repository/Notify.php
index 9773b6446a..c114375be7 100644
--- a/src/Navigation/Notifications/Repository/Notify.php
+++ b/src/Navigation/Notifications/Repository/Notify.php
@@ -23,6 +23,7 @@ namespace Friendica\Navigation\Notifications\Repository;
 
 use Friendica\App\BaseURL;
 use Friendica\BaseRepository;
+use Friendica\Content\Text\BBCode;
 use Friendica\Content\Text\Plaintext;
 use Friendica\Core\Config\Capability\IManageConfigValues;
 use Friendica\Core\Hook;
@@ -301,11 +302,10 @@ class Notify extends BaseRepository
 
 				$item_post_type = Model\Item::postType($item, $l10n);
 
-				$content = Plaintext::getPost($item, 70);
-				if (!empty($content['text'])) {
-					$title = '"' . trim(str_replace("\n", " ", $content['text'])) . '"';
-				} else {
-					$title = '';
+				$body = BBCode::toPlaintext($item['body'], false);
+				$title = Plaintext::shorten($body, 70);
+				if (!empty($title)) {
+					$title = '"' . trim(str_replace("\n", " ", $title)) . '"';
 				}
 
 				// First go for the general message
@@ -710,11 +710,10 @@ class Notify extends BaseRepository
 			return false;
 		}
 
-		$content = Plaintext::getPost($item, 70);
-		if (!empty($content['text'])) {
-			$title = '"' . trim(str_replace("\n", " ", $content['text'])) . '"';
-		} else {
-			$title = $item['title'];
+		$body = BBCode::toPlaintext($item['body'], false);
+		$title = Plaintext::shorten($body, 70);
+		if (!empty($title)) {
+			$title = '"' . trim(str_replace("\n", " ", $title)) . '"';
 		}
 
 		// Some mail software relies on subject field for threading.