diff --git a/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/common/migration/M014_AddItemNameBescheidToPatchAttachedItemCommand.java b/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/common/migration/M014_AddItemNameBescheidToPatchAttachedItemCommand.java
index d08eaeb1b40e7ba49caec9ddf754643690475359..576a6a65ccd89b1c7dc1fa266dd17706bc832a25 100644
--- a/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/common/migration/M014_AddItemNameBescheidToPatchAttachedItemCommand.java
+++ b/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/common/migration/M014_AddItemNameBescheidToPatchAttachedItemCommand.java
@@ -1,14 +1,37 @@
+/*
+ * Copyright (C) 2025 Das Land Schleswig-Holstein vertreten durch den
+ * Ministerpräsidenten des Landes Schleswig-Holstein
+ * Staatskanzlei
+ * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
+ *
+ * Lizenziert unter der EUPL, Version 1.2 oder - sobald
+ * diese von der Europäischen Kommission genehmigt wurden -
+ * Folgeversionen der EUPL ("Lizenz");
+ * Sie dürfen dieses Werk ausschließlich gemäß
+ * dieser Lizenz nutzen.
+ * Eine Kopie der Lizenz finden Sie hier:
+ *
+ * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
+ *
+ * Sofern nicht durch anwendbare Rechtsvorschriften
+ * gefordert oder in schriftlicher Form vereinbart, wird
+ * die unter der Lizenz verbreitete Software "so wie sie
+ * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
+ * ausdrücklich oder stillschweigend - verbreitet.
+ * Die sprachspezifischen Genehmigungen und Beschränkungen
+ * unter der Lizenz sind dem Lizenztext zu entnehmen.
+ */
 package de.ozgcloud.vorgang.common.migration;
 
 import java.util.List;
 
-import org.bson.Document;
-import org.springframework.data.mongodb.core.MongoTemplate;
-import org.springframework.data.mongodb.core.aggregation.Aggregation;
+import org.springframework.data.mongodb.core.MongoOperations;
 import org.springframework.data.mongodb.core.query.Criteria;
 import org.springframework.data.mongodb.core.query.Query;
+import org.springframework.data.mongodb.core.query.Update;
 
 import de.ozgcloud.command.Command;
+import de.ozgcloud.vorgang.command.PersistedCommand;
 import io.mongock.api.annotations.ChangeUnit;
 import io.mongock.api.annotations.Execution;
 import io.mongock.api.annotations.RollbackExecution;
