diff --git a/lib/pleroma/user.ex b/lib/pleroma/user.ex
index bcd5256c8..4b3a9d690 100644
--- a/lib/pleroma/user.ex
+++ b/lib/pleroma/user.ex
@@ -473,6 +473,18 @@ def remote_user_changeset(struct \\ %User{local: false}, params) do
     |> validate_length(:bio, max: bio_limit)
     |> validate_length(:name, max: name_limit)
     |> validate_fields(true)
+    |> validate_non_local()
+  end
+
+  defp validate_non_local(cng) do
+    local? = get_field(cng, :local)
+
+    if local? do
+      cng
+      |> add_error(:local, "User is local, can't update with this changeset.")
+    else
+      cng
+    end
   end
 
   def update_changeset(struct, params \\ %{}) do
diff --git a/test/pleroma/user_test.exs b/test/pleroma/user_test.exs
index c678dadb3..e01a940cb 100644
--- a/test/pleroma/user_test.exs
+++ b/test/pleroma/user_test.exs
@@ -895,6 +895,13 @@ test "it has required fields" do
         refute cs.valid?
       end)
     end
+
+    test "it is invalid given a local user" do
+      user = insert(:user)
+      cs = User.remote_user_changeset(user, %{name: "tom from myspace"})
+
+      refute cs.valid?
+    end
   end
 
   describe "followers and friends" do
diff --git a/test/pleroma/web/activity_pub/side_effects_test.exs b/test/pleroma/web/activity_pub/side_effects_test.exs
index 9efbaad04..297fc0b84 100644
--- a/test/pleroma/web/activity_pub/side_effects_test.exs
+++ b/test/pleroma/web/activity_pub/side_effects_test.exs
@@ -108,7 +108,7 @@ test "it blocks but does not unfollow if the relevant setting is set", %{
 
   describe "update users" do
     setup do
-      user = insert(:user)
+      user = insert(:user, local: false)
       {:ok, update_data, []} = Builder.update(user, %{"id" => user.ap_id, "name" => "new name!"})
       {:ok, update, _meta} = ActivityPub.persist(update_data, local: true)