diff --git a/weblinks.module b/weblinks.module
index 26ae789..f98dd3a 100644
--- a/weblinks.module
+++ b/weblinks.module
@@ -1572,9 +1572,8 @@ function _weblinks_trim($text, $length = NULL) {
  *     'all' for no filter on term id
  * @param string $sort
  *   The order in which to return the results. Valid values are 'standard',
- *   'title', 'popular', 'recent' and 'random'.
- *   There are also special values 'user' and 'count' which control more than
- *   just the sorting.
+ *   'title', 'popular', 'recent', 'random', 'weight', 'user' and 'count'.
+ *   'user' and 'count' are special values and control more than just the sorting.
  * @param int $limit
  *   The maximum number of rows to retrieve - 0 means unlimited.
  *
@@ -1582,6 +1581,12 @@ function _weblinks_trim($text, $length = NULL) {
  *   The result set from the query.
  */
 function _weblinks_get_query($tid = 0, $sort = 'title', $limit = 0) {
+//   dd('-- _weblinks_get_query --');
+//   dd($tid, '$tid');
+//   dd($sort, '$sort');
+//   dd($limit, '$limit');
+//   $backtrace = ddebug_backtrace(TRUE);
+//   if (is_array($backtrace)) dd(array_keys(ddebug_backtrace(TRUE)), 'backtrace keys');
   $query = db_select('node', 'n');
   $query->fields('n', array('nid', 'title', 'sticky', 'created', 'changed', 'uid', 'status'));
   $query->addJoin('INNER', 'weblinks', 'w', 'n.vid = w.vid');
@@ -1612,6 +1617,12 @@ function _weblinks_get_query($tid = 0, $sort = 'title', $limit = 0) {
     }
   }
 
+  // Join on the weight table if ordering by weight.
+  if ($sort == 'weight') {
+    $query->addJoin('LEFT', 'weight_weights', 'wgt', 'wgt.entity_id = n.nid');
+    $query->addField('wgt', 'weight');
+  }
+
   // Set the ORDER and various additional conditions depending on $sort.
   switch ($sort) {
     case 'standard':
@@ -1635,6 +1646,11 @@ function _weblinks_get_query($tid = 0, $sort = 'title', $limit = 0) {
     case 'random':
       $query->orderBy('RAND()');
       break;
+    case 'weight':
+      $query->orderBy('sticky', 'DESC');
+      $query->orderBy('weight');
+      $query->orderBy('created', 'DESC');
+      break;
     case 'user':
       $query->orderBy('sticky', 'DESC');
       $query->orderBy('created', 'DESC');
@@ -1661,10 +1677,64 @@ function _weblinks_get_query($tid = 0, $sort = 'title', $limit = 0) {
     $query->range(0, $limit);
   }
 
+//   dd($query->execute()->queryString, 'execute()->queryString');
+//   dd('-----------------------');
   return $query->execute();
 }
 
 /**
+ * Helper function to return form data for link sort options.
+ * 
+ * This function avoids duplicating code which would be very similar in both 
+ * hook_form_alter() in .module and weblinks_admin_settings() in .admin.inc.
+ */
+function _weblinks_sort_options() {
+//  dd('-- _weblinks_sort_options() --');
+  $options = array(
+    '' => t('Default'),
+    'standard' => t('Normal Drupal'),
+    'title' => t('Legacy'),
+    'weight' => t('Weighted'),
+  );
+  $radio_prefix_suffix = array(
+    '#prefix' => '<span class="weblinks-radios-wrapper">',
+    '#suffix' => '</span>',
+  );
+  $radio_extras = array(
+    '' => array('#description' => t('Use the order from main page settings')) + $radio_prefix_suffix,
+    'standard' => array('#description' => t('by sticky, created date.')) + $radio_prefix_suffix,
+    'title' => array('#description' => t('by sticky, title.')) + $radio_prefix_suffix,
+    'weight' => array('#description' => t('by sticky, weight, title.')) + $radio_prefix_suffix,
+  );
+  $description_urls = array(
+    '!weblinks_content_type' => url('admin/structure/types/manage/weblinks'),
+    '!module_page' => url('admin/modules'),
+    '!weight_project_page' => 'http://www.drupal.org/project/weight',
+  );
+  $description = t('This option determines how the links will be ordered. ');
+  if (module_exists('weight')) {
+    if (in_array('weblinks', _weight_get_types())) {
+      $description .= t('The <a href="!weight_project_page">weight module</a> is enabled for Web Links. You can adjust the settings via the <a href="!weblinks_content_type">web links content type</a> page.', $description_urls);
+    }
+    else {
+      $radio_extras['weight']['#disabled'] = TRUE;
+      $description .= t('The <a href="!weight_project_page">weight module</a> is available, but is not turned on for Web Links. Enable it via the <a href="!weblinks_content_type">web links content type</a> page.', $description_urls);
+    }
+  }
+  else {
+    $radio_extras['weight']['#disabled'] = TRUE;
+    $description .= t('The Weight module can be used to further refine the link order. Download it from the <a href="!weight_project_page">weight project page</a>, then <a href="!module_page">enable the module</a> and turn it on for the <a href="!weblinks_content_type">web links content type</a>', $description_urls);
+  }
+  $return = array(
+    'options' => $options, 
+    'radio_extras' => $radio_extras, 
+    'description' => $description,
+  );
+//  dd($return, '$return');
+  return $return;
+} 
+
+/**
  * Implements hook_form_alter().
  *
  * Alters the taxonomy term form to allow us to use it.
@@ -1721,21 +1791,35 @@ function weblinks_form_alter(&$form, &$form_state, $form_id) {
       );
 
       $sort_options = array(
-        '' => t('Default as defined by main page setting.'),
+        '' => t('Default.'),
         'standard' => t('Normal Drupal - by sticky, weight, created date.'),
         'title' => t('Legacy - by sticky, weight, title.'),
         );
-      $form['weblinks']['weblinks_group_sort_' . $tid] = array(
+      $form['weblinks']['weblinks_group_sort_old_' . $tid] = array(
         '#type' => 'radios',
         '#options' => $sort_options,
-        '#title' => t('Link sort order'),
-        '#default_value' => variable_get('weblinks_group_sort_' . $tid, ''),
-        '#description' => t('This determines how the links are displayed within their group. Use this to override the main page setting.'),
+        '#title' => t('Link sort order - old'),
+        '#default_value' => variable_get('weblinks_group_sort_old_' . $tid, ''),
+        '#description' => t('This determines how the links are display within thier group.'),
         '#required' => FALSE,
         '#prefix' => '<div class="weblinks-radios">',
         '#suffix' => '</div>',
       );
 
+      /* >>>> NEW <<<< */
+      $sort = _weblinks_sort_options();
+      $form['weblinks']['weblinks_group_sort_' . $tid] = array(
+        '#type' => 'radios',
+        '#options' => $sort['options'],
+        '#title' => t('Link sort order'),
+        '#default_value' => variable_get('weblinks_group_sort_' . $tid, ''),
+        '#description' => $sort['description'],
+        '#required' => FALSE, // TRUE means we cannot use ' ' as a key. FALSE means may end up with 'weight' not being changed if weight module not available
+        '#prefix' => '<div class="weblinks-radios">',
+        '#suffix' => '</div><div class="clear-block"></div>',
+        );
+      $form['weblinks']['weblinks_group_sort_' . $tid] += $sort['radio_extras'];
+
       $form['relations']['parent']['#description'] = t('Web Links parent groups.');
       $form['relations']['weight']['#description'] = t('Web Links groups are displayed in ascending order by weight.');
 
diff --git a/weblinks.admin.inc b/weblinks.admin.inc
index d270aa6..9e8b71e 100644
--- a/weblinks.admin.inc
+++ b/weblinks.admin.inc
@@ -45,7 +45,6 @@ function weblinks_admin_settings() {
       // If there is no field for this vocabulary then disable the radio button.
       if (!isset($vocab_field_info['all_vocab_fields'][$vocabulary->machine_name])) {
         $item_options[$vid]['#disabled'] = TRUE;
-        $item_options[$vid]['#prefix'] = '<span class="weblinks-radios-wrapper weblinks-disabled">';
         $disabled_warning = t('To use a vocabulary which is disabled above add the appropriate term reference field via the <a href="@link">Weblinks Content Type</a> page.', array(
           '@link' => url('admin/structure/types/manage/weblinks/fields'),
         ));
@@ -180,16 +179,33 @@ function weblinks_admin_settings() {
   else {
     $sort_description .= t('The Weight module can be used to further refine the link order. Download it from the <a href="!weight_project_page">weight project page</a>', $sort_description_links);
   }
-  $form['page']['weblinks_page_sort'] = array(
+  $form['page']['weblinks_page_sort_old'] = array(
     '#type' => 'radios',
     '#options' => $sort_options,
-    '#title' => t('Page Sort order'),
-    '#default_value' => variable_get('weblinks_page_sort', 'title'),
+    '#title' => t('Page Sort order - old'),
+    '#default_value' => variable_get('weblinks_page_sort_old', 'title'),
     '#description' => $sort_description,
     '#required' => FALSE,
     '#prefix' => '<div class="weblinks-radios">',
     '#suffix' => '</div><div class="clear-block"></div>',
     );
+  
+  /* >>>> NEW <<<< */
+  $sort = _weblinks_sort_options();
+  // The full page settings should not have the additional 'default to main'
+  // setting which is only applicable for groups to override the mian setting.
+  unset($sort['options']['']);
+  $form['page']['weblinks_page_sort'] = array(
+    '#type' => 'radios',
+    '#options' => $sort['options'],
+    '#title' => t('Sort order'),
+    '#default_value' => variable_get('weblinks_page_sort', 'standard'),
+    '#description' => $sort['description'],
+    '#required' => FALSE,
+    '#prefix' => '<div class="weblinks-radios">',
+    '#suffix' => '</div><div class="clear-block"></div>',
+    );
+  $form['page']['weblinks_page_sort'] += $sort['radio_extras'];
 
   $form['page']['weblinks_pagedesc'] = array(
     '#type' => 'textarea',
diff --git a/weblinks.admin.css b/weblinks.admin.css
index 88bc8c8..40cb3ff 100644
--- a/weblinks.admin.css
+++ b/weblinks.admin.css
@@ -45,8 +45,8 @@ span.weblinks-radios-wrapper div.description {
   max-width:330px;
 }
 
-.weblinks-radios-wrapper.weblinks-disabled,
-.weblinks-radios-wrapper.weblinks-disabled .description {
+.weblinks-radios-wrapper .form-disabled,
+.weblinks-radios-wrapper .form-disabled .description {
   color: #999;
 }
 
