diff --git a/field_conditional_state.admin.inc b/field_conditional_state.admin.inc
index 1f23c4d..f6fed5a 100644
--- a/field_conditional_state.admin.inc
+++ b/field_conditional_state.admin.inc
@@ -167,9 +167,11 @@ function field_conditional_state_settings_form($form, &$form_state, $instance) {
 
       $control_field_instance = field_info_instance($group['entity_type'], $control_field, $group['bundle']);
 
-      if (in_array($control_field_instance['widget']['type'], array('options_buttons', 'options_select'))) {
+      if (in_array($control_field_instance['widget']['type'], field_conditional_state_multi_trigger_value_is_supported())) {
         $new_state['trigger_value-' . $state['id']]['#options'] = list_allowed_values(field_info_field($control_field));
         $new_state['trigger_value-' . $state['id']]['#type'] = 'select';
+        $new_state['trigger_value-' . $state['id']]['#multiple'] = TRUE;
+        $state['trigger_value'] = unserialize($state['trigger_value']);
       }
 
       $new_state['trigger_value-' . $state['id']]['#default_value'] = $state['trigger_value'];
@@ -198,9 +200,10 @@ function field_conditional_state_settings_form($form, &$form_state, $instance) {
     if (!is_null($control_field)) {
       $control_field_instance = field_info_instance($group['entity_type'], $control_field, $group['bundle']);
 
-      if (in_array($control_field_instance['widget']['type'], array('options_buttons', 'options_select'))) {
+      if (in_array($control_field_instance['widget']['type'], field_conditional_state_multi_trigger_value_is_supported())) {
         $new_state['trigger_value-' . $new_id]['#options'] = list_allowed_values(field_info_field($control_field));
         $new_state['trigger_value-' . $new_id]['#type'] = 'select';
+        $new_state['trigger_value-' . $new_id]['#multiple'] = TRUE;
       }
     }
 
@@ -275,6 +278,11 @@ function field_conditional_state_settings_form_submit($form, $form_state) {
     );
     if ($values['trigger_state-' . $id] == 'value' || $values['trigger_state-' . $id] == '!value') {
       $fields['trigger_value'] = $values['trigger_value-' . $id];
+
+      // Serialize trigger values of multiselect fields.
+      if (is_array($fields['trigger_value'])) {
+        $fields['trigger_value'] = serialize($fields['trigger_value']);
+      }
     }
 
     db_update('field_conditional_state')
@@ -288,6 +296,11 @@ function field_conditional_state_settings_form_submit($form, $form_state) {
       $trigger_value = 1;
       if ($values['trigger_state-new-' . $id] == 'value' || $values['trigger_state-new-' . $id] == '!value') {
         $trigger_value = $values['trigger_value-new-' . $id];
+
+        // Serialize trigger values of multiselect fields.
+        if (is_array($trigger_value)) {
+          $trigger_value = serialize($trigger_value);
+        }
       }
 
       db_insert('field_conditional_state')
diff --git a/field_conditional_state.module b/field_conditional_state.module
index 89304c9..64d2519 100644
--- a/field_conditional_state.module
+++ b/field_conditional_state.module
@@ -177,6 +177,29 @@ function field_conditional_state_controled_field_is_supported($widget = FALSE) {
 }
 
 /**
+ * Checks whether a widget supports multiple trigger values within one state.
+ *
+ * @param string $widget
+ *   a widget name to check for support
+ *
+ * @return array/boolean
+ *   the whitelist as array if no explicit widget is given as argument OR
+ *   a boolean indicating the support of the given widget 
+ */
+function field_conditional_state_multi_trigger_value_is_supported($widget = FALSE) {
+  $list = array(
+    'options_buttons',
+    'options_select',
+  );
+  if (!$widget) {
+    return $list;
+  }
+  else {
+    return in_array($widget, $list);
+  }
+}
+
+/**
  * Returns the available states for a given field type.
  *
  * @param string $type
@@ -561,23 +584,36 @@ function _field_conditional_state_build_states_array(&$element, $groups, $state_
           continue;
         }
         $control_id = $ids[$control_key];
+        $triggers = array();
         if ($state['trigger_state'] == 'value' || $state['trigger_state'] == '!value') {
-          $trigger = array($state['trigger_state'] => $state['trigger_value']);
+
+          // If we have a multi trigger value here, we create a state per value.
+          $trigger_values = @unserialize($state['trigger_value']);
+          if ($trigger_values !== FALSE) {
+            foreach ($trigger_values as $val) {
+              $triggers[] = array($state['trigger_state'] => $val);
+            }
+          }
+          else {
+            $triggers[] = array($state['trigger_state'] => $state['trigger_value']);
+          }
         }
         else {
-          $trigger = array($state['trigger_state'] => TRUE);
+          $triggers[] = array($state['trigger_state'] => TRUE);
         }
 
-        if ($group['type'] == 'and') {
-          // Add condition to the top level.
-          $current['#' . $control_id] = $trigger;
-        }
-        else {
-          // For or/xor conditions $current already points to the second level,
-          // but each single condition gets its own third level
-          // within the array.
-          $tmp = &$current[];
-          $tmp['#' . $control_id] = $trigger;
+        foreach ($triggers as $trigger) {
+          if ($group['type'] == 'and') {
+            // Add condition to the top level.
+            $current['#' . $control_id] = $trigger;
+          }
+          else {
+            // For (x)or conditions $current already points to the second level,
+            // but each single condition gets its own third level
+            // within the array.
+            $tmp = &$current[];
+            $tmp['#' . $control_id] = $trigger;
+          }
         }
       }
     }
