diff --git a/medallion/backends/memory_backend.py b/medallion/backends/memory_backend.py
index 8da67b0..b07ae14 100644
--- a/medallion/backends/memory_backend.py
+++ b/medallion/backends/memory_backend.py
@@ -163,22 +163,23 @@ class MemoryBackend(Backend):
                     try:
                         for new_obj in objs["objects"]:
                             id_and_version_already_present = False
-                            if new_obj["id"] in collection["objects"]:
-                                current_obj = collection["objects"][new_obj["id"]]
-                                if "modified" in new_obj:
-                                    if new_obj["modified"] == current_obj["modified"]:
+                            for obj in collection["objects"]:
+                                id_and_version_already_present = False
+
+                                if new_obj['id'] == obj['id']:
+                                    if "modified" in new_obj:
+                                        if new_obj["modified"] == obj["modified"]:
+                                            id_and_version_already_present = True
+                                    else:
+                                        # There is no modified field, so this object is immutable
                                         id_and_version_already_present = True
-                                else:
-                                    # There is no modified field, so this object is immutable
-                                    id_and_version_already_present = True
                             if not id_and_version_already_present:
                                 collection["objects"].append(new_obj)
                                 self._update_manifest(new_obj, api_root, collection["id"])
                                 successes.append(new_obj["id"])
                                 succeeded += 1
                             else:
-                                failures.append({"id": new_obj["id"],
-                                                 "message": "Unable to process object"})
+                                failures.append({"id": new_obj["id"], "message": "Unable to process object"})
                                 failed += 1
                     except Exception as e:
                         raise ProcessingError("While processing supplied content, an error occured", e)

BUG: checking new object IDs as existing already always fail
https://github.com/oasis-open/cti-taxii-server/blob/f6398926d866989201e754dca0fec1e1a041acdf/medallion/backends/memory_backend.py#L166

This line will always fail, you're checking that the ID of the object belongs in the array of objects instead of checking if the ID of the object exists as the ID of _any_ of the objects
diff --git a/medallion/test/test_memory_backend.py b/medallion/test/test_memory_backend.py
index a23b9f1..7c9f982 100644
--- a/medallion/test/test_memory_backend.py
+++ b/medallion/test/test_memory_backend.py
@@ -207,6 +207,54 @@ class TestTAXIIServerWithMemoryBackend(unittest.TestCase):
         assert manifests["objects"][0]["id"] == new_id
         # ------------- BEGIN: end manifest section ------------- #
 
+    def test_add_existing_objects(self):
+        new_bundle = copy.deepcopy(API_OBJECTS_2)
+        new_id = "indicator--%s" % uuid.uuid4()
+        new_bundle["objects"][0]["id"] = new_id
+
+        # ------------- BEGIN: add object section ------------- #
+
+        post_header = copy.deepcopy(self.auth)
+        post_header["Content-Type"] = MEDIA_TYPE_STIX_V20
+        post_header["Accept"] = MEDIA_TYPE_TAXII_V20
+
+        r_post = self.client.post(
+            test.ADD_OBJECTS_EP,
+            data=json.dumps(new_bundle),
+            headers=post_header
+        )
+        self.assertEqual(r_post.status_code, 202)
+        self.assertEqual(r_post.content_type, MEDIA_TYPE_TAXII_V20)
+
+        # ------------- END: add object section ------------- #
+        # ------------- BEGIN: add object again section ------------- #
+
+        r_post = self.client.post(
+            test.ADD_OBJECTS_EP,
+            data=json.dumps(new_bundle),
+            headers=post_header
+        )
+        status_response2 = self.load_json_response(r_post.data)
+        self.assertEqual(r_post.status_code, 202)
+        self.assertEqual(status_response2["success_count"], 0)
+        self.assertEqual(status_response2["failures"][0]["message"],
+                         "Unable to process object")
+
+        # ------------- END: add object again section ------------- #
+        # ------------- BEGIN: get object section ------------- #
+
+        get_header = copy.deepcopy(self.auth)
+        get_header["Accept"] = MEDIA_TYPE_STIX_V20
+
+        r_get = self.client.get(
+            test.GET_OBJECTS_EP + "?match[id]=%s" % new_id,
+            headers=get_header
+        )
+        self.assertEqual(r_get.status_code, 200)
+        objs = self.load_json_response(r_get.data)
+        self.assertEqual(len(objs["objects"]), 1)
+        self.assertEqual(objs["objects"][0]["id"], new_id)
+
     def test_client_object_versioning(self):
         new_id = "indicator--%s" % uuid.uuid4()
         new_bundle = copy.deepcopy(API_OBJECTS_2)

