diff --git a/src/libs/zbxcacheconfig/dbconfig.c b/src/libs/zbxcacheconfig/dbconfig.c
index 851381a..ab52a88 100644
--- a/src/libs/zbxcacheconfig/dbconfig.c
+++ b/src/libs/zbxcacheconfig/dbconfig.c
@@ -8589,9 +8589,61 @@ zbx_uint64_t	zbx_dc_sync_configuration(unsigned char mode, zbx_synced_new_config
 		sec = zbx_time();
 		used_size = dbconfig_used_size();
 
+		/* feed timers orphaned by a timer_revision=0 reset into the reschedule lists since a running server otherwise reschedules only changed objects */
+		if (NULL != pfunction_timers)
+		{
+			zbx_hashset_iter_t	iter;
+			zbx_uint64_t		*pid;
+			ZBX_DC_FUNCTION		*function;
+			ZBX_DC_TRIGGER		*trigger;
+
+			zbx_hashset_iter_reset(&config->functionids_pending_timer, &iter);
+			while (NULL != (pid = (zbx_uint64_t *)zbx_hashset_iter_next(&iter)))
+			{
+				if (NULL != (function = (ZBX_DC_FUNCTION *)zbx_hashset_search(&config->functions, pid)))
+					zbx_vector_dc_function_ptr_append(pfunction_timers, function);
+				else
+					zbx_hashset_iter_remove(&iter);
+			}
+
+			zbx_hashset_iter_reset(&config->triggerids_pending_timer, &iter);
+			while (NULL != (pid = (zbx_uint64_t *)zbx_hashset_iter_next(&iter)))
+			{
+				if (NULL != (trigger = (ZBX_DC_TRIGGER *)zbx_hashset_search(&config->triggers, pid)))
+					zbx_vector_trigger_ptr_append(ptrigger_timers, trigger);
+				else
+					zbx_hashset_iter_remove(&iter);
+			}
+		}
+
 		dc_schedule_trigger_timers((ZBX_DBSYNC_INIT == mode ? &trend_queue : NULL), time(NULL),
 				pfunction_timers, ptrigger_timers, &function_timers_num, &trigger_timers_num);
 
+		/* drop entries whose timer was recreated (timer_revision set) or that no longer exist; keep still non-functional ones to retry on a later sync */
+		if (NULL != pfunction_timers)
+		{
+			zbx_hashset_iter_t	iter;
+			zbx_uint64_t		*pid;
+			ZBX_DC_FUNCTION		*function;
+			ZBX_DC_TRIGGER		*trigger;
+
+			zbx_hashset_iter_reset(&config->functionids_pending_timer, &iter);
+			while (NULL != (pid = (zbx_uint64_t *)zbx_hashset_iter_next(&iter)))
+			{
+				if (NULL == (function = (ZBX_DC_FUNCTION *)zbx_hashset_search(&config->functions, pid)) ||
+						0 != function->timer_revision)
+					zbx_hashset_iter_remove(&iter);
+			}
+
+			zbx_hashset_iter_reset(&config->triggerids_pending_timer, &iter);
+			while (NULL != (pid = (zbx_uint64_t *)zbx_hashset_iter_next(&iter)))
+			{
+				if (NULL == (trigger = (ZBX_DC_TRIGGER *)zbx_hashset_search(&config->triggers, pid)) ||
+						0 != trigger->timer_revision)
+					zbx_hashset_iter_remove(&iter);
+			}
+		}
+
 		timers_sec = zbx_time() - sec;
 		timers_size = dbconfig_used_size() - used_size;
 	}
@@ -9284,6 +9336,8 @@ int	zbx_init_configuration_cache(zbx_get_program_type_f get_program_type, zbx_ge
 	CREATE_HASHSET(config->template_items, 0);
 	CREATE_HASHSET(config->item_discovery, 0);
 	CREATE_HASHSET(config->functions, 0);
+	CREATE_HASHSET(config->functionids_pending_timer, 0);
+	CREATE_HASHSET(config->triggerids_pending_timer, 0);
 	CREATE_HASHSET(config->triggers, 0);
 	CREATE_HASHSET(config->trigdeps, 0);
 	CREATE_HASHSET(config->hosts, 10);
@@ -11233,7 +11287,10 @@ static int	trigger_timer_validate(zbx_trigger_timer_t *timer, ZBX_DC_TRIGGER **d
 				TRIGGER_FUNCTIONAL_TRUE != (*dc_trigger)->functional)
 		{
 			if (dc_function->timer_revision == timer->revision)
+			{
 				dc_function->timer_revision = 0;
+				zbx_hashset_insert(&config->functionids_pending_timer, &timer->objectid, sizeof(timer->objectid));
+			}
 			return FAIL;
 		}
 	}
@@ -11247,7 +11304,10 @@ static int	trigger_timer_validate(zbx_trigger_timer_t *timer, ZBX_DC_TRIGGER **d
 				TRIGGER_FUNCTIONAL_TRUE != (*dc_trigger)->functional)
 		{
 			if ((*dc_trigger)->timer_revision == timer->revision)
+			{
 				(*dc_trigger)->timer_revision = 0;
+				zbx_hashset_insert(&config->triggerids_pending_timer, &timer->objectid, sizeof(timer->objectid));
+			}
 			return FAIL;
 		}
 	}
@@ -11265,6 +11325,7 @@ static void	dc_remove_invalid_timer(zbx_trigger_timer_t *timer)
 				&timer->objectid)) && function->timer_revision == timer->revision)
 		{
 			function->timer_revision = 0;
+			zbx_hashset_insert(&config->functionids_pending_timer, &timer->objectid, sizeof(timer->objectid));
 		}
 	}
 	else if (ZBX_TRIGGER_TIMER_TRIGGER == timer->type)
@@ -11275,6 +11336,7 @@ static void	dc_remove_invalid_timer(zbx_trigger_timer_t *timer)
 				&timer->objectid)) && trigger->timer_revision == timer->revision)
 		{
 			trigger->timer_revision = 0;
+			zbx_hashset_insert(&config->triggerids_pending_timer, &timer->objectid, sizeof(timer->objectid));
 		}
 	}
 
diff --git a/src/libs/zbxcacheconfig/dbconfig.h b/src/libs/zbxcacheconfig/dbconfig.h
index 515b931..79b43e1 100644
--- a/src/libs/zbxcacheconfig/dbconfig.h
+++ b/src/libs/zbxcacheconfig/dbconfig.h
@@ -1049,6 +1049,8 @@ typedef struct
 	zbx_binary_heap_t	queues[ZBX_POLLER_TYPE_COUNT];
 	zbx_binary_heap_t	pqueue;
 	zbx_binary_heap_t	trigger_queue;
+	zbx_hashset_t		functionids_pending_timer;	/* functionids whose timer_revision was reset to 0 and needs a timer recreated */
+	zbx_hashset_t		triggerids_pending_timer;	/* triggerids whose timer_revision was reset to 0 and needs a timer recreated */
 	zbx_binary_heap_t	drule_queue;
 	zbx_binary_heap_t	httptest_queue;		/* web scenario queue */
 	zbx_dc_config_table_t	*config;
