diff --git a/addons/web/static/src/js/views/basic/basic_model.js b/addons/web/static/src/js/views/basic/basic_model.js
index 57c4a1f37439f38e67bf8777dc331fb08ace93de..294d7ce077ba4d33553ca862b9e8bff3f9ee140a 100644
--- a/addons/web/static/src/js/views/basic/basic_model.js
+++ b/addons/web/static/src/js/views/basic/basic_model.js
@@ -3666,10 +3666,16 @@ var BasicModel = AbstractModel.extend({
             var self = this;
 
             // sort records according to ordered_by[0]
-            var order = list.orderedBy[0];
             var data = list.data;
             var res_ids = list.res_ids;
-            data.sort(function (record1ID, record2ID) {
+            var compareRecords = function (record1ID, record2ID, level) {
+                if(!level) {
+                    level = 0;
+                }
+                if(list.orderedBy.length < level + 1) {
+                    return 0;
+                }
+                var order = list.orderedBy[level];
                 var r1 = self.localData[record1ID];
                 var r2 = self.localData[record2ID];
                 var data1 = _.extend({}, r1.data, r1._changes);
@@ -3680,8 +3686,9 @@ var BasicModel = AbstractModel.extend({
                 if (data1[order.name] > data2[order.name]) {
                     return order.asc ? 1 : -1;
                 }
-                return 0;
-            });
+                return compareRecords(record1ID, record2ID, level + 1);
+            };
+            data.sort(compareRecords);
 
             // sort res_ids accordingly (only the current range of ids, the one
             // mapping the data, needs to be sorted)