diff --git a/app/controllers/admin/user.php b/app/controllers/admin/user.php
index b6a40486eab5c094ff86cd2ce996d80eec5d4ed3..d66a730561b103da8b5bb32246362070d15c86b2 100644
--- a/app/controllers/admin/user.php
+++ b/app/controllers/admin/user.php
@@ -978,6 +978,7 @@ class Admin_UserController extends AuthenticatedController
      */
     public function change_password_action($user_id)
     {
+        CSRFProtection::verifyUnsafeRequest();
         // mail address did not change, so skip this check
         $GLOBALS['MAIL_VALIDATE_BOX'] = false;
         $UserManagement               = new UserManagement($user_id);
@@ -989,7 +990,7 @@ class Admin_UserController extends AuthenticatedController
             PageLayout::postError(_('Die Änderungen konnten nicht gespeichert werden.'), $details);
         }
         if (Request::int('from_index')) {
-            $this->redirect('admin/user');
+            $this->relocate('admin/user');
         } else {
             $this->redirect('admin/user/edit/' . $user_id);
         }
@@ -1031,7 +1032,7 @@ class Admin_UserController extends AuthenticatedController
         }
 
         if (Request::int('from_index')) {
-            $this->redirect('admin/user');
+            $this->relocate('admin/user');
         } else {
             $this->redirect('admin/user/edit/' . $user_id);
         }
@@ -1044,6 +1045,7 @@ class Admin_UserController extends AuthenticatedController
      */
     public function unlock_action($user_id)
     {
+        CSRFProtection::verifyUnsafeRequest();
         $user = User::find($user_id);
 
         $user->locked       = 0;
@@ -1063,7 +1065,7 @@ class Admin_UserController extends AuthenticatedController
         }
 
         if (Request::int('from_index')) {
-            $this->redirect('admin/user');
+            $this->relocate('admin/user');
         } else {
             $this->redirect('admin/user/edit/' . $user_id);
         }
