--- flag_weights.module	2010-12-31 18:04:47.964106242 +0100
+++ flag_weights.linksunten.module	2010-12-31 03:22:45.000000000 +0100
@@ -6,8 +6,8 @@
  * Add flag-weights to the Flag module.
  */
 
-define('MIN_DEFAULT_WEIGHT', -128);
-define('MAX_DEFAULT_WEIGHT', 127);
+define('MIN_DEFAULT_WEIGHT', -2147483648);
+define('MAX_DEFAULT_WEIGHT', 2147483647);
 
 /**
  * Implementation of hook_schema_alter(). We alter $schema by reference.
@@ -180,7 +180,7 @@ function flag_weights_flag_form_submit($
 }
 
 function _flag_weights_get_default_weight($fid) {
-  return (int) db_result(db_query("SELECT default_weight FROM {flags} WHERE fid = %d", $fid));
+  return db_result(db_query("SELECT default_weight FROM {flags} WHERE fid = %d", $fid));
 }
 
 function _flag_weights_set_default_weight($fid, $default_weight) {
@@ -198,14 +198,24 @@ function flag_weights_flag($action, $fla
 
     // If the configured default weight is MIN/MAX then set it to the right int.
     if ($default_weight == MIN_DEFAULT_WEIGHT) {
-      $found_min = db_result(db_query("SELECT min(weight) FROM {flag_content} WHERE fid = %d AND uid = %d", $flag->fid, $account->uid));
-      if ($found_min !== FALSE && $found_min > MIN_DEFAULT_WEIGHT) {
+      if ($flag->global) {
+        $found_min = db_result(db_query("SELECT min(weight) FROM {flag_content} WHERE fid = %d", $flag->fid));
+      }
+      else {
+        $found_min = db_result(db_query("SELECT min(weight) FROM {flag_content} WHERE fid = %d AND uid = %d", $flag->fid, $account->uid));
+      }
+      if (($found_min !== FALSE) && ($found_min > MIN_DEFAULT_WEIGHT)) {
         $default_weight = $found_min - 1;
       }
     }
     elseif ($default_weight == MAX_DEFAULT_WEIGHT) {
-      $found_max = db_result(db_query("SELECT max(weight) FROM {flag_content} WHERE fid = %d AND uid = %d", $flag->fid, $account->uid));
-      if ($found_max !== FALSE && $found_max < MAX_DEFAULT_WEIGHT) {
+      if ($flag->global) {
+        $found_max = db_result(db_query("SELECT max(weight) FROM {flag_content} WHERE fid = %d", $flag->fid));
+      }
+      else {
+        $found_max = db_result(db_query("SELECT max(weight) FROM {flag_content} WHERE fid = %d AND uid = %d", $flag->fid, $account->uid));
+      }
+      if (($found_max !== FALSE) && ($found_max < MAX_DEFAULT_WEIGHT)) {
         $default_weight = $found_max + 1;
       }
     }
