diff --git a/app/controllers/messages.php b/app/controllers/messages.php
index dc0c7d2557ea5688dfaf32bfba3ef9022d83ab3f..3a4b8ef0c1ca77f62b23d5f42cbb3831dd94b3a0 100644
--- a/app/controllers/messages.php
+++ b/app/controllers/messages.php
@@ -42,13 +42,17 @@ class MessagesController extends AuthenticatedController {
         }
 
         if (Request::isPost()) {
+            $mbox = Request::option('mbox');
             foreach (Request::optionArray('bulk') as $message_id) {
-                $this->deleteMessage($message_id);
+                $this->deleteMessage($message_id, $mbox);
             }
             PageLayout::postSuccess(sprintf(
                 _('%u Nachrichten wurden gelöscht'),
                 count(Request::optionArray('bulk'))
             ));
+
+            $this->redirect($this->overviewURL());
+            return;
         }
 
         $this->messages = $this->getMessages(
@@ -68,13 +72,17 @@ class MessagesController extends AuthenticatedController {
         Navigation::activateItem('/messaging/messages/sent');
 
         if (Request::isPost()) {
+            $mbox = Request::option('mbox');
             foreach (Request::optionArray('bulk') as $message_id) {
-                $this->deleteMessage($message_id);
+                $this->deleteMessage($message_id, $mbox);
             }
             PageLayout::postSuccess(sprintf(
                 _('%u Nachrichten wurden gelöscht'),
                 count(Request::optionArray('bulk'))
             ));
+
+            $this->redirect($this->sentURL());
+            return;
         }
 
         $this->messages = $this->getMessages(
@@ -122,7 +130,7 @@ class MessagesController extends AuthenticatedController {
         $this->render_json($this->output);
     }
 
-    public function read_action($message_id)
+    public function read_action($message_id, $mbox = 'rec')
     {
         $this->message = new Message($message_id);
         if (!$this->message->permissionToRead()) {
@@ -160,6 +168,8 @@ class MessagesController extends AuthenticatedController {
             ));
         }
         $this->message->markAsRead($GLOBALS['user']->id);
+
+        $this->mbox = $mbox;
     }
 
     /**
@@ -658,34 +668,29 @@ class MessagesController extends AuthenticatedController {
         }
     }
 
-    protected function deleteMessage($message_id)
+    protected function deleteMessage($message_id, $mbox)
     {
         $message = Message::find($message_id);
         if ($message) {
             $message->markAsRead($GLOBALS['user']->id);
         }
 
-        $messageuser = new MessageUser([$GLOBALS['user']->id, $message_id, "snd"]);
-        $success = 0;
-        if (!$messageuser->isNew()) {
-            $messageuser['deleted'] = 1;
+        $messageuser = MessageUser::find([$GLOBALS['user']->id, $message_id, $mbox]);
+        if ($messageuser) {
+            $messageuser['deleted'] = true;
             $success = $messageuser->store();
         }
-        $messageuser = new MessageUser([$GLOBALS['user']->id, $message_id, "rec"]);
-        if (!$messageuser->isNew()) {
-            $messageuser['deleted'] = 1;
-            $success += $messageuser->store();
-        }
+
         return $success;
     }
 
-    public function delete_action($message_id)
+    public function delete_action($message_id, $mbox = 'rec')
     {
         $message = Message::find($message_id);
 
         $ticket = Request::get('studip-ticket');
         if (Request::isPost() && $ticket && check_ticket($ticket)) {
-            $success = $this->deleteMessage($message_id);
+            $success = $this->deleteMessage($message_id, $mbox);
             if ($success) {
                 PageLayout::postMessage(MessageBox::success(_('Nachricht gelöscht!')));
             } else {
@@ -693,9 +698,9 @@ class MessagesController extends AuthenticatedController {
             }
         }
 
-        $redirect = $message->autor_id === $GLOBALS['user']->id
-            ? $this->url_for('messages/sent')
-            : $this->url_for('messages/overview');
+        $redirect = $mbox === 'rec'
+            ? $this->url_for('messages/overview')
+            : $this->url_for('messages/sent');
 
         $this->redirect($redirect);
     }
@@ -716,7 +721,7 @@ class MessagesController extends AuthenticatedController {
                 'id' => $GLOBALS['user']->id,
             ]);
             foreach ($returnedMessages as $returnedMessage) {
-                $this->deleteMessage($returnedMessage);
+                $this->deleteMessage($returnedMessage, $sndrec);
             }
             if ($sndrec === 'rec') {
                 PageLayout::postSuccess(_('Alle empfangenen Nachrichten wurden gelöscht.'));
diff --git a/app/views/messages/_message_row.php b/app/views/messages/_message_row.php
index c73fb4e9129502d5a364b9050a6db1240c7dc6ee..1cc8b86d85c9768928ef58dc9538feeaf330ac45 100644
--- a/app/views/messages/_message_row.php
+++ b/app/views/messages/_message_row.php
@@ -1,7 +1,7 @@
 <tr id="message_<?= $message->getId() ?>" class="<?= $message->isRead() || $message['autor_id'] === $GLOBALS['user']->id ? "" : "unread" ?>">
     <td class="hidden-small-down"><input type="checkbox" name="bulk[]" value="<?= htmlReady($message->getId()) ?>"></td>
     <td class="title">
-        <a href="<?= URLHelper::getLink("dispatch.php/messages/read/".$message->getId()) ?>" data-dialog>
+        <a href="<?= $controller->read($message, $received ? 'rec' : 'snd') ?>" data-dialog>
             <?= trim($message['subject']) ? htmlReady($message['subject']) : htmlReady(mila(kill_format($message['message']), 40)) ?>
             <div class="message-indicators">
                 <span><?= $message->getNumAttachments() ? Icon::create('staple', 'info', ["title" => _("Mit Anhang")])->asImg(20) : "" ?></span>
diff --git a/app/views/messages/overview.php b/app/views/messages/overview.php
index 9eae50b69e0bde00ac1fb18952d56f62a811728c..1a1decb93304b8b56277d2175b225d74f483681e 100644
--- a/app/views/messages/overview.php
+++ b/app/views/messages/overview.php
@@ -8,6 +8,7 @@
 
 <form action="?" method="post" id="bulk">
     <?= CSRFProtection::tokenTag() ?>
+    <input type="hidden" name="mbox" value="<?= $received ? 'rec' : 'snd' ?>">
     <table class="default" id="messages">
         <caption>
             <?= $received ? _("Eingang") : _("Gesendet") ?>
diff --git a/app/views/messages/read.php b/app/views/messages/read.php
index 24b4c8a0e324da9a34398c335224fbe24f0d7225..189bca92d0ce60b550d9fc3759ec529ea9aa62f8 100644
--- a/app/views/messages/read.php
+++ b/app/views/messages/read.php
@@ -93,10 +93,10 @@
         <a href="<?= URLHelper::getLink("dispatch.php/messages/write", ['answer_to' => $message->getId(), 'forward' => "rec"]) ?>" data-dialog="width=700;height=700"><?= \Studip\Button::create(_("Weiterleiten"))?></a>
     </div>
     <a href="<?= URLHelper::getLink("dispatch.php/messages/print/".$message->getId()) ?>" class="print_action"><?= \Studip\Button::create(_("Drucken"))?></a>
-    <form action="<?= $controller->url_for('messages/delete/' . $message->id) ?>" method="post" style="display: inline;">
+    <form action="<?= $controller->delete($message, $mbox) ?>" method="post" style="display: inline;">
         <input type="hidden" name="studip-ticket" value="<?= get_ticket() ?>">
         <?= \Studip\Button::create(_("Löschen"), 'delete', [
-                'onClick' => 'return window.confirm("' . _('Nachricht wirklich löschen?') . '");',
+            'data-confirm' => _('Nachricht wirklich löschen?'),
         ])?>
     </form>
 </div>