pip install -e .[docs,test]
parse_log_pytest
requirements.txt
pytest pytest-cov responses
apt-get update apt-get install -y gcc
3.6
requirements.txt
pytest --no-header -rA --tb=line --color=no -p no:cacheprovider -W ignore::DeprecationWarning
alabaster==0.7.13
attrs==22.2.0
Babel==2.11.0
certifi==2021.5.30
charset-normalizer==2.0.12
click==8.0.4
coverage==6.2
dataclasses==0.8
distlib==0.3.9
docutils==0.18.1
filelock==3.4.1
Flask==2.0.3
Flask-HTTPAuth==4.8.0
idna==3.10
imagesize==1.4.1
importlib-metadata==4.8.3
importlib-resources==5.4.0
iniconfig==1.1.1
itsdangerous==2.0.1
Jinja2==3.0.3
MarkupSafe==2.0.1
-e git+https://github.com/oasis-open/cti-taxii-server.git@c99f8dcd93ad5f06174fc2767771acd491bedaaa#egg=medallion
packaging==21.3
platformdirs==2.4.0
pluggy==1.0.0
py==1.11.0
Pygments==2.14.0
pyparsing==3.1.4
pytest==7.0.1
pytest-cov==4.0.0
pytz==2025.2
requests==2.27.1
responses==0.17.0
six==1.17.0
snowballstemmer==2.2.0
Sphinx==5.3.0
sphinxcontrib-applehelp==1.0.2
sphinxcontrib-devhelp==1.0.2
sphinxcontrib-htmlhelp==2.0.0
sphinxcontrib-jsmath==1.0.1
sphinxcontrib-qthelp==1.0.3
sphinxcontrib-serializinghtml==1.1.5
toml==0.10.2
tomli==1.2.3
tox==3.28.0
typing_extensions==4.1.1
urllib3==1.26.20
virtualenv==20.17.1
Werkzeug==2.0.3
zipp==3.6.0

name: cti-taxii-server
channels:
  - defaults
  - https://repo.anaconda.com/pkgs/main
  - https://repo.anaconda.com/pkgs/r
  - conda-forge
dependencies:
  - _libgcc_mutex=0.1=main
  - _openmp_mutex=5.1=1_gnu
  - ca-certificates=2025.2.25=h06a4308_0
  - certifi=2021.5.30=py36h06a4308_0
  - ld_impl_linux-64=2.40=h12ee557_0
  - libffi=3.3=he6710b0_2
  - libgcc-ng=11.2.0=h1234567_1
  - libgomp=11.2.0=h1234567_1
  - libstdcxx-ng=11.2.0=h1234567_1
  - ncurses=6.4=h6a678d5_0
  - openssl=1.1.1w=h7f8727e_0
  - pip=21.2.2=py36h06a4308_0
  - python=3.6.13=h12debd9_1
  - readline=8.2=h5eee18b_0
  - setuptools=58.0.4=py36h06a4308_0
  - sqlite=3.45.3=h5eee18b_0
  - tk=8.6.14=h39e8969_0
  - wheel=0.37.1=pyhd3eb1b0_0
  - xz=5.6.4=h5eee18b_1
  - zlib=1.2.13=h5eee18b_1
  - pip:
      - alabaster==0.7.13
      - attrs==22.2.0
      - babel==2.11.0
      - charset-normalizer==2.0.12
      - click==8.0.4
      - coverage==6.2
      - dataclasses==0.8
      - distlib==0.3.9
      - docutils==0.18.1
      - filelock==3.4.1
      - flask==2.0.3
      - flask-httpauth==4.8.0
      - idna==3.10
      - imagesize==1.4.1
      - importlib-metadata==4.8.3
      - importlib-resources==5.4.0
      - iniconfig==1.1.1
      - itsdangerous==2.0.1
      - jinja2==3.0.3
      - markupsafe==2.0.1
      - packaging==21.3
      - platformdirs==2.4.0
      - pluggy==1.0.0
      - py==1.11.0
      - pygments==2.14.0
      - pyparsing==3.1.4
      - pytest==7.0.1
      - pytest-cov==4.0.0
      - pytz==2025.2
      - requests==2.27.1
      - responses==0.17.0
      - six==1.17.0
      - snowballstemmer==2.2.0
      - sphinx==5.3.0
      - sphinxcontrib-applehelp==1.0.2
      - sphinxcontrib-devhelp==1.0.2
      - sphinxcontrib-htmlhelp==2.0.0
      - sphinxcontrib-jsmath==1.0.1
      - sphinxcontrib-qthelp==1.0.3
      - sphinxcontrib-serializinghtml==1.1.5
      - toml==0.10.2
      - tomli==1.2.3
      - tox==3.28.0
      - typing-extensions==4.1.1
      - urllib3==1.26.20
      - virtualenv==20.17.1
      - werkzeug==2.0.3
      - zipp==3.6.0
