Index: create/src/schema.tmpl
===================================================================
--- create/src/schema.tmpl	(revision 61214)
+++ create/src/schema.tmpl	(working copy)
@@ -601,6 +601,7 @@
 FIELD		|type		|t_integer	|'0'	|NOT NULL	|0
 FIELD		|state		|t_integer	|'0'	|NOT NULL	|ZBX_NODATA
 FIELD		|flags		|t_integer	|'0'	|NOT NULL	|0
+FIELD		|dep_operator	|t_integer	|'0'	|NOT NULL	|0
 FIELD		|recovery_mode	|t_integer	|'0'	|NOT NULL	|0
 FIELD		|recovery_expression|t_varchar(2048)|''	|NOT NULL	|0
 FIELD		|correlation_mode|t_integer	|'0'	|NOT NULL	|0
Index: include/common.h
===================================================================
--- include/common.h	(revision 61214)
+++ include/common.h	(working copy)
@@ -563,6 +563,10 @@
 #define TRIGGER_SEVERITY_DISASTER	5
 #define TRIGGER_SEVERITY_COUNT		6	/* number of trigger severities */
 
+/* trigger dependency condition */
+#define TRIGGER_DEP_OPERATOR_OR	0
+#define TRIGGER_DEP_OPERATOR_AND	1
+
 /* trigger recovery mode */
 #define TRIGGER_RECOVERY_MODE_EXPRESSION		0
 #define TRIGGER_RECOVERY_MODE_RECOVERY_EXPRESSION	1
Index: include/dbcache.h
===================================================================
--- include/dbcache.h	(revision 61214)
+++ include/dbcache.h	(working copy)
@@ -215,6 +215,7 @@
 	unsigned char		status;
 	unsigned char		recovery_mode;
 	unsigned char		correlation_mode;
+    unsigned char       dep_operator;
 
 	zbx_vector_ptr_t	tags;
 }
@@ -482,7 +483,7 @@
 int	DCconfig_activate_host(DC_ITEM *item);
 int	DCconfig_deactivate_host(DC_ITEM *item, int now);
 
-int	DCconfig_check_trigger_dependencies(zbx_uint64_t triggerid);
+int	DCconfig_check_trigger_dependencies(zbx_uint64_t triggerid, unsigned char dep_operator);
 
 void	DCconfig_triggers_apply_changes(zbx_vector_ptr_t *trigger_diff);
 void	DCconfig_set_maintenance(const zbx_uint64_t *hostids, int hostids_num, int maintenance_status,
Index: src/libs/zbxdbcache/dbconfig.c
===================================================================
--- src/libs/zbxdbcache/dbconfig.c	(revision 61214)
+++ src/libs/zbxdbcache/dbconfig.c	(working copy)
@@ -101,6 +101,7 @@
 	unsigned char		functional;		/* see TRIGGER_FUNCTIONAL_* defines */
 	unsigned char		recovery_mode;		/* TRIGGER_RECOVERY_MODE_* defines  */
 	unsigned char		correlation_mode;	/* ZBX_TRIGGER_CORRELATION_* defines */
+    unsigned char       dep_operator;
 
 	zbx_vector_ptr_t	tags;
 }
@@ -3125,6 +3126,7 @@
 		ZBX_STR2UCHAR(trigger->status, row[9]);
 		ZBX_STR2UCHAR(trigger->recovery_mode, row[10]);
 		ZBX_STR2UCHAR(trigger->correlation_mode, row[12]);
