diff --git a/src/cuirass/database.scm b/src/cuirass/database.scm
index d2439e4aef01423a595ac5d39429ca5cf5d12893..74e73bc56f37297ab4de1307822f67d5c6bafbea 100644
--- a/src/cuirass/database.scm
+++ b/src/cuirass/database.scm
@@ -926,6 +926,7 @@ FILTERS is an assoc list whose possible keys are 'derivation | 'id | 'jobset |
     (lambda (inner)
       (match (assq 'order filters)
         (('order . 'build-id) "Builds.id ASC")
+        (('order . 'evaluation) "Builds.evaluation DESC")
         (('order . 'finish-time) "stoptime DESC")
         (('order . 'finish-time+build-id)
          (if inner
diff --git a/src/cuirass/http.scm b/src/cuirass/http.scm
index a37c63a94ac02d6789c6c60c8b5554b06af04fff..fab988863626492e333bb293f3ead2a1018302f8 100644
--- a/src/cuirass/http.scm
+++ b/src/cuirass/http.scm
@@ -490,12 +490,16 @@ Hydra format."
         ((> limit 1000)
          (respond-json-with-error 500 "Maximum limit exceeded"))
         (else
-         ;; Limit results to builds that are "done".
+         ;; Limit results to builds that are "done".  Order the builds by
+         ;; descending evaluation numbers.  This ensures that the builds that
+         ;; were last registered are first returned even if they take more
+         ;; time to complete.  Ordering by timestamp wouldn't work as
+         ;; evaluations are not always performed sequentially.
          (respond-json
           (object->json-string
            (handle-builds-request `((status . done)
                                     ,@params
-                                    (order . finish-time)))))))))
+                                    (order . evaluation)))))))))
     (('GET "api" "queue")
      (let* ((params (request-parameters request))
             ;; 'nr parameter is mandatory to limit query size.