@@ -24,22 +47,23 @@ public class M014_AddItemNameBescheidToPatchAttachedItemCommand { // NOSONAR
 	private static final String BESCHEID_ITEM_NAME = "Bescheid";
 
 	@Execution
-	public void doMigration(MongoTemplate template) {
-		var parentIds = getSendBescheidCommandIds(template);
-		template.aggregate(buildAggregationPipeline(parentIds), Command.COLLECTION_NAME, Document.class);
+	public void doMigration(MongoOperations mongoOperations) {
+		var parentIds = getSendBescheidCommandIds(mongoOperations);
+		updateDocuments(mongoOperations, parentIds);
 	}
 
-	List<String> getSendBescheidCommandIds(MongoTemplate template) {
-		var commands = template.find(Query.query(Criteria.where(ORDER_FIELD).is(SEND_BESCHEID_ORDER)), Command.class);
+	List<String> getSendBescheidCommandIds(MongoOperations mongoOperations) {
+		var commands = mongoOperations.find(Query.query(Criteria.where(ORDER_FIELD).is(SEND_BESCHEID_ORDER)), PersistedCommand.class);
 		return commands.stream().map(Command::getId).toList();
 	}
 
-	private Aggregation buildAggregationPipeline(List<String> parentIds) {
-		var matchingCriteria = new Criteria().andOperator(Criteria.where(PARENT_ID_FIELD).in(parentIds),
+	private void updateDocuments(MongoOperations mongoOperations, List<String> parentIds) {
+		var query = new Query().addCriteria(new Criteria().andOperator(
+				Criteria.where(PARENT_ID_FIELD).in(parentIds),
 				Criteria.where(ORDER_FIELD).is(PATCH_ATTACHED_ITEM_ORDER),
-				Criteria.where(ITEM_NAME_FILED).exists(false));
-		return Aggregation.newAggregation(Aggregation.match(matchingCriteria),
-				Aggregation.addFields().addFieldWithValue(ITEM_NAME_FILED, BESCHEID_ITEM_NAME).build());
+				Criteria.where(ITEM_NAME_FILED).exists(false)));
+		var update = new Update().set(ITEM_NAME_FILED, BESCHEID_ITEM_NAME);
+		mongoOperations.updateMulti(query, update, PersistedCommand.class);
 	}
 
 	@RollbackExecution
diff --git a/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/common/migration/M014_AddItemNameBescheidToPatchAttachedItemCommandITCase.java b/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/common/migration/M014_AddItemNameBescheidToPatchAttachedItemCommandITCase.java
new file mode 100644
index 0000000000000000000000000000000000000000..adc23fb8b6cfd66cd631e29b64b4c6616119160d
--- /dev/null
+++ b/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/common/migration/M014_AddItemNameBescheidToPatchAttachedItemCommandITCase.java
@@ -0,0 +1,158 @@
+/*
+ * Copyright (C) 2025 Das Land Schleswig-Holstein vertreten durch den
+ * Ministerpräsidenten des Landes Schleswig-Holstein
+ * Staatskanzlei
+ * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
+ *
+ * Lizenziert unter der EUPL, Version 1.2 oder - sobald
+ * diese von der Europäischen Kommission genehmigt wurden -
+ * Folgeversionen der EUPL ("Lizenz");
+ * Sie dürfen dieses Werk ausschließlich gemäß
+ * dieser Lizenz nutzen.
+ * Eine Kopie der Lizenz finden Sie hier:
+ *
+ * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
+ *
+ * Sofern nicht durch anwendbare Rechtsvorschriften
+ * gefordert oder in schriftlicher Form vereinbart, wird
+ * die unter der Lizenz verbreitete Software "so wie sie
+ * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
+ * ausdrücklich oder stillschweigend - verbreitet.
+ * Die sprachspezifischen Genehmigungen und Beschränkungen
+ * unter der Lizenz sind dem Lizenztext zu entnehmen.
+ */
+package de.ozgcloud.vorgang.common.migration;
+
+import static org.assertj.core.api.Assertions.*;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.mockito.InjectMocks;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.mongodb.core.MongoOperations;
+
+import de.ozgcloud.command.Command;
+import de.ozgcloud.common.test.DataITCase;
+import de.ozgcloud.vorgang.command.CommandTestFactory;
+import de.ozgcloud.vorgang.command.PersistedCommand;
+
+@DataITCase
+class M014_AddItemNameBescheidToPatchAttachedItemCommandITCase {
+
+	@InjectMocks
+	private M014_AddItemNameBescheidToPatchAttachedItemCommand migration;
+	@Autowired
+	private MigrationDbTestUtils migrationDbTestUtils;
+	@Autowired
+	private MongoOperations mongoOperations;
+
+	private List<PersistedCommand> expectedCommands;
+	private PersistedCommand sendBescheidCommand;
+	private PersistedCommand patchAttachedItemCommand;
+	private PersistedCommand otherSubCommand;
+	private PersistedCommand otherPatchAttachedItemCommand;
+
+	@BeforeEach
+	void setUp() {
+		migrationDbTestUtils.dropCommandCollection();
+		sendBescheidCommand = saveSendBescheidCommand();
+		patchAttachedItemCommand = savePatchAttachedItemSubCommand(sendBescheidCommand.getId());
+		otherSubCommand = saveOtherSubCommand(sendBescheidCommand.getId());
+		otherPatchAttachedItemCommand = saveOtherPatchAttachedItemSubCommand();
+		expectedCommands = List.of(sendBescheidCommand,
+				buildExpectedPatchAttachedItemCommand(patchAttachedItemCommand),
+				otherSubCommand,
+				otherPatchAttachedItemCommand);
+	}
+
+	private PersistedCommand saveSendBescheidCommand() {
+		var command = CommandTestFactory.createBuilder().id(null).order("SEND_BESCHEID").build();
+		return mongoOperations.save(command);
+	}
+
+	private PersistedCommand savePatchAttachedItemSubCommand(String id) {
+		Map<String, Object> itemBody = Map.of("parentId", id);
+		var command = CommandTestFactory.createBuilder()
+				.id(null)
+				.order("PATCH_ATTACHED_ITEM")
+				.bodyObject(itemBody)
+				.build();
+		return mongoOperations.save(command);
+	}
+
+	private PersistedCommand saveOtherSubCommand(String id) {
+		Map<String, Object> itemBody = Map.of("parentId", id);
+		var command = CommandTestFactory.createBuilder()
+				.id(null)
+				.bodyObject(itemBody)
+				.build();
+		return mongoOperations.save(command);
+	}
+
+	private PersistedCommand saveOtherPatchAttachedItemSubCommand() {
+		var command = CommandTestFactory.createBuilder()
+				.id(null)
+				.order("PATCH_ATTACHED_ITEM")
+				.build();
+		return mongoOperations.save(command);
+	}
+
+	private PersistedCommand buildExpectedPatchAttachedItemCommand(Command patchAttachedItemCommand) {
+		var body = new HashMap<>(patchAttachedItemCommand.getBodyObject());
+		body.put("itemName", "Bescheid");
+		return CommandTestFactory.createBuilder()
+				.id(patchAttachedItemCommand.getId())
+				.order(patchAttachedItemCommand.getOrder())
+				.bodyObject(body)
+				.build();
+	}
+
+	@Test
+	void shouldContainSendBescheidCommand() {
+		migration.doMigration(mongoOperations);
+
+		var command = mongoOperations.findById(sendBescheidCommand.getId(), PersistedCommand.class);
+
+		assertThat(command).usingRecursiveComparison().isEqualTo(sendBescheidCommand);
+	}
+
+	@Test
+	void shouldModifyPatchAttachedBescheidItem() {
+		migration.doMigration(mongoOperations);
+
+		var command = mongoOperations.findById(patchAttachedItemCommand.getId(), PersistedCommand.class);
+
+		assertThat(command).usingRecursiveComparison().isEqualTo(buildExpectedPatchAttachedItemCommand(patchAttachedItemCommand));
+	}
+
+	@Test
+	void shouldNotModifyOtherSubcommands() {
+		migration.doMigration(mongoOperations);
+
+		var command = mongoOperations.findById(otherSubCommand.getId(), PersistedCommand.class);
+
+		assertThat(command).usingRecursiveComparison().isEqualTo(otherSubCommand);
+	}
+
+	@Test
+	void shouldNotModifyOtherPatchAttachedItemCommands() {
+		migration.doMigration(mongoOperations);
+
+		var command = mongoOperations.findById(otherPatchAttachedItemCommand.getId(), PersistedCommand.class);
+
+		assertThat(command).usingRecursiveComparison().isEqualTo(otherPatchAttachedItemCommand);
+	}
+
+	@Test
+	void shouldContainExpectedCommands() {
+		migration.doMigration(mongoOperations);
+
+		var commands = mongoOperations.findAll(PersistedCommand.class);
+
+		assertThat(commands).usingRecursiveFieldByFieldElementComparator().containsExactlyInAnyOrderElementsOf(expectedCommands);
+	}
+}