diff -uprbwB ./relatedlinks.info ../../relatedlinks/relatedlinks.info
--- ./relatedlinks.info	2008-02-19 01:10:11.000000000 +0100
+++ ../../relatedlinks/relatedlinks.info	2008-03-27 22:56:27.000000000 +0100
@@ -1,6 +1,9 @@
 ; $Id: relatedlinks.info,v 1.2 2007/06/18 22:53:56 dww Exp $
 name = Related Links
-description = Displays links related to content.
+description = Displays links related to content
+package = Development
+version = "6.x-1.x-dev"
+core = "6.x"
 
 ; Information added by drupal.org packaging script on 2008-02-19
 version = "5.x-2.x-dev"
diff -uprbwB ./relatedlinks.install ../../relatedlinks/relatedlinks.install
--- ./relatedlinks.install	2007-02-26 18:26:10.000000000 +0100
+++ ../../relatedlinks/relatedlinks.install	2008-03-27 22:56:27.000000000 +0100
@@ -5,62 +5,17 @@
  * Implementation of hook_install().
  */
 function relatedlinks_install() {
-  $ret = array();
-
-  switch ($GLOBALS['db_type']) {
-    case 'mysqli':
-    case 'mysql':
-      db_query("CREATE TABLE {relatedlinks} (
-        lid int(11) unsigned NOT NULL auto_increment,
-        nid int(11) unsigned NOT NULL default 0,
-        url varchar(255) NOT NULL default '',
-        title varchar(255) default NULL,
-        type tinyint(4) unsigned NOT NULL default 1,
-        PRIMARY KEY (lid),
-        KEY nid (nid),
-        KEY nid_type (nid, type))
-        COMMENT = 'Relatedlinks module: store manual and parsed links.'
-        /*!40100 default CHARACTER SET utf8 */"
-      );
-      db_query("CREATE TABLE {relatedlinks_tracker} (
-        nid int(11) UNSIGNED NOT NULL,
-        keywords varchar(255) NULL,
-        updated int(11) NOT NULL default 0,
-        PRIMARY KEY (nid),
-        KEY (updated))
-        COMMENT = 'Table keeping track of discovered links.'
-        /*!40100 default CHARACTER SET utf8 */"
-      );
-      break;
-    case 'pgsql':
-      db_query("CREATE TABLE {relatedlinks} (
-        lid serial,
-        nid integer NOT NULL default 0,
-        url varchar(255) NOT NULL default '',
-        title varchar(255) default NULL,
-        type smallint NOT NULL default 1
-        PRIMARY KEY (lid))"
-      );
-      db_query("CREATE INDEX {relatedlinks}_nid_idx ON {relatedlinks}(nid)");
-      db_query("CREATE INDEX {relatedlinks}_nid_type_idx ON {relatedlinks}(nid, type)");
-      db_query("CREATE TABLE {relatedlinks_tracker} (
-        nid integer NOT NULL default 0,
-        keywords varchar(255) NULL,
-        updated integer NOT NULL default 0
-        PRIMARY KEY (nid))"
-      );
-      db_query("CREATE INDEX {relatedlinks_tracker}_updated_idx ON {relatedlinks_tracker}(updated)");
-  }
-  drupal_set_message(t('The relatedlinks module installation script has completed.'));
   if (!module_exists('taxonomy') && !module_exists('search')) {
     drupal_set_message(t('The discovered links feature of the relatedlinks module requires one of the following modules:
 <ul>
   <li>Taxonomy</li>
   <li>Search</li>
 </ul>'));
+    return;
   }
   
-  return $ret;
+  // Create tables.
+  drupal_install_schema('relatedlinks');
 }
 
 /**
@@ -99,25 +54,13 @@ function relatedlinks_update_2() {
 function relatedlinks_update_3() {
   $ret = array();
 
-  switch ($GLOBALS['db_type']) {
-    case 'mysqli':
-    case 'mysql':
-      $ret[] = update_sql("ALTER TABLE {relatedlinks} ADD lid int(11) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST");
-      $ret[] = update_sql("ALTER TABLE {relatedlinks} CHANGE link url varchar(255) NOT NULL default ''");
-      $ret[] = update_sql("ALTER TABLE {relatedlinks} ADD title varchar(255) DEFAULT NULL AFTER url");
-      // nid and type are UNSIGNED fields.
-      $ret[] = update_sql("ALTER TABLE {relatedlinks} CHANGE nid nid int(11) UNSIGNED NOT NULL DEFAULT 0");
-      $ret[] = update_sql("ALTER TABLE {relatedlinks} CHANGE type type tinyint(4) UNSIGNED NOT NULL DEFAULT 1");
-      $ret[] = update_sql("ALTER TABLE {relatedlinks} ADD INDEX nid_type (nid, type)");
-      break;
-    case 'pgsql':
-      // Needs testing. Field ordering needs to be added.
-      db_add_column($ret, 'relatedlinks', 'lid', 'serial');
-      db_change_column($ret, 'relatedlinks', 'link', 'url', 'varchar(255)', array('default' => "''", 'not null' => TRUE));
-      db_add_column($ret, 'relatedlinks', 'title', 'varchar(255)', array('default' => "NULL"));
-      $ret[] = update_sql("CREATE INDEX {relatedlinks}_nid_type_idx ON {relatedlinks}(nid, type)");
-      break;
-  }
+  db_drop_primary_key($ret, 'relatedlinks');
+  db_add_field($ret, 'relatedlinks', 'lid', array('type' => 'serial', 'size' => 'tiny', 'not null' => TRUE));
+  db_change_field($ret, 'relatedlinks', 'link', 'url', array('type' => 'varchar', 'length' => 255, 'not null' => TRUE, 'default' => ''));
+  db_add_field($ret, 'relatedlinks', 'title', array('type' => 'varchar', 'length' => '255', 'default' => NULL));
+  db_change_field($ret, 'relatedlinks', 'nid', array('type' => 'int', 'size' => 'tiny', 'unsigned' => TRUE, 'not null' => TRUE, 'default' => 0));
+  db_change_field($ret, 'relatedlinks', 'type', array('type' => 'int', 'size' => 'tiny', 'unsigned' => TRUE, 'not null' => TRUE, 'default' => 1));
+  db_add_index($ret, 'relatedlinks', 'nid_type', array('nid', 'type'));
 
   $result = db_query("SELECT * FROM {relatedlinks}");
   while ($link = db_fetch_array($result)) {
@@ -137,29 +80,31 @@ function relatedlinks_update_3() {
 function relatedlinks_update_4() {
   $ret = array();
 
-  switch ($GLOBALS['db_type']) {
-    case 'mysqli':
-    case 'mysql':
-      $ret[] = update_sql("CREATE TABLE {relatedlinks_tracker} (
-        nid int(11) UNSIGNED NOT NULL,
-        keywords varchar(255) NULL,
-        updated int(11) NOT NULL default 0,
-        PRIMARY KEY (nid),
-        KEY (updated))
-        COMMENT = 'Table keeping track of discovered links.'
-        /*!40100 default CHARACTER SET utf8 */"
+  $schema['relatedlinks_tracker'] = array(
+    'description' => t('Table keeping track of discovered links.'),
+    'fields' => array(
+      'nid' => array(
+        'type' => 'serial',
+        'size' => 'tiny',
+        'unsigned' => TRUE,
+        'not null' => TRUE),
+      'keywords' => array(
+        'type' => 'varchar',
+        'length' => 255,
+        'not null' => FALSE),
+      'updated' => array(
+        'type' => 'int',
+        'size' => 'tiny',
+        'not null' => TRUE,
+        'default' => 0),
+    ),
+    'indexes' => array(
+      'updated' => array('updated'),
+    ),
+    'primary key' => array('nid'),
       );
-      break;
-    case 'pgsql':
-      $ret[] = update_sql("CREATE TABLE {relatedlinks_tracker} (
-        nid integer NOT NULL default 0,
-        keywords varchar(255) NULL,
-        updated integer NOT NULL default 0
-        PRIMARY KEY (nid))"
-      );
-      $ret[] = update_sql("CREATE INDEX {relatedlinks_tracker}_updated_idx ON {relatedlinks_tracker}(updated)");
-  }
 
