diff --git a/app/views/news/admin_news.php b/app/views/news/admin_news.php
index 0376083f46fc1b1ca3862e0d277a1dfa097986c3..db07d03a1bc46829ff364589899a075063600f5f 100644
--- a/app/views/news/admin_news.php
+++ b/app/views/news/admin_news.php
@@ -1,24 +1,36 @@
-<? use Studip\Button, Studip\LinkButton; ?>
+<?php
+/**
+ * @var NewsController $controller
+ * @var string $area_type
+ * @var Trails_Flash $flash
+ * @var string $news_searchterm
+ * @var string $news_startdate
+ * @var string $news_enddate
+ * @var string|null $filter_text
+ * @var array<string, array<string, array{title: string, object: StudipNews}>> $news_items
+ * @var array $area_structure
+ */
+?>
 <? if (!empty($flash['question_text'])) : ?>
-<?= QuestionBox::create(
-        htmlReady($flash['question_text']),
-        $controller->url_for('news/admin_news/' . $area_type, array_merge(
-            $flash['question_param'],
-            [
+    <?= QuestionBox::create(
+            htmlReady($flash['question_text']),
+            $controller->url_for('news/admin_news/' . $area_type, array_merge(
+                $flash['question_param'],
+                [
+                    'news_filter_term'  => htmlReady($news_searchterm),
+                    'news_filter_start' => $news_startdate,
+                    'news_filter_end'   => $news_enddate,
+                    'news_filter'       => 'set'
+                ]
+            )),
+            $controller->url_for('news/admin_news/' . $area_type, [
                 'news_filter_term'  => htmlReady($news_searchterm),
                 'news_filter_start' => $news_startdate,
                 'news_filter_end'   => $news_enddate,
                 'news_filter'       => 'set'
-            ]
-        )),
-        $controller->url_for('news/admin_news/' . $area_type, [
-            'news_filter_term'  => htmlReady($news_searchterm),
-            'news_filter_start' => $news_startdate,
-            'news_filter_end'   => $news_enddate,
-            'news_filter'       => 'set'
-        ])
-    );
-?>
+            ])
+        );
+    ?>
 <? endif ?>
 
 <form action="<?= $controller->link_for('news/admin_news/' . $area_type) ?>" id="admin_news_form" class="default" method="post">
@@ -52,9 +64,9 @@
         </label>
     </fieldset>
     <footer>
-        <?= Button::create(_('Filter anwenden'), 'apply_news_filter', ['aria-label' => _('Liste mit Suchbegriff und/oder Zeitraum filtern')]) ?>
+        <?= Studip\Button::create(_('Filter anwenden'), 'apply_news_filter', ['aria-label' => _('Liste mit Suchbegriff und/oder Zeitraum filtern')]) ?>
     <? if ($filter_text) : ?>
-        <?= Button::create(_('Filter zurücksetzen'), 'reset_filter') ?>
+        <?= Studip\Button::create(_('Filter zurücksetzen'), 'reset_filter') ?>
     <? endif ?>
     </footer>
     <br>
@@ -74,12 +86,13 @@
                 </caption>
             <? endif ?>
                 <colgroup>
-                    <col width="20">
+                    <col style="width: 20px">
                     <col>
-                    <col width="25%">
-                    <col width="10%">
-                    <col width="10%">
-                    <col width="80">
+                    <col style="width: 25%">
+                    <col style="width: 10%">
+                    <col style="width: 10%">
+                    <col style="width: 5%">
+                    <col style="width: 80px">
                 </colgroup>
                 <thead>
                     <tr>
@@ -88,6 +101,7 @@
                         <th><?= _('Autor') ?></th>
                         <th><?= _('Einstelldatum') ?></th>
                         <th><?= _('Ablaufdatum') ?></th>
+                        <th><?= _('Aufrufe') ?></th>
                         <th class="actions"><?= _('Aktion') ?></th>
                     </tr>
                 </thead>
@@ -99,18 +113,18 @@
                             <tr>
                                 <th>
                                     <input type="checkbox"
-                                           data-proxyfor=".news_<?= $news['range_id'] ?>"
+                                           data-proxyfor=".news_<?= htmlReady($news['range_id']) ?>"
                                            aria-labelledby="<?= _('Alle auswählen') ?>">
                                 </th>
-                                <th colspan="5"><?= mila(htmlReady($news['title'] ?? '')) . ' ' . htmlReady($news['semester'] ?? '') ?></th>
+                                <th colspan="6"><?= mila(htmlReady($news['title'] ?? '')) . ' ' . htmlReady($news['semester'] ?? '') ?></th>
                             </tr>
                         <? endif ?>
                         <? $last_title = $title ?>
                     <? endif ?>
                     <tr>
                         <td>
