diff --git a/frontends/php/app/views/monitoring.widget.problems.view.php b/frontends/php/app/views/monitoring.widget.problems.view.php
index ef3ab425e6..014c7a70e6 100644
--- a/frontends/php/app/views/monitoring.widget.problems.view.php
+++ b/frontends/php/app/views/monitoring.widget.problems.view.php
@@ -221,9 +221,7 @@ foreach ($data['data']['problems'] as $eventid => $problem) {
 		(new CLink($problem['acknowledged'] == EVENT_ACKNOWLEDGED ? _('Yes') : _('No'), $problem_update_url))
 			->addClass($problem['acknowledged'] == EVENT_ACKNOWLEDGED ? ZBX_STYLE_GREEN : ZBX_STYLE_RED)
 			->addClass(ZBX_STYLE_LINK_ALT),
-		makeEventActionsIcons($problem['eventid'], $data['data']['actions'], $data['data']['mediatypes'],
-			$data['data']['users'], $data['config']
-		),
+		makeEventActionsIcons($problem['eventid'], $data['data']['actions'], $data['data']['users'], $data['config']),
 		$data['fields']['show_tags'] ? $data['data']['tags'][$problem['eventid']] : null
 	]));
 }
diff --git a/frontends/php/assets/styles/blue-theme.css b/frontends/php/assets/styles/blue-theme.css
index 3f34078b8a..98a0c33b9d 100644
--- a/frontends/php/assets/styles/blue-theme.css
+++ b/frontends/php/assets/styles/blue-theme.css
@@ -4503,6 +4503,17 @@ svg {
     background-image: url(../img/icon-sprite.svg);
     background-repeat: no-repeat; }
 