@@ -1146,6 +1148,7 @@ class Admin_UserController extends AuthenticatedController
      */
     public function delete_studycourse_action($user_id, $fach_id, $abschlus_id)
     {
+        CSRFProtection::verifyUnsafeRequest();
         $user_stc = UserStudyCourse::find([$user_id, $fach_id, $abschlus_id]);
         $deleted  = false;
         if ($user_stc) {
@@ -1167,19 +1170,19 @@ class Admin_UserController extends AuthenticatedController
      */
     public function delete_institute_action($user_id, $institut_id)
     {
+        CSRFProtection::verifyUnsafeRequest();
         if ($GLOBALS['perm']->have_studip_perm("admin", $institut_id)) {
             $groups     = GetAllStatusgruppen($institut_id);
             $group_list = GetRoleNames($groups, 0, '', true);
             if (is_array($group_list) && count($group_list) > 0) {
-                $query = "DELETE FROM statusgruppe_user
-                          WHERE statusgruppe_id IN (?) AND user_id = ?";
-                $statement = DBManager::get()->prepare($query);
-                $statement->execute([array_keys($group_list), $user_id]);
+                StatusgruppeUser::deleteBySQL(
+                    "`statusgruppe_id` IN (?) AND `user_id` = ?",
+                    [array_keys($group_list), $user_id]
+                );
             }
 
-            $db = DBManager::get()->prepare("DELETE FROM user_inst WHERE user_id = ? AND Institut_id = ?");
-            $db->execute([$user_id, $institut_id]);
-            if ($db->rowCount() == 1) {
+            $count = InstituteMember::deleteBySQL("`user_id` = ? AND `Institut_id` = ?", [$user_id, $institut_id]);
+            if ($count === 1) {
                 StudipLog::log('INST_USER_DEL', $institut_id, $user_id);
                 NotificationCenter::postNotification('UserInstitutionDidDelete', $institut_id, $user_id);
                 InstituteMember::ensureDefaultInstituteForUser($user_id);
@@ -1203,6 +1206,7 @@ class Admin_UserController extends AuthenticatedController
      */
     public function delete_userdomain_action($user_id)
     {
+        CSRFProtection::verifyUnsafeRequest();
         $domain_id = Request::get('domain_id');
         UserDomain::find($domain_id)->removeUser($user_id);
         $result = AutoInsert::instance()->saveUser($user_id);
@@ -1221,11 +1225,12 @@ class Admin_UserController extends AuthenticatedController
     }
 
     /**
-     * Reset notfication for user
+     * Reset notification for user
      * @param $user_id
      */
     public function reset_notification_action($user_id)
     {
+        CSRFProtection::verifyUnsafeRequest();
         $resetted = CourseMemberNotification::deleteBySQL("user_id = ?", [$user_id]);
         PageLayout::postSuccess(sprintf(_('Die Benachrichtigungseinstellungen für %s Veranstaltungen wurden zurück gesetzt.'), $resetted));
         $this->redirect('admin/user/edit/' . $user_id);
@@ -1237,6 +1242,7 @@ class Admin_UserController extends AuthenticatedController
      */
     public function reset_tfa_action($user_id)
     {
+        CSRFProtection::verifyUnsafeRequest();
         if (TFASecret::deleteByUser_id($user_id)) {
             PageLayout::postSuccess(_('Die Zwei-Faktor-Authentifizierung wurde für diese Person deaktiviert.'));
         }
@@ -1688,7 +1694,7 @@ class Admin_UserController extends AuthenticatedController
                 _('Personenaccount entsperren'),
                 $this->url_for("admin/user/unlock/{$this->user->id}"),
                 Icon::create('lock-unlocked')
-            );
+            )->asButton();
         } else {
             $user_actions->addLink(
                 _('Personenaccount sperren'),
@@ -1703,7 +1709,7 @@ class Admin_UserController extends AuthenticatedController
                     _('Passwortlink zusenden'),
                     $this->url_for("admin/user/change_password/{$this->user->id}"),
                     Icon::create('key')
-                );
+                )->asButton();
             }
             $user_actions->addLink(
                 _('Person löschen'),
@@ -1716,7 +1722,7 @@ class Admin_UserController extends AuthenticatedController
                 _('Benachrichtigungen zurücksetzen'),
                 $this->url_for("admin/user/reset_notification/{$this->user->id}"),
                 Icon::create('refresh')
-            );
+            )->asButton();
         }
 
         if ($this->action === 'activities') {
@@ -1724,7 +1730,7 @@ class Admin_UserController extends AuthenticatedController
                 _('Alle Dateien des Nutzers aus Veranstaltungen und Einrichtungen als ZIP herunterladen'),
                 $this->url_for("admin/user/download_user_files/{$this->user->user_id}"),
                 Icon::create('folder-full')
-            );
+            )->asButton();
         }
 
         if ($this->user->id !== $GLOBALS['user']->id && TFASecret::exists($this->user->id)) {
@@ -1732,7 +1738,7 @@ class Admin_UserController extends AuthenticatedController
                 _('Zwei-Faktor-Authentifizierung deaktivieren'),
                 $this->url_for("admin/user/reset_tfa/{$this->user->id}"),
                 Icon::create('code-qr')
-            );
+            )->asButton();
         }
 
         $sidebar->insertWidget($user_actions, 'actions', 'user_actions');
