diff --git a/entitycache.module b/entitycache.module
index dce177f..9714e97 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,42 @@ 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();
+      if (isset($result[$controller->entityType])) {
+        $entity_ids = array_keys($result[$controller->entityType]);
+        return static::entityCacheLoad($controller, $entity_ids);
+      }
+      else {
+        // No results found.
+        return array();
+      }
+    }
+
     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.
diff --git a/entitycache.test b/entitycache.test
index 3256417..c8222f5 100644
--- a/entitycache.test
+++ b/entitycache.test
@@ -853,6 +853,25 @@ class EntityCachePageEditTestCase extends PageEditTestCase {
     parent::setup();
     module_enable(array('entitycache'));
   }
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function drupalPost($path, $edit, $submit, array $options = array(), array $headers = array(), $form_html_id = NULL, $extra_post = NULL) {
+    $result = parent::drupalPost($path, $edit, $submit, $options, $headers, $form_html_id, $extra_post);
+
+    // Reset the cache, to let the test pass. The problem is that the test
+    // adds a new revision using ::drupalPost so the static cache in the context
+    // of the test, never has the chance to react.
+    if (!empty($edit['revision'])) {
+      $node = $this->drupalGetNodeByTitle($edit['title']);
+      $nid = $node->nid;
+      entity_get_controller('node')->resetCache(array($nid));
+    }
+
+    return $result;
+  }
+
 }
 
 /**
