diff --git a/alfa-client/apps/alfa-e2e/src/e2e/main-tests/wiedervorlage/wiedervorlage.erledigen.cy.ts b/alfa-client/apps/alfa-e2e/src/e2e/main-tests/wiedervorlage/wiedervorlage.erledigen.cy.ts
index b20cea9b1d2b31d36db3535b7526a8032f1b88ed..c9ea833a1b6086cabc8286b7821531d0b8aac9bb 100644
--- a/alfa-client/apps/alfa-e2e/src/e2e/main-tests/wiedervorlage/wiedervorlage.erledigen.cy.ts
+++ b/alfa-client/apps/alfa-e2e/src/e2e/main-tests/wiedervorlage/wiedervorlage.erledigen.cy.ts
@@ -158,6 +158,8 @@ describe('Wiedervorlage erledigen/wiedereroeffnen', () => {
       waitforSpinnerToAppear();
       waitForSpinnerToDisappear();
 
+      wait(1000, 'Wait for async BE to complete');
+
       containClass(wiedervorlageContainer.getStatusDot(), 'erledigt');
       contains(
         snackBar.getMessage(),
@@ -199,6 +201,8 @@ describe('Wiedervorlage erledigen/wiedereroeffnen', () => {
       waitforSpinnerToAppear();
       waitForSpinnerToDisappear();
 
+      wait(1000, 'Wait for async BE to complete');
+
       notContainClass(wiedervorlageContainer.getStatusDot(), 'erledigt');
       contains(
         snackBar.getMessage(),
@@ -229,6 +233,7 @@ describe('Wiedervorlage erledigen/wiedereroeffnen', () => {
     const locatorIconDefault: string = 'wiedervorlage-icon-default';
 
     it('back to vorgang list', () => {
+      wait(1000, 'Wait for async BE to complete');
       vorgangPage.getSubnavigation().getBackButton().click();
       waitForSpinnerToDisappear();
     });
@@ -249,6 +254,8 @@ describe('Wiedervorlage erledigen/wiedereroeffnen', () => {
       subnavigation.erledigen();
       waitForSpinnerToDisappear();
 
+      wait(1000, 'Wait for async BE to complete');
+
       subnavigation.navigateBack();
       waitForSpinnerToDisappear();
     });
diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/common/command/Command.java b/alfa-service/src/main/java/de/ozgcloud/alfa/common/command/Command.java
index 1a5d2ac5fda7dc714f9f2b13514dc22705159219..9e862c4756eb06bfa8aa47591b7d390de442d865 100644
--- a/alfa-service/src/main/java/de/ozgcloud/alfa/common/command/Command.java
+++ b/alfa-service/src/main/java/de/ozgcloud/alfa/common/command/Command.java
@@ -26,8 +26,6 @@ package de.ozgcloud.alfa.common.command;
 import java.time.ZonedDateTime;
 import java.util.Map;
 
-import org.apache.commons.lang3.StringUtils;
-
 import com.fasterxml.jackson.annotation.JsonIgnore;
 
 import de.ozgcloud.alfa.common.LinkedUserProfileResource;
@@ -76,14 +74,4 @@ public class Command {
 	public CommandOrder getCommandOrder() {
 		return CommandOrder.fromOrder(order);
 	}
-
-	@JsonIgnore
-	public boolean isFinishedSuccessfully() {
-		return status == CommandStatus.FINISHED && StringUtils.isEmpty(errorMessage);
-	}
-
-	@JsonIgnore
-	public boolean isNotDone() {
-		return status.isNotDone();
-	}
 }
\ No newline at end of file
diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/common/command/CommandService.java b/alfa-service/src/main/java/de/ozgcloud/alfa/common/command/CommandService.java
index da98c4e572fda1d5c7175040bd88eace508555f6..dc573993c67ac660e97502ae4087e66d43ed3928 100644
--- a/alfa-service/src/main/java/de/ozgcloud/alfa/common/command/CommandService.java
+++ b/alfa-service/src/main/java/de/ozgcloud/alfa/common/command/CommandService.java
@@ -23,7 +23,6 @@
  */
 package de.ozgcloud.alfa.common.command;
 
-import java.util.Calendar;
 import java.util.Optional;
 import java.util.stream.Stream;
 
@@ -43,8 +42,6 @@ import lombok.RequiredArgsConstructor;
 public class CommandService {
 
 	static final long NO_RELATION_VERSION = -1;
-	private static final int WAIT_TIME_MS = 500;
-	private static final int COMMAND_REQUEST_THRESHOLD_MILLIS = 10000;
 
 	private final CommandRemoteService remoteService;
 
@@ -114,25 +111,4 @@ public class CommandService {
 		return remoteService.findCommands(vorgangId, Optional.of(CommandStatus.FINISHED), Optional.empty());
 	}
 
-	public Command waitUntilDone(Command commandToWaitFor) {
-		var command = commandToWaitFor;
-		var calendar = Calendar.getInstance();
-		var timeout = calendar.getTimeInMillis() + COMMAND_REQUEST_THRESHOLD_MILLIS;
-		while (command.isNotDone() && calendar.getTimeInMillis() < timeout) {
-			synchronized (this) {
-				try {
-					wait(WAIT_TIME_MS);
-					command = reloadCommand(command.getId());
-				} catch (InterruptedException e) {
-					Thread.currentThread().interrupt();
-				}
-			}
-		}
-		return command;
-	}
-
-	public Command reloadCommand(String commandId) {
-		return remoteService.getCommand(commandId);
-	}
-
 }
\ No newline at end of file
diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/common/command/CommandStatus.java b/alfa-service/src/main/java/de/ozgcloud/alfa/common/command/CommandStatus.java
index 548107b825bca6aaed64a50f6f24611c9d7a8174..285ebdaae3817652aa5c80b1d9817628fd044e6c 100644
--- a/alfa-service/src/main/java/de/ozgcloud/alfa/common/command/CommandStatus.java
+++ b/alfa-service/src/main/java/de/ozgcloud/alfa/common/command/CommandStatus.java
@@ -23,14 +23,6 @@
  */
 package de.ozgcloud.alfa.common.command;
 
-import java.util.Set;
-
 public enum CommandStatus {
 	PENDING, FINISHED, ERROR, REVOKE_PENDING, REVOKED;
-
-	private static final Set<CommandStatus> FINAL_STATES = Set.of(FINISHED, ERROR, REVOKED);
-
-	public boolean isNotDone() {
-		return !FINAL_STATES.contains(this);
-	}
 }
diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/wiedervorlage/WiedervorlageCommandController.java b/alfa-service/src/main/java/de/ozgcloud/alfa/wiedervorlage/WiedervorlageCommandController.java
index 2cc413979da3622e47fc9d0d5677b804f001cf23..7f068905ec5b2f0c464fe677dc4cfa10634847c2 100644
--- a/alfa-service/src/main/java/de/ozgcloud/alfa/wiedervorlage/WiedervorlageCommandController.java
+++ b/alfa-service/src/main/java/de/ozgcloud/alfa/wiedervorlage/WiedervorlageCommandController.java
@@ -53,23 +53,26 @@ public class WiedervorlageCommandController {
 			@PathVariable long wiedervorlageVersion) {
 		var wiedervorlage = service.getById(wiedervorlageId);
 		var createdCommand = createCommand(wiedervorlage, command);
-		var doneCommand = service.updateNextFrist(createdCommand, wiedervorlage.getVorgangId());
 
-		return ResponseEntity.created(linkTo(CommandController.class).slash(doneCommand.getId()).toUri()).build();
+		return ResponseEntity.created(linkTo(CommandController.class).slash(createdCommand.getId()).toUri()).build();
 	}
 
 	Command createCommand(Wiedervorlage wiedervorlage, CreateCommand command) {
 		switch (command.getOrder()) {
 		case LegacyOrder.WIEDERVORLAGE_ERLEDIGEN: {
-			return service.erledigen(wiedervorlage);
+			var changed = wiedervorlage.toBuilder().done(true).build();
+			service.updateNextFrist(wiedervorlage.getVorgangId(), changed);
+			return service.erledigen(changed);
 		}
 		case LegacyOrder.WIEDERVORLAGE_WIEDEREROEFFNEN: {
-			return service.wiedereroeffnen(wiedervorlage);
+			var changed = wiedervorlage.toBuilder().done(false).build();
+			service.updateNextFrist(wiedervorlage.getVorgangId(), changed);
+			return service.wiedereroeffnen(changed);
 		}
 		case LegacyOrder.EDIT_WIEDERVORLAGE: {
-			return service.editWiedervorlage(updateWiedervorlageByCommand(wiedervorlage, (Wiedervorlage) command.getBody()),
-					wiedervorlage.getId(),
-					wiedervorlage.getVersion());
+			var changed = updateWiedervorlageByCommand(wiedervorlage, (Wiedervorlage) command.getBody());
+			service.updateNextFrist(wiedervorlage.getVorgangId(), changed);
+			return service.editWiedervorlage(changed, wiedervorlage.getId(), wiedervorlage.getVersion());
 		}
 		default:
 			throw new TechnicalException("Unsupported order " + command.getOrder());
@@ -95,10 +98,12 @@ public class WiedervorlageCommandController {
 
 		@PostMapping
 		public ResponseEntity<Void> createWiedervorlage(@RequestBody CreateCommand command, @PathVariable String vorgangId) {
-			var createdCommand = service.createWiedervorlage((Wiedervorlage) command.getBody(), vorgangId);
-			var doneCommand = service.updateNextFrist(createdCommand, createdCommand.getVorgangId());
+			var wiedervorlage = (Wiedervorlage) command.getBody();
+			var createdCommand = service.createWiedervorlage(wiedervorlage, vorgangId);
 
-			return ResponseEntity.created(linkTo(CommandController.class).slash(doneCommand.getId()).toUri()).build();
+			service.updateNextFrist(vorgangId, wiedervorlage);
+
+			return ResponseEntity.created(linkTo(CommandController.class).slash(createdCommand.getId()).toUri()).build();
 		}
 	}
 }
\ No newline at end of file
diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/wiedervorlage/WiedervorlageService.java b/alfa-service/src/main/java/de/ozgcloud/alfa/wiedervorlage/WiedervorlageService.java
index 28f4795c3695c12aa76981ebcb01c2f807fbbbde..c61984151d2b6dd72de917a16391c28aedad325c 100644
--- a/alfa-service/src/main/java/de/ozgcloud/alfa/wiedervorlage/WiedervorlageService.java
+++ b/alfa-service/src/main/java/de/ozgcloud/alfa/wiedervorlage/WiedervorlageService.java
@@ -33,12 +33,12 @@ import java.util.stream.Stream;
 
 import jakarta.validation.Valid;
 
+import org.springframework.scheduling.annotation.Async;
 import org.springframework.stereotype.Service;
 import org.springframework.validation.annotation.Validated;
 
 import de.ozgcloud.alfa.common.attacheditem.VorgangAttachedItemService;
 import de.ozgcloud.alfa.common.command.Command;
-import de.ozgcloud.alfa.common.command.CommandService;
 import de.ozgcloud.alfa.common.user.CurrentUserService;
 import lombok.RequiredArgsConstructor;
 
@@ -52,7 +52,6 @@ class WiedervorlageService {
 	private final WiedervorlageRemoteService remoteService;
 	private final VorgangAttachedItemService vorgangAttachedItemService;
 	private final CurrentUserService currentUserService;
-	private final CommandService commandService;
 
 	public Command createWiedervorlage(@Valid Wiedervorlage wiedervorlage, String vorgangId) {
 		return vorgangAttachedItemService.createNewWiedervorlage(addCreated(wiedervorlage), vorgangId);
@@ -73,18 +72,14 @@ class WiedervorlageService {
 		return remoteService.getById(wiedervorlageId);
 	}
 
-	public Command updateNextFrist(Command command, String vorgangId) {
-		var doneCommand = commandService.waitUntilDone(command);
-		if (doneCommand.isFinishedSuccessfully()) {
-			doUpdateNextFrist(vorgangId);
-		}
-		return doneCommand;
-	}
-
-	void doUpdateNextFrist(String vorgangId) {
-		var allWiedervorlagen = findByVorgangId(vorgangId);
+	@Async
+	public void updateNextFrist(String vorgangId, Wiedervorlage changedOrNewWiedervorlage) {
+		var persistedWiedervorlagen = findByVorgangId(vorgangId);
+		var persistedWiedervorlagenExcludingChanged = persistedWiedervorlagen.filter(
+				wiedervorlage -> !wiedervorlage.getId().equals(changedOrNewWiedervorlage.getId()));
 
-		remoteService.updateNextFrist(vorgangId, calculateNextFrist(allWiedervorlagen));
+		var wiedervorlagen = Stream.concat(persistedWiedervorlagenExcludingChanged, Stream.of(changedOrNewWiedervorlage));
+		remoteService.updateNextFrist(vorgangId, calculateNextFrist(wiedervorlagen));
 	}
 
 	Optional<LocalDate> calculateNextFrist(Stream<Wiedervorlage> wiedervorlagen) {
@@ -100,11 +95,11 @@ class WiedervorlageService {
 		return remoteService.findByVorgangId(vorgangId);
 	}
 
-	Command erledigen(Wiedervorlage wiedervorlage) {
+	public Command erledigen(Wiedervorlage wiedervorlage) {
 		return vorgangAttachedItemService.setWiedervorlageDone(wiedervorlage, true);
 	}
 
-	Command wiedereroeffnen(Wiedervorlage wiedervorlage) {
+	public Command wiedereroeffnen(Wiedervorlage wiedervorlage) {
 		return vorgangAttachedItemService.setWiedervorlageDone(wiedervorlage, false);
 	}
 
diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/common/command/CommandServiceTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/common/command/CommandServiceTest.java
index 2bf962ce6cb343babed90d058cbe4549f6acb1b5..95b37ba1901cbd62a954642ee61d4daf09fe4954 100644
--- a/alfa-service/src/test/java/de/ozgcloud/alfa/common/command/CommandServiceTest.java
+++ b/alfa-service/src/test/java/de/ozgcloud/alfa/common/command/CommandServiceTest.java
@@ -27,7 +27,6 @@ import static org.assertj.core.api.Assertions.*;
 import static org.mockito.ArgumentMatchers.*;
 import static org.mockito.Mockito.*;
 
-import java.util.Calendar;
 import java.util.Map;
 import java.util.Optional;
 import java.util.UUID;
@@ -40,7 +39,6 @@ import org.mockito.ArgumentCaptor;
 import org.mockito.Captor;
 import org.mockito.InjectMocks;
 import org.mockito.Mock;
-import org.mockito.MockedStatic;
 import org.mockito.Spy;
 
 import de.ozgcloud.alfa.loeschanforderung.DeleteLoeschAnforderung;
@@ -299,99 +297,4 @@ class CommandServiceTest {
 			verify(remoteService).findCommands(VorgangHeaderTestFactory.ID, Optional.of(CommandStatus.FINISHED), Optional.empty());
 		}
 	}
-
-	@Nested
-	class TestWaitUntilDone {
-
-		private final Command pendingCommand = CommandTestFactory.createBuilder().status(CommandStatus.PENDING).build();
-		private final Command finishedCommand = pendingCommand.toBuilder().status(CommandStatus.FINISHED).build();
-
-		@Nested
-		class OnFinishedCommand {
-
-			@Test
-			void shouldReturnFinishedCommand() {
-				var resultCommand = service.waitUntilDone(finishedCommand);
-
-				assertThat(resultCommand).isEqualTo(finishedCommand);
-			}
-
-			@Test
-			void shouldNotReloadCommand() {
-				service.waitUntilDone(finishedCommand);
-
-				verify(service, never()).reloadCommand(any());
-			}
-		}
-
-		@Nested
-		class OnPendingCommand {
-
-			@BeforeEach
-			void setUp() {
-				doReturn(finishedCommand).when(service).reloadCommand(pendingCommand.getId());
-			}
-
-			@Test
-			void shouldReloadCommand() {
-				service.waitUntilDone(pendingCommand);
-
-				verify(service).reloadCommand(pendingCommand.getId());
-			}
-
-			@Test
-			void shouldReturnDoneCommand() {
-				var resultCommand = service.waitUntilDone(pendingCommand);
-
-				assertThat(resultCommand).isEqualTo(finishedCommand);
-			}
-		}
-
-		@Nested
-		class OnTimeoutExceeded {
-
-			@Mock
-			private Calendar calendar;
-
-			@Test
-			void shouldReturnPendingCommand() {
-				try (MockedStatic<Calendar> calendarMockedStatic = mockStatic(Calendar.class)) {
-					calendarMockedStatic.when(Calendar::getInstance).thenReturn(calendar);
-					when(calendar.getTimeInMillis()).thenReturn(0L, 15000L);
-
-					var resultCommand = service.waitUntilDone(pendingCommand);
-
-					assertThat(resultCommand).isEqualTo(pendingCommand);
-				}
-			}
-
-			@Test
-			void shouldReloadPendingCommand() {
-				doReturn(pendingCommand).when(service).reloadCommand(pendingCommand.getId());
-
-				try (MockedStatic<Calendar> calendarMockedStatic = mockStatic(Calendar.class)) {
-					calendarMockedStatic.when(Calendar::getInstance).thenReturn(calendar);
-					when(calendar.getTimeInMillis()).thenReturn(0L, 0L, 15000L);
-
-					service.waitUntilDone(pendingCommand);
-
-					verify(service).reloadCommand(pendingCommand.getId());
-				}
-			}
-
-			@Test
-			void shouldReturnPendingCommandAfterReload() {
-				doReturn(pendingCommand).when(service).reloadCommand(pendingCommand.getId());
-
-				try (MockedStatic<Calendar> calendarMockedStatic = mockStatic(Calendar.class)) {
-					calendarMockedStatic.when(Calendar::getInstance).thenReturn(calendar);
-					when(calendar.getTimeInMillis()).thenReturn(0L, 0L, 15000L);
-
-					var resultCommand = service.waitUntilDone(pendingCommand);
-
-					assertThat(resultCommand).isEqualTo(pendingCommand);
-				}
-			}
-		}
-	}
 }
\ No newline at end of file
diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/common/command/CommandStatusTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/common/command/CommandStatusTest.java
deleted file mode 100644
index f91dc7028af4ca954d1dfc9fae1e70affbdcc066..0000000000000000000000000000000000000000
--- a/alfa-service/src/test/java/de/ozgcloud/alfa/common/command/CommandStatusTest.java
+++ /dev/null
@@ -1,34 +0,0 @@
-package de.ozgcloud.alfa.common.command;
-
-import static org.assertj.core.api.Assertions.*;
-
-import org.junit.jupiter.api.Nested;
-import org.junit.jupiter.params.ParameterizedTest;
-import org.junit.jupiter.params.provider.EnumSource;
-import org.junit.jupiter.params.provider.EnumSource.Mode;
-
-class CommandStatusTest {
-
-	@Nested
-	class TestIsNotDone {
-
-		@ParameterizedTest
-		@EnumSource(names = { "PENDING", "REVOKE_PENDING" })
-		void shouldReturnTrue(CommandStatus status) {
-			var istNotDone = status.isNotDone();
-
-			assertThat(istNotDone).isTrue();
-
-		}
-
-		@ParameterizedTest
-		@EnumSource(names = { "PENDING", "REVOKE_PENDING" }, mode = Mode.EXCLUDE)
-		void shouldReturnFalse(CommandStatus status) {
-			var istNotDone = status.isNotDone();
-
-			assertThat(istNotDone).isFalse();
-		}
-
-	}
-
-}
\ No newline at end of file
diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/common/command/CommandTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/common/command/CommandTest.java
deleted file mode 100644
index c838d402226703a6133dc5f8a65b79e7d911373e..0000000000000000000000000000000000000000
--- a/alfa-service/src/test/java/de/ozgcloud/alfa/common/command/CommandTest.java
+++ /dev/null
@@ -1,84 +0,0 @@
-package de.ozgcloud.alfa.common.command;
-
-import static org.assertj.core.api.Assertions.*;
-import static org.mockito.Mockito.*;
-
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Nested;
-import org.junit.jupiter.api.Test;
-import org.junit.jupiter.params.ParameterizedTest;
-import org.junit.jupiter.params.provider.EnumSource;
-import org.junit.jupiter.params.provider.EnumSource.Mode;
-import org.junit.jupiter.params.provider.ValueSource;
-import org.mockito.Mock;
-
-import com.thedeanda.lorem.LoremIpsum;
-
-class CommandTest {
-
-	@Nested
-	class TestIsFinishedSuccessfully {
-
-		@Test
-		void shouldReturnTrue() {
-			var command = CommandTestFactory.createBuilder().status(CommandStatus.FINISHED).build();
-
-			var isDoneSuccessfully = command.isFinishedSuccessfully();
-
-			assertThat(isDoneSuccessfully).isTrue();
-		}
-
-		@ParameterizedTest
-		@EnumSource(names = "FINISHED", mode = Mode.EXCLUDE)
-		void shouldReturnFalseOnStatusNotFinished(CommandStatus commandStatus) {
-			var command = CommandTestFactory.createBuilder().status(commandStatus).build();
-
-			var isDoneSuccessfully = command.isFinishedSuccessfully();
-
-			assertThat(isDoneSuccessfully).isFalse();
-		}
-
-		@ParameterizedTest
-		@EnumSource
-		void shouldReturnFalseOnErrorMessage(CommandStatus commandStatus) {
-			var command = CommandTestFactory.createBuilder().status(commandStatus).errorMessage(LoremIpsum.getInstance().getWords(1)).build();
-
-			var isDoneSuccessfully = command.isFinishedSuccessfully();
-
-			assertThat(isDoneSuccessfully).isFalse();
-		}
-
-	}
-
-	@Nested
-	class TestIsNotDone {
-
-		@Mock
-		private CommandStatus commandStatus;
-		private Command command;
-
-		@BeforeEach
-		void setUp() {
-			command = CommandTestFactory.createBuilder().status(commandStatus).build();
-		}
-
-		@Test
-		void shouldCallIsNotDone() {
-			command.isNotDone();
-
-			verify(commandStatus).isNotDone();
-		}
-
-		@ParameterizedTest
-		@ValueSource(booleans = { true, false })
-		void shouldReturnIsNotDone(boolean isNotDone) {
-			when(commandStatus.isNotDone()).thenReturn(isNotDone);
-
-			var result = command.isNotDone();
-
-			assertThat(result).isEqualTo(isNotDone);
-		}
-
-	}
-
-}
\ No newline at end of file
diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/wiedervorlage/WiedervorlageCommandByVorgangControllerTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/wiedervorlage/WiedervorlageCommandByVorgangControllerTest.java
index ef4a43f95f4ed8458d9be2f37bb190e32bd87e84..f8b56e2cb33333ee2e01cd40d411f201632f79d4 100644
--- a/alfa-service/src/test/java/de/ozgcloud/alfa/wiedervorlage/WiedervorlageCommandByVorgangControllerTest.java
+++ b/alfa-service/src/test/java/de/ozgcloud/alfa/wiedervorlage/WiedervorlageCommandByVorgangControllerTest.java
@@ -44,13 +44,8 @@ import org.springframework.test.web.servlet.ResultActions;
 import org.springframework.test.web.servlet.setup.MockMvcBuilders;
 
 import de.ozgcloud.alfa.common.binaryfile.BinaryFileTestFactory;
-import de.ozgcloud.alfa.common.command.Command;
-import de.ozgcloud.alfa.common.command.CommandController.CommandByRelationController;
-import de.ozgcloud.alfa.common.command.CommandStatus;
 import de.ozgcloud.alfa.common.command.CommandTestFactory;
-import de.ozgcloud.alfa.common.command.CreateCommand;
 import de.ozgcloud.alfa.common.command.LegacyOrder;
-import de.ozgcloud.alfa.common.user.CurrentUserService;
 import de.ozgcloud.alfa.vorgang.VorgangHeaderTestFactory;
 import de.ozgcloud.alfa.wiedervorlage.WiedervorlageCommandController.WiedervorlageCommandByVorgangController;
 import lombok.SneakyThrows;
@@ -60,15 +55,10 @@ class WiedervorlageCommandByVorgangControllerTest {
 	@Spy
 	@InjectMocks
 	private WiedervorlageCommandByVorgangController controller;
-	@Mock
-	private CommandByRelationController commandByRelationController;
-	@Mock
-	private CurrentUserService userService;
+
 	@Mock
 	private WiedervorlageService service;
 
-	@Captor
-	private ArgumentCaptor<CreateCommand> createCommandCaptor;
 	private MockMvc mockMvc;
 
 	@BeforeEach
@@ -82,15 +72,10 @@ class WiedervorlageCommandByVorgangControllerTest {
 
 		@Captor
 		private ArgumentCaptor<Wiedervorlage> wiedervorlageCaptor;
-		private Command createCommand;
-		private Command doneCommand;
 
 		@BeforeEach
 		void mockUserService() {
-			createCommand = CommandTestFactory.create();
-			doneCommand = createCommand.toBuilder().status(CommandStatus.FINISHED).build();
-			when(service.createWiedervorlage(any(), any())).thenReturn(createCommand);
-			when(service.updateNextFrist(createCommand, VorgangHeaderTestFactory.ID)).thenReturn(doneCommand);
+			when(service.createWiedervorlage(any(), any())).thenReturn(CommandTestFactory.create());
 		}
 
 		@Nested
@@ -105,10 +90,14 @@ class WiedervorlageCommandByVorgangControllerTest {
 			}
 
 			@Test
-			void shouldUpdateNextFristOnSuccessfullyDoneCommand() {
+			void shouldCallServiceToUpdateNextFrist() {
 				doRequest();
 
-				verify(service).updateNextFrist(createCommand, VorgangHeaderTestFactory.ID);
+				verify(service).updateNextFrist(eq(VorgangHeaderTestFactory.ID), wiedervorlageCaptor.capture());
+				assertThat(wiedervorlageCaptor.getValue())
+						.usingRecursiveComparison()
+						.comparingOnlyFields("betreff", "beschreibung", "frist", "attachments")
+						.isEqualTo(WiedervorlageTestFactory.create());
 			}
 
 			@SneakyThrows
diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/wiedervorlage/WiedervorlageCommandControllerTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/wiedervorlage/WiedervorlageCommandControllerTest.java
index 198f7a00535cfc7dbcc73c53fa65f3d826a2225d..4ab1dcc715ab7ea4234a59cf2cd79dc30f9d57bb 100644
--- a/alfa-service/src/test/java/de/ozgcloud/alfa/wiedervorlage/WiedervorlageCommandControllerTest.java
+++ b/alfa-service/src/test/java/de/ozgcloud/alfa/wiedervorlage/WiedervorlageCommandControllerTest.java
@@ -35,6 +35,8 @@ 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.ArgumentCaptor;
+import org.mockito.Captor;
 import org.mockito.InjectMocks;
 import org.mockito.Mock;
 import org.mockito.Spy;
@@ -46,7 +48,6 @@ import org.springframework.test.web.servlet.setup.MockMvcBuilders;
 import de.ozgcloud.alfa.common.binaryfile.FileId;
 import de.ozgcloud.alfa.common.command.Command;
 import de.ozgcloud.alfa.common.command.CommandOrder;
-import de.ozgcloud.alfa.common.command.CommandStatus;
 import de.ozgcloud.alfa.common.command.CommandTestFactory;
 import de.ozgcloud.alfa.common.command.CreateCommand;
 import de.ozgcloud.alfa.common.command.LegacyOrder;
@@ -78,18 +79,15 @@ class WiedervorlageCommandControllerTest {
 		@Nested
 		class ControllerMethods {
 
-			private Command createCommand;
-			private Command doneCommand;
+			@Captor
+			private ArgumentCaptor<Wiedervorlage> wiedervorlageCaptor;
 
 			@BeforeEach
 			void init() {
 				when(service.getById(any())).thenReturn(WiedervorlageTestFactory.create());
-				createCommand = CommandTestFactory.createBuilder()
+				when(service.editWiedervorlage(any(), any(), anyLong())).thenReturn(CommandTestFactory.createBuilder()
 						.order(CommandOrder.UPDATE_ATTACHED_ITEM.name())
-						.body(WiedervorlageTestFactory.createAsMap()).build();
-				doneCommand = createCommand.toBuilder().status(CommandStatus.FINISHED).build();
-				when(service.editWiedervorlage(any(), any(), anyLong())).thenReturn(createCommand);
-				when(service.updateNextFrist(createCommand, VorgangHeaderTestFactory.ID)).thenReturn(doneCommand);
+						.body(WiedervorlageTestFactory.createAsMap()).build());
 			}
 
 			@SneakyThrows
@@ -101,10 +99,14 @@ class WiedervorlageCommandControllerTest {
 			}
 
 			@Test
-			void shouldUpdateNextFristOnSuccessfullyDoneCommand() {
+			void shouldCallServiceUpdateNextFrist() {
 				doRequest();
 
-				verify(service).updateNextFrist(createCommand, VorgangHeaderTestFactory.ID);
+				verify(service).updateNextFrist(eq(VorgangHeaderTestFactory.ID), wiedervorlageCaptor.capture());
+				assertThat(wiedervorlageCaptor.getValue())
+						.usingRecursiveComparison()
+						.comparingOnlyFields("betreff", "beschreibung", "frist", "attachments")
+						.isEqualTo(WiedervorlageTestFactory.create());
 			}
 
 			@SneakyThrows
@@ -152,6 +154,9 @@ class WiedervorlageCommandControllerTest {
 		@Nested
 		class TestCreateCommand {
 
+			@Captor
+			private ArgumentCaptor<Wiedervorlage> wiedervorlageArgumentCaptor;
+
 			@DisplayName("for order 'erledigen'")
 			@Nested
 			class TestOnErledigenOrder {
@@ -162,6 +167,23 @@ class WiedervorlageCommandControllerTest {
 
 					verify(service).erledigen(any(Wiedervorlage.class));
 				}
+
+				@Test
+				void shouldUpdateNextFrist() {
+					callCreateCommand(LegacyOrder.WIEDERVORLAGE_ERLEDIGEN);
+
+					verify(service).updateNextFrist(eq(VorgangHeaderTestFactory.ID), any(Wiedervorlage.class));
+				}
+
+				@Test
+				void shouldSetWiedervorlageAsDone() {
+					callCreateCommand(LegacyOrder.WIEDERVORLAGE_ERLEDIGEN);
+
+					verify(service).updateNextFrist(eq(VorgangHeaderTestFactory.ID), wiedervorlageArgumentCaptor.capture());
+					assertThat(wiedervorlageArgumentCaptor.getValue())
+							.usingRecursiveComparison()
+							.isEqualTo(WiedervorlageTestFactory.createBuilder().done(true).build());
+				}
 			}
 
 			@DisplayName("for order 'wiedereroeffnen'")
@@ -174,6 +196,23 @@ class WiedervorlageCommandControllerTest {
 
 					verify(service).wiedereroeffnen(any(Wiedervorlage.class));
 				}
+
+				@Test
+				void shouldUpdateNextFrist() {
+					callCreateCommand(LegacyOrder.WIEDERVORLAGE_WIEDEREROEFFNEN);
+
+					verify(service).updateNextFrist(eq(VorgangHeaderTestFactory.ID), any(Wiedervorlage.class));
+				}
+
+				@Test
+				void shouldSetWiedervorlageAsOpen() {
+					callCreateCommand(LegacyOrder.WIEDERVORLAGE_WIEDEREROEFFNEN);
+
+					verify(service).updateNextFrist(eq(VorgangHeaderTestFactory.ID), wiedervorlageArgumentCaptor.capture());
+					assertThat(wiedervorlageArgumentCaptor.getValue())
+							.usingRecursiveComparison()
+							.isEqualTo(WiedervorlageTestFactory.createBuilder().done(false).build());
+				}
 			}
 
 			@DisplayName("for order 'edit'")
@@ -188,6 +227,16 @@ class WiedervorlageCommandControllerTest {
 							eq(WiedervorlageTestFactory.VERSION));
 				}
 
+				@Test
+				void shouldUpdateNextFrist() {
+					var wiedervorlage = WiedervorlageTestFactory.create();
+					doReturn(wiedervorlage).when(controller).updateWiedervorlageByCommand(any(), any());
+
+					callCreateCommand(LegacyOrder.EDIT_WIEDERVORLAGE);
+
+					verify(service).updateNextFrist(VorgangHeaderTestFactory.ID, wiedervorlage);
+				}
+
 				@DisplayName("update wiedervorlage by given command")
 				@Nested
 				class TestUpdateWiedervorlageByCommand {
diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/wiedervorlage/WiedervorlageServiceTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/wiedervorlage/WiedervorlageServiceTest.java
index ae7f2e55675bd0ee63bb76f7a1b175b3bec39534..b8ab4843ea90a7148c175f4349f6a23ba62a6d39 100644
--- a/alfa-service/src/test/java/de/ozgcloud/alfa/wiedervorlage/WiedervorlageServiceTest.java
+++ b/alfa-service/src/test/java/de/ozgcloud/alfa/wiedervorlage/WiedervorlageServiceTest.java
@@ -38,7 +38,6 @@ import org.junit.jupiter.api.DisplayName;
 import org.junit.jupiter.api.Nested;
 import org.junit.jupiter.api.Test;
 import org.mockito.ArgumentCaptor;
-import org.mockito.ArgumentMatchers;
 import org.mockito.Captor;
 import org.mockito.InjectMocks;
 import org.mockito.Mock;
@@ -47,7 +46,6 @@ import org.mockito.Spy;
 import de.ozgcloud.alfa.common.attacheditem.VorgangAttachedItemService;
 import de.ozgcloud.alfa.common.command.Command;
 import de.ozgcloud.alfa.common.command.CommandService;
-import de.ozgcloud.alfa.common.command.CommandStatus;
 import de.ozgcloud.alfa.common.command.CommandTestFactory;
 import de.ozgcloud.alfa.common.user.CurrentUserService;
 import de.ozgcloud.alfa.common.user.UserProfileTestFactory;
@@ -108,14 +106,14 @@ class WiedervorlageServiceTest {
 			}
 
 			@Test
-			void shouldSetCreatedAt() {
+			void shouldSetCreatedAt() throws Exception {
 				var wiedervorlage = callAddCreated();
 
 				assertThat(wiedervorlage.getCreatedAt()).isNotNull().isCloseTo(ZonedDateTime.now(), within(2, ChronoUnit.SECONDS));
 			}
 
 			@Test
-			void shouldSetCreatedBy() {
+			void shouldSetCreatedBy() throws Exception {
 				var wiedervorlage = callAddCreated();
 
 				assertThat(wiedervorlage.getCreatedBy()).isEqualTo(UserProfileTestFactory.ID.toString());
@@ -173,150 +171,95 @@ class WiedervorlageServiceTest {
 	}
 
 	@Nested
-	class TestDoUpdateNextFrist {
-
-		@Nested
-		class ServiceMethod {
-
-			@BeforeEach
-			void mockService() {
-				when(remoteService.findByVorgangId(any())).thenReturn(Stream.of(WiedervorlageTestFactory.create()));
-			}
-
-			@Test
-			void shoulDoCalculation() {
-				callUpdateNextFrist();
-
-				verify(service).calculateNextFrist(ArgumentMatchers.<Stream<Wiedervorlage>>any());
-			}
-
-			@Test
-			void shouldCallFindByVorgangId() {
-				callUpdateNextFrist();
-
-				verify(service).findByVorgangId(VorgangHeaderTestFactory.ID);
-			}
-
-			@Test
-			void shouldCallRemoteService() {
-				doReturn(Optional.of(WiedervorlageTestFactory.FRIST)).when(service).calculateNextFrist(any());
+	class TestUpdateNextFrist {
 
-				callUpdateNextFrist();
+		private final Wiedervorlage wiedervorlage = WiedervorlageTestFactory.create();
+		private final Wiedervorlage foundWiedervorlage = WiedervorlageTestFactory.create();
 
-				verify(remoteService).updateNextFrist(VorgangHeaderTestFactory.ID, Optional.of(WiedervorlageTestFactory.FRIST));
-			}
+		@Captor
+		private ArgumentCaptor<Stream<Wiedervorlage>> allWiedervorlagen;
 
-			private void callUpdateNextFrist() {
-				service.doUpdateNextFrist(VorgangHeaderTestFactory.ID);
-			}
+		@BeforeEach
+		void mockService() {
+			when(remoteService.findByVorgangId(VorgangHeaderTestFactory.ID)).thenReturn(Stream.of(foundWiedervorlage));
+			doReturn(Optional.of(WiedervorlageTestFactory.FRIST)).when(service).calculateNextFrist(any());
 		}
 
-		@Nested
-		class Calculation {
+		@Test
+		void shouldDoCalculation() {
+			callUpdateNextFrist();
 
-			@Test
-			void shouldReturnNullOnAllDone() {
-				var wiedervorlage = WiedervorlageTestFactory.createBuilder().frist(LocalDate.now().plus(1, ChronoUnit.DAYS)).done(true).build();
+			verify(service).calculateNextFrist(any());
+		}
 
-				var nextFrist = calculateNextFrist(Stream.of(wiedervorlage));
+		@Test
+		void shouldAddWiedervorlageToFoundWiedervorlagen() {
+			callUpdateNextFrist();
 
-				assertThat(nextFrist).isEmpty();
-			}
+			verify(service).calculateNextFrist(allWiedervorlagen.capture());
+			assertThat(allWiedervorlagen.getValue()).containsExactly(wiedervorlage);
+		}
 
-			@Test
-			void shouldReturnEarliestFrist() {
-				var fristPast2Days = WiedervorlageTestFactory.createBuilder().frist(LocalDate.now().minus(2, ChronoUnit.DAYS)).done(false)
-						.build();
-				var fristPast1Day = WiedervorlageTestFactory.createBuilder().frist(LocalDate.now().minus(1, ChronoUnit.DAYS)).done(false).build();
-				var fristFuture1Day = WiedervorlageTestFactory.createBuilder().frist(LocalDate.now().plus(1, ChronoUnit.DAYS)).done(false)
-						.build();
-				var fristFuture2Days = WiedervorlageTestFactory.createBuilder().frist(LocalDate.now().plus(2, ChronoUnit.DAYS)).done(false)
-						.build();
-
-				var nextFrist = calculateNextFrist(Stream.of(fristPast2Days, fristPast1Day, fristFuture1Day, fristFuture2Days));
-
-				assertThat(nextFrist).contains(LocalDate.now().minus(2, ChronoUnit.DAYS));
-			}
+		@Test
+		void shouldCallFindByVorgangId() {
+			callUpdateNextFrist();
 
-			@Test
-			void shouldReturnFristIgnoringDone() {
-				var fristPast1DayNotDone = WiedervorlageTestFactory.createBuilder().frist(LocalDate.now().plus(1, ChronoUnit.DAYS)).done(false)
-						.build();
-				var fristPast1DayDone = WiedervorlageTestFactory.createBuilder().frist(LocalDate.now().minus(1, ChronoUnit.DAYS)).done(true)
-						.build();
+			verify(service).findByVorgangId(VorgangHeaderTestFactory.ID);
+		}
 
-				var nextFrist = calculateNextFrist(Stream.of(fristPast1DayNotDone, fristPast1DayDone));
+		@Test
+		void shouldCallRemoteService() {
+			callUpdateNextFrist();
 
-				assertThat(nextFrist).contains(LocalDate.now().plus(1, ChronoUnit.DAYS));
-			}
+			verify(remoteService).updateNextFrist(VorgangHeaderTestFactory.ID, Optional.of(WiedervorlageTestFactory.FRIST));
+		}
 
-			private Optional<LocalDate> calculateNextFrist(Stream<Wiedervorlage> wiedervorlagen) {
-				return service.calculateNextFrist(wiedervorlagen);
-			}
+		private void callUpdateNextFrist() {
+			service.updateNextFrist(VorgangHeaderTestFactory.ID, wiedervorlage);
 		}
 	}
 
 	@Nested
-	class TestUpdateNextFrist {
+	class TestCalculateNextFrist {
 
 		@Test
-		void shouldWaitUntilCommandDone() {
-			var pendingCommand = CommandTestFactory.createBuilder().status(CommandStatus.PENDING).build();
-			var command = CommandTestFactory.create();
-			when(commandService.waitUntilDone(command)).thenReturn(pendingCommand);
+		void shouldReturnNullOnAllDone() {
+			var wiedervorlage = WiedervorlageTestFactory.createBuilder().frist(LocalDate.now().plus(1, ChronoUnit.DAYS)).done(true).build();
 
-			service.updateNextFrist(command, VorgangHeaderTestFactory.ID);
+			var nextFrist = calculateNextFrist(Stream.of(wiedervorlage));
 
-			verify(commandService).waitUntilDone(command);
+			assertThat(nextFrist).isEmpty();
 		}
 
 		@Test
-		void shouldReturnDoneCommand() {
-			var doneCommand = CommandTestFactory.createBuilder().status(CommandStatus.FINISHED).build();
-			var command = CommandTestFactory.create();
-			when(commandService.waitUntilDone(command)).thenReturn(doneCommand);
-
-			var result = service.updateNextFrist(command, VorgangHeaderTestFactory.ID);
-
-			assertThat(result).isEqualTo(doneCommand);
+		void shouldReturnEarliestFrist() {
+			var fristPast2Days = WiedervorlageTestFactory.createBuilder().frist(LocalDate.now().minus(2, ChronoUnit.DAYS)).done(false)
+					.build();
+			var fristPast1Day = WiedervorlageTestFactory.createBuilder().frist(LocalDate.now().minus(1, ChronoUnit.DAYS)).done(false).build();
+			var fristFuture1Day = WiedervorlageTestFactory.createBuilder().frist(LocalDate.now().plus(1, ChronoUnit.DAYS)).done(false)
+					.build();
+			var fristFuture2Days = WiedervorlageTestFactory.createBuilder().frist(LocalDate.now().plus(2, ChronoUnit.DAYS)).done(false)
+					.build();
+
+			var nextFrist = calculateNextFrist(Stream.of(fristPast2Days, fristPast1Day, fristFuture1Day, fristFuture2Days));
+
+			assertThat(nextFrist).contains(LocalDate.now().minus(2, ChronoUnit.DAYS));
 		}
 
-		@Nested
-		class OnDoneSuccessfullyCommand {
-			private final Command command = CommandTestFactory.create();
-			private final Command doneCommand = CommandTestFactory.createBuilder().status(CommandStatus.FINISHED).build();
-
-			@BeforeEach
-			void setUp() {
-				when(commandService.waitUntilDone(command)).thenReturn(doneCommand);
-			}
+		@Test
+		void shouldReturnFristIgnoringDone() {
+			var fristPast1DayNotDone = WiedervorlageTestFactory.createBuilder().frist(LocalDate.now().plus(1, ChronoUnit.DAYS)).done(false)
+					.build();
+			var fristPast1DayDone = WiedervorlageTestFactory.createBuilder().frist(LocalDate.now().minus(1, ChronoUnit.DAYS)).done(true)
+					.build();
 
-			@Test
-			void shouldUpdateNextFrist() {
-				service.updateNextFrist(command, VorgangHeaderTestFactory.ID);
+			var nextFrist = calculateNextFrist(Stream.of(fristPast1DayNotDone, fristPast1DayDone));
 
-				verify(service).doUpdateNextFrist(VorgangHeaderTestFactory.ID);
-			}
+			assertThat(nextFrist).contains(LocalDate.now().plus(1, ChronoUnit.DAYS));
 		}
 
-		@Nested
-		class OnNotDoneSuccessfullyCommand {
-			private final Command command = CommandTestFactory.create();
-			private final Command pendingCommand = CommandTestFactory.createBuilder().status(CommandStatus.PENDING).build();
-
-			@BeforeEach
-			void setUp() {
-				when(commandService.waitUntilDone(command)).thenReturn(pendingCommand);
-			}
-
-			@Test
-			void shouldNotUpdateNextFrist() {
-				service.updateNextFrist(command, VorgangHeaderTestFactory.ID);
-
-				verify(service, never()).doUpdateNextFrist(VorgangHeaderTestFactory.ID);
-			}
+		private Optional<LocalDate> calculateNextFrist(Stream<Wiedervorlage> wiedervorlagen) {
+			return service.calculateNextFrist(wiedervorlagen);
 		}
-
 	}
-
 }
\ No newline at end of file