diff --git a/includes/commerce.controller.inc b/includes/commerce.controller.inc
index 4e6249c..26a80e3 100644
--- a/includes/commerce.controller.inc
+++ b/includes/commerce.controller.inc
@@ -21,6 +21,22 @@ class DrupalCommerceEntityController extends DrupalDefaultEntityController imple
   protected $lockedEntities = array();
 
   /**
+   * Enable this controller to lock entities that have 'pessimistic' locking
+   * mode set in self::entityInfo['locking mode'].
+   *
+   * @see self::buildQuery()
+   */
+  protected $pessimisticLocking = TRUE;
+
+  /**
+   * Prevent this controller from locking the entities that it loads.
+   */
+  public function preventLocking() {
+    $this->pessimisticLocking = FALSE;
+    return $this;
+  }
+
+  /**
    * Override of DrupalDefaultEntityController::buildQuery().
    *
    * Handle pessimistic locking.
@@ -28,7 +44,7 @@ class DrupalCommerceEntityController extends DrupalDefaultEntityController imple
   protected function buildQuery($ids, $conditions = array(), $revision_id = FALSE) {
     $query = parent::buildQuery($ids, $conditions, $revision_id);
 
-    if (isset($this->entityInfo['locking mode']) && $this->entityInfo['locking mode'] == 'pessimistic') {
+    if ($this->pessimisticLocking && isset($this->entityInfo['locking mode']) && $this->entityInfo['locking mode'] == 'pessimistic') {
       // In pessimistic locking mode, we issue the load query with a FOR UPDATE
       // clause. This will block all other load queries to the loaded objects
       // but requires us to start a transaction.