-                            <input type="checkbox" class="news_<?= $news['range_id'] ?>" name="mark_news[]"
-                                   value="<?= $news['object']->news_id . '_' . $news['range_id'] ?>"
+                            <input type="checkbox" class="news_<?= htmlReady($news['range_id']) ?>" name="mark_news[]"
+                                   value="<?= htmlReady($news['object']->news_id . '_' . $news['range_id']) ?>"
                                    aria-label="<?= _('Diese Ankündigung zum Entfernen vormerken') ?>" <?= tooltip(_("Diese Ankündigung zum Entfernen vormerken"), false) ?>>
                         </td>
                         <td><?= htmlReady($news['object']->topic) ?></td>
@@ -119,9 +133,19 @@
                             $body = $parts[0];
                             $admin_msg = $parts[1] ?? ';'
                         ?>
-                        <td><?= htmlReady($news['object']->author) ?></td>
+                        <td>
+                        <? if ($news['object']->owner): ?>
+                            <a href="<?= URLHelper::getLink('dispatch.php/profile', ['username' => $news['object']->owner->username]) ?>">
+                                <?= Avatar::getAvatar($news['object']->user_id)->getImageTag(Avatar::SMALL) ?>
+                                <?= htmlReady($news['object']->owner->getFullName()) ?>
+                            </a>
+                        <? else: ?>
+                            <?= htmlReady($news['object']->author) ?>
+                        <? endif; ?>
+                        </td>
                         <td><?= strftime("%d.%m.%y", $news['object']->date) ?></td>
                         <td><?= strftime("%d.%m.%y", $news['object']->date + $news['object']->expire) ?></td>
+                        <td><?= $news['object']->views ?></td>
                         <td class="actions">
                             <?
                             $menu = ActionMenu::get()->setContext($news['object']->topic);
@@ -158,8 +182,8 @@
                 </tbody>
                 <tfoot>
                     <tr>
-                        <td colspan="6">
-                            <?= Button::create(_('Alle markierten Ankündigungen entfernen'), 'remove_marked_news') ?>
+                        <td colspan="7">
+                            <?= Studip\Button::create(_('Alle markierten Ankündigungen entfernen'), 'remove_marked_news') ?>
                         </td>
                     </tr>
                 </tfoot>
diff --git a/lib/models/StudipNews.class.php b/lib/models/StudipNews.class.php
index 607f9d3fda259ffde0bcc3101dc6642282d20ee6..12eb3e13d84670d5fc842707549701f6d37eda31 100644
--- a/lib/models/StudipNews.class.php
+++ b/lib/models/StudipNews.class.php
@@ -44,6 +44,7 @@ require_once 'lib/object.inc.php';
  * @property SimpleORMapCollection|StudipComment[] $comments has_many StudipComment
  * @property SimpleORMapCollection|NewsRoles[] $news_roles has_many NewsRoles
  * @property User $owner belongs_to User
+ * @property int $views additional field
  */
 class StudipNews extends SimpleORMap implements PrivacyObject
 {
@@ -72,8 +73,15 @@ class StudipNews extends SimpleORMap implements PrivacyObject
             'on_delete'         => 'delete'
         ];
 
-        $config['i18n_fields']['topic'] = true;
-        $config['i18n_fields']['body'] = true;
+        $config['additional_fields'] = [
+            'views' => [
+                'get' => function (StudipNews $news): int {
+                    return object_return_views($news->id);
+                },
+            ],
+        ];
+
+        $config['i18n_fields'] = ['topic', 'body'];
 
         // Strip <admin_msg> from news body
         $config['registered_callbacks']['after_initialize'][] = function ($news) {
@@ -292,7 +300,7 @@ class StudipNews extends SimpleORMap implements PrivacyObject
         $news_result    = $statement->fetchGrouped();
 
         $objects = [$area => []];
-        foreach($news_result as $id => $result) {
+        foreach ($news_result as $id => $result) {
             $objects[$area][$id] = [
                 'range_id' => $result['range_id'],
                 'title'    => $result['title'] ?? '',
@@ -307,8 +315,7 @@ class StudipNews extends SimpleORMap implements PrivacyObject
             } elseif ($area === 'user') {
                 if ($GLOBALS['user']->id === $result['userid']) {
                     $objects[$area][$id]['title'] = _('Ankündigungen auf Ihrer Profilseite');
-                }
-                else {
+                } else {
                     $objects[$area][$id]['title'] = sprintf(_('Ankündigungen auf der Profilseite von %s'), get_fullname($result['userid']));
                 }
             } elseif ($area === 'global') {