use Carp;
 use Data::Dumper;
 use List::Util qw(first);
+use List::UtilsBy qw(sort_by);
 
 use constant META_CVARS => 'cvars_config';
 
   my $caller_package = caller;
 
   # TODO: if module is empty, module overloading needs to take effect
-  # certain stuff may have more than one overload, odr even more than one type
+  # certain stuff may have more than one overload, or even more than one type
   defined $caller_package     or croak 'need to be included from a caller reference';
 
   $params{module}     ||= _calc_modules_from_overloads(%params) if $params{overloads};
       @$configs
     );
 
+    @return = sort_by { $_->config->sortkey } @return;
+
     return \@return;
   }
 }
         # remove rose aliases. query builder sadly is not reentrant, and will reuse the same aliases. :(
         $query{$key} =~ s{\bt\d+(?:\.)?\b}{}g;
 
-        # manually inline the values. again, rose doen't know how to handly bind params in subqueries :(
+        # manually inline the values. again, rose doen't know how to handle bind params in subqueries :(
         $query{$key} =~ s{\?}{ $config->dbh->quote(shift @{ $bind_vals{$key} }) }xeg;
 
         $query{$key} =~ s{\n}{ }g;
 
 =head1 NAME
 
-SL::DB::Helper::CustomVariables - Mixin to provide custom variables relations
+SL::DB::Helper::CustomVariables - Mixin to provide custom variable relations
 
 =head1 SYNOPSIS