diff --git a/builders.py b/builders.py
index b7379ec..3d55e15 100644
--- a/builders.py
+++ b/builders.py
@@ -244,6 +244,12 @@ def prioritizeBuilders(master, builders):
 
     @defer.inlineCallbacks
     def transform(bldr):
+        # Sort primarily highest priority of build requests
+        priority = yield bldr.get_highest_priority()
+        if priority is None:
+            # for builders that do not have pending buildrequest, we just use large number
+            priority = -math.inf
+        # Break ties using the time of oldest build request (with bonus)
         time = yield bldr.getOldestRequestTime()
         #log.msg("Considering %s" % bldr.name)
         if time is None:
@@ -254,7 +260,7 @@ def prioritizeBuilders(master, builders):
                 time = time - builder_bonuses[bldr.name]
                 #log.msg("Adding %s so %s" % (str(builder_bonuses[bldr.name]), str(time)))
 
-        return (time, bldr)
+        return (-priority, time, bldr)
 
     transformed = yield defer.gatherResults(
         [transform(bldr) for bldr in builders])
@@ -262,13 +268,13 @@ def prioritizeBuilders(master, builders):
     # sort the transformed list synchronously, comparing None to the end of
     # the list
     def transformedKey(a):
-        (date, builder) = a
-        return (date, builder.name)
+        (priority, date, builder) = a
+        return (priority, date, builder.name)
 
     transformed.sort(key=transformedKey)
 
     # and reverse the transform
-    rv = [xf[1] for xf in transformed]
+    rv = [xf[2] for xf in transformed]
     #log.msg("Using %s" % str(rv))
     return rv
 
