         @index().each (candidate) ->
           self.add candidate if candidate.matches self._conditions
         
-        if @_order
-          order = @_order
+        if @_orders
+          orders = @_orders
           @_array.sort (a, b) ->
-            a_value = a.get order
-            b_value = b.get order
-            if a_value > b_value
-              1
-            else if a_value < b_value
-              -1
-            else
-              0
+            for attribute in orders
+              if attribute.reverse
+                a_value = b.get attribute.reverse
+                b_value = a.get attribute.reverse
+              else
+                a_value = a.get attribute
+                b_value = b.get attribute
+              return 1  if a_value > b_value
+              return -1 if a_value < b_value
+            0
         
         @_populated = true
   

        for condition in conditions
          @_conditions.push condition
  
    @method 'order', (order) ->
      @fork ->
        @_order = order
    
    @method 'index', ->
      unless @_index

      @init()
      @_model = model
      @_conditions = []
      @_orders = null
      @_populated = false
  
    @initializer 'withScope', (scope) ->
      @init()
      @_model = scope._model
      @_conditions = scope._conditions && scope._conditions.slice(0)
      @_orders = scope._orders && scope._orders.slice(0)
      @_populated = false
  
    @property 'model', 'read'
