diff --git a/entitycache.module b/entitycache.module
index dce177f..5a5a78b 100644
--- a/entitycache.module
+++ b/entitycache.module
@@ -46,6 +46,21 @@ class EntityCacheControllerHelper extends DrupalDefaultEntityController {
     }
   }
 
+  /**
+   * Loads entities by IDs/conditions, which are potentially cached.
+   *
+   * @param \DrupalDefaultEntityController $controller
+   *   The entity (storage) controller.
+   *
+   * @param array $ids
+   *   (optional) entity IDs to load.
+   * @param array $conditions
+   *   (options) An array of conditions to be used when loading. Note: It is
+   *   possible to pass conditions with and without IDs.
+   *
+   * @return array
+   *   An array of loaded entities keyed by ID.
+   */
   public static function entityCacheLoad($controller, $ids = array(), $conditions = array()) {
     $entities = array();
     $cached_entities = array();
@@ -77,6 +92,36 @@ class EntityCacheControllerHelper extends DrupalDefaultEntityController {
       }
     }
 
+    // Use an entity field query to be able to load the IDs. Once we have the
+    // IDs we can load those entities using either static or entity cache.
+
+    if ($conditions &&
+      // In case we passed in some IDs, we just want to take into account
+      // conditions, if the previous static caching could not resolve all of
+      // them.
+      (($passed_ids && $ids)
+        ||
+      // In case we passed no IDs, but static loading by $conditions worked
+      // ($entities is set), we don't want to query again.
+      (!$passed_ids && !$entities))) {
+      $query = (new EntityFieldQuery());
+      $query->entityCondition('entity_type', $controller->entityType);
+      foreach ($conditions as $property_name => $condition) {
+        // Note $condition might be multiple values, which are treated as OR
+        // by default.
+        $query->propertyCondition($property_name, $condition);
+      }
+
+      // Limit the result set also by the passed in IDs.
+      if ($passed_ids) {
+        $query->propertyCondition($controller->idKey, $passed_ids);
+      }
+
+      $result = $query->execute();
+      $entity_ids = array_keys($result[$controller->entityType]);
+      return static::entityCacheLoad($controller, $entity_ids);
+    }
+
     if (!empty($controller->entityInfo['entity cache']) && !$revision_id && $ids && !$conditions) {
       $entities += $cached_entities = self::entityCacheGet($controller, $ids, $conditions);
       // If any entities were loaded, remove them from the ids still to load.
