Index: acidfree.module
===================================================================
--- acidfree.module	(revision 542)
+++ acidfree.module	(working copy)
@@ -244,7 +244,9 @@
                     'node.nid DESC' => t('Latest post first'),
                     'node.nid ASC' => t('Posted order'),
                     'node.title ASC' => t('Alphabetical order'),
+                    'node.title DESC' => t('Reverse alphabetical order'),
                     'node.created ASC' => t('Chronological order by creation date'),
+                    'node.created DESC' => t('Reverse chronological order by creation date'),
                 ),
             '#default_value' => $node->order_by,
             '#weight' => -1,
@@ -780,7 +782,9 @@
                     'node.nid DESC' => t('Latest post first'),
                     'node.nid ASC' => t('Posted order'),
                     'node.title ASC' => t('Alphabetical order'),
+                    'node.title DESC' => t('Reverse alphabetical order'),
                     'node.created ASC' => t('Chronological order by creation date'),
+                    'node.created DESC' => t('Reverse chronological order by creation date'),
                 ),
         );
     $form['album']['acidfree_order_force'] = array(
@@ -2094,7 +2098,9 @@
        included. Works around a bug when sorting on title and title has embedded
        single quote
        */
-    $query = 'SELECT COUNT(n.nid) FROM {node} n INNER JOIN {term_node} tn ON n.nid = tn.nid WHERE n.type <> \'acidfree\' AND tn.tid = %d AND (n.moderate = 0 AND n.status = 1) AND ' . _acidfree_filter_clause($order, 'n') . " < '" . _acidfree_filter_clause($order, $node) . "' and n.nid <> %d";
+    foreach ($order[0] as $k => $ltgt) { break; }
+    $ltgt = $ltgt == 'ASC' ? '<' : '>';
+    $query = 'SELECT COUNT(n.nid) FROM {node} n INNER JOIN {term_node} tn ON n.nid = tn.nid WHERE n.type <> \'acidfree\' AND tn.tid = %d AND (n.moderate = 0 AND n.status = 1) AND ' . _acidfree_filter_clause($order, 'n') . " $ltgt '" . _acidfree_filter_clause($order, $node) . "' and n.nid <> %d";
 
     $query = db_rewrite_sql($query);
     $res = db_query($query, $parent, $node->nid);
@@ -2437,10 +2443,6 @@
   for ($i=0; $i<count($order); $i++) {
     $item = $order[$i];
     foreach ($item as $k => $v) {
-      // Due to a limitation in sort filter the title can only be sorted ascending
-      if ($k == 'title') {
-        $v = 'ASC';
-      }
       $sort[] = "$k $v";
     }
   }
@@ -2495,30 +2497,18 @@
           break;
 
         case 'created':
-            if ($object) {
+              if ($object) {
                 $filter[] = str_pad($node_data->created, 10, '0', STR_PAD_LEFT);
               } else {
-                $filter[] = "LPAD(n.created, 10, '0')";
-            }
+                $filter[] = "cast(LPAD(n.created, 10, '0') as char)";
+              }
             break;
-
         case 'nid':
-            if (strtoupper($v) == 'DESC') {
               if ($object) {
-                $filter[] = str_pad(9999999999 - $node_data->nid, 10, '0', STR_PAD_LEFT);
-              } else {
-                $filter[] = "cast(LPAD(9999999999 - n.nid, 10, '0') as char)";
-              }
-            }
-            else {
-              if ($object) {
                 $filter[] = str_pad($node_data->nid, 10, '0', STR_PAD_LEFT);
               } else {
-                // kjh: added the cast to make titles compare in case sensitive
-                //      manner
                 $filter[] = "cast(LPAD(n.nid, 10, '0') as char)";
               }
-            }
             break;
 
         default:
@@ -2547,8 +2537,8 @@
     $order = explode(' ', $order);
     $sort = array();
     $sort[] = array($order[0] => $order[1]);
-    if ($order[0] == 'created' || $order[0] == 'title') {
-        $sort[] = array('nid' => 'ASC');
+    if ($order[0] != 'node.nid') {
+        $sort[] = array('nid' => $order[1]);
     }
     return $sort;
 }
