diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/historie/HistorieCommandHandler.java b/alfa-service/src/main/java/de/ozgcloud/alfa/historie/HistorieCommandHandler.java
index c2d2ae7363c33a4ed93418b6440c5d192e385c2d..f8b377c8574f379fd0a1e26a3a6bf5986d81ecbd 100644
--- a/alfa-service/src/main/java/de/ozgcloud/alfa/historie/HistorieCommandHandler.java
+++ b/alfa-service/src/main/java/de/ozgcloud/alfa/historie/HistorieCommandHandler.java
@@ -34,7 +34,6 @@ import de.ozgcloud.alfa.common.command.Command;
 import de.ozgcloud.alfa.common.command.CommandBodyMapper;
 import de.ozgcloud.alfa.common.command.CommandOrder;
 import de.ozgcloud.alfa.common.command.LegacyOrder;
-import de.ozgcloud.alfa.kommentar.Kommentar;
 import de.ozgcloud.alfa.wiedervorlage.Wiedervorlage;
 
 /**
@@ -77,9 +76,7 @@ class HistorieCommandHandler {
 		var itemName = getItemName(command);
 
 		itemName.ifPresent(name -> {
-			if (name.equals(Kommentar.class.getSimpleName())) {
-				resultBuilder.order(LegacyOrder.CREATE_KOMMENTAR).build();
-			} else if (name.equals(Wiedervorlage.class.getSimpleName())) {
+			if (name.equals(Wiedervorlage.class.getSimpleName())) {
 				resultBuilder.order(LegacyOrder.CREATE_WIEDERVORLAGE).build();
 			} else if (isOzgCloudNachrichtenManager(command) && isIncomming(command)) {
 				resultBuilder.order(CommandOrder.RECEIVE_POSTFACH_NACHRICHT.name()).build();
@@ -102,9 +99,7 @@ class HistorieCommandHandler {
 		var itemName = getItemName(command);
 
 		itemName.ifPresent(name -> {
-			if (name.equals(Kommentar.class.getSimpleName())) {
-				resultBuilder.order(LegacyOrder.EDIT_KOMMENTAR).build();
-			} else if (name.equals(Wiedervorlage.class.getSimpleName())) {
+			if (name.equals(Wiedervorlage.class.getSimpleName())) {
 				resultBuilder.order(LegacyOrder.EDIT_WIEDERVORLAGE).build();
 			}
 		});
diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/kommentar/KommentarHistorieProcessor.java b/alfa-service/src/main/java/de/ozgcloud/alfa/kommentar/KommentarHistorieProcessor.java
new file mode 100644
index 0000000000000000000000000000000000000000..665b90ab26399666cdff697cd3e455ba2ce7bfb7
--- /dev/null
+++ b/alfa-service/src/main/java/de/ozgcloud/alfa/kommentar/KommentarHistorieProcessor.java
@@ -0,0 +1,51 @@
+package de.ozgcloud.alfa.kommentar;
+
+import java.util.Optional;
+import java.util.stream.Stream;
+
+import org.apache.commons.collections.MapUtils;
+
+import de.ozgcloud.alfa.common.command.Command;
+import de.ozgcloud.alfa.common.command.CommandBodyMapper;
+import de.ozgcloud.alfa.common.command.CommandOrder;
+import de.ozgcloud.alfa.common.command.LegacyOrder;
+import de.ozgcloud.alfa.historie.HistorieProcessor;
+
+class KommentarHistorieProcessor implements HistorieProcessor {
+
+	@Override
+	public Stream<Command> process(Stream<Command> commands) {
+		return commands.map(this::translateCreateKommentar).map(this::translateEditKommentar);
+	}
+
+	Command translateCreateKommentar(Command command) {
+		if (isCreateAttachedItemCommand(command) && hasKommentarItemName(command)) {
+			return command.toBuilder().order(LegacyOrder.CREATE_KOMMENTAR).build();
+		}
+		return command;
+	}
+
+	private boolean isCreateAttachedItemCommand(Command command) {
+		return CommandOrder.CREATE_ATTACHED_ITEM == command.getCommandOrder();
+	}
+
+	Command translateEditKommentar(Command command) {
+		if (isUpdateAttachedItemCommand(command) && hasKommentarItemName(command)) {
+			return command.toBuilder().order(LegacyOrder.EDIT_KOMMENTAR).build();
+		}
+		return command;
+	}
+
+	private boolean isUpdateAttachedItemCommand(Command command) {
+		return CommandOrder.UPDATE_ATTACHED_ITEM == command.getCommandOrder();
+	}
+
+	private boolean hasKommentarItemName(Command command) {
+		return getItemName(command).filter(itemName -> Kommentar.class.getSimpleName().equals(itemName)).isPresent();
+	}
+
+	private Optional<String> getItemName(Command command) {
+		return Optional.ofNullable(MapUtils.getString(command.getBody(), CommandBodyMapper.ITEM_NAME_PROPERTY));
+	}
+
+}
diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/historie/HistorieCommandHandlerTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/historie/HistorieCommandHandlerTest.java
index 7fe5599fffac950da6c74ae51b8789ad1d96a13e..2b80cc34f7f8fe0c02d3c806d1b1f97d7638cd73 100644
--- a/alfa-service/src/test/java/de/ozgcloud/alfa/historie/HistorieCommandHandlerTest.java
+++ b/alfa-service/src/test/java/de/ozgcloud/alfa/historie/HistorieCommandHandlerTest.java
@@ -62,22 +62,6 @@ class HistorieCommandHandlerTest {
 	@Nested
 	class TestTranslateOrders {
 
-		@ParameterizedTest
-		@CsvSource(value = { "CREATE_KOMMENTAR;Kommentar", "CREATE_WIEDERVORLAGE;Wiedervorlage" }, delimiter = ';')
-		void shouldTranslateToCreateOrder(String target, String itemName) {
-			var command = handler.translateOrder(createCommand(itemName, CommandOrder.CREATE_ATTACHED_ITEM));
-
-			assertThat(command.getOrder()).isEqualTo(target);
-		}
-
-		@ParameterizedTest
-		@CsvSource(value = { "EDIT_KOMMENTAR;Kommentar", "EDIT_WIEDERVORLAGE;Wiedervorlage" }, delimiter = ';')
-		void shouldTranslateToEditOrder(String target, String itemName) {
-			var command = handler.translateOrder(createCommand(itemName, CommandOrder.UPDATE_ATTACHED_ITEM));
-
-			assertThat(command.getOrder()).isEqualTo(target);
-		}
-
 		@ParameterizedTest
 		@CsvSource(value = { "WIEDERVORLAGE_ERLEDIGEN;true", "WIEDERVORLAGE_WIEDEREROEFFNEN;false" }, delimiter = ';')
 		void shouldTranslateToWiedervolageErledigenOrWiedervolageWiedereroeffnen(String target, String doneValue) {
diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/kommentar/KommentarHistorieProcessorTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/kommentar/KommentarHistorieProcessorTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..957adbee0aad0c30f2d2f05e6472a6fbcc30c20d
--- /dev/null
+++ b/alfa-service/src/test/java/de/ozgcloud/alfa/kommentar/KommentarHistorieProcessorTest.java
@@ -0,0 +1,167 @@
+package de.ozgcloud.alfa.kommentar;
+
+import static org.assertj.core.api.Assertions.*;
+import static org.mockito.Mockito.*;
+
+import java.util.Map;
+import java.util.stream.Stream;
+
+import org.junit.jupiter.api.Nested;
+import org.junit.jupiter.api.Test;
+import org.mockito.Spy;
+
+import com.thedeanda.lorem.LoremIpsum;
+
+import de.ozgcloud.alfa.common.command.Command;
+import de.ozgcloud.alfa.common.command.CommandBodyMapper;
+import de.ozgcloud.alfa.common.command.CommandOrder;
+import de.ozgcloud.alfa.common.command.CommandTestFactory;
+import de.ozgcloud.alfa.common.command.LegacyOrder;
+
+class KommentarHistorieProcessorTest {
+
+	@Spy
+	private KommentarHistorieProcessor processor;
+
+	@Nested
+	class TestProcess {
+
+		private final Command command = CommandTestFactory.create();
+
+		@Test
+		void shouldPropagateAllOrders() {
+			doReturn(command).when(processor).translateCreateKommentar(command);
+			doReturn(command).when(processor).translateEditKommentar(command);
+
+			var commands = processor.process(Stream.of(command));
+
+			assertThat(commands).containsExactly(command);
+		}
+
+		@Test
+		void shouldCallTranslateCreateKommentar() {
+			processor.process(Stream.of(command)).toList();
+
+			verify(processor).translateCreateKommentar(command);
+		}
+
+		@Test
+		void shouldCallTranslateEditKommentar() {
+			doReturn(command).when(processor).translateCreateKommentar(command);
+
+			processor.process(Stream.of(command)).toList();
+
+			verify(processor).translateEditKommentar(command);
+		}
+	}
+
+	@Nested
+	class TestTranslateCreateKommentar {
+
+		@Nested
+		class TestOnNotCreateAttachedItem {
+
+			@Test
+			void shouldReturnSameCommand() {
+				var command = CommandTestFactory.create();
+
+				var resultCommand = processor.translateCreateKommentar(command);
+
+				assertThat(resultCommand).isSameAs(command);
+			}
+		}
+
+		@Nested
+		class TestOnCreateAttachedItem {
+
+			private Command.CommandBuilder commandBuilder = CommandTestFactory.createBuilder()
+					.order(CommandOrder.CREATE_ATTACHED_ITEM.name());
+
+			@Nested
+			class TestOnIsCreateKommentar {
+				@Test
+				void shouldTranslateToCreateKommentar() {
+					var commandBody = Map.of(CommandBodyMapper.ITEM_NAME_PROPERTY, Kommentar.class.getSimpleName());
+					var command = commandBuilder.body(commandBody).build();
+					var expectedCommand = CommandTestFactory.createBuilder()
+							.order(LegacyOrder.CREATE_KOMMENTAR)
+							.body(commandBody)
+							.build();
+
+					var resultCommand = processor.translateCreateKommentar(command);
+
+					assertThat(resultCommand).usingRecursiveComparison().isEqualTo(expectedCommand);
+				}
+			}
+
+			@Nested
+			class TestOnIsNotCreateKommentar {
+
+				@Test
+				void shouldReturnSameCommand() {
+					var commandBody = Map.of(CommandBodyMapper.ITEM_NAME_PROPERTY, LoremIpsum.getInstance().getWords(1));
+					var command = commandBuilder.body(commandBody).build();
+
+					var resultCommand = processor.translateCreateKommentar(command);
+
+					assertThat(resultCommand).isSameAs(command);
+				}
+			}
+		}
+	}
+
+	@Nested
+	class TestTranslateEditKommentar {
+
+		@Nested
+		class TestOnNotUpdateAttachedItem {
+
+			@Test
+			void shouldReturnSameCommand() {
+				var command = CommandTestFactory.create();
+
+				var resultCommand = processor.translateEditKommentar(command);
+
+				assertThat(resultCommand).isSameAs(command);
+			}
+		}
+
+		@Nested
+		class TestOnUpdateAttachedItem {
+
+			private Command.CommandBuilder commandBuilder = CommandTestFactory.createBuilder()
+					.order(CommandOrder.UPDATE_ATTACHED_ITEM.name());
+
+			@Nested
+			class TestOnIsEditKommentar {
+				@Test
+				void shouldTranslateToCreateKommentar() {
+					var commandBody = Map.of(CommandBodyMapper.ITEM_NAME_PROPERTY, Kommentar.class.getSimpleName());
+					var command = commandBuilder.body(commandBody).build();
+					var expectedCommand = CommandTestFactory.createBuilder()
+							.order(LegacyOrder.EDIT_KOMMENTAR)
+							.body(commandBody)
+							.build();
+
+					var resultCommand = processor.translateEditKommentar(command);
+
+					assertThat(resultCommand).usingRecursiveComparison().isEqualTo(expectedCommand);
+				}
+			}
+
+			@Nested
+			class TestOnIsNotEditKommentar {
+
+				@Test
+				void shouldReturnSameCommand() {
+					var commandBody = Map.of(CommandBodyMapper.ITEM_NAME_PROPERTY, LoremIpsum.getInstance().getWords(1));
+					var command = commandBuilder.body(commandBody).build();
+
+					var resultCommand = processor.translateEditKommentar(command);
+
+					assertThat(resultCommand).isSameAs(command);
+				}
+			}
+		}
+	}
+}