diff --git a/modules/Fediverse/Controllers/SchedulerController.php b/modules/Fediverse/Controllers/SchedulerController.php
index 25e840d886916c0a201955c0842d734a8f30ad71..3f723fa99765c752490bb7baf8abd4a1e1ecbeed 100644
--- a/modules/Fediverse/Controllers/SchedulerController.php
+++ b/modules/Fediverse/Controllers/SchedulerController.php
@@ -27,11 +27,20 @@ class SchedulerController extends Controller
 
         // Send activity to all followers
         foreach ($scheduledActivities as $scheduledActivity) {
-            // send activity to all actor followers
-            send_activity_to_followers(
-                $scheduledActivity->actor,
-                json_encode($scheduledActivity->payload, JSON_THROW_ON_ERROR),
-            );
+            if ($scheduledActivity->target_actor_id !== null) {
+                // send activity to targeted actor
+                send_activity_to_actor(
+                    $scheduledActivity->actor,
+                    $scheduledActivity->targetActor,
+                    json_encode($scheduledActivity->payload, JSON_THROW_ON_ERROR)
+                );
+            } else {
+                // send activity to all actor followers
+                send_activity_to_followers(
+                    $scheduledActivity->actor,
+                    json_encode($scheduledActivity->payload, JSON_THROW_ON_ERROR),
+                );
+            }
 
             // set activity post to delivered
             model('ActivityModel')
diff --git a/modules/Fediverse/Entities/Actor.php b/modules/Fediverse/Entities/Actor.php
index 0b2f15b34459f00b89b6844841a7d41c17ad55e7..97f53f7480589d6b55ed7e6f62f16b0ef69d752b 100644
--- a/modules/Fediverse/Entities/Actor.php
+++ b/modules/Fediverse/Entities/Actor.php
@@ -22,7 +22,7 @@ use RuntimeException;
  * @property string|null $summary
  * @property string|null $private_key
  * @property string|null $public_key
- * @property string|null $public_key_id
+ * @property string $public_key_id
  * @property string|null $avatar_image_url
  * @property string|null $avatar_image_mimetype
  * @property string|null $cover_image_url
diff --git a/modules/Fediverse/Helpers/fediverse_helper.php b/modules/Fediverse/Helpers/fediverse_helper.php
index 178f4d2e6696a22dac5ccf0ad2a24f63de9f3998..ba313220cec9e1bf0a88ff1b84173f81bd31d459 100644
--- a/modules/Fediverse/Helpers/fediverse_helper.php
+++ b/modules/Fediverse/Helpers/fediverse_helper.php
@@ -97,6 +97,25 @@ if (! function_exists('accept_follow')) {
     }
 }
 
+if (! function_exists('send_activity_to_actor')) {
+    /**
+     * Sends an activity to all actor followers
+     */
+    function send_activity_to_actor(Actor $actor, Actor $targetActor, string $activityPayload): void
+    {
+        try {
+            $acceptRequest = new ActivityRequest($targetActor->inbox_url, $activityPayload);
+            if ($actor->private_key !== null) {
+                $acceptRequest->sign($actor->public_key_id, $actor->private_key);
+            }
+            $acceptRequest->post();
+        } catch (Exception $exception) {
+            // log error
+            log_message('critical', $exception->getMessage());
+        }
+    }
+}
+
 if (! function_exists('send_activity_to_followers')) {
     /**
      * Sends an activity to all actor followers
@@ -104,14 +123,7 @@ if (! function_exists('send_activity_to_followers')) {
     function send_activity_to_followers(Actor $actor, string $activityPayload): void
     {
         foreach ($actor->followers as $follower) {
-            try {
-                $acceptRequest = new ActivityRequest($follower->inbox_url, $activityPayload);
-                $acceptRequest->sign($actor->public_key_id, $actor->private_key);
-                $acceptRequest->post();
-            } catch (Exception $exception) {
-                // log error
-                log_message('critical', $exception->getMessage());
-            }
+            send_activity_to_actor($actor, $follower, $activityPayload);
         }
     }
 }
diff --git a/modules/Fediverse/Models/FavouriteModel.php b/modules/Fediverse/Models/FavouriteModel.php
index 93cd56679d7907c280d15caa3f9c7dbbd07791e1..5e8baff5c148913c010368bc1aad7d43ea6711d3 100644
--- a/modules/Fediverse/Models/FavouriteModel.php
+++ b/modules/Fediverse/Models/FavouriteModel.php
@@ -68,7 +68,7 @@ class FavouriteModel extends BaseUuidModel
                 ->newActivity(
                     'Like',
                     $actor->id,
-                    null,
+                    $post->actor_id,
                     $post->id,
                     $likeActivity->toJSON(),
                     $post->published_at,
@@ -134,7 +134,7 @@ class FavouriteModel extends BaseUuidModel
                 ->newActivity(
                     'Undo',
                     $actor->id,
-                    null,
+                    $post->actor_id,
                     $post->id,
                     $undoActivity->toJSON(),
                     $post->published_at,
diff --git a/modules/Fediverse/Models/PostModel.php b/modules/Fediverse/Models/PostModel.php
index 9762b24ebc93fe9e27ddc84e55ef40216faedc5f..dc6c07a70f8ff8ab6342dc61b8e67f13b50c8766 100644
--- a/modules/Fediverse/Models/PostModel.php
+++ b/modules/Fediverse/Models/PostModel.php
@@ -499,7 +499,7 @@ class PostModel extends BaseUuidModel
                 ->newActivity(
                     'Announce',
                     $actor->id,
-                    null,
+                    $post->actor_id,
                     $post->id,
                     $announceActivity->toJSON(),
                     $reblog->published_at,
@@ -559,7 +559,7 @@ class PostModel extends BaseUuidModel
                 ->newActivity(
                     'Undo',
                     $reblogPost->actor_id,
-                    null,
+                    $reblogPost->reblog_of_post->actor_id,
                     $reblogPost->reblog_of_id,
                     $undoActivity->toJSON(),
                     Time::now(),