+button.icon-action-command, button.icon-action-close, button.icon-action-msg, button.icon-action-msgs, button.icon-action-severity-up, button.icon-action-severity-down, button.icon-action-severity-changed, button.icon-action-message, button.icon-action-ack, button.icon-invisible, button.icon-problem-generated, button.icon-problem-recovery, button.icon-actions-number-gray, button.icon-actions-number-yellow, button.icon-actions-number-red {
+  background: none;
+  border: none;
+  padding: 0px;
+  margin: 0px;
+  margin-right: 5px;
+  min-height: 0px; }
+  button.icon-action-command::after, button.icon-action-close::after, button.icon-action-msg::after, button.icon-action-msgs::after, button.icon-action-severity-up::after, button.icon-action-severity-down::after, button.icon-action-severity-changed::after, button.icon-action-message::after, button.icon-action-ack::after, button.icon-invisible::after, button.icon-problem-generated::after, button.icon-problem-recovery::after, button.icon-actions-number-gray::after, button.icon-actions-number-yellow::after, button.icon-actions-number-red::after {
+    left: 0px;
+    top: 4px; }
+
 [data-count][class*='icon-']::after {
   position: absolute;
   content: attr(data-count);
diff --git a/frontends/php/assets/styles/dark-theme.css b/frontends/php/assets/styles/dark-theme.css
index cdad37914b..58063aa5e3 100644
--- a/frontends/php/assets/styles/dark-theme.css
+++ b/frontends/php/assets/styles/dark-theme.css
@@ -4530,6 +4530,17 @@ svg {
     background-image: url(../img/icon-sprite.svg);
     background-repeat: no-repeat; }
 
+button.icon-action-command, button.icon-action-close, button.icon-action-msg, button.icon-action-msgs, button.icon-action-severity-up, button.icon-action-severity-down, button.icon-action-severity-changed, button.icon-action-message, button.icon-action-ack, button.icon-invisible, button.icon-problem-generated, button.icon-problem-recovery, button.icon-actions-number-gray, button.icon-actions-number-yellow, button.icon-actions-number-red {
+  background: none;
+  border: none;
+  padding: 0px;
+  margin: 0px;
+  margin-right: 5px;
+  min-height: 0px; }
+  button.icon-action-command::after, button.icon-action-close::after, button.icon-action-msg::after, button.icon-action-msgs::after, button.icon-action-severity-up::after, button.icon-action-severity-down::after, button.icon-action-severity-changed::after, button.icon-action-message::after, button.icon-action-ack::after, button.icon-invisible::after, button.icon-problem-generated::after, button.icon-problem-recovery::after, button.icon-actions-number-gray::after, button.icon-actions-number-yellow::after, button.icon-actions-number-red::after {
+    left: 0px;
+    top: 4px; }
+
 [data-count][class*='icon-']::after {
   position: absolute;
   content: attr(data-count);
diff --git a/frontends/php/assets/styles/hc-dark.css b/frontends/php/assets/styles/hc-dark.css
index 4454f14a71..b1f5bade13 100644
--- a/frontends/php/assets/styles/hc-dark.css
+++ b/frontends/php/assets/styles/hc-dark.css
@@ -4490,6 +4490,17 @@ svg {
     background-image: url(../img/icon-sprite.svg);
     background-repeat: no-repeat; }
 
+button.icon-action-command, button.icon-action-close, button.icon-action-msg, button.icon-action-msgs, button.icon-action-severity-up, button.icon-action-severity-down, button.icon-action-severity-changed, button.icon-action-message, button.icon-action-ack, button.icon-invisible, button.icon-problem-generated, button.icon-problem-recovery, button.icon-actions-number-gray, button.icon-actions-number-yellow, button.icon-actions-number-red {
+  background: none;
+  border: none;
+  padding: 0px;
+  margin: 0px;
+  margin-right: 5px;
+  min-height: 0px; }
+  button.icon-action-command::after, button.icon-action-close::after, button.icon-action-msg::after, button.icon-action-msgs::after, button.icon-action-severity-up::after, button.icon-action-severity-down::after, button.icon-action-severity-changed::after, button.icon-action-message::after, button.icon-action-ack::after, button.icon-invisible::after, button.icon-problem-generated::after, button.icon-problem-recovery::after, button.icon-actions-number-gray::after, button.icon-actions-number-yellow::after, button.icon-actions-number-red::after {
+    left: 0px;
+    top: 4px; }
+
 [data-count][class*='icon-']::after {
   position: absolute;
   content: attr(data-count);
diff --git a/frontends/php/assets/styles/hc-light.css b/frontends/php/assets/styles/hc-light.css
index 1f94831414..b7481b512a 100644
--- a/frontends/php/assets/styles/hc-light.css
+++ b/frontends/php/assets/styles/hc-light.css
@@ -4490,6 +4490,17 @@ svg {
     background-image: url(../img/icon-sprite.svg);
     background-repeat: no-repeat; }
 
+button.icon-action-command, button.icon-action-close, button.icon-action-msg, button.icon-action-msgs, button.icon-action-severity-up, button.icon-action-severity-down, button.icon-action-severity-changed, button.icon-action-message, button.icon-action-ack, button.icon-invisible, button.icon-problem-generated, button.icon-problem-recovery, button.icon-actions-number-gray, button.icon-actions-number-yellow, button.icon-actions-number-red {
+  background: none;
+  border: none;
+  padding: 0px;
+  margin: 0px;
+  margin-right: 5px;
+  min-height: 0px; }
+  button.icon-action-command::after, button.icon-action-close::after, button.icon-action-msg::after, button.icon-action-msgs::after, button.icon-action-severity-up::after, button.icon-action-severity-down::after, button.icon-action-severity-changed::after, button.icon-action-message::after, button.icon-action-ack::after, button.icon-invisible::after, button.icon-problem-generated::after, button.icon-problem-recovery::after, button.icon-actions-number-gray::after, button.icon-actions-number-yellow::after, button.icon-actions-number-red::after {
+    left: 0px;
+    top: 4px; }
+
 [data-count][class*='icon-']::after {
   position: absolute;
   content: attr(data-count);
diff --git a/frontends/php/include/actions.inc.php b/frontends/php/include/actions.inc.php
index b61bee89c8..6f5239c0f5 100644
--- a/frontends/php/include/actions.inc.php
+++ b/frontends/php/include/actions.inc.php
@@ -1352,16 +1352,15 @@ function eventType($type = null) {
 function getEventsActionsIconsData(array $events, array $triggers, array $r_events = []) {
 	$messages = getEventsMessages($events);
 	$severities = getEventsSeverityChanges($events, $triggers);
-	$actions = getEventsActions($events, $r_events);
+	$actions = getEventsAlertsOverview($events, $r_events);
 
 	return [
 		'data' => [
 			'messages' => $messages['data'],
 			'severities' => $severities['data'],
-			'actions' => $actions['data']
+			'actions' => $actions
 		],
-		'mediatypeids' => $actions['mediatypeids'],
-		'userids' => $messages['userids'] + $severities['userids'] + $actions['userids']
+		'userids' => $messages['userids'] + $severities['userids']
 	];
 }
 
@@ -1469,21 +1468,20 @@ function getEventsSeverityChanges(array $events, array $triggers) {
 }
 
 /**
- * Get data, required to create actions icon with popup with event actions.
+ * Get data, required to create actions icon.
  *
  * @param array  $events                 Array with event objects with acknowledges.
  * @param string $events[]['eventid']    Problem event ID.
  * @param string $events[]['r_eventid']  OK event ID.
  * @param array  $r_events               Array with related recovery event data (optional).
  *
- * @return array
+ * @return array  List indexed by eventid containing overview on event alerts.
  */
-function getEventsActions(array $events, array $r_events = []) {
+function getEventsAlertsOverview(array $events, array $r_events = []) {
 	$alert_eventids = [];
 	$r_eventids = [];
-	$userids = [];
-	$mediatypeids = [];
 	$actions = [];
+	$event_alert_state = [];
 
 	foreach ($events as $event) {
 		// Get alerts for event.
@@ -1504,31 +1502,67 @@ function getEventsActions(array $events, array $r_events = []) {
 		]);
 	}
 
-	$alerts = $alert_eventids
-		? API::Alert()->get([
-			'output' => ['alerttype', 'clock', 'error', 'eventid', 'mediatypeid', 'retries', 'status', 'userid'],
+	if ($alert_eventids) {
+		$event_alert_state = array_combine(array_keys($alert_eventids), array_fill(0, count($alert_eventids), [
+			'failed_ctn' => 0,
+			'in_progress_ctn' => 0,
+			'total_ctn' => 0,
+		]));
+
+		$alerts = API::Alert()->get([
+			'output' => [],
+			'groupCount' => true,
+			'countOutput' => true,
+			'filter' => ['status' => ALERT_STATUS_FAILED],
 			'eventids' => array_keys($alert_eventids)
-		])
-		: [];
+		]);
+
+		foreach ($alerts as $alert) {
+			$event_alert_state[$alert['eventid']]['failed_ctn'] = (int) $alert['rowscount'];
+		}
+
+		$alerts = API::Alert()->get([
+			'output' => [],
+			'groupCount' => true,
+			'countOutput' => true,
+			'filter' => ['status' => [ALERT_STATUS_NEW, ALERT_STATUS_NOT_SENT]],
+			'eventids' => array_keys($alert_eventids)
+		]);
+
+		foreach ($alerts as $alert) {
+			$event_alert_state[$alert['eventid']]['in_progress_ctn'] = (int) $alert['rowscount'];
+		}
+
+		$alerts = API::Alert()->get([
+			'output' => [],
+			'groupCount' => true,
+			'countOutput' => true,
+			'eventids' => array_keys($alert_eventids)
+		]);
+
+		foreach ($alerts as $alert) {
+			$event_alert_state[$alert['eventid']]['total_ctn'] = (int) $alert['rowscount'];
+		}
+	}
 
 	// Create array of actions for each event.
 	foreach ($events as $event) {
-		$event_actions = getSingleEventActions($event, $r_events, $alerts);
+		$event_actions = $event_alert_state[$event['eventid']];
+		if ($event['r_eventid']) {
+			$r_event_actions = $event_alert_state[$event['r_eventid']];
+			$event_actions['failed_ctn'] += $r_event_actions['failed_ctn'];
+			$event_actions['total_ctn'] += $r_event_actions['total_ctn'];
+			$event_actions['in_progress_ctn'] += $r_event_actions['in_progress_ctn'];
+		}
+
 		$actions[$event['eventid']] = [
-			'actions' => $event_actions['actions'],
-			'count' => $event_actions['count'],
-			'has_uncomplete_action' => $event_actions['has_uncomplete_action'],
-			'has_failed_action' => $event_actions['has_failed_action']
+			'count' => $event_actions['total_ctn'] + count($event['acknowledges']),
+			'has_uncomplete_action' => (bool) $event_actions['in_progress_ctn'],
+			'has_failed_action' => (bool) $event_actions['failed_ctn']
 		];
-		$mediatypeids += $event_actions['mediatypeids'];
-		$userids += $event_actions['userids'];
 	}
 
-	return [
-		'data' => $actions,
-		'mediatypeids' => $mediatypeids,
-		'userids' => $userids
-	];
+	return $actions;
 }
 
 /**
@@ -1556,12 +1590,15 @@ function getEventDetailsActions(array $event) {
 		]);
 	}
 
+	$config = select_config();
+
 	// Get automatic actions (alerts).
 	$alerts = API::Alert()->get([
 		'output' => ['alerttype', 'clock', 'error', 'eventid', 'esc_step', 'mediatypeid', 'message', 'retries',
 			'sendto', 'status', 'subject', 'userid', 'p_eventid', 'acknowledgeid'
 		],
-		'eventids' => $alert_eventids
+		'eventids' => $alert_eventids,
+		'config' => $config['search_limit']
 	]);
 
 	$actions = getSingleEventActions($event, $r_events, $alerts);
@@ -1704,16 +1741,15 @@ function getEventUpdates(array $event) {
  * @param array  $actions['messages']    Messages icon data.
  * @param array  $actions['severities']  Severity change icon data.
  * @param array  $actions['actions']     Actions icon data.
- * @param array  $mediatypes             Mediatypes with maxattempts value and description.
  * @param array  $users                  User name, surname and alias.
  * @param array  $config                 Zabbix config.
  *
  * @return CCol|string
  */
-function makeEventActionsIcons($eventid, $actions, $mediatypes, $users, $config) {
+function makeEventActionsIcons($eventid, $actions, $users, $config) {
 	$messages_icon = makeEventMessagesIcon($actions['messages'][$eventid], $users);
 	$severities_icon = makeEventSeverityChangesIcon($actions['severities'][$eventid], $users, $config);
-	$actions_icon = makeEventActionsIcon($actions['actions'][$eventid], $users, $mediatypes, $config);
+	$actions_icon = makeEventActionsIcon($actions['actions'][$eventid], $eventid);
 
 	$action_icons = [];
 	if ($messages_icon !== null) {
@@ -1761,6 +1797,7 @@ function makeEventMessagesIcon(array $data, array $users) {
 	return $total
 		? makeActionIcon([
 			'icon' => ZBX_STYLE_ACTION_ICON_MSGS,
+			'button' => true,
 			'hint' => [
 				$table,
 				($total > ZBX_WIDGET_ROWS)
@@ -1832,6 +1869,7 @@ function makeEventSeverityChangesIcon(array $data, array $users, array $config)
 
 	return $total
 		? makeActionIcon([
+			'button' => true,
 			'icon' => $icon_style,
 			'hint' => [
 				$table,
@@ -1850,39 +1888,30 @@ function makeEventSeverityChangesIcon(array $data, array $users, array $config)
 }
 
 /**
- * Create icon with hintbox for event actions.
- *
- * @param array  $data
- * @param array  $data['actions']                   Array with all actions sorted by clock.
- * @param int    $data['actions'][]['action_type']  Type of action table entry (ZBX_EVENT_HISTORY_*).
- * @param string $data['actions'][]['clock']        Time, when action was performed.
- * @param string $data['actions'][]['message']      Message sent by alert, or written by manual update, or remote command text.
- * @param string $data['actions'][]['action']       Flag with problem update operation performed (only for ZBX_EVENT_HISTORY_MANUAL_UPDATE).
- * @param string $data['actions'][]['alerttype']    Type of alert (only for ZBX_EVENT_HISTORY_ALERT).
- * @param string $data['actions'][]['mediatypeid']  Id for mediatype, where alert message was sent (only for ZBX_EVENT_HISTORY_ALERT).
- * @param string $data['actions'][]['error']        Error message in case of failed alert (only for ZBX_EVENT_HISTORY_ALERT).
- * @param int    $data['count']                     Number of actions.
- * @param bool   $data['has_uncomplete_action']     Does the event have at least one uncompleted alert action.
- * @param bool   $data['has_failed_action']         Does the event have at least one failed alert action.
- * @param array  $users                             User name, surname and alias.
- * @param array  $mediatypes                        Mediatypes with maxattempts value and description.
- * @param string $mediatypes[]['description']       Mediatype description.
- * @param array  $config                            Zabbix config.
+ * @param array  $actions                      Array with all actions sorted by clock.
+ * @param int    $actions[]['action_type']     Type of action table entry (ZBX_EVENT_HISTORY_*).
+ * @param string $actions[]['clock']           Time, when action was performed.
+ * @param string $actions[]['message']         Message sent by alert, or written by manual update, or remote command text.
+ * @param string $actions[]['action']          Flag with problem update operation performed (only for ZBX_EVENT_HISTORY_MANUAL_UPDATE).
+ * @param string $actions[]['alerttype']       Type of alert (only for ZBX_EVENT_HISTORY_ALERT).
+ * @param string $actions[]['mediatypeid']     Id for mediatype, where alert message was sent (only for ZBX_EVENT_HISTORY_ALERT).
+ * @param string $actions[]['error']           Error message in case of failed alert (only for ZBX_EVENT_HISTORY_ALERT).
+ * @param array  $users                        User name, surname and alias.
+ * @param array  $mediatypes                   Mediatypes with maxattempts value and description.
+ * @param string $mediatypes[]['description']  Mediatype description.
+ * @param array  $config                       Zabbix config.
  *
- * @return CSpan|null
+ * @return CTableInfo
  */
-function makeEventActionsIcon(array $data, array $users, array $mediatypes, array $config) {
-	// Number of meaningful actions.
-	$total = $data['count'];
-	// Number of all action entries.
-	$action_count = count($data['actions']);
+function makeEventActionsTable(array $actions, array $users, array $mediatypes, array $config) {
+	$action_count = count($actions);
 
 	$table = (new CTableInfo())->setHeader([
 		_('Time'), _('User/Recipient'), _('Action'), _('Message/Command'), _('Status'), _('Info')
 	]);
 
 	for ($i = 0; $i < $action_count && $i < ZBX_WIDGET_ROWS; $i++) {
-		$action = $data['actions'][$i];
+		$action = $actions[$i];
 
 		$message = '';
 		if ($action['action_type'] == ZBX_EVENT_HISTORY_MANUAL_UPDATE
@@ -1910,6 +1939,24 @@ function makeEventActionsIcon(array $data, array $users, array $mediatypes, arra
 		]);
 	}
 
+	return $table;
+}
+
+/**
+ * Create icon with hintbox for event actions.
+ *
+ * @param array  $data
+ * @param int    $data['count']                     Number of actions.
+ * @param bool   $data['has_uncomplete_action']     Does the event have at least one uncompleted alert action.
+ * @param bool   $data['has_failed_action']         Does the event have at least one failed alert action.
+ * @param string $eventid
+ *
+ * @return CSpan|null
+ */
+function makeEventActionsIcon(array $data, $eventid) {
+	// Number of meaningful actions.
+	$total = $data['count'];
+
 	// select icon
 	if ($data['has_failed_action']) {
 		$icon_style = ZBX_STYLE_ACTIONS_NUM_RED;
@@ -1924,20 +1971,10 @@ function makeEventActionsIcon(array $data, array $users, array $mediatypes, arra
 	return $total
 		? makeActionIcon([
 			'icon' => $icon_style,
-			'hint' => [
-				$table,
-				($total > ZBX_WIDGET_ROWS)
-					? (new CDiv(
-						(new CDiv(
-							(new CDiv(_s('Displaying %1$s of %2$s found', ZBX_WIDGET_ROWS, $total)))
-								->addClass(ZBX_STYLE_TABLE_STATS)
-						))->addClass(ZBX_STYLE_PAGING_BTN_CONTAINER)
-					))->addClass(ZBX_STYLE_TABLE_PAGING)
-					: null
-			],
+			'button' => true,
 			'num' => $total,
 			'aria-label' => _xn('%1$s action', '%1$s actions', $total, 'screen reader', $total)
-		])
+		])->setAttribute('data-actions-table-eventid', $eventid)
 		: null;
 }
 
@@ -2128,7 +2165,7 @@ function makeActionTableIcon(array $action, array $config) {
 				$new_severity_name = getSeverityName($action['new_severity'], $config);
 				$hint = $old_severity_name.'&nbsp;&rArr;&nbsp;'.$new_severity_name;
 
-				$action_icons[] = makeActionIcon(['icon' => $action_type, 'hint' => $hint]);
+				$action_icons[] = makeActionIcon(['button' => true, 'icon' => $action_type, 'hint' => $hint]);
 			}
 
 			return (new CCol($action_icons))->addClass(ZBX_STYLE_NOWRAP);
diff --git a/frontends/php/include/blocks.inc.php b/frontends/php/include/blocks.inc.php
index c8dbb50066..260070d9dd 100644
--- a/frontends/php/include/blocks.inc.php
+++ b/frontends/php/include/blocks.inc.php
@@ -259,11 +259,6 @@ function getSystemStatusData(array $filter) {
 				'output' => ['alias', 'name', 'surname'],
 				'userids' => array_keys($actions['userids']),
 				'preservekeys' => true
-			]),
-			'mediatypes' => API::MediaType()->get([
-				'output' => ['description', 'maxattempts'],
-				'mediatypeids' => array_keys($actions['mediatypeids']),
-				'preservekeys' => true
 			])
 		];
 
@@ -641,9 +636,7 @@ function makeProblemsPopup(array $problems, array $triggers, $backurl, array $ac
 			$show_latest_values ? CScreenProblem::getLatestValues($trigger['items']) : null,
 			zbx_date2age($problem['clock']),
 			$ack,
-			makeEventActionsIcons($problem['eventid'], $actions['all_actions'], $actions['mediatypes'],
-				$actions['users'], $config
-			),
+			makeEventActionsIcons($problem['eventid'], $actions['all_actions'], $actions['users'], $config),
 			$tags[$problem['eventid']]
 		]));
 	}
diff --git a/frontends/php/include/classes/api/services/CAlert.php b/frontends/php/include/classes/api/services/CAlert.php
index b7dc1f1c85..e5269b3f50 100644
--- a/frontends/php/include/classes/api/services/CAlert.php
+++ b/frontends/php/include/classes/api/services/CAlert.php
@@ -85,6 +85,7 @@ class CAlert extends CApiService {
 			'selectUsers'				=> null,
 			'selectHosts'				=> null,
 			'countOutput'				=> false,
+			'groupCount'				=> false,
 			'preservekeys'				=> false,
 			'editable'					=> false,
 			'sortfield'					=> '',
@@ -259,6 +260,10 @@ class CAlert extends CApiService {
 			zbx_value2array($options['eventids']);
 
 			$sqlParts['where'][] = dbConditionInt('a.eventid', $options['eventids']);
+
+			if ($options['groupCount']) {
+				$sqlParts['group']['a'] = 'a.eventid';
+			}
 		}
 
 		// actionids
@@ -316,7 +321,12 @@ class CAlert extends CApiService {
 		$dbRes = DBselect($this->createSelectQueryFromParts($sqlParts), $sqlParts['limit']);
 		while ($alert = DBfetch($dbRes)) {
 			if ($options['countOutput']) {
-				$result = $alert['rowscount'];
+				if ($options['groupCount']) {
+					$result[] = $alert;
+				}
+				else {
+					$result = $alert['rowscount'];
+				}
 			}
 			else {
 				$result[$alert['alertid']] = $alert;
diff --git a/frontends/php/include/classes/mvc/CController.php b/frontends/php/include/classes/mvc/CController.php
index d5b0665345..ce70756bae 100644
--- a/frontends/php/include/classes/mvc/CController.php
+++ b/frontends/php/include/classes/mvc/CController.php
@@ -236,7 +236,7 @@ abstract class CController {
 	/**
 	 * Get single input parameter.
 	 *
-	 * @return var
+	 * @return mixed
 	 */
 	public function getInput($var, $default = null) {
 		if ($default === null) {
diff --git a/frontends/php/include/classes/mvc/CRouter.php b/frontends/php/include/classes/mvc/CRouter.php
index 3590fa1fac..104dba55e4 100644
--- a/frontends/php/include/classes/mvc/CRouter.php
+++ b/frontends/php/include/classes/mvc/CRouter.php
@@ -59,6 +59,7 @@ class CRouter {
 		'acknowledge.edit'				=> ['CControllerAcknowledgeEdit',			'layout.htmlpage',		'monitoring.acknowledge.edit'],
 		'authentication.edit'			=> ['CControllerAuthenticationEdit',		'layout.htmlpage',		'administration.authentication.edit'],
 		'authentication.update'			=> ['CControllerAuthenticationUpdate',		null,					null],
+		'event.actions.table'			=> ['CControllerEventActionsTable',			'layout.json',			'event.actions.table'],
 		'dashboard.view'				=> ['CControllerDashboardView',				'layout.htmlpage',		'monitoring.dashboard.view'],
 		'dashboard.list'				=> ['CControllerDashboardList',				'layout.htmlpage',		'monitoring.dashboard.list'],
 		'dashboard.delete'				=> ['CControllerDashboardDelete',			null,					null],
diff --git a/frontends/php/include/classes/screens/CScreenHostTriggers.php b/frontends/php/include/classes/screens/CScreenHostTriggers.php
index 5cbfd43825..b3a70287bf 100644
--- a/frontends/php/include/classes/screens/CScreenHostTriggers.php
+++ b/frontends/php/include/classes/screens/CScreenHostTriggers.php
@@ -279,9 +279,7 @@ class CScreenHostTriggers extends CScreenBase {
 					)
 					->addClass($problem['acknowledged'] ? ZBX_STYLE_GREEN : ZBX_STYLE_RED)
 					->addClass(ZBX_STYLE_LINK_ALT),
-				makeEventActionsIcons($problem['eventid'], $data['actions'], $data['mediatypes'], $data['users'],
-					$config
-				)
+				makeEventActionsIcons($problem['eventid'], $data['actions'], $data['users'], $config)
 			]);
 		}
 
diff --git a/frontends/php/include/classes/screens/CScreenProblem.php b/frontends/php/include/classes/screens/CScreenProblem.php
index b369017728..60d8db1509 100644
--- a/frontends/php/include/classes/screens/CScreenProblem.php
+++ b/frontends/php/include/classes/screens/CScreenProblem.php
@@ -703,14 +703,6 @@ class CScreenProblem extends CScreenBase {
 			])
 			: [];
 
-		$data['mediatypes'] = $actions['mediatypeids']
-			? API::Mediatype()->get([
-				'output' => ['description', 'maxattempts'],
-				'mediatypeids' => array_keys($actions['mediatypeids']),
-				'preservekeys' => true
-			])
-			: [];
-
 		return $data;
 	}
 
@@ -1099,9 +1091,7 @@ class CScreenProblem extends CScreenBase {
 						? zbx_date2age($problem['clock'], $problem['r_clock'])
 						: zbx_date2age($problem['clock']),
 					$problem_update_link,
-					makeEventActionsIcons($problem['eventid'], $data['actions'], $data['mediatypes'], $data['users'],
-						$this->config
-					),
+					makeEventActionsIcons($problem['eventid'], $data['actions'], $data['users'], $this->config),
 					$this->data['filter']['show_tags'] ? $tags[$problem['eventid']] : null
 				]), ($this->data['filter']['highlight_row'] && $value == TRIGGER_VALUE_TRUE)
 					? getSeverityFlhStyle($problem['severity'])
diff --git a/frontends/php/include/events.inc.php b/frontends/php/include/events.inc.php
index 97af68b5ed..4395057241 100644
--- a/frontends/php/include/events.inc.php
+++ b/frontends/php/include/events.inc.php
@@ -315,11 +315,6 @@ function make_small_eventlist($startEvent, $backurl) {
 		'userids' => array_keys($actions['userids']),
 		'preservekeys' => true
 	]);
-	$mediatypes = API::Mediatype()->get([
-		'output' => ['description', 'maxattempts'],
-		'mediatypeids' => array_keys($actions['mediatypeids']),
-		'preservekeys' => true
-	]);
 
 	foreach ($events as $event) {
 		$duration = ($event['r_eventid'] != 0)
@@ -376,7 +371,7 @@ function make_small_eventlist($startEvent, $backurl) {
 			(new CLink($event['acknowledged'] == EVENT_ACKNOWLEDGED ? _('Yes') : _('No'), $problem_update_url))
 				->addClass($event['acknowledged'] == EVENT_ACKNOWLEDGED ? ZBX_STYLE_GREEN : ZBX_STYLE_RED)
 				->addClass(ZBX_STYLE_LINK_ALT),
-			makeEventActionsIcons($event['eventid'], $actions['data'], $mediatypes, $users, $severity_config)
+			makeEventActionsIcons($event['eventid'], $actions['data'], $users, $severity_config)
 		]);
 	}
 
diff --git a/frontends/php/include/html.inc.php b/frontends/php/include/html.inc.php
index 8087568598..0449d5eaa4 100644
--- a/frontends/php/include/html.inc.php
+++ b/frontends/php/include/html.inc.php
@@ -847,14 +847,22 @@ function makeSuppressedProblemIcon(array $icon_data) {
  * Renders an action icon.
  *
  * @param array  $icon_data
- * @param string $icon_data[icon]  Icon style.
- * @param array  $icon_data[hint]  Hintbox content (optional).
- * @param int    $icon_data[num]   Number displayed over the icon (optional).
+ * @param string $icon_data[icon]    Icon style.
+ * @param array  $icon_data[hint]    Hintbox content (optional).
+ * @param bool   $icon_data[button]  Use button element (optional).
+ * @param int    $icon_data[num]     Number displayed over the icon (optional).
  *
- * @return CSpan
+ * @return CSpan|CButton
  */
 function makeActionIcon(array $icon_data) {
-	$icon = (new CSpan())->addClass($icon_data['icon']);
+
+	if (array_key_exists('button', $icon_data) && $icon_data['button']) {
+		$icon = (new CButton())->addClass($icon_data['icon']);
+	}
+	else {
+		$icon = (new CSpan())->addClass($icon_data['icon']);
+	}
+
 
 	if (array_key_exists('num', $icon_data)) {
 		if ($icon_data['num'] > 99) {
diff --git a/frontends/php/js/init.js b/frontends/php/js/init.js
index d6ca93cab0..01e575532d 100644
--- a/frontends/php/js/init.js
+++ b/frontends/php/js/init.js
@@ -266,6 +266,88 @@ jQuery(function($) {
 		return false;
 	});
 
+	/**
+	 * Build popup hintbox for event actions table.
+	 */
+	$(document).on('keydown click', '[data-actions-table-eventid]', function(event) {
+		var $obj = $(this),
+			position_target = event.target;
+
+		if (event.type === 'keydown' && event.which != 13) {
+			return;
+		}
+		else if (event.type === 'contextmenu' || (IE && $obj.closest('svg').length > 0)
+			|| event.originalEvent.detail !== 0) {
+			position_target = event;
+		}
+
+		if (this.hintBoxItem) {
+			hintBox.hideHint(this, true);
+			return;
+		}
+
+		// Manually trigger event for menuPopupPreloaderCloseHandler call for the previous preloader.
+		if ($('#menu-popup-preloader').length) {
+			$(document).trigger('click');
+		}
+
+		var	$preloader = createMenuPopupPreloader(),
+			url = new Curl('zabbix.php');
+
+		url.setArgument('action', 'event.actions.table');
+
+		var xhr = $.ajax({
+			url: url.getUrl(),
+			method: 'POST',
+			data: {
+				eventid: $obj.data('actions-table-eventid')
+			},
+			dataType: 'json',
+			beforeSend: function() {
+				$('.menu-popup-top').menuPopup('close');
+				setTimeout(function(){
+					$preloader
+						.fadeIn(200)
+						.position({
+							of: position_target,
+							my: 'left top',
+							at: 'left bottom'
+						});
+				}, 500);
+			},
+			success: function(resp) {
+				overlayPreloaderDestroy($preloader.prop('id'));
+				var hint = resp.body;
+
+				if (resp.messages) {
+					hint = resp.messages + hint;
+				}
+
+				if (resp.debug) {
+					hint = hint + resp.debug;
+				}
+
+				if (event.type === 'keydown') {
+					var offset = $obj.offset(), w = jQuery(window);
+					event.clientX = offset.left - w.scrollLeft();
+					event.clientY = offset.top - w.scrollTop() + ($obj.height() / 2);
+				}
+
+				hintBox.showStaticHint(event, this, '', false, '', jQuery(hint));
+			}.bind(this),
+			error: function() {
+			}
+		});
+
+		addToOverlaysStack($preloader.prop('id'), event.target, 'preloader', xhr);
+
+		$(document)
+			.off('click', menuPopupPreloaderCloseHandler)
+			.on('click', {id: $preloader.prop('id')}, menuPopupPreloaderCloseHandler);
+
+		return false;
+	});
+
 	/**
 	 * add.popup event
 	 *
diff --git a/sass/stylesheets/sass/screen.scss b/sass/stylesheets/sass/screen.scss
index a00321b494..d171ebb7e9 100644
--- a/sass/stylesheets/sass/screen.scss
+++ b/sass/stylesheets/sass/screen.scss
@@ -6333,6 +6333,35 @@ svg {
 	}
 }
 
+button {
+	&.icon-action-command,
+	&.icon-action-close,
+	&.icon-action-msg,
+	&.icon-action-msgs,
+	&.icon-action-severity-up,
+	&.icon-action-severity-down,
+	&.icon-action-severity-changed,
+	&.icon-action-message,
+	&.icon-action-ack,
+	&.icon-invisible,
+	&.icon-problem-generated,
+	&.icon-problem-recovery,
+	&.icon-actions-number-gray,
+	&.icon-actions-number-yellow,
+	&.icon-actions-number-red {
+		background: none;
+		border: none;
+		padding: 0px;
+		margin: 0px;
+		margin-right: 5px;
+		min-height: 0px;
+		&::after {
+			left: 0px;
+			top: 4px;
+		}
+	}
+}
+
 [data-count][class*='icon-']::after {
 	position: absolute;
 	content: attr(data-count);
