diff --git a/lib/pleroma/object.ex b/lib/pleroma/object.ex
index dabb49536..5f1fc801b 100644
--- a/lib/pleroma/object.ex
+++ b/lib/pleroma/object.ex
@@ -20,29 +20,9 @@ defmodule Pleroma.Object do
     timestamps()
   end
 
-  def insert_or_get(cng) do
-    {_, data} = fetch_field(cng, :data)
-    id = data["id"] || data[:id]
-    key = "object:#{id}"
-
-    fetcher = fn _ ->
-      with nil <- get_by_ap_id(id),
-           {:ok, object} <- Repo.insert(cng) do
-        {:commit, object}
-      else
-        %Object{} = object -> {:commit, object}
-        e -> {:ignore, e}
-      end
-    end
-
-    with {state, object} when state in [:commit, :ok] <- Cachex.fetch(:object_cache, key, fetcher) do
-      {:ok, object}
-    end
-  end
-
   def create(data) do
     Object.change(%Object{}, %{data: data})
-    |> insert_or_get()
+    |> Repo.insert()
   end
 
   def change(struct, params \\ %{}) do
diff --git a/lib/pleroma/web/activity_pub/utils.ex b/lib/pleroma/web/activity_pub/utils.ex
index da6cca4dd..964e11c9d 100644
--- a/lib/pleroma/web/activity_pub/utils.ex
+++ b/lib/pleroma/web/activity_pub/utils.ex
@@ -142,8 +142,14 @@ def create_context(context) do
     context = context || generate_id("contexts")
     changeset = Object.context_mapping(context)
 
-    with {:ok, object} <- Object.insert_or_get(changeset) do
-      object
+    case Repo.insert(changeset) do
+      {:ok, object} ->
+        object
+
+      # This should be solved by an upsert, but it seems ecto
+      # has problems accessing the constraint inside the jsonb.
+      {:error, _} ->
+        Object.get_cached_by_ap_id(context)
     end
   end
 
diff --git a/lib/pleroma/web/twitter_api/twitter_api.ex b/lib/pleroma/web/twitter_api/twitter_api.ex
index 162beb9be..db521a3ad 100644
--- a/lib/pleroma/web/twitter_api/twitter_api.ex
+++ b/lib/pleroma/web/twitter_api/twitter_api.ex
@@ -310,8 +310,16 @@ def context_to_conversation_id(context) do
     else
       _e ->
         changeset = Object.context_mapping(context)
-        {:ok, object} = Object.insert_or_get(changeset)
-        object.id
+
+        case Repo.insert(changeset) do
+          {:ok, %{id: id}} ->
+            id
+
+          # This should be solved by an upsert, but it seems ecto
+          # has problems accessing the constraint inside the jsonb.
+          {:error, _} ->
+            Object.get_cached_by_ap_id(context).id
+        end
     end
   end
 
diff --git a/test/object_test.exs b/test/object_test.exs
index ab6431012..72194975d 100644
--- a/test/object_test.exs
+++ b/test/object_test.exs
@@ -57,32 +57,4 @@ test "ensures cache is cleared for the object" do
       assert cached_object.data["type"] == "Tombstone"
     end
   end
-
-  describe "insert_or_get" do
-    test "inserting the same object twice (by id) just returns the original object" do
-      data = %{data: %{"id" => Ecto.UUID.generate()}}
-      cng = Object.change(%Object{}, data)
-      {:ok, object} = Object.insert_or_get(cng)
-      {:ok, second_object} = Object.insert_or_get(cng)
-
-      Cachex.clear(:object_cache)
-      {:ok, third_object} = Object.insert_or_get(cng)
-
-      assert object == second_object
-      assert object == third_object
-    end
-  end
-
-  describe "create" do
-    test "inserts an object for a given data set" do
-      data = %{"id" => Ecto.UUID.generate()}
-
-      {:ok, object} = Object.create(data)
-      assert object.data["id"] == data["id"]
-
-      # Works when doing it twice.
-      {:ok, object} = Object.create(data)
-      assert object.data["id"] == data["id"]
-    end
-  end
 end