+  db_create_table($ret, 'relatedlinks_tracker', $schema);
   $ret[] = update_sql("INSERT INTO {relatedlinks_tracker} (nid) SELECT DISTINCT(nid) FROM {relatedlinks}");
 
   return $ret;
@@ -169,7 +114,77 @@ function relatedlinks_update_4() {
  * Implementation of hook_uninstall().
  */
 function relatedlinks_uninstall() {
-  db_query('DROP TABLE {relatedlinks_tracker}, {relatedlinks}');
+  $ret = array();
+  db_drop_table($ret, 'relatedlinks');
+  db_drop_table($ret, 'relatedlinks_tracker');
   variable_del('relatedlinks_types');
   variable_del('relatedlinks_node_types');
 }
+
+/**
+ * Implementation of hook_schema().
+ */
+function relatedlinks_schema() {
+  $schema['relatedlinks'] = array(
+    'description' => t('Relatedlinks module: store manual and parsed links.'),
+    'fields' => array(
+      'lid' => array(
+        'type' => 'serial',
+        'size' => 'tiny',
+        'unsigned' => TRUE,
+        'not null' => TRUE),
+      'nid' => array(
+        'type' => 'int',
+        'size' => 'tiny',
+        'unsigned' => TRUE,
+        'default' => 0),
+      'url' => array(
+        'type' => 'varchar',
+        'length' => 255,
+        'not null' => TRUE,
+        'default' => ''),
+      'title' => array(
+        'type' => 'varchar',
+        'length' => 255,
+        'not null' => FALSE,
+        'default' => NULL),
+      'type' => array(
+        'type' => 'int',
+        'size' => 'tiny',
+        'unsigned' => TRUE,
+        'not null' => TRUE,
+         'default' => 1),
+    ),
+    'indexes' => array(
+      'nid' => array('nid'),
+      'nid_type' => array('nid', 'type'),
+    ),
+    'primary key' => array('lid'),
+  );
+  
+  $schema['relatedlinks_tracker'] = array(
+    'description' => t('Table keeping track of discovered links.'),
+    'fields' => array(
+      'nid' => array(
+        'type' => 'serial',
+        'size' => 'tiny',
+        'unsigned' => TRUE,
+        'not null' => TRUE),
+      'keywords' => array(
+        'type' => 'varchar',
+        'length' => 255,
+        'not null' => FALSE),
+      'updated' => array(
+        'type' => 'int',
+        'size' => 'tiny',
+        'not null' => TRUE,
+        'default' => 0),
+    ),
+    'indexes' => array(
+      'updated' => array('updated'),
+    ),
+    'primary key' => array('nid'),
+  );
+
+  return $schema;
+}
diff -uprbwB ./relatedlinks.js ../../relatedlinks/relatedlinks.js
--- ./relatedlinks.js	2008-02-18 21:59:05.000000000 +0100
+++ ../../relatedlinks/relatedlinks.js	2008-03-28 15:59:49.000000000 +0100
@@ -8,7 +8,7 @@ $(document).ready(function() {
 
   // Parse textarea for links and store them in a global array.
   l = $(ta).val().split("\n");
-  r = new RegExp('\w*([^\ \w]+)\ *(.*)$', 'i');
+  r = new RegExp('^([^ ]+)\ (.*)$', 'i');
   links = new Array();
   for (var i = 0; i < l.length; i++) {
     m = l[i].match(r);
diff -uprbwB ./relatedlinks.module ../../relatedlinks/relatedlinks.module
--- ./relatedlinks.module	2008-02-18 15:42:59.000000000 +0100
+++ ../../relatedlinks/relatedlinks.module	2008-03-28 17:19:23.000000000 +0100
@@ -26,8 +26,8 @@ define('RELATEDLINKS_DISCOVERED', 3);
 /**
  * Implementation of hook_help().
  */
-function relatedlinks_help($section) {
-  switch ($section) {
+function relatedlinks_help($path, $arg) {
+  switch ($path) {
     case 'admin/settings/relatedlinks':
       return t('Select the types of links to store and display.');
     case 'admin/settings/relatedlinks/discovered':
@@ -57,46 +57,38 @@ Links:
 /**
  * Implementation of hook_menu().
  */
-function relatedlinks_menu($may_cache) {
+function relatedlinks_menu() {
   $items = array();
 
-  if ($may_cache) {
-    $items[] = array(
-      'path' => 'admin/settings/relatedlinks',
-      'title' => t('Related links'),
-      'description' => t('Configure related links settings.'),
-      'callback' => 'drupal_get_form',
-      'callback arguments' => array('_relatedlinks_settings_form'),
-      'access' => user_access('administer related links')
-    );
-    $items[] = array(
-      'path' => 'admin/settings/relatedlinks/configure',
-      'title' => t('Settings'),
-      'callback' => 'drupal_get_form',
-      'callback arguments' => array('_relatedlinks_settings_form'),
-      'access' => user_access('administer related links'),
+  $items['admin/settings/relatedlinks'] = array(
+    'title' => 'Related links',
+    'description' => 'Configure related links settings.',
+    'page callback' => 'drupal_get_form',
+    'page arguments' => array('_relatedlinks_settings_form'),
+    'access arguments' => array('administer related links')
+  );
+  $items['admin/settings/relatedlinks/configure'] = array(
+    'title' => 'Settings',
+    'page callback' => 'drupal_get_form',
+    'page arguments' => array('_relatedlinks_settings_form'),
+    'access arguments' => array('administer related links'),
       'type' => MENU_DEFAULT_LOCAL_TASK
     );
-    $items[] = array(
-      'path' => 'admin/settings/relatedlinks/discovered',
-      'title' => t('Discovered links'),
-      'callback' => 'drupal_get_form',
-      'callback arguments' => array('_relatedlinks_discovered_settings_form'),
-      'access' => user_access('administer related links'),
+  $items['admin/settings/relatedlinks/discovered'] = array(
+    'title' => 'Discovered links',
+    'page callback' => 'drupal_get_form',
+    'page arguments' => array('_relatedlinks_discovered_settings_form'),
+    'access arguments' => array('administer related links'),
       'type' => MENU_LOCAL_TASK,
       'weight' => 2
     );
-  }
-  else {
-    $items[] = array(
-      'path' => 'relatedlinks/autocomplete',
-      'callback' => 'relatedlinks_autocomplete',
-      'callback arguments' => array(arg(2)),
-      'access' => user_access('add related links'),
+  $items['relatedlinks/autocomplete'] = array(
+    'page callback' => 'relatedlinks_autocomplete',
+    'page arguments' => array(arg(2)),
+    'access arguments' => array('add related links'),
       'type' => MENU_LOCAL_TASK,
       'weight' => 2
     );
-  }
 
   return $items;
 }
@@ -133,7 +125,7 @@ function relatedlinks_block($op = 'list'
       // This is only valid if we're looking at a node now.
       if (arg(0) == 'node' && is_numeric(arg(1))) {
         $block = array();
-        $node = node_load(arg(1));
+        $node = menu_get_object();
         // Only display if node type is associated with this module.
         if ($node && in_array($node->type, variable_get('relatedlinks_node_types', _relatedlinks_node_get_types(TRUE)))) {
           $link_types = variable_get('relatedlinks_types', _relatedlinks_get_type_defaults());
@@ -249,7 +241,7 @@ function relatedlinks_nodeapi(&$node, $o
 /**
  * Implementation of hook_form_alter().
  */
-function relatedlinks_form_alter($form_id, &$form) {
+function relatedlinks_form_alter(&$form, $form_state, $form_id) {
   if (user_access('add related links') && isset($form['type']) &&
     ($form['type']['#value'] .'_node_form' == $form_id)) {
 
@@ -283,7 +275,7 @@ function relatedlinks_form_alter($form_i
 
       $form['relatedlinks_fieldset']['#collapsed'] = empty($relatedlinks);
 
-      $path = '/'. drupal_get_path('module', 'relatedlinks');
+      $path = './'. drupal_get_path('module', 'relatedlinks');
       drupal_add_js($path .'/relatedlinks.js');
       drupal_add_css($path .'/relatedlinks.css');
       drupal_add_js(array(
@@ -326,7 +318,7 @@ function relatedlinks_cron() {
   if (_relatedlinks_get_type_property(RELATEDLINKS_DISCOVERED, 'enabled') && $discovered['cron']) {
     $updated = time() - ($discovered['cron'] * 24 * 60 * 60);
     // Select all stale nodes.
-    $result = db_query("SELECT nid FROM {relatedlinks_tracker} WHERE updated != 0 AND updated < %d", $updated);
+    $result = db_query("SELECT nid FROM {relatedlinks_tracker} WHERE updated <> 0 AND updated < %d", $updated);
     $nids = array();
     while ($node = db_fetch_array($result)) {
       $nids[] = $node['nid'];
@@ -426,14 +418,14 @@ Related links blocks and forms will only
 /**
  * Process relatedlinks settings form submissions.
  */
-function _relatedlinks_settings_form_submit($form_id, $form_values) {
+function _relatedlinks_settings_form_submit($form, &$form_state) {
   // Sort on 'weight'.
-  uasort($form_values['relatedlinks_types'], '_relatedlinks_compare');
+  uasort($form_state['values']['relatedlinks_types'], '_relatedlinks_compare');
 
   // Store the entire relatedlinks_types table.
-  variable_set('relatedlinks_types', $form_values['relatedlinks_types']);
+  variable_set('relatedlinks_types', $form_state['values']['relatedlinks_types']);
 
-  $node_types = array_filter($form_values['relatedlinks_node_types']);
+  $node_types = array_filter($form_state['values']['relatedlinks_node_types']);
   variable_set('relatedlinks_node_types', array_keys($node_types));
 
   // Block table needs to be reset.
@@ -471,6 +463,7 @@ criteria are applied to results derived 
   $criteria = array(
     'taxonomy' => t('Results based on taxonomy terms (if enabled).'),
     'search' => t('Results from the search module (if enabled).'),
+		'language' => t('Results based on language of nodes.'),
     'node' => t('Prefer results of the same content type.'),
     'user' => t('Prefer results from the same author.'),
     'date' => t('Prefer newer results.'),
@@ -549,7 +542,7 @@ that they be periodically purged and rec
   $form['relatedlinks_discovered']['cron']['refresh'] = array(
     '#type' => 'select',
     '#title' => t('Automatically update discovered links older than'),
-    '#description' => t('This feature requires <a href="!cron">cron</a> to be enabled.', array('!cron' => url('admin/logs/status'))),
+    '#description' => t('This feature requires <a href="!cron">cron</a> to be enabled.', array('!cron' => url('admin/reports/status'))),
     '#parents' => array('relatedlinks_discovered', 'cron'),
     '#options' => array(
       1 => t('One day'),
@@ -569,17 +562,17 @@ that they be periodically purged and rec
 /**
  * Validate discovered links settings form submissions.
  */
-function _relatedlinks_discovered_settings_form_validate($form_id, $form_values) {
-  if ($form_values['relatedlinks_discovered']['ranking']['taxonomy'] === $form_values['relatedlinks_discovered']['ranking']['search'] && 
-    $form_values['relatedlinks_discovered']['ranking']['taxonomy'] === 0) {
+function _relatedlinks_discovered_settings_form_validate($form, &$form_state) {
+  if ($form_state['values']['relatedlinks_discovered']['ranking']['taxonomy'] === $form_state['values']['relatedlinks_discovered']['ranking']['search'] &&
+    $form_state['values']['relatedlinks_discovered']['ranking']['taxonomy'] === 0) {
 
     $error = t('The discovered links feature requires either taxonomy or search results to be enabled.');
     form_set_error('relatedlinks_discovered][criteria][ranking', $error);
   }
-  if ($form_values['relatedlinks_discovered']['ranking']['taxonomy'] === 'taxonomy' && !module_exists('taxonomy')) {
+  if ($form_state['values']['relatedlinks_discovered']['ranking']['taxonomy'] === 'taxonomy' && !module_exists('taxonomy')) {
     form_set_error('relatedlinks_discovered][criteria][ranking', t('The taxonomy module needs to be enabled for taxonomy results to be calculated.'));
   }
-  if ($form_values['relatedlinks_discovered']['ranking']['search'] === 'search' && !module_exists('search')) {
+  if ($form_state['values']['relatedlinks_discovered']['ranking']['search'] === 'search' && !module_exists('search')) {
     form_set_error('relatedlinks_discovered][criteria][ranking', t('The search module needs to be enabled for taxonomy results to be calculated.'));
   }
 }
@@ -587,16 +580,16 @@ function _relatedlinks_discovered_settin
 /**
  * Process discovered links settings form submissions.
  */
-function _relatedlinks_discovered_settings_form_submit($form_id, $form_values) {
+function _relatedlinks_discovered_settings_form_submit($form, &$form_state) {
   $indices = array('ranking', 'vocabularies', 'node_types');
   foreach ($indices as $index) {
-    if (isset($form_values['relatedlinks_discovered'][$index])) {
-      $form_values['relatedlinks_discovered'][$index] = array_filter($form_values['relatedlinks_discovered'][$index]);
-      $form_values['relatedlinks_discovered'][$index] = array_keys($form_values['relatedlinks_discovered'][$index]);
+    if (isset($form_state['values']['relatedlinks_discovered'][$index])) {
+      $form_state['values']['relatedlinks_discovered'][$index] = array_filter($form_state['values']['relatedlinks_discovered'][$index]);
+      $form_state['values']['relatedlinks_discovered'][$index] = array_keys($form_state['values']['relatedlinks_discovered'][$index]);
     }
   }
 
-  variable_set('relatedlinks_discovered', $form_values['relatedlinks_discovered']);
+  variable_set('relatedlinks_discovered', $form_state['values']['relatedlinks_discovered']);
 }
 
 /**
@@ -948,12 +941,14 @@ function _relatedlinks_get_discovered_li
   $user = in_array('user', $discovered['ranking']) ? $node->uid : FALSE;
   $date = in_array('date', $discovered['ranking']) ? TRUE : FALSE;
   $comments = in_array('comments', $discovered['ranking']) ? TRUE : FALSE;
+	$lang = in_array('language', $discovered['ranking']) ? $node->language : FALSE;
 
   $taxonomy_links = $search_links = array();
   if (module_exists('taxonomy') && in_array('taxonomy', $discovered['ranking'])) {
     $vids = isset($discovered['vocabularies']) ? $discovered['vocabularies'] : array();
     $tids = array_keys($node->taxonomy);
-    $taxonomy_links = _relatedlinks_taxonomy_select_nodes($node->nid, $tids, $max, $vids, $node_types, $date, $user, $comments);    
+
+    $taxonomy_links = _relatedlinks_taxonomy_select_nodes($node->nid, $tids, $max, $vids, $node_types, $date, $user, $comments, $lang);
   }
   if (module_exists('search') && in_array('search', $discovered['ranking'])) {
     $search_links = _relatedlinks_search_select_nodes($node->nid, $keywords, $max, $node_types);
@@ -998,7 +993,7 @@ function _relatedlinks_get_discovered_li
  *   Handle term hierarchies (depth).
  *   Escape SQL input as an added precaution.
  */
-function _relatedlinks_taxonomy_select_nodes($nid, $tids, $limit, $vids, $node_types, $date, $comments) {
+function _relatedlinks_taxonomy_select_nodes($nid, $tids, $limit, $vids, $node_types, $date, $user, $comments, $lang) {
   $links = array();
 
   foreach ($tids as $index => $tid) {
@@ -1019,6 +1014,9 @@ function _relatedlinks_taxonomy_select_n
     $where[] = 'n.status = 1';
     $where[] = 'n.moderate = 0';
     $where[] = 'n.nid != '. $nid;
+		if ($lang) {
+			$where[] = 'n.language = \'' . $lang . '\'';
+		}
 
     $order[] = 'count DESC';
     $order[] = 'sticky DESC';
@@ -1165,6 +1163,16 @@ function _relatedlinks_node_candidates($
 }
 
 /**
+ * Implementation of hook_theme().
+ */
+function relatedlinks_theme() {
+  return array(
+    'relatedlinks_types_table' => array('form' => NULL),
+		'relatedlinks' => array('arguments' => array('links' => array()))
+  );
+}
+
+/**
  * Theme the related links configuration table.
  * 
  * @param $form
