diff --git a/field_collection.module b/field_collection.module
index 4108c3e..7de6aac 100644
--- a/field_collection.module
+++ b/field_collection.module
@@ -587,6 +587,12 @@ function field_collection_item_is_empty(FieldCollectionItemEntity $item) {
   $instances = field_info_instances('field_collection_item', $item->field_name);
   $is_empty = TRUE;
 
+  // Check whether all fields are booleans.
+  $all_boolean = $instances && !(bool) array_filter($instances, function ($instance) {
+    $field = field_info_field($instance['field_name']);
+    return $field['type'] != 'list_boolean';
+  });
+
   foreach ($instances as $instance) {
     $field_name = $instance['field_name'];
     $field = field_info_field($field_name);
@@ -594,6 +600,23 @@ function field_collection_item_is_empty(FieldCollectionItemEntity $item) {
     // Determine the list of languages to iterate on.
     $languages = field_available_languages('field_collection_item', $field);
 
+    // Boolean fields as those are always considered non-empty, thus their
+    // information is not useful only if not set to TRUE.
+    if (!$all_boolean && $field['type'] == 'list_boolean') {
+      foreach ($languages as $langcode) {
+        if (!empty($item->{$field_name}[$langcode])) {
+          foreach ($item->{$field_name}[$langcode] as $field_item) {
+            if ($field_item['value']) {
+              $is_empty = FALSE;
+              break 3;
+            }
+          }
+        }
+      }
+
+      continue;
+    }
+
     foreach ($languages as $langcode) {
       if (!empty($item->{$field_name}[$langcode])) {
         // If at least one collection-field is not empty; the
@@ -601,6 +624,7 @@ function field_collection_item_is_empty(FieldCollectionItemEntity $item) {
         foreach ($item->{$field_name}[$langcode] as $field_item) {
           if (!module_invoke($field['module'], 'field_is_empty', $field_item, $field)) {
             $is_empty = FALSE;
+            break 3;
           }
         }
       }