+		ZBX_STR2UCHAR(trigger->dep_operator, row[15]);
 
 		if (0 == found)
 		{
@@ -4394,7 +4396,7 @@
 	if (NULL == (trig_result = DBselect(
 			"select distinct t.triggerid,t.description,t.expression,t.error,t.priority,t.type,t.value,"
 				"t.state,t.lastchange,t.status,t.recovery_mode,t.recovery_expression,"
-				"t.correlation_mode,t.correlation_tag,t.problem_count"
+				"t.correlation_mode,t.correlation_tag,t.problem_count,t.dep_operator"
 			" from hosts h,items i,functions f,triggers t"
 			" where h.hostid=i.hostid"
 				" and i.itemid=f.itemid"
@@ -5884,6 +5886,7 @@
 	dst_trigger->correlation_mode = src_trigger->correlation_mode;
 	dst_trigger->correlation_tag = zbx_strdup(NULL, src_trigger->correlation_tag);
 	dst_trigger->problem_count = src_trigger->problem_count;
+    dst_trigger->dep_operator = src_trigger->dep_operator;
 
 	dst_trigger->expression = NULL;
 	dst_trigger->recovery_expression = NULL;
@@ -7616,9 +7619,10 @@
  * Comments: helper function for DCconfig_check_trigger_dependencies()        *
  *                                                                            *
  ******************************************************************************/
-static int	DCconfig_check_trigger_dependencies_rec(const ZBX_DC_TRIGGER_DEPLIST *trigdep, int level)
+static int	DCconfig_check_trigger_dependencies_rec(const ZBX_DC_TRIGGER_DEPLIST *trigdep, int level, unsigned char dep_operator)
 {
 	int				i;
+    int				amount_conditions_met; 
 	const ZBX_DC_TRIGGER		*next_trigger;
 	const ZBX_DC_TRIGGER_DEPLIST	*next_trigdep;
 
@@ -7629,24 +7633,63 @@
 		return SUCCEED;
 	}
 
+	zabbix_log(LOG_LEVEL_WARNING, "trigger dependency condition: %s", dep_operator == TRIGGER_DEP_OPERATOR_OR ? "OR" : "AND");
+    zabbix_log(LOG_LEVEL_WARNING, "dep_operator: %u", dep_operator);
+
 	if (NULL != trigdep->dependencies)
 	{
+		amount_conditions_met = 0;
 		for (i = 0; NULL != (next_trigdep = trigdep->dependencies[i]); i++)
 		{
-			if (NULL != (next_trigger = next_trigdep->trigger) &&
+			next_trigger = next_trigdep->trigger;
+			zabbix_log(LOG_LEVEL_WARNING, "checking dependency %s (" ZBX_FS_UI64 ")",
+			    next_trigger->description, next_trigger->triggerid);
+
+			if (NULL != next_trigger &&
 					TRIGGER_VALUE_PROBLEM == next_trigger->value &&
 					TRIGGER_STATE_NORMAL == next_trigger->state &&
 					TRIGGER_STATUS_ENABLED == next_trigger->status &&
 					TRIGGER_FUNCTIONAL_TRUE == next_trigger->functional)
 			{
-				return FAIL;
+				if (TRIGGER_DEP_OPERATOR_OR == dep_operator) {
+                    /* When operator is OR, one failed dependency is enough */
+					return FAIL;
+				}
+				else {
+					amount_conditions_met++;
+				}
+
 			}
 
-			if (FAIL == DCconfig_check_trigger_dependencies_rec(next_trigdep, level + 1))
-				return FAIL;
 		}
+
+		zabbix_log(LOG_LEVEL_WARNING, "amount of trigger dependencies: %i, amount met: %i", (i), amount_conditions_met);
+
+		if (TRIGGER_DEP_OPERATOR_AND == dep_operator && amount_conditions_met == i) {
+			zabbix_log(LOG_LEVEL_WARNING, "dependency met, ignoring trigger");
+			return FAIL;
+		}
+
+		for (i = 0; NULL != (next_trigdep = trigdep->dependencies[i]); i++)
+		{
+			if (NULL != (next_trigger = next_trigdep->trigger) &&
+				   TRIGGER_VALUE_PROBLEM == next_trigger->value &&
+				   TRIGGER_STATE_NORMAL == next_trigger->state &&
+                   TRIGGER_STATUS_ENABLED == next_trigger->status &&
+                   TRIGGER_FUNCTIONAL_TRUE == next_trigger->functional)
+			{
+
+				if (FAIL == DCconfig_check_trigger_dependencies_rec(next_trigdep, level + 1, next_trigger->dep_operator))
+				{
+					zabbix_log(LOG_LEVEL_WARNING, "triggers parents dependencies have been met");
+					return FAIL;
+				}
+			}
+		}
 	}
 
+    zabbix_log(LOG_LEVEL_DEBUG, "no dependencies met");
+
 	return SUCCEED;
 }
 
@@ -7662,7 +7705,7 @@
  * Author: Alexei Vladishev, Aleksandrs Saveljevs                             *
  *                                                                            *
  ******************************************************************************/
-int	DCconfig_check_trigger_dependencies(zbx_uint64_t triggerid)
+int	DCconfig_check_trigger_dependencies(zbx_uint64_t triggerid, unsigned char dep_operator)
 {
 	int				ret = SUCCEED;
 	const ZBX_DC_TRIGGER_DEPLIST	*trigdep;
@@ -7670,10 +7713,12 @@
 	LOCK_CACHE;
 
 	if (NULL != (trigdep = zbx_hashset_search(&config->trigdeps, &triggerid)))
-		ret = DCconfig_check_trigger_dependencies_rec(trigdep, 0);
+		ret = DCconfig_check_trigger_dependencies_rec(trigdep, 0, dep_operator);
 
 	UNLOCK_CACHE;
 
+    zabbix_log(LOG_LEVEL_WARNING, "Dependency result: %s", ret == SUCCEED ? "success" : "fail");
+
 	return ret;
 }
 
Index: src/libs/zbxdbhigh/trigger.c
===================================================================
--- src/libs/zbxdbhigh/trigger.c	(revision 61214)
+++ src/libs/zbxdbhigh/trigger.c	(working copy)
@@ -116,7 +116,7 @@
 	if (0 == (flags & ZBX_FLAGS_TRIGGER_DIFF_UPDATE) && 0 == (event_flags & ZBX_FLAGS_TRIGGER_CREATE_EVENT))
 		goto out;
 
-	if (SUCCEED != DCconfig_check_trigger_dependencies(trigger->triggerid))
+	if (SUCCEED != DCconfig_check_trigger_dependencies(trigger->triggerid, trigger->dep_operator))
 		goto out;
 
 	if (0 != (event_flags & ZBX_FLAGS_TRIGGER_CREATE_TRIGGER_EVENT))
Index: src/libs/zbxdbupgrade/dbupgrade_3010.c
===================================================================
--- src/libs/zbxdbupgrade/dbupgrade_3010.c	(revision 61214)
+++ src/libs/zbxdbupgrade/dbupgrade_3010.c	(working copy)
@@ -1551,6 +1551,14 @@
 	return DBadd_foreign_key("corr_operation", 1, &field);
 }
 
+static int DBpatch_3010068(void)
+{
+
+	const ZBX_FIELD	field = {"dep_operator", "0", NULL, NULL, 0, ZBX_TYPE_INT, ZBX_NOTNULL, 0};
+
+	return DBadd_field("triggers", &field);
+}
+
 #endif
 
 DBPATCH_START(3010)
@@ -1625,5 +1633,6 @@
 DBPATCH_ADD(3010065, 0, 1)
 DBPATCH_ADD(3010066, 0, 1)
 DBPATCH_ADD(3010067, 0, 1)
+DBPATCH_ADD(3010068, 0, 1)
 
 DBPATCH_END()
Index: src/zabbix_server/escalator/escalator.c
===================================================================
--- src/zabbix_server/escalator/escalator.c	(revision 61214)
+++ src/zabbix_server/escalator/escalator.c	(working copy)
@@ -1515,7 +1515,7 @@
 	if (NULL != *error)
 		goto out;
 
-	*ignore = (SUCCEED == DCconfig_check_trigger_dependencies(trigger.triggerid) ? 0 : 1);
+	*ignore = (SUCCEED == DCconfig_check_trigger_dependencies(trigger.triggerid, trigger.dep_operator) ? 0 : 1);
 
 	ret = SUCCEED;
 out:
