--- userpoints_badges.module	2009-02-22 01:56:17.000000000 -0500
+++ userpoints_badges.module.new	2010-08-11 11:26:27.000000000 -0400
@@ -115,11 +115,14 @@ function userpoints_badges_userpoints($o
     case 'points after':
       $badges = userpoints_badges_get_badges();
       $total_points = userpoints_get_current_points($params['uid'], 'all');
+      
+      // Remove all existing badges for this user
+      db_query("DELETE FROM {user_badges_user} WHERE uid = %d AND type LIKE 'Userpoints%'", $params['uid']);
+      
+      // Iterate through each badge and assign any badge that passes the threshold 
       foreach ($badges as $badge) {
         if ($total_points >= $badge->userpoints_goal) {
-          if (!db_result(db_query('SELECT uid FROM {user_badges_user} WHERE bid=%d AND uid=%d', $badge->bid, $params['uid']))) {
-            user_badges_user_add_badge($params['uid'], $badge->bid, t('Userpoints @bid', array('@bid' => $badge->bid)));
-          }
+          user_badges_user_add_badge($params['uid'], $badge->bid, t('Userpoints @bid', array('@bid' => $badge->bid)));
         }
       }
   }