diff --git a/app/views/admin/user/_results.php b/app/views/admin/user/_results.php
index 4770e2068f555e12d67f4d0f00f1c39da3948373..dc996fbf3acf0f563129819de1067c260c6b3457 100644
--- a/app/views/admin/user/_results.php
+++ b/app/views/admin/user/_results.php
@@ -170,10 +170,13 @@
                         );
 
                         if ($user->locked) {
-                            $actionMenu->addLink(
-                                $controller->url_for("admin/user/unlock/{$user->id}", ['from_index' => 1]),
+                            $actionMenu->addButton(
+                                'unlock',
                                 _('Nutzeraccount entsperren'),
-                                Icon::create('lock-unlocked')
+                                Icon::create('lock-unlocked'),
+                                [
+                                    'formaction' => $controller->url_for("admin/user/unlock/{$user->id}", ['from_index' => 1])
+                                ]
                             );
                         } else {
                             $actionMenu->addLink(
@@ -186,10 +189,13 @@
 
                         if ($user->auth_plugin !== 'preliminary' && ($GLOBALS['perm']->have_perm('root') || $GLOBALS['perm']->is_fak_admin() || !in_array($user->perms, words('root admin')))) {
                             if (!StudipAuthAbstract::CheckField('auth_user_md5.password', $user->auth_plugin)) {
-                                $actionMenu->addLink(
-                                    $controller->url_for("admin/user/change_password/{$user->id}", ['from_index' => 1]),
+                                $actionMenu->addButton(
+                                    'change_password',
                                     _('Passwortlink zusenden'),
-                                    Icon::create('key')
+                                    Icon::create('key'),
+                                    [
+                                        'formaction' => $controller->url_for("admin/user/change_password/{$user->id}", ['from_index' => 1])
+                                    ]
                                 );
                             }
 
diff --git a/app/views/admin/user/edit.php b/app/views/admin/user/edit.php
index 8892d983176a2199ad45c1a2f34064fa72fde0c0..75ca932557f071a181c6c260f593260af8d1258a 100644
--- a/app/views/admin/user/edit.php
+++ b/app/views/admin/user/edit.php
@@ -256,7 +256,7 @@ use Studip\Button, Studip\LinkButton;
            </label>
 
            <label class="col-2">
-                <?= Icon::create('accept', 'accept')->asImg([
+                <?= Icon::create('accept', Icon::ROLE_ACCEPT)->asImg([
                     'id'    => 'pw_success',
                     'style' => 'display: none',
                 ]) ?>
@@ -435,12 +435,14 @@ use Studip\Button, Studip\LinkButton;
                         htmlReady($usc->semester),
                         _('Fachsemester')
                     ) ?>
-                    <a href="<?= $controller->url_for('admin/user/delete_studycourse/' . $user->user_id . '/' . $usc->fach_id . '/' . $usc->abschluss_id) ?>">
-                        <?= Icon::create('trash')->asImg([
+                    <?= Icon::create('trash')->asInput(
+                        [
                             'class' => 'text-bottom',
                             'title' => _('Diesen Studiengang löschen'),
-                        ]) ?>
-                    </a>
+                            'data-confirm' => _('Sind Sie sicher, dass Sie diesen Studiengang löschen wollen?'),
+                            'formaction' => $controller->delete_studycourseURL($user->user_id, $usc->fach_id, $usc->abschluss_id)
+                        ]
+                    )?>
                     <? $versionen = StgteilVersion::findByFachAbschluss($usc->fach_id, $usc->abschluss_id); ?>
                     <? $versionen = array_filter($versionen, function ($ver) {
                         return $ver->hasPublicStatus('genehmigt');
@@ -474,12 +476,14 @@ use Studip\Button, Studip\LinkButton;
                     <?= htmlReady($inst_membership->institute->name) ?>
 
                     <? if ($GLOBALS['perm']->have_studip_perm('admin', $inst_membership->institut_id)) : ?>
-                        <a href="<?= $controller->url_for('admin/user/delete_institute/' . $user->user_id . '/' . $inst_membership->institut_id) ?>">
-                            <?= Icon::create('trash')->asImg([
+                        <?= Icon::create('trash')->asInput(
+                            [
                                 'class' => 'text-bottom',
                                 'title' => _('Diese Einrichtung löschen'),
-                            ]) ?>
-                        </a>
+                                'data-confirm' => _('Sind Sie sicher, dass Sie diese Einrichtung löschen wollen?'),
+                                'formaction' => $controller->delete_instituteURL($user->user_id, $inst_membership->institut_id)
+                            ]
+                        )?>
                     <? endif; ?>
                 </li>
             <? endforeach; ?>
@@ -504,7 +508,7 @@ use Studip\Button, Studip\LinkButton;
                 </option>
             <? foreach ($available_institutes as $i) : ?>
                 <? if (InstituteMember::countBySql('user_id = ? AND institut_id = ?', [$user->user_id, $i['Institut_id']]) == 0
-                       && (!($i['is_fak'] && $user->perms == 'admin') || $GLOBALS['perm']->have_perm('root'))
+                       && (!($i['is_fak'] && $user->perms === 'admin') || $GLOBALS['perm']->have_perm('root'))
                 ) : ?>
                     <option class="<?= $i['is_fak'] ? 'nested-item-header' : 'nested-item' ?>"
                             value="<?= htmlReady($i['Institut_id']) ?>">
@@ -533,12 +537,14 @@ use Studip\Button, Studip\LinkButton;
                                 'title' => _('Diese Einrichtung bearbeiten'),
                             ]) ?>
                         </a>
-                        <a href="<?= $controller->url_for('admin/user/delete_institute/' . $user->user_id . '/' . $inst_membership->institut_id) ?>">
-                            <?= Icon::create('trash')->asImg([
+                        <?= Icon::create('trash')->asInput(
+                            [
                                 'class' => 'text-bottom',
                                 'title' => _('Diese Einrichtung löschen'),
-                            ]) ?>
-                        </a>
+                                'data-confirm' => _('Sind Sie sicher, dass Sie diese Einrichtung löschen wollen?'),
+                                'formaction' => $controller->delete_instituteURL($user->user_id, $inst_membership->institut_id)
+                            ]
+                        )?>
                     <? endif; ?>
                 </li>
             <? endforeach; ?>
@@ -547,46 +553,49 @@ use Studip\Button, Studip\LinkButton;
         <? endif;?>
     </fieldset>
 
-    <fieldset>
-        <legend>
-            <?= _('Nutzerdomänen') ?>
-        </legend>
+        <? if (!empty($domains) || !empty($userdomains)) : ?>
+            <fieldset>
+                <legend>
+                    <?= _('Nutzerdomänen') ?>
+                </legend>
 
-        <? if (!empty($domains)) : ?>
-        <label class="col-3">
-            <?= _('Neue Nutzerdomäne') ?>
 
-            <select name="new_userdomain" id="new_userdomain">
-                <option selected value="none"><?= _('-- Bitte Nutzerdomäne auswählen --') ?></option>
-            <? foreach ($domains as $domain) : ?>
-                <option value="<?= $domain->id ?>">
-                    <?= htmlReady(my_substr($domain->name, 0, 50)) ?>
-                </option>
-            <? endforeach ?>
-            </select>
-        </label>
-        <? endif ?>
+                <label class="col-3">
+                    <?= _('Neue Nutzerdomäne') ?>
 
-        <? if (count($userdomains) > 0): ?>
-        <section class="col-3">
-            <ol class="default">
-            <? foreach ($userdomains as $i => $domain): ?>
-                <li>
-                    <?= htmlReady($domain->name) ?>
+                    <select name="new_userdomain" id="new_userdomain">
+                        <option selected value="none"><?= _('-- Bitte Nutzerdomäne auswählen --') ?></option>
+                    <? foreach ($domains as $domain) : ?>
+                        <option value="<?= $domain->id ?>">
+                            <?= htmlReady(my_substr($domain->name, 0, 50)) ?>
+                        </option>
+                    <? endforeach ?>
+                    </select>
+                </label>
 
-                    <a href="<?= $controller->url_for('admin/user/delete_userdomain/' . $user->id, ['domain_id' => $domain->id]) ?>">
-                        <?= Icon::create('trash')->asImg([
-                            'class' => 'text-bottom',
-                            'title' => _('Aus dieser Nutzerdomäne austragen'),
-                        ]) ?>
-                    </a>
-                </li>
-            <? endforeach; ?>
-            </ol>
-        </section>
-        <? endif; ?>
-    </fieldset>
-    <? endif;  /* $user['perms'] !== 'root' */ ?>
+
+                <? if (count($userdomains) > 0): ?>
+                <section class="col-3">
+                    <ol class="default">
+                    <? foreach ($userdomains as $i => $domain): ?>
+                        <li>
+                            <?= htmlReady($domain->name) ?>
+                            <?= Icon::create('trash')->asInput(
+                                [
+                                    'class' => 'text-bottom',
+                                    'title' => _('Aus dieser Nutzerdomäne austragen'),
+                                    'data-confirm' => _('Sind Sie sicher, dass sie die Person aus der Nutzerdomäne austragen wollen?'),
+                                    'formaction' => $controller->delete_userdomainURL($user->id, ['domain_id' => $domain->id])
+                                ]
+                            )?>
+                        </li>
+                    <? endforeach; ?>
+                    </ol>
+                </section>
+                <? endif; ?>
+            </fieldset>
+        <? endif ?>
+    <? endif;?>
 
     <? if ($GLOBALS['perm']->have_perm('root') && count(LockRule::findAllByType('user')) > 0) : ?>
     <fieldset>