diff --git a/goofy-server/pom.xml b/goofy-server/pom.xml
index 83e053c6e2423cb4ca81640b482bf1b7ece138f0..6ee1132ae1e6d5f1a1135113447693eee1645513 100644
--- a/goofy-server/pom.xml
+++ b/goofy-server/pom.xml
@@ -115,6 +115,10 @@
 			<groupId>commons-io</groupId>
 			<artifactId>commons-io</artifactId>
 		</dependency>
+		<dependency>
+			<groupId>commons-beanutils</groupId>
+			<artifactId>commons-beanutils</artifactId>
+		</dependency>
 
 		<!-- Logging -->
 		<dependency>
diff --git a/goofy-server/src/main/java/de/itvsh/goofy/common/command/CommandBody.java b/goofy-server/src/main/java/de/itvsh/goofy/common/command/CommandBody.java
new file mode 100644
index 0000000000000000000000000000000000000000..4f83dd5f23760ec3717d46cab3468470b775fe46
--- /dev/null
+++ b/goofy-server/src/main/java/de/itvsh/goofy/common/command/CommandBody.java
@@ -0,0 +1,17 @@
+package de.itvsh.goofy.common.command;
+
+import com.fasterxml.jackson.annotation.JsonSubTypes;
+import com.fasterxml.jackson.annotation.JsonSubTypes.Type;
+
+import de.itvsh.goofy.postfach.PostfachMessage;
+import de.itvsh.goofy.vorgang.AssignUserCommandBody;
+import de.itvsh.goofy.vorgang.RedirectRequest;
+
+@JsonSubTypes({
+		@Type(value = PostfachMessage.class, name = "SEND_POSTFACH_MESSAGE"),
+		@Type(value = AssignUserCommandBody.class, name = "ASSIGN_USER"),
+		@Type(value = RedirectRequest.class, name = "REDIRECT_VORGANG")
+})
+public interface CommandBody {
+
+}
diff --git a/goofy-server/src/main/java/de/itvsh/goofy/common/command/CommandBodyMapper.java b/goofy-server/src/main/java/de/itvsh/goofy/common/command/CommandBodyMapper.java
index f8ebfdf916314e4d83ae0e6340914350849c55b6..c8fef061f7e342f354fa010925022c6e195e7aaa 100644
--- a/goofy-server/src/main/java/de/itvsh/goofy/common/command/CommandBodyMapper.java
+++ b/goofy-server/src/main/java/de/itvsh/goofy/common/command/CommandBodyMapper.java
@@ -6,6 +6,7 @@ import java.util.Map;
 import java.util.Objects;
 import java.util.stream.Collectors;
 
+import org.apache.commons.beanutils.BeanMap;
 import org.mapstruct.Mapper;
 
 import de.itvsh.ozg.pluto.grpc.command.GrpcCommandBody;
@@ -27,12 +28,19 @@ public interface CommandBodyMapper {
 		return builder.build();
 	}
 
