diff -up modules/aggregator/orig/aggregator.admin.inc modules/aggregator/aggregator.admin.inc
--- modules/aggregator/orig/aggregator.admin.inc	2008-07-22 09:37:35.000000000 -0500
+++ modules/aggregator/aggregator.admin.inc	2008-07-22 09:16:14.000000000 -0500
@@ -52,7 +52,7 @@ function aggregator_view() {
  * @see aggregator_form_feed_validate()
  * @see aggregator_form_feed_submit()
  */
-function aggregator_form_feed(&$form_state, $edit = array('refresh' => 900, 'title' => '', 'url' => '', 'fid' => NULL)) {
+function aggregator_form_feed(&$form_state, $edit = array('refresh' => 900, 'title' => '', 'url' => '', 'fid' => NULL, 'sort_by' => 'timestamp', 'sort_order' => 'DESC')) {
   $period = drupal_map_assoc(array(900, 1800, 3600, 7200, 10800, 21600, 32400, 43200, 64800, 86400, 172800, 259200, 604800, 1209600, 2419200), 'format_interval');
 
   if ($edit['refresh'] == '') {
@@ -79,6 +79,31 @@ function aggregator_form_feed(&$form_sta
     '#options' => $period,
     '#description' => t('The length of time between feed updates. (Requires a correctly configured <a href="@cron">cron maintenance task</a>.)', array('@cron' => url('admin/reports/status'))),
   );
+  $form['sort_options'] = array(
+    '#title' => t('Sort Options'),
+    '#type' => 'fieldset',
+  );
+  $form['sort_options']['sort_by'] = array(
+    '#type' => 'select',
+    '#title' => t('Sort By'),
+    '#default_value' => $edit['sort_by'],
+    '#options' => array(
+      'author' => 'Author',
+      'title' => 'Title',
+      'timestamp' => 'Publish Time',
+    ),
+    '#description' => t('The field to sort by.'),
+  );
+  $form['sort_options']['sort_order'] = array(
+    '#type' => 'select',
+    '#title' => t('Sort Order'),
+    '#default_value' => $edit['sort_order'],
+    '#options' => array(
+      'ASC' => 'Ascending',
+      'DESC' => 'Descending',
+    ),
+    '#description' => t('The sort order.'),
+  );
 
   // Handling of categories:
   $options = array();
diff -up modules/aggregator/orig/aggregator.install modules/aggregator/aggregator.install
--- modules/aggregator/orig/aggregator.install	2008-07-22 09:37:35.000000000 -0500
+++ modules/aggregator/aggregator.install	2008-07-22 09:24:53.000000000 -0500
@@ -171,7 +171,21 @@ function aggregator_schema() {
         'default' => 0,
         'size' => 'tiny',
         'description' => t("Number of items to display in the feed's block."),
-      )
+      ),
+      'sort_by' => array(
+        'type' => 'varchar',
+        'length' => 25,
+        'not null' => TRUE,
+        'default' => 'timestamp',
+        'description' => t('The field to sort by.'),
+      ),
+      'sort_order' => array(
+        'type' => 'varchar',
+        'length' => 5,
+        'not null' => TRUE,
+        'default' => '',
+        'description' => t('The order to sort in.'),
+      ),
     ),
     'primary key' => array('fid'),
     'unique keys' => array(
@@ -239,3 +253,17 @@ function aggregator_schema() {
 
   return $schema;
 }
+
+/**
+ * Implementation of hook_update_N()
+ */
+function aggregator_update_6100() {
+  $ret = array();
+
+  //add sort options to aggregator feeds
+  db_add_field($ret, 'aggregator_feed', 'sort_by', array('type' => 'varchar', 'length' => 25, 'not null' => TRUE, 'default' => 'timestamp', 'description' => t('The field to sort by.')));
+  db_add_field($ret, 'aggregator_feed', 'sort_order', array('type' => 'varchar', 'length' => 5, 'not null' => TRUE, 'default' => '', 'description' => t('The order to sort in.')));
+
+  return $ret;
+}
+
diff -up modules/aggregator/orig/aggregator.module modules/aggregator/aggregator.module
--- modules/aggregator/orig/aggregator.module	2008-07-22 09:37:35.000000000 -0500
+++ modules/aggregator/aggregator.module	2008-07-22 09:28:38.000000000 -0500
@@ -334,9 +334,9 @@ function aggregator_block($op = 'list', 
       list($type, $id) = explode('-', $delta);
       switch ($type) {
         case 'feed':
-          if ($feed = db_fetch_object(db_query('SELECT fid, title, block FROM {aggregator_feed} WHERE fid = %d', $id))) {
+          if ($feed = db_fetch_object(db_query('SELECT fid, title, block, sort_by, sort_order FROM {aggregator_feed} WHERE fid = %d', $id))) {
             $block['subject'] = check_plain($feed->title);
-            $result = db_query_range('SELECT * FROM {aggregator_item} WHERE fid = %d ORDER BY timestamp DESC, iid DESC', $feed->fid, 0, $feed->block);
+            $result = db_query_range('SELECT * FROM {aggregator_item} WHERE fid = %d ORDER BY %s %s, iid DESC', $feed->fid, $feed->sort_by, $feed->sort_order, 0, $feed->block);
             $read_more = theme('more_link', url('aggregator/sources/'. $feed->fid), t("View this feed's recent news."));
           }
           break;
@@ -408,7 +408,7 @@ function aggregator_save_feed($edit) {
     db_query('DELETE FROM {aggregator_category_feed} WHERE fid = %d', $edit['fid']);
   }
   if (!empty($edit['fid']) && !empty($edit['title'])) {
-    db_query("UPDATE {aggregator_feed} SET title = '%s', url = '%s', refresh = %d WHERE fid = %d", $edit['title'], $edit['url'], $edit['refresh'], $edit['fid']);
+    db_query("UPDATE {aggregator_feed} SET title = '%s', url = '%s', refresh = %d, sort_by = '%s', sort_order = '%s' WHERE fid = %d", $edit['title'], $edit['url'], $edit['refresh'], $edit['sort_by'], $edit['sort_order'], $edit['fid']);
   }
   else if (!empty($edit['fid'])) {
     $items = array();
@@ -423,7 +423,7 @@ function aggregator_save_feed($edit) {
     db_query('DELETE FROM {aggregator_item} WHERE fid = %d', $edit['fid']);
   }
   else if (!empty($edit['title'])) {
-    db_query("INSERT INTO {aggregator_feed} (title, url, refresh, block, description, image) VALUES ('%s', '%s', %d, 5, '', '')", $edit['title'], $edit['url'], $edit['refresh']);
+    db_query("INSERT INTO {aggregator_feed} (title, url, refresh, sort_by, sort_order, block, description, image) VALUES ('%s', '%s', %d, '%s', '%s', 5, '', '')", $edit['title'], $edit['url'], $edit['refresh'], $edit['sort_by'], $edit['sort_order']);
     // A single unique id for bundles and feeds, to use in blocks.
     $edit['fid'] = db_last_insert_id('aggregator_feed', 'fid');
   }
diff -up modules/aggregator/orig/aggregator.pages.inc modules/aggregator/aggregator.pages.inc
--- modules/aggregator/orig/aggregator.pages.inc	2008-07-22 09:37:35.000000000 -0500
+++ modules/aggregator/aggregator.pages.inc	2008-07-22 09:30:47.000000000 -0500
@@ -42,7 +42,7 @@ function aggregator_page_source($arg1, $
 
   // It is safe to include the fid in the query because it's loaded from the
   // database by aggregator_feed_load.
-  $items = aggregator_feed_items_load('SELECT * FROM {aggregator_item} WHERE fid = '. $feed->fid .' ORDER BY timestamp DESC, iid DESC');
+  $items = aggregator_feed_items_load('SELECT * FROM {aggregator_item} WHERE fid = '. $feed->fid .' ORDER BY '. $feed->sort_by .' '. $feed->sort_order .', iid DESC');
 
   return _aggregator_page_list($items, arg(3), $feed_source);
 }
@@ -275,14 +275,16 @@ function template_preprocess_aggregator_
  * Menu callback; displays all the feeds used by the aggregator.
  */
 function aggregator_page_sources() {
-  $result = db_query('SELECT f.fid, f.title, f.description, f.image, MAX(i.timestamp) AS last FROM {aggregator_feed} f LEFT JOIN {aggregator_item} i ON f.fid = i.fid GROUP BY f.fid, f.title, f.description, f.image ORDER BY last DESC, f.title');
+  $result = db_query('SELECT f.fid, f.title, f.description, f.image, f.sort_by, f.sort_order, MAX(i.timestamp) AS last FROM {aggregator_feed} f LEFT JOIN {aggregator_item} i ON f.fid = i.fid GROUP BY f.fid, f.title, f.description, f.image ORDER BY last DESC, f.title');
+
 
   $output = '';
   while ($feed = db_fetch_object($result)) {
     // Most recent items:
     $summary_items = array();
     if (variable_get('aggregator_summary_items', 3)) {
-      $items = db_query_range('SELECT i.title, i.timestamp, i.link FROM {aggregator_item} i WHERE i.fid = %d ORDER BY i.timestamp DESC', $feed->fid, 0, variable_get('aggregator_summary_items', 3));
+      $items = db_query_range('SELECT i.title, i.timestamp, i.link FROM {aggregator_item} i WHERE i.fid = %d ORDER BY %s %s', $feed->fid, $feed->sort_by, $feed->sort_order, 0, variable_get('aggregator_summary_items', 3));
+
       while ($item = db_fetch_object($items)) {
         $summary_items[] = theme('aggregator_summary_item', $item);
       }
Only in modules/aggregator/: orig
