diff -urp birthdays/birthdays.admin.inc birthdays_new/birthdays.admin.inc
--- birthdays/birthdays.admin.inc	2008-10-05 11:18:37.000000000 +0200
+++ birthdays_new/birthdays.admin.inc	2009-08-04 14:36:51.000000000 +0200
@@ -77,6 +77,7 @@ function birthdays_admin_settings() {
     '#options' => array(
       BIRTHDAYS_PAGE_FILTER_SORT_DATE => t('Filter users, sort by date'),
       BIRTHDAYS_PAGE_FILTER_SORT_USER => t('Filter users, sort by username'),
+			BIRTHDAYS_PAGE_FILTER_SORT_UPCOMING => t('Filter users, sort by upcoming birthdays'),
       BIRTHDAYS_PAGE_NOFILTER_SORT_USER => t('Do not filter users, sort by username'),
     ),
   );
diff -urp birthdays/birthdays.module birthdays_new/birthdays.module
--- birthdays/birthdays.module	2009-02-03 10:33:27.000000000 +0100
+++ birthdays_new/birthdays.module	2009-08-04 13:30:03.000000000 +0200
@@ -99,6 +99,12 @@ define('BIRTHDAYS_PAGE_FILTER_SORT_USER'
 define('BIRTHDAYS_PAGE_NOFILTER_SORT_USER', '2');

 /**
+ * Do not show users without a birthday on the Birthdays listing
+ * and sort by upcoming birthday
+ */
+define('BIRTHDAYS_PAGE_FILTER_SORT_UPCOMING', '3');
+
+/**
  * Do not send an e-mail to the user on their birthday. Default.
  */
 define('BIRTHDAYS_USER_MAIL_NO', '0');
diff -urp birthdays/birthdays.page.inc birthdays_new/birthdays.page.inc
--- birthdays/birthdays.page.inc	2008-10-08 17:59:24.000000000 +0200
+++ birthdays_new/birthdays.page.inc	2009-08-04 14:57:05.000000000 +0200
@@ -32,14 +32,31 @@ function birthdays_view_page() {
     case 'mysqli':
       // Right join = filtering out
       $join = variable_get('birthdays_page_settings', BIRTHDAYS_PAGE_FILTER_SORT_DATE) != BIRTHDAYS_PAGE_NOFILTER_SORT_USER || !empty($filter_month) || !empty($filter_year) ? 'RIGHT JOIN' : 'LEFT JOIN';
-      $sort = variable_get('birthdays_page_settings', BIRTHDAYS_PAGE_FILTER_SORT_DATE) == BIRTHDAYS_PAGE_FILTER_SORT_DATE || !empty($filter_month) || !empty($filter_year) ? 'MONTH({dob}.birthday), DAYOFMONTH({dob}.birthday), YEAR({dob}.birthday), ' : '';
+      if (variable_get('birthdays_page_settings', BIRTHDAYS_PAGE_FILTER_SORT_DATE) == BIRTHDAYS_PAGE_FILTER_SORT_DATE || !empty($filter_month) || !empty($filter_year)) {
+				$sort = 'MONTH({dob}.birthday), DAYOFMONTH({dob}.birthday), YEAR({dob}.birthday), ';
+			}
+			else if (variable_get('birthdays_page_settings', BIRTHDAYS_PAGE_FILTER_SORT_DATE) == BIRTHDAYS_PAGE_FILTER_SORT_UPCOMING || !empty($filter_month) || !empty($filter_year)) {
+				$sort = '(DAYOFYEAR({dob}.birthday) - DAYOFYEAR(CURRENT_DATE())) > 0 DESC, DAYOFYEAR({dob}.birthday) - DAYOFYEAR(CURRENT_DATE()), ';
+			}
+			else {
+				$sort = '';
+			}
       $filter .= !empty($filter_month) ? " AND MONTH({dob}.birthday) = ". $filter_month : '';
       $filter .= !empty($filter_year) ? " AND YEAR({dob}.birthday) = ". $filter_year : '';
       break;
     case 'pgsql':
       // Right join = filtering out
       $join = variable_get('birthdays_page_settings', BIRTHDAYS_PAGE_FILTER_SORT_DATE) != BIRTHDAYS_PAGE_NOFILTER_SORT_USER || !empty($filter_month) || !empty($filter_year) ? 'RIGHT JOIN' : 'LEFT JOIN';
-      $sort = variable_get('birthdays_page_settings', BIRTHDAYS_PAGE_FILTER_SORT_DATE) == BIRTHDAYS_PAGE_FILTER_SORT_DATE || !empty($filter_month) || !empty($filter_year) ? "date_part('month', {dob}.birthday), date_part('day', {dob}.birthday), date_part('year', {dob}.birthday), " : '';
+      if (variable_get('birthdays_page_settings', BIRTHDAYS_PAGE_FILTER_SORT_DATE) == BIRTHDAYS_PAGE_FILTER_SORT_DATE || !empty($filter_month) || !empty($filter_year)) {
+				$sort =  "date_part('month', {dob}.birthday), date_part('day', {dob}.birthday), date_part('year', {dob}.birthday), ";
+			}
+			else if (variable_get('birthdays_page_settings', BIRTHDAYS_PAGE_FILTER_SORT_DATE) == BIRTHDAYS_PAGE_FILTER_SORT_UPCOMING || !empty($filter_month) || !empty($filter_year)) {
+				// This part of the query is untested for psql
+				$sort = "(date_part('doy', {dob}.birthday) - date_part('doy', CURRENT_DATE())) > 0 DESC, date_part('doy', {dob}.birthday) - date_part('doy', CURRENT_DATE()), ";
+			}
+			else {
+				$sort = '';
+			}
       $filter .= !empty($filter_month) ? " AND date_part('month', {dob}.birthday) = ". $filter_month : '';
       $filter .= !empty($filter_year) ? " AND date_part('year', {dob}.birthday) = ". $filter_year : '';
       break;