-	default List<GrpcCommandBodyField> mapToBodyFields(Map<String, String> bodyMap) {
+	default List<GrpcCommandBodyField> mapToBodyFields(CommandBody body) {
+		if (Objects.isNull(body))
+			return Collections.emptyList();
+
+		return mapToBodyFields(new BeanMap(body));
+	};
+
+	default List<GrpcCommandBodyField> mapToBodyFields(Map<Object, Object> bodyMap) {
 		if (Objects.isNull(bodyMap))
 			return Collections.emptyList();
 
 		return bodyMap.entrySet().stream()
-				.map(entry -> GrpcCommandBodyField.newBuilder().setName(entry.getKey()).setValue(entry.getValue()).build())
+				.map(entry -> GrpcCommandBodyField.newBuilder().setName(entry.getKey().toString()).setValue(entry.getValue().toString()).build())
 				.collect(Collectors.toList());
 	}
 
diff --git a/goofy-server/src/main/java/de/itvsh/goofy/common/command/CommandController.java b/goofy-server/src/main/java/de/itvsh/goofy/common/command/CommandController.java
index ab980cf297cad47b2383fac17aa0c8a7b4a9d98f..052ec3a646d5d35ad3407df29297f29cfc597498 100644
--- a/goofy-server/src/main/java/de/itvsh/goofy/common/command/CommandController.java
+++ b/goofy-server/src/main/java/de/itvsh/goofy/common/command/CommandController.java
@@ -2,14 +2,8 @@ package de.itvsh.goofy.common.command;
 
 import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.*;
 
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Objects;
-import java.util.Optional;
 import java.util.Set;
-import java.util.stream.Collectors;
 
-import org.apache.commons.lang3.tuple.Pair;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.hateoas.CollectionModel;
 import org.springframework.hateoas.EntityModel;
@@ -27,7 +21,6 @@ import org.springframework.web.bind.annotation.RestController;
 import com.fasterxml.jackson.core.JsonProcessingException;
 import com.fasterxml.jackson.databind.ObjectMapper;
 
-import de.itvsh.goofy.common.LinkedResourceDesiralizer;
 import lombok.Getter;
 import lombok.extern.log4j.Log4j2;
 
@@ -93,38 +86,7 @@ public class CommandController {
 		}
 
 		CreateCommand prepareCommandBody(CreateCommand command) {
-			return command.toBuilder().body(mapBody(command)).build();
-		}
-
-		Map<String, String> mapBody(CreateCommand command) {
-			var bodyMap = bodyProcessor(Optional.ofNullable(command.getBody()));
-			addPostfachMessageToBody(bodyMap, command);
-			return bodyMap;
-		}
-
-		private Map<String, String> bodyProcessor(Optional<Map<String, String>> bodyMap) {
-			return bodyMap.map(map -> map.entrySet().stream()
-					.map(entry -> Pair.of(entry.getKey(), processValue(entry.getKey(), entry.getValue())))
-					.collect(Collectors.toMap(Pair::getKey, Pair::getValue))).orElse(null);
-		}
-
-		private String processValue(String key, String value) {
-			if (PARSE_URI_BODY_FIELDS.contains(key)) {
-				return LinkedResourceDesiralizer.extractStringId(value);
-			}
-			return value;
-		}
-
-		private void addPostfachMessageToBody(Map<String, String> bodyMap, CreateCommand command) {
-			if (!Objects.isNull(command.getPostfachMessage())) {
-				var objAsJson = getObjectAsJson(command.getPostfachMessage());
-				if (!Objects.isNull(objAsJson)) {
-					if (Objects.isNull(bodyMap)) {
-						bodyMap = new HashMap<>();
-					}
-					bodyMap.put("postfachMessage", objAsJson);
-				}
-			}
+			return command;
 		}
 
 		private String getObjectAsJson(Object obj) {
diff --git a/goofy-server/src/main/java/de/itvsh/goofy/common/command/CreateCommand.java b/goofy-server/src/main/java/de/itvsh/goofy/common/command/CreateCommand.java
index a5dfb1e94503f066f8b7e0049d9a7c02de6121e5..dc95f442faca8107937624d6a7c8bfd28ff36f47 100644
--- a/goofy-server/src/main/java/de/itvsh/goofy/common/command/CreateCommand.java
+++ b/goofy-server/src/main/java/de/itvsh/goofy/common/command/CreateCommand.java
@@ -1,10 +1,11 @@
 package de.itvsh.goofy.common.command;
 
-import java.util.Map;
-
 import javax.validation.Valid;
 
 import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.fasterxml.jackson.annotation.JsonTypeInfo;
+import com.fasterxml.jackson.annotation.JsonTypeInfo.As;
+import com.fasterxml.jackson.annotation.JsonTypeInfo.Id;
 
 import de.itvsh.goofy.common.user.UserId;
 import de.itvsh.goofy.postfach.PostfachMessage;
@@ -37,5 +38,7 @@ public class CreateCommand {
 	@Valid
 	private PostfachMessage postfachMessage;
 
-	private Map<String, String> body;
+	@Valid
+	@JsonTypeInfo(use = Id.NAME, include = As.EXTERNAL_PROPERTY, property = "order")
+	private CommandBody body;
 }
\ No newline at end of file
diff --git a/goofy-server/src/main/java/de/itvsh/goofy/postfach/PostfachMessage.java b/goofy-server/src/main/java/de/itvsh/goofy/postfach/PostfachMessage.java
index a3898188467a714c7543c445f01f892b98dedfb7..da9c79dca92fd70b188b9977d45ecdcf4b3e9afa 100644
--- a/goofy-server/src/main/java/de/itvsh/goofy/postfach/PostfachMessage.java
+++ b/goofy-server/src/main/java/de/itvsh/goofy/postfach/PostfachMessage.java
@@ -4,6 +4,7 @@ import static de.itvsh.goofy.common.ValidationMessageCodes.*;
 
 import javax.validation.constraints.NotEmpty;
 
+import de.itvsh.goofy.common.command.CommandBody;
 import lombok.AccessLevel;
 import lombok.AllArgsConstructor;
 import lombok.Builder;
@@ -16,14 +17,13 @@ import lombok.ToString;
 @ToString
 @NoArgsConstructor(access = AccessLevel.PRIVATE)
 @AllArgsConstructor(access = AccessLevel.PUBLIC)
-public class PostfachMessage {
+public class PostfachMessage implements CommandBody {
 
-	private PostfachMessageReply reply;
-
-	@NotEmpty(message = FIELD_IS_EMPTY)
-	private String receiver;
+	private PostfachMessageReply replyOption;
 
 	@NotEmpty(message = FIELD_IS_EMPTY)
 	private String subject;
 
+	private String mailBody;
+
 }
\ No newline at end of file
diff --git a/goofy-server/src/main/java/de/itvsh/goofy/vorgang/AssignUserCommandBody.java b/goofy-server/src/main/java/de/itvsh/goofy/vorgang/AssignUserCommandBody.java
new file mode 100644
index 0000000000000000000000000000000000000000..78cd9c59150d5d6743bf0b23dd6909fca49f7261
--- /dev/null
+++ b/goofy-server/src/main/java/de/itvsh/goofy/vorgang/AssignUserCommandBody.java
@@ -0,0 +1,14 @@
+package de.itvsh.goofy.vorgang;
+
+import de.itvsh.goofy.common.LinkedResource;
+import de.itvsh.goofy.common.command.CommandBody;
+import de.itvsh.goofy.common.user.UserId;
+import de.itvsh.goofy.common.user.UserProfileController;
+import lombok.Getter;
+
+@Getter
+public class AssignUserCommandBody implements CommandBody {
+
+	@LinkedResource(controllerClass = UserProfileController.class)
+	private UserId assignedTo;
+}
diff --git a/goofy-server/src/test/java/de/itvsh/goofy/common/command/CommandBodyMapperTest.java b/goofy-server/src/test/java/de/itvsh/goofy/common/command/CommandBodyMapperTest.java
index b963b7d3d11356b19c29bc6ea436ec9f69304493..d63add542e2af72acd08d8c8acff6d735ab5fbe6 100644
--- a/goofy-server/src/test/java/de/itvsh/goofy/common/command/CommandBodyMapperTest.java
+++ b/goofy-server/src/test/java/de/itvsh/goofy/common/command/CommandBodyMapperTest.java
@@ -37,13 +37,17 @@ class CommandBodyMapperTest {
 			assertThat(result.getFieldList().get(0).getValue()).isEqualTo("VALUE");
 		}
 
+		private Map<String, String> buildBodyMap() {
+			return Map.of(FIELD, VALUE);
+		}
+
 	}
 
 	@Nested
 	class TestMapToBodyFields {
 		@Test
 		void shouldReturnEmptyListOnNull() {
-			var result = mapper.mapToBodyFields(null);
+			var result = mapper.mapToBodyFields((CommandBody) null);
 
 			assertThat(result).isEmpty();
 		}
@@ -56,10 +60,10 @@ class CommandBodyMapperTest {
 			assertThat(result.get(0).getName()).isEqualTo(FIELD);
 			assertThat(result.get(0).getValue()).isEqualTo(VALUE);
 		}
-	}
 
-	private Map<String, String> buildBodyMap() {
-		return Map.of(FIELD, VALUE);
+		private Map<Object, Object> buildBodyMap() {
+			return Map.of(FIELD, VALUE);
+		}
 	}
 
 	@Nested
diff --git a/goofy-server/src/test/java/de/itvsh/goofy/common/command/CommandControllerITCase.java b/goofy-server/src/test/java/de/itvsh/goofy/common/command/CommandControllerITCase.java
index 6425c9ccceb1ef216b1c9c0c3836580a41807afa..5ff6f2879b2103007b26ae731df97091e9d5c9ab 100644
--- a/goofy-server/src/test/java/de/itvsh/goofy/common/command/CommandControllerITCase.java
+++ b/goofy-server/src/test/java/de/itvsh/goofy/common/command/CommandControllerITCase.java
@@ -1,5 +1,6 @@
 package de.itvsh.goofy.common.command;
 
+import static de.itvsh.goofy.TestUtils.*;
 import static org.mockito.ArgumentMatchers.*;
 import static org.mockito.Mockito.*;
 import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*;
@@ -16,12 +17,16 @@ import org.springframework.security.test.context.support.WithMockUser;
 import org.springframework.test.web.servlet.MockMvc;
 import org.springframework.test.web.servlet.ResultActions;
 
+import de.itvsh.goofy.TestUtils;
 import de.itvsh.goofy.common.ValidationMessageCodes;
 import de.itvsh.goofy.postfach.PostfachMessage;
 import de.itvsh.goofy.postfach.PostfachMessageTestFactory;
 import de.itvsh.goofy.vorgang.RedirectRequest;
 import de.itvsh.goofy.vorgang.RedirectRequestTestFactory;
 
+//TODO Testzuschnitt korrigieren
+// Validierungstest entweder in einen CommandServiceITCase oder einen CommandITCase umziehen
+
 @AutoConfigureMockMvc
 @SpringBootTest
 @WithMockUser
@@ -75,7 +80,7 @@ class CommandControllerITCase {
 			private final String FIELD = "password";
 
 			@Test
-			void shouldReturnErrorOnNullPassword() throws Exception {
+			void shouldReturnErrortnNullPassword() throws Exception {
 				String content = buildRedirectRequestWithPassword(null);
 
 				doRequest(content).andExpect(status().isUnprocessableEntity())
@@ -108,45 +113,17 @@ class CommandControllerITCase {
 	@Nested
 	class TestPostfachMessageValidation {
 
-		@WithMockUser
-		@Nested
-		class TestReceiverValidation {
-
-			@Test
-			void shouldReturnErrorOnNullReceiver() throws Exception {
-				String content = buildPostfachMessageWithReceiver(null);
-
-				doRequest(content).andExpect(status().isUnprocessableEntity())
-						.andExpect(jsonPath("$.issues.length()").value(1))
-						.andExpect(jsonPath("$.issues.[0].field").value("command.postfachMessage.receiver"))
-						.andExpect(jsonPath("$.issues.[0].messageCode").value(ValidationMessageCodes.FIELD_IS_EMPTY));
-			}
-
-			@Test
-			void shouldProceedOnValidReceiver() throws Exception {
-				when(remoteService.createCommand(any(CreateCommand.class), anyLong())).thenReturn(CommandTestFactory.create());
-
-				String content = buildPostfachMessageContent(PostfachMessageTestFactory.create());
-
-				doRequest(content).andExpect(status().isCreated());
-			}
-
-			private String buildPostfachMessageWithReceiver(String receiver) {
-				return buildPostfachMessageContent(PostfachMessageTestFactory.createBuilder().receiver(receiver).build());
-			}
-		}
-
 		@WithMockUser
 		@Nested
 		class TestSubjectValidation {
 
 			@Test
 			void shouldReturnErrorOnNullSubject() throws Exception {
-				String content = buildPostfachMessageWithSubject(null);
+				String content = buildPostfachMessageContent(PostfachMessageTestFactory.createBuilder().subject(null).build());
 
 				doRequest(content).andExpect(status().isUnprocessableEntity())
 						.andExpect(jsonPath("$.issues.length()").value(1))
-						.andExpect(jsonPath("$.issues.[0].field").value("command.postfachMessage.subject"))
+						.andExpect(jsonPath("$.issues.[0].field").value("command.body.subject"))
 						.andExpect(jsonPath("$.issues.[0].messageCode").value(ValidationMessageCodes.FIELD_IS_EMPTY));
 			}
 
@@ -159,15 +136,15 @@ class CommandControllerITCase {
 				doRequest(content).andExpect(status().isCreated());
 			}
 
-			private String buildPostfachMessageWithSubject(String receiver) {
-				return buildPostfachMessageContent(PostfachMessageTestFactory.createBuilder().subject(receiver).build());
+			private String buildPostfachMessageContent(PostfachMessage postfachMessage) {
+				return TestUtils.loadTextFile("jsonTemplates/command/createCommandWithPostfachMessage.json.tmpl",
+						CommandOrder.SEND_POSTFACH_MESSAGE.name(),
+						PostfachMessageTestFactory.REPLY_OPTION.name(),
+						addQuote(postfachMessage.getSubject()),
+						postfachMessage.getMailBody().toString());
 			}
 		}
 
-		private String buildPostfachMessageContent(PostfachMessage postfachMessage) {
-			return CommandTestFactory
-					.createPostfachMessageContent(CommandTestFactory.createCreateCommandBuilder().postfachMessage(postfachMessage).build());
-		}
 	}
 
 	ResultActions doRequest(String content) throws Exception {
diff --git a/goofy-server/src/test/java/de/itvsh/goofy/common/command/CommandControllerTest.java b/goofy-server/src/test/java/de/itvsh/goofy/common/command/CommandControllerTest.java
index 1576df2f664816bc24c23c65263b7cd1c27f87a7..f19170b288b68e52128f918db05702342ff3a7f5 100644
--- a/goofy-server/src/test/java/de/itvsh/goofy/common/command/CommandControllerTest.java
+++ b/goofy-server/src/test/java/de/itvsh/goofy/common/command/CommandControllerTest.java
@@ -5,6 +5,7 @@ import static org.assertj.core.api.Assertions.*;
 import static org.mockito.ArgumentMatchers.*;
 import static org.mockito.Mockito.*;
 import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*;
+import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.*;
 import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*;
 
 import java.util.stream.Stream;
@@ -25,6 +26,7 @@ import org.springframework.test.web.servlet.setup.MockMvcBuilders;
 import de.itvsh.goofy.TestUtils;
 import de.itvsh.goofy.common.command.CommandController.CommandByRelationController;
 import de.itvsh.goofy.common.errorhandling.ExceptionController;
+import de.itvsh.goofy.postfach.PostfachMessageTestFactory;
 import de.itvsh.goofy.vorgang.VorgangHeaderTestFactory;
 
 class CommandControllerTest {
@@ -161,16 +163,42 @@ class CommandControllerTest {
 						.andExpect(header().stringValues("location", "http://localhost" + COMMANDS_PATH + "/" + CommandTestFactory.ID));
 			}
 
+			@Nested
+			@DisplayName("CreateCommand with postfach mail")
+			class TestCommandWithPostfachMail {
+
+				@Test
+				void shouldHavePostfachMail() throws Exception {
+					doRequest(TestUtils.loadTextFile("jsonTemplates/command/createCommandWithPostfachMessage.json.tmpl",
+							CommandOrder.SEND_POSTFACH_MESSAGE.name(),
+							PostfachMessageTestFactory.REPLY_OPTION.name(),
+							TestUtils.addQuote(PostfachMessageTestFactory.SUBJECT),
+							PostfachMessageTestFactory.MAIL_BODY));
+
+					verify(service).createCommand(anyString(), anyString(), anyLong(), createCommandCaptor.capture());
+					assertThat(createCommandCaptor.getValue()).extracting(CreateCommand::getBody).usingRecursiveComparison()
+							.isEqualTo(PostfachMessageTestFactory.create());
+				}
+			}
+
 			private ResultActions doRequest() throws Exception {
+				return doRequest(
+						TestUtils.loadTextFile("jsonTemplates/command/createVorgangCommand.json.tmpl", CommandOrder.VORGANG_ANNEHMEN.name()));
+			}
+
+			private ResultActions doRequest(String content) throws Exception {
 				return mockMvc
 						.perform(post(CommandByRelationController.COMMAND_BY_RELATION_AND_VERSION_PATH, VorgangHeaderTestFactory.ID,
 								CommandTestFactory.RELATION_ID, VorgangHeaderTestFactory.VERSION)
 										.contentType(MediaType.APPLICATION_JSON)
-										.content(TestUtils.loadTextFile("jsonTemplates/command/createVorgangCommand.json.tmpl",
-												CommandOrder.VORGANG_ANNEHMEN.name())))
+										.characterEncoding("UTF-8")
+										.content(content))
+						.andDo(print())
 						.andExpect(status().is2xxSuccessful());
 			}
+
 		}
+
 	}
 
 	@Nested
diff --git a/goofy-server/src/test/java/de/itvsh/goofy/common/command/CommandITCase.java b/goofy-server/src/test/java/de/itvsh/goofy/common/command/CommandITCase.java
index 886dc783922d8dcddb51f54a66bd0a0421ad7e9d..88e0201c8bf9130e30a539e6beb4356bb066f117 100644
--- a/goofy-server/src/test/java/de/itvsh/goofy/common/command/CommandITCase.java
+++ b/goofy-server/src/test/java/de/itvsh/goofy/common/command/CommandITCase.java
@@ -50,7 +50,7 @@ public class CommandITCase {
 			createCommand();
 
 			verify(commandRemoteService).createCommand(commandCaptor.capture(), anyLong());
-			assertThat(commandCaptor.getValue().getBody()).containsEntry("assignedTo", UserTestFactory.ID.toString());
+			assertThat(commandCaptor.getValue().getBody()).hasFieldOrPropertyWithValue("assignedTo", UserTestFactory.ID);
 		}
 
 		private void createCommand() throws Exception {
diff --git a/goofy-server/src/test/java/de/itvsh/goofy/common/command/CommandTestFactory.java b/goofy-server/src/test/java/de/itvsh/goofy/common/command/CommandTestFactory.java
index 58392090861ae5a3d8e27cf75c2d8122448628eb..bd5e2450735dcf4f6ca1750bccc1aef7b26339fb 100644
--- a/goofy-server/src/test/java/de/itvsh/goofy/common/command/CommandTestFactory.java
+++ b/goofy-server/src/test/java/de/itvsh/goofy/common/command/CommandTestFactory.java
@@ -48,13 +48,4 @@ public class CommandTestFactory {
 				addQuote(command.getRedirectRequest().getPassword()));
 	}
 
-	// TODO move to PostfachMessageTestFactory
-	public static String createPostfachMessageContent(CreateCommand command) {
-		return TestUtils.loadTextFile("jsonTemplates/command/createCommandWithPostfachMessage.json.tmpl",
-				command.getOrder().name(),
-				addQuote(command.getPostfachMessage().getReceiver()),
-				addQuote(command.getPostfachMessage().getSubject()),
-				addQuote(command.getPostfachMessage().getReply().toString()));
-	}
-
 }
\ No newline at end of file
diff --git a/goofy-server/src/test/java/de/itvsh/goofy/postfach/PostfachMessageTestFactory.java b/goofy-server/src/test/java/de/itvsh/goofy/postfach/PostfachMessageTestFactory.java
index 3d0d20ebbfcbca4f93bc39c85194615a77c755d6..cf8f2b5fa943b91dfad06192d51575541de172e8 100644
--- a/goofy-server/src/test/java/de/itvsh/goofy/postfach/PostfachMessageTestFactory.java
+++ b/goofy-server/src/test/java/de/itvsh/goofy/postfach/PostfachMessageTestFactory.java
@@ -5,8 +5,9 @@ import com.thedeanda.lorem.LoremIpsum;
 public class PostfachMessageTestFactory {
 
 	public static final String RECEIVER = LoremIpsum.getInstance().getEmail();
-	static final String SUBJECT = LoremIpsum.getInstance().getWords(20);
-	static final PostfachMessageReply REPLY = PostfachMessageReply.REPLY_POSSIBLE;
+	public static final String SUBJECT = LoremIpsum.getInstance().getWords(20);
+	public static final String MAIL_BODY = LoremIpsum.getInstance().getParagraphs(1, 1);
+	public static final PostfachMessageReply REPLY_OPTION = PostfachMessageReply.REPLY_POSSIBLE;
 
 	public static PostfachMessage create() {
 		return createBuilder().build();
@@ -14,8 +15,8 @@ public class PostfachMessageTestFactory {
 
 	public static PostfachMessage.PostfachMessageBuilder createBuilder() {
 		return PostfachMessage.builder()
-				.receiver(RECEIVER)
 				.subject(SUBJECT)
-				.reply(REPLY);
+				.mailBody(MAIL_BODY)
+				.replyOption(REPLY_OPTION);
 	}
 }
\ No newline at end of file
diff --git a/goofy-server/src/test/resources/jsonTemplates/command/createCommandWithPostfachMessage.json.tmpl b/goofy-server/src/test/resources/jsonTemplates/command/createCommandWithPostfachMessage.json.tmpl
index 561dbc32793369ecfea7798621d459a0c4f204d0..28243e9131f0fd7ee180c0d3c638f5a01fcc1abe 100644
--- a/goofy-server/src/test/resources/jsonTemplates/command/createCommandWithPostfachMessage.json.tmpl
+++ b/goofy-server/src/test/resources/jsonTemplates/command/createCommandWithPostfachMessage.json.tmpl
@@ -1,8 +1,8 @@
 {
 	"order": "%s",
-	"postfachMessage": {
-		"receiver": %s,
+	"body": {
+		"replyOption": "%s",
 		"subject": %s,
-		"reply": %s
+		"mailBody": "%s"
 	}
 }
\ No newline at end of file
diff --git a/goofy-server/src/test/resources/jsonTemplates/command/createCommandWithRedirectRequest.json.tmpl b/goofy-server/src/test/resources/jsonTemplates/command/createCommandWithRedirectRequest.json.tmpl
index 237c5b1dd762d047d72f10ee89156245bed63947..0e1be8961d1f1bdc4010e188d7e4ebce2331d637 100644
--- a/goofy-server/src/test/resources/jsonTemplates/command/createCommandWithRedirectRequest.json.tmpl
+++ b/goofy-server/src/test/resources/jsonTemplates/command/createCommandWithRedirectRequest.json.tmpl
@@ -3,5 +3,6 @@
 	"redirectRequest": {
 		"email": %s,
 		"password": %s
-	}
+	},
+	"body": null
 }
\ No newline at end of file
diff --git a/goofy-server/src/test/resources/jsonTemplates/command/createVorgangCommand.json.tmpl b/goofy-server/src/test/resources/jsonTemplates/command/createVorgangCommand.json.tmpl
index 64d27c8846dd5cd0654e7af502fded4231eb7b4e..deddf3fb6e23dd58606ad0c0bb0a7501449eb70b 100644
--- a/goofy-server/src/test/resources/jsonTemplates/command/createVorgangCommand.json.tmpl
+++ b/goofy-server/src/test/resources/jsonTemplates/command/createVorgangCommand.json.tmpl
@@ -1,3 +1,5 @@
 {
-	"order": "%s"
+	"order": "%s",
+	"body": null
+	
 }
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index ad7f6c74bee08223f53a97530738d7b18d0713ed..f5d34700c28648b2f44aa7bd95648024a23d37bb 100644
--- a/pom.xml
+++ b/pom.xml
@@ -26,7 +26,8 @@
 		<grpc.spring-boot-starter.version>2.10.1.RELEASE</grpc.spring-boot-starter.version>
 		<spring-admin.version>2.3.1</spring-admin.version>
 		<mapstruct.version>1.4.1.Final</mapstruct.version>
-		<commons-io.version>2.8.0</commons-io.version>
+		<commons-io.version>2.11.0</commons-io.version>
+		<commons-beanutils.version>1.9.4</commons-beanutils.version>
 		<keycloak-adapter.version>14.0.0</keycloak-adapter.version>
 		<!-- <lombok.version>1.18.20</lombok.version> -->
 		<lombok.version>edge-SNAPSHOT</lombok.version>
@@ -79,6 +80,11 @@
 				<artifactId>commons-io</artifactId>
 				<version>${commons-io.version}</version>
 			</dependency>
+			<dependency>
+				<groupId>commons-beanutils</groupId>
+				<artifactId>commons-beanutils</artifactId>
+				<version>${commons-beanutils.version}</version>
+			</dependency>
 
 			<!-- tools -->
 			<dependency>