diff --git a/include/common.h b/include/common.h
index 90dce1c133..4ed2a2c68d 100644
--- a/include/common.h
+++ b/include/common.h
@@ -1024,7 +1024,7 @@ int	zbx_interval_preproc(const char *interval_str, int *simple_interval, zbx_cus
 int	zbx_validate_interval(const char *str, char **error);
 void	zbx_custom_interval_free(zbx_custom_interval_t *custom_intervals);
 int	calculate_item_nextcheck(zbx_uint64_t seed, int item_type, int simple_interval,
-		const zbx_custom_interval_t *custom_intervals, time_t now);
+		const zbx_custom_interval_t *custom_intervals, time_t now, int *prohibited_interval);
 time_t	calculate_proxy_nextcheck(zbx_uint64_t hostid, unsigned int delay, time_t now);
 int	zbx_check_time_period(const char *period, time_t time, int *res);
 void	zbx_hex2octal(const char *input, char **output, int *olen);
diff --git a/src/libs/zbxcommon/misc.c b/src/libs/zbxcommon/misc.c
index 03ebdc765f..ce84ba1af8 100644
--- a/src/libs/zbxcommon/misc.c
+++ b/src/libs/zbxcommon/misc.c
@@ -2135,10 +2135,13 @@ void	zbx_custom_interval_free(zbx_custom_interval_t *custom_intervals)
  *                                                                            *
  ******************************************************************************/
 int	calculate_item_nextcheck(zbx_uint64_t seed, int item_type, int simple_interval,
-		const zbx_custom_interval_t *custom_intervals, time_t now)
+		const zbx_custom_interval_t *custom_intervals, time_t now, int *prohibited_interval)
 {
 	int	nextcheck = 0;
 
+	if (NULL != prohibited_interval)
+		*prohibited_interval = 0;
+
 	/* special processing of active items to see better view in queue */
 	if (ITEM_TYPE_ZABBIX_ACTIVE == item_type)
 	{
@@ -2188,7 +2191,11 @@ int	calculate_item_nextcheck(zbx_uint64_t seed, int item_type, int simple_interv
 				}
 			}
 			else
+			{
 				nextcheck = ZBX_JAN_2038;
+				if (NULL != prohibited_interval)
+					*prohibited_interval = 1;
+			}
 
 			if (NULL == custom_intervals)
 				break;
diff --git a/src/libs/zbxdbcache/dbconfig.c b/src/libs/zbxdbcache/dbconfig.c
index 4bff0050b1..01abe40b16 100644
--- a/src/libs/zbxdbcache/dbconfig.c
+++ b/src/libs/zbxdbcache/dbconfig.c
@@ -319,7 +319,7 @@ static int	DCget_disable_until(const ZBX_DC_ITEM *item, const ZBX_DC_HOST *host)
 #define ZBX_ITEM_DELAY_CHANGED		0x10
 #define ZBX_REFRESH_UNSUPPORTED_CHANGED	0x20
 
-static int	DCitem_nextcheck_update(ZBX_DC_ITEM *item, unsigned char new_state, int flags, int now, char **error)
+static int	DCitem_nextcheck_update(ZBX_DC_ITEM *item, unsigned char new_state, int flags, int now, int *prohibited_interval, char **error)
 {
 	zbx_uint64_t	seed;
 
@@ -358,14 +358,14 @@ static int	DCitem_nextcheck_update(ZBX_DC_ITEM *item, unsigned char new_state, i
 			/* supported items and items that could not have been scheduled previously, but had their */
 			/* update interval fixed, should be scheduled using their update intervals */
 			item->nextcheck = calculate_item_nextcheck(seed, item->type, simple_interval, custom_intervals,
-					now);
+					now, prohibited_interval);
 		}
 		else
 		{
 			/* use refresh_unsupported interval for new items that have a valid update interval of their */
 			/* own, but were synced from the database in ITEM_STATE_NOTSUPPORTED state */
 			item->nextcheck = calculate_item_nextcheck(seed, item->type, config->config->refresh_unsupported,
-					NULL, now);
+					NULL, now, prohibited_interval);
 		}
 
 		zbx_custom_interval_free(custom_intervals);
@@ -373,7 +373,7 @@ static int	DCitem_nextcheck_update(ZBX_DC_ITEM *item, unsigned char new_state, i
 	else	/* for items notsupported for other reasons use refresh_unsupported interval */
 	{
 		item->nextcheck = calculate_item_nextcheck(seed, item->type, config->config->refresh_unsupported, NULL,
-				now);
+				now, prohibited_interval);
 	}
 
 	item->schedulable = 1;
@@ -2771,7 +2771,7 @@ static void	DCsync_items(zbx_dbsync_t *sync, int flags)
 			{
 				char	*error = NULL;
 
-				if (FAIL == DCitem_nextcheck_update(item, item->state, flags, now, &error))
+				if (FAIL == DCitem_nextcheck_update(item, item->state, flags, now, NULL, &error))
 				{
 					zbx_timespec_t	ts = {now, 0};
 
@@ -7569,9 +7569,14 @@ static void	dc_requeue_item(ZBX_DC_ITEM *dc_item, const ZBX_DC_HOST *dc_host, un
 {
 	unsigned char	old_poller_type;
 	int		old_nextcheck;
+	int		unreach_nextcheck = 0;
+	int		prohibited_interval;
 
 	old_nextcheck = dc_item->nextcheck;
-	DCitem_nextcheck_update(dc_item, new_state, flags, lastclock, NULL);
+	unreach_nextcheck = DCget_disable_until(dc_item, dc_host);
+	DCitem_nextcheck_update(dc_item, new_state, flags, lastclock, &prohibited_interval, NULL);
+	if (0 == prohibited_interval && 0 != unreach_nextcheck && 0 != (flags & ZBX_HOST_UNREACHABLE))
+		dc_item->nextcheck = unreach_nextcheck;
 
 	old_poller_type = dc_item->poller_type;
 	DCitem_poller_type_update(dc_item, dc_host, flags);
@@ -11312,7 +11317,7 @@ void	zbx_dc_items_update_nextcheck(DC_ITEM *items, zbx_agent_value_t *values, in
 
 		/* update nextcheck for items that are counted in queue for monitoring purposes */
 		if (SUCCEED == is_counted_in_item_queue(dc_item->type, dc_item->key))
-			DCitem_nextcheck_update(dc_item, items[i].state, ZBX_ITEM_COLLECTED, values[i].ts.sec, NULL);
+			DCitem_nextcheck_update(dc_item, items[i].state, ZBX_ITEM_COLLECTED, values[i].ts.sec, NULL, NULL);
 	}
 
 	UNLOCK_CACHE;
diff --git a/tests/libs/zbxcommon/calculate_item_nextcheck.c b/tests/libs/zbxcommon/calculate_item_nextcheck.c
index d7223ab6be..e4f4075a7f 100644
--- a/tests/libs/zbxcommon/calculate_item_nextcheck.c
+++ b/tests/libs/zbxcommon/calculate_item_nextcheck.c
@@ -121,7 +121,7 @@ void	zbx_mock_test_entry(void **state)
 					zbx_mock_error_string(mock_err));
 		}
 
-		nextcheck = calculate_item_nextcheck(0, item_type, simple_interval, custom_intervals, now);
+		nextcheck = calculate_item_nextcheck(0, item_type, simple_interval, custom_intervals, now, NULL);
 
 		zbx_snprintf(msg, sizeof(msg), "Invalid nextcheck calculation step %d", step++);
 		zbx_mock_assert_time_eq(msg, ts.sec, nextcheck);
