diff --git a/goofy-server/src/main/java/de/itvsh/goofy/kommentar/KommentarMapper.java b/goofy-server/src/main/java/de/itvsh/goofy/kommentar/KommentarMapper.java
index 370151b741acd26e8de4ad99dca5e1961a0fab70..395c02868b9a1a1cf6c3f9656c6a19b50366af43 100644
--- a/goofy-server/src/main/java/de/itvsh/goofy/kommentar/KommentarMapper.java
+++ b/goofy-server/src/main/java/de/itvsh/goofy/kommentar/KommentarMapper.java
@@ -9,27 +9,36 @@ import org.mapstruct.MappingConstants;
 import org.mapstruct.NullValueCheckStrategy;
 import org.mapstruct.ReportingPolicy;
 import org.mapstruct.ValueMapping;
+import org.springframework.beans.factory.annotation.Autowired;
 
+import de.itvsh.kop.pluto.common.grpc.GrpcObjectMapper;
 import de.itvsh.ozg.pluto.grpc.command.GrpcCommand;
+import de.itvsh.ozg.pluto.vorgangAttachedItem.GrpcVorgangAttachedItem;
 
 @Mapper(unmappedTargetPolicy = ReportingPolicy.ERROR, nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS)
-public interface KommentarMapper {
+abstract class KommentarMapper {
 
 	static final String ID = "id";
-	static final String VERSION = "version";
 	static final String TEXT = "text";
 	static final String CREATED_BY = "createdBy";
 	static final String CREATED_AT = "createdAt";
 
+	@Autowired
+	private GrpcObjectMapper grpcObjectMapper;
+
 	@Mapping(target = "kommentar", ignore = true)
 	@ValueMapping(source = "UNRECOGNIZED", target = MappingConstants.NULL)
 	@ValueMapping(source = "UNDEFINED", target = MappingConstants.NULL)
-	KommentarCommand toKommentarCommand(GrpcCommand command);
+	abstract KommentarCommand toKommentarCommand(GrpcCommand command);
+
+	public Kommentar fromItem(GrpcVorgangAttachedItem vorgangAttachedItem) {
+		return fromItemMap(grpcObjectMapper.mapFromGrpc(vorgangAttachedItem.getItem()), vorgangAttachedItem.getVersion());
+	}
 
-	default Kommentar fromItemMap(Map<String, Object> map) {
+	Kommentar fromItemMap(Map<String, Object> map, long version) {
 		return Kommentar.builder()
 				.id((String) map.get(ID))
-				.version((long) map.get(VERSION))
+				.version(version)
 				.createdAt(ZonedDateTime.parse((String) map.get(CREATED_AT)))
 				.createdBy((String) map.get(CREATED_BY))
 				.text((String) map.get(TEXT))
diff --git a/goofy-server/src/main/java/de/itvsh/goofy/kommentar/KommentarRemoteService.java b/goofy-server/src/main/java/de/itvsh/goofy/kommentar/KommentarRemoteService.java
index 2e2d6c6cb0ce3dab68978db6e72f06bafcb51ef7..c6873ea395c1988420c1bef8057ae5f95b125276 100644
--- a/goofy-server/src/main/java/de/itvsh/goofy/kommentar/KommentarRemoteService.java
+++ b/goofy-server/src/main/java/de/itvsh/goofy/kommentar/KommentarRemoteService.java
@@ -6,31 +6,25 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import de.itvsh.goofy.GoofyServerApplication;
-import de.itvsh.kop.pluto.common.grpc.GrpcObjectMapper;
 import de.itvsh.ozg.pluto.vorgangAttachedItem.GrpcFindVorgangAttachedItemRequest;
-import de.itvsh.ozg.pluto.vorgangAttachedItem.GrpcFindVorgangAttachedItemResponse;
 import de.itvsh.ozg.pluto.vorgangAttachedItem.GrpcVorgangAttachedItemRequest;
 import de.itvsh.ozg.pluto.vorgangAttachedItem.VorgangAttachedItemServiceGrpc.VorgangAttachedItemServiceBlockingStub;
 import net.devh.boot.grpc.client.inject.GrpcClient;
 
 @Service
 class KommentarRemoteService {
+
 	static final String ITEM_NAME = "Kommentar";
 
 	@GrpcClient(GoofyServerApplication.GRPC_CLIENT)
 	private VorgangAttachedItemServiceBlockingStub vorgangAttachedItemServiceStub;
 	@Autowired
 	private KommentarMapper mapper;
-	@Autowired
-	private GrpcObjectMapper grpcObjectMapper;
 
 	public Stream<Kommentar> findByVorgangId(String vorgangId) {
-		GrpcFindVorgangAttachedItemResponse response = vorgangAttachedItemServiceStub
-				.find(buildFindRequest(vorgangId));
+		var response = vorgangAttachedItemServiceStub.find(buildFindRequest(vorgangId));
 
-		return response.getVorgangAttachedItemsList().stream()
-				.map(item -> grpcObjectMapper.mapFromGrpc(item.getItem()))
-				.map(mapper::fromItemMap);
+		return response.getVorgangAttachedItemsList().stream().map(mapper::fromItem);
 	}
 
 	GrpcFindVorgangAttachedItemRequest buildFindRequest(String vorgangId) {
@@ -42,8 +36,8 @@ class KommentarRemoteService {
 
 	public Kommentar getById(String kommentarId) {
 		var response = vorgangAttachedItemServiceStub.getById(buildRequest(kommentarId));
-		var kommentar = mapper.fromItemMap(grpcObjectMapper.mapFromGrpc(response.getVorgangAttachedItem().getItem()));
-		return kommentar.toBuilder().vorgangId(response.getVorgangAttachedItem().getVorgangId()).build();
+
+		return mapper.fromItem(response.getVorgangAttachedItem()).toBuilder().vorgangId(response.getVorgangAttachedItem().getVorgangId()).build();
 	}
 
 	private GrpcVorgangAttachedItemRequest buildRequest(String kommentarId) {
diff --git a/goofy-server/src/test/java/de/itvsh/goofy/kommentar/KommentarMapperTest.java b/goofy-server/src/test/java/de/itvsh/goofy/kommentar/KommentarMapperTest.java
index 1865abc67e4131ec816bf3f90907c7a30f7ea6a7..b059c5ec3dd1177dfd22673b6aa73594abf671e5 100644
--- a/goofy-server/src/test/java/de/itvsh/goofy/kommentar/KommentarMapperTest.java
+++ b/goofy-server/src/test/java/de/itvsh/goofy/kommentar/KommentarMapperTest.java
@@ -1,15 +1,55 @@
 package de.itvsh.goofy.kommentar;
 
+import static org.mockito.ArgumentMatchers.*;
+import static org.mockito.Mockito.*;
+
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.DisplayName;
 import org.junit.jupiter.api.Nested;
 import org.junit.jupiter.api.Test;
 import org.mapstruct.factory.Mappers;
+import org.mockito.InjectMocks;
+import org.mockito.Mock;
+import org.mockito.Spy;
 
 import static org.assertj.core.api.Assertions.*;
 
+import de.itvsh.goofy.vorgang.GrpcVorgangAttachedItemTestFactory;
+import de.itvsh.kop.pluto.common.grpc.GrpcObjectMapper;
+
 class KommentarMapperTest {
 
+	@Spy
+	@InjectMocks
 	private KommentarMapper mapper = Mappers.getMapper(KommentarMapper.class);
+	@Mock
+	private GrpcObjectMapper grpcObjectMapper;
+
+	@DisplayName("Map from item")
+	@Nested
+	class TestFromItem {
+
+		@BeforeEach
+		void mockMapper() {
+			when(grpcObjectMapper.mapFromGrpc(any())).thenReturn(KommentarTestFactory.createAsMap());
+		}
+
+		@Test
+		void shouldCallGrpcObjectMapper() {
+			mapper.fromItem(GrpcVorgangAttachedItemTestFactory.create());
+
+			verify(grpcObjectMapper).mapFromGrpc(GrpcVorgangAttachedItemTestFactory.ITEM);
+		}
+
+		@Test
+		void shouldCallMapperFromItemMap() {
+			mapper.fromItem(GrpcVorgangAttachedItemTestFactory.create());
+
+			verify(mapper).fromItemMap(KommentarTestFactory.createAsMap(), KommentarTestFactory.VERSION);
+		}
+	}
 
+	@DisplayName("Map from item map")
 	@Nested
 	class TestFromItemMap {
 
@@ -50,6 +90,6 @@ class KommentarMapperTest {
 	}
 
 	private Kommentar map() {
-		return mapper.fromItemMap(KommentarTestFactory.createAsMap());
+		return mapper.fromItemMap(KommentarTestFactory.createAsMap(), KommentarTestFactory.VERSION);
 	}
 }
diff --git a/goofy-server/src/test/java/de/itvsh/goofy/kommentar/KommentarRemoteServiceTest.java b/goofy-server/src/test/java/de/itvsh/goofy/kommentar/KommentarRemoteServiceTest.java
index 6b8c32c2b10a75d57a416b112e405f229cc339cd..364b8af57e85a8873ad4f58d55988c094d21b392 100644
--- a/goofy-server/src/test/java/de/itvsh/goofy/kommentar/KommentarRemoteServiceTest.java
+++ b/goofy-server/src/test/java/de/itvsh/goofy/kommentar/KommentarRemoteServiceTest.java
@@ -6,6 +6,7 @@ import static org.mockito.Mockito.*;
 import java.util.stream.Stream;
 
 import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.DisplayName;
 import org.junit.jupiter.api.Nested;
 import org.junit.jupiter.api.Test;
 import org.mockito.InjectMocks;
@@ -14,7 +15,6 @@ import org.mockito.Spy;
 
 import de.itvsh.goofy.vorgang.GrpcVorgangAttachedItemTestFactory;
 import de.itvsh.goofy.vorgang.VorgangHeaderTestFactory;
-import de.itvsh.kop.pluto.common.grpc.GrpcObjectMapper;
 import de.itvsh.ozg.pluto.vorgangAttachedItem.GrpcFindVorgangAttachedItemRequest;
 import de.itvsh.ozg.pluto.vorgangAttachedItem.GrpcFindVorgangAttachedItemResponse;
 import de.itvsh.ozg.pluto.vorgangAttachedItem.GrpcVorgangAttachedItem;
@@ -27,24 +27,23 @@ class KommentarRemoteServiceTest {
 	@Spy
 	@InjectMocks
 	private KommentarRemoteService service;
-
 	@Mock
 	private VorgangAttachedItemServiceBlockingStub vorgangAttachedItemServiceStub;
 	@Mock
 	private KommentarMapper mapper;
-	@Mock
-	private GrpcObjectMapper grpcObjectMapper;
 
 	private GrpcVorgangAttachedItem kommentar = GrpcVorgangAttachedItemTestFactory.create();
 
+	@DisplayName("Find by vorgangId")
 	@Nested
 	class TestFindByVorgangId {
 
 		private GrpcFindVorgangAttachedItemRequest request = GrpcFindVorgangAttachedItemRequest.newBuilder()
-				.setVorgangId(VorgangHeaderTestFactory.ID).setItemName(KommentarRemoteService.ITEM_NAME).build();
+				.setVorgangId(VorgangHeaderTestFactory.ID)
+				.setItemName(KommentarRemoteService.ITEM_NAME)
+				.build();
 		private GrpcFindVorgangAttachedItemResponse response = GrpcFindVorgangAttachedItemResponse.newBuilder()
 				.clearVorgangAttachedItems()
-				.addVorgangAttachedItems(kommentar)
 				.addVorgangAttachedItems(kommentar).build();
 
 		@BeforeEach
@@ -61,10 +60,10 @@ class KommentarRemoteServiceTest {
 
 		@Test
 		void shouldCallMapper() {
-			Stream<Kommentar> result = service.findByVorgangId(VorgangHeaderTestFactory.ID);
+			var result = service.findByVorgangId(VorgangHeaderTestFactory.ID);
 			collectStreamElementsToTriggerLazyStream(result);
 
-			verify(mapper, times(2)).fromItemMap(any());
+			verify(mapper).fromItem(any());
 		}
 
 		private void collectStreamElementsToTriggerLazyStream(Stream<Kommentar> stream) {
@@ -72,17 +71,20 @@ class KommentarRemoteServiceTest {
 		}
 	}
 
+	@DisplayName("Find by id")
 	@Nested
 	class TestGetById {
-		GrpcVorgangAttachedItemResponse response = GrpcVorgangAttachedItemResponse.newBuilder()
-				.setVorgangAttachedItem(GrpcVorgangAttachedItemTestFactory.create()).build();
-		GrpcVorgangAttachedItemRequest request = GrpcVorgangAttachedItemRequest.newBuilder().setId(KommentarTestFactory.ID).build();
+		private GrpcVorgangAttachedItemResponse response = GrpcVorgangAttachedItemResponse.newBuilder()
+				.setVorgangAttachedItem(GrpcVorgangAttachedItemTestFactory.create())
+				.build();
+		private GrpcVorgangAttachedItemRequest request = GrpcVorgangAttachedItemRequest.newBuilder()
+				.setId(KommentarTestFactory.ID)
+				.build();
 
 		@BeforeEach
 		void mockStub() {
 			when(vorgangAttachedItemServiceStub.getById(any())).thenReturn(response);
-			when(grpcObjectMapper.mapFromGrpc(any())).thenReturn(KommentarTestFactory.createAsMap());
-			when(mapper.fromItemMap(any())).thenReturn(KommentarTestFactory.create());
+			when(mapper.fromItem(any())).thenReturn(KommentarTestFactory.create());
 		}
 
 		@Test
@@ -96,7 +98,7 @@ class KommentarRemoteServiceTest {
 		void shouldCallMapper() {
 			service.getById(KommentarTestFactory.ID);
 
-			verify(mapper).fromItemMap(any());
+			verify(mapper).fromItem(any());
 		}
 	}
 }
diff --git a/goofy-server/src/test/java/de/itvsh/goofy/kommentar/KommentarTestFactory.java b/goofy-server/src/test/java/de/itvsh/goofy/kommentar/KommentarTestFactory.java
index 096dcde7839aa6a9ffdc570c0fcc5e9188dea965..34815cd0a577824603a3929cba29eec8cfb5f37b 100644
--- a/goofy-server/src/test/java/de/itvsh/goofy/kommentar/KommentarTestFactory.java
+++ b/goofy-server/src/test/java/de/itvsh/goofy/kommentar/KommentarTestFactory.java
@@ -38,7 +38,6 @@ public class KommentarTestFactory {
 	public static Map<String, Object> createAsMap() {
 		return Map.of(
 				KommentarMapper.ID, ID,
-				KommentarMapper.VERSION, VERSION,
 				KommentarMapper.TEXT, TEXT,
 				KommentarMapper.CREATED_BY, CREATED_BY,
 				KommentarMapper.CREATED_AT, CREATED_AT_STR);
diff --git a/goofy-server/src/test/java/de/itvsh/goofy/wiedervorlage/WiedervorlageMapperTest.java b/goofy-server/src/test/java/de/itvsh/goofy/wiedervorlage/WiedervorlageMapperTest.java
index 78ffae49fa4b0e2a3fd37cd2932c69cf16dde805..3b21f24d6a98eb7c2808706afdc8dcd35648ca81 100644
--- a/goofy-server/src/test/java/de/itvsh/goofy/wiedervorlage/WiedervorlageMapperTest.java
+++ b/goofy-server/src/test/java/de/itvsh/goofy/wiedervorlage/WiedervorlageMapperTest.java
@@ -21,7 +21,6 @@ import de.itvsh.goofy.common.binaryfile.BinaryFileTestFactory;
 import de.itvsh.goofy.common.binaryfile.FileIdMapper;
 import de.itvsh.goofy.vorgang.GrpcVorgangAttachedItemTestFactory;
 import de.itvsh.kop.pluto.common.grpc.GrpcObjectMapper;
-import de.itvsh.ozg.pluto.common.GrpcObject;
 
 class WiedervorlageMapperTest {
 
@@ -46,7 +45,7 @@ class WiedervorlageMapperTest {
 		void shouldCallGrpcObjectMapper() {
 			mapper.fromItem(GrpcVorgangAttachedItemTestFactory.create());
 
-			verify(grpcObjectMapper).mapFromGrpc(any(GrpcObject.class));
+			verify(grpcObjectMapper).mapFromGrpc(GrpcVorgangAttachedItemTestFactory.ITEM);
 		}
 
 		@Test