prefix: /opt/conda/envs/cti-taxii-server

medallion/test/test_memory_backend.py::TestTAXIIServerWithMemoryBackend::test_add_existing_objects
medallion/test/test_memory_backend.py::TestTAXIIServerWithMemoryBackend::test_add_objects medallion/test/test_memory_backend.py::TestTAXIIServerWithMemoryBackend::test_added_after_filtering medallion/test/test_memory_backend.py::TestTAXIIServerWithMemoryBackend::test_client_object_versioning medallion/test/test_memory_backend.py::TestTAXIIServerWithMemoryBackend::test_get_api_root_information medallion/test/test_memory_backend.py::TestTAXIIServerWithMemoryBackend::test_get_api_root_information_not_existent medallion/test/test_memory_backend.py::TestTAXIIServerWithMemoryBackend::test_get_collection medallion/test/test_memory_backend.py::TestTAXIIServerWithMemoryBackend::test_get_collection_not_existent medallion/test/test_memory_backend.py::TestTAXIIServerWithMemoryBackend::test_get_collections medallion/test/test_memory_backend.py::TestTAXIIServerWithMemoryBackend::test_get_collections_401 medallion/test/test_memory_backend.py::TestTAXIIServerWithMemoryBackend::test_get_collections_404 medallion/test/test_memory_backend.py::TestTAXIIServerWithMemoryBackend::test_get_object medallion/test/test_memory_backend.py::TestTAXIIServerWithMemoryBackend::test_get_object_401 medallion/test/test_memory_backend.py::TestTAXIIServerWithMemoryBackend::test_get_object_403 medallion/test/test_memory_backend.py::TestTAXIIServerWithMemoryBackend::test_get_object_404 medallion/test/test_memory_backend.py::TestTAXIIServerWithMemoryBackend::test_get_object_manifest_401 medallion/test/test_memory_backend.py::TestTAXIIServerWithMemoryBackend::test_get_object_manifest_403 medallion/test/test_memory_backend.py::TestTAXIIServerWithMemoryBackend::test_get_object_manifest_404 medallion/test/test_memory_backend.py::TestTAXIIServerWithMemoryBackend::test_get_objects medallion/test/test_memory_backend.py::TestTAXIIServerWithMemoryBackend::test_get_or_add_objects_401 medallion/test/test_memory_backend.py::TestTAXIIServerWithMemoryBackend::test_get_or_add_objects_403 medallion/test/test_memory_backend.py::TestTAXIIServerWithMemoryBackend::test_get_or_add_objects_404 medallion/test/test_memory_backend.py::TestTAXIIServerWithMemoryBackend::test_get_or_add_objects_422 medallion/test/test_memory_backend.py::TestTAXIIServerWithMemoryBackend::test_get_status_401 medallion/test/test_memory_backend.py::TestTAXIIServerWithMemoryBackend::test_get_status_404 medallion/test/test_memory_backend.py::TestTAXIIServerWithMemoryBackend::test_saving_data_file medallion/test/test_memory_backend.py::TestTAXIIServerWithMemoryBackend::test_server_discovery
medallion/backends/memory_backend.py
medallion/backends/memory_backend.py