diff --git a/includes/commerce.controller.inc b/includes/commerce.controller.inc
index 5605f67..1a29236 100644
--- a/includes/commerce.controller.inc
+++ b/includes/commerce.controller.inc
@@ -24,11 +24,16 @@ class DrupalCommerceEntityController extends DrupalDefaultEntityController imple
    * Override of DrupalDefaultEntityController::buildQuery().
    *
    * Handle pessimistic locking.
+   * To load a readonly entity, e.g order, pass: $conditions['readonly'] = TRUE 
    */
   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') {
+    // By default DrupalCommerceEntityController will use pessimistic locking when loading orders
+    // Setting a $conditions['readonly'] = TRUE flag to commerce_order_load or commerce_order_load_multiple
+    // will load an order readonly, without locking
+    $conditions['readonly'] = isset($conditions['readonly']) ? $conditions['readonly'] : FALSE;
+    if ($conditions['readonly'] === FALSE && isset($this->entityInfo['locking mode']) && $this->entityInfo['locking mode'] == 'pessimistic') {
+      unset($conditions['readonly']); // else is passed as field condition
+      $query = parent::buildQuery($ids, $conditions, $revision_id);
       // 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.
@@ -41,6 +46,9 @@ class DrupalCommerceEntityController extends DrupalDefaultEntityController imple
       // Store the ids of the entities in the lockedEntities array for later
       // tracking, flipped for easier management via unset() below.
       $this->lockedEntities += array_flip($ids);
+    }else{
+     unset($conditions['readonly']);
+     $query = parent::buildQuery($ids, $conditions, $revision_id);
     }
 
     return $query;
diff --git a/modules/order/commerce_order.module b/modules/order/commerce_order.module
index 962d038..a4c2fcd 100644
--- a/modules/order/commerce_order.module
+++ b/modules/order/commerce_order.module
@@ -733,8 +733,8 @@ function commerce_order_save($order) {
 /**
  * Loads an order by ID.
  */
-function commerce_order_load($order_id) {
-  $orders = commerce_order_load_multiple(array($order_id), array());
+function commerce_order_load($order_id, $conditions = array()) {
+  $orders = commerce_order_load_multiple(array($order_id), $conditions);
   return $orders ? reset($orders) : FALSE;
 }
 
