diff --git a/rank_progress.py b/rank_progress.py
--- a/rank_progress.py
+++ b/rank_progress.py
@@ -77,9 +77,11 @@ class RankTracker:
 			else:
 				pass
 
-		self._best = max(self._best, self._rounded_rating)
-		new_rank = self.rank
-		return new_rank if new_rank != old_rank else False
+		if self._rounded_rating > self._best and self.rank != old_rank:
+			self._best = self._rounded_rating
+			return self.rank
+		else:
+			return False
 
 
 def parse_record(record):
diff --git a/test.py b/test.py
--- a/test.py
+++ b/test.py
@@ -18,7 +18,6 @@ class TestRankTracker(TestCase):
 		# 2+ ranks leaps
 
 		# limited when pushing the personal best
-		# self.skipTest("not yet implemented")
 		t = RankTracker(1100)
 		self.assertEqual(t.update(1299), "9k")
 		self.assertEqual(t.update(1250), "8k")
@@ -31,16 +30,31 @@ class TestRankTracker(TestCase):
 		t.update(849)  # 11k
 		self.assertEqual(t.update(1250), "8k")
 
+	def test_repeated_promotion(self):
+		t = RankTracker(1945)
+
+		self.assertEqual(t.update(1950), "1k")
+		self.assertFalse(t.update(1895))
+		self.assertEqual(t.rank, "2k")
+		self.assertFalse(t.update( 1951))
+		self.assertEqual(t.rank, "1k")
+		self.assertFalse(t.update(2049))
+		self.assertEqual(t.update(2051), "1d")
+
 	def test_demotion(self):
 		t = RankTracker(2069)
-		self.assertEqual(t.update(1995), "1k")
+		self.assertFalse(t.update(1995))  # 1k
+		self.assertEqual(t.rank, "1k")
 
 		t = RankTracker(1590)
-		self.assertEqual(t.update(1387), "7k")
+		self.assertFalse(t.update(1387))  # 7k
+		self.assertEqual(t.rank, "7k")
 
 		t = RankTracker(1087)
 		self.assertFalse(t.update(995))
-		self.assertEqual(t.update(940), "11k")
+		self.assertEqual(t.rank, "10k")
+		self.assertFalse(t.update(940))  # 11k
+		self.assertEqual(t.rank, "11k")
 
 	def test_edges_cases(self):
 		t = RankTracker(-900)