diff --git a/aspa/test.py b/aspa/test.py
index 8f8019c..aef0cdb 100644
--- a/aspa/test.py
+++ b/aspa/test.py
@@ -62,33 +62,33 @@ class PeerTest(unittest.TestCase):
         ])
 
     def test_all_valid(self):
-        self.assertFalse(self.validator.is_aspa_invalid_peer(64501, [64501, 64500]))
-        self.assertFalse(self.validator.is_aspa_invalid_peer(64502, [64502, 64501, 64500]))
-        self.assertFalse(self.validator.is_aspa_invalid_peer(64503, [64503, 64502, 64501, 64500]))
-        self.assertFalse(self.validator.is_aspa_invalid_peer(64504, [64504, 64503, 64502, 64501]))
-        self.assertFalse(self.validator.is_aspa_invalid_peer(64504, [64504, 64503, 64502]))
-        self.assertFalse(self.validator.is_aspa_invalid_peer(64504, [64504, 64503]))
-        self.assertFalse(self.validator.is_aspa_invalid_peer(64504, [64504]))
+        self.assertFalse(self.validator.is_aspa_invalid_peer([64501, 64500]))
+        self.assertFalse(self.validator.is_aspa_invalid_peer([64502, 64501, 64500]))
+        self.assertFalse(self.validator.is_aspa_invalid_peer([64503, 64502, 64501, 64500]))
+        self.assertFalse(self.validator.is_aspa_invalid_peer([64504, 64503, 64502, 64501]))
+        self.assertFalse(self.validator.is_aspa_invalid_peer([64504, 64503, 64502]))
+        self.assertFalse(self.validator.is_aspa_invalid_peer([64504, 64503]))
+        self.assertFalse(self.validator.is_aspa_invalid_peer([64504]))
 
     def test_prepend_valid(self):
-        self.assertFalse(self.validator.is_aspa_invalid_peer(64501, [64501, 64500, 64500]))
-        self.assertFalse(self.validator.is_aspa_invalid_peer(64502, [64502, 64502, 64501, 64501, 64500]))
-        self.assertFalse(self.validator.is_aspa_invalid_peer(64503, [64503, 64502, 64502, 64501, 64500, 64500]))
+        self.assertFalse(self.validator.is_aspa_invalid_peer([64501, 64500, 64500]))
+        self.assertFalse(self.validator.is_aspa_invalid_peer([64502, 64502, 64501, 64501, 64500]))
+        self.assertFalse(self.validator.is_aspa_invalid_peer([64503, 64502, 64502, 64501, 64500, 64500]))
 
     def test_some_unknown(self):
-        self.assertFalse(self.validator.is_aspa_invalid_peer(64505, [64505, 64504, 64503, 64502]))
-        self.assertFalse(self.validator.is_aspa_invalid_peer(64503, [64503, 64503, 64502, 64505]))
+        self.assertFalse(self.validator.is_aspa_invalid_peer([64505, 64504, 64503, 64502]))
+        self.assertFalse(self.validator.is_aspa_invalid_peer([64503, 64503, 64502, 64505]))
 
     def test_all_unknown(self):
-        self.assertFalse(self.validator.is_aspa_invalid_customer(64506, [64506, 64507, 64508]))
+        self.assertFalse(self.validator.is_aspa_invalid_peer([64506, 64507, 64508]))
 
     def test_some_invalid(self):
-        self.assertTrue(self.validator.is_aspa_invalid_peer(64505, [64505, 64505, 64503, 64503]))
-        self.assertTrue(self.validator.is_aspa_invalid_peer(64504, [64504, 64503, 64506, 64500]))
+        self.assertTrue(self.validator.is_aspa_invalid_peer([64505, 64505, 64503, 64503]))
+        self.assertTrue(self.validator.is_aspa_invalid_peer([64504, 64503, 64506, 64500]))
 
     def test_peer_originated(self):
         for i in [64500, 64501, 64502, 64503, 64504, 64505]:
-            self.assertFalse(self.validator.is_aspa_invalid_peer(i, [i]))
+            self.assertFalse(self.validator.is_aspa_invalid_peer([i]))
 
 
 class UpstreamTest(unittest.TestCase):
diff --git a/aspa/validate.py b/aspa/validate.py
index 05dbc75..72bddce 100644
--- a/aspa/validate.py
+++ b/aspa/validate.py
@@ -24,10 +24,8 @@ class Validator:
 
         return False
 
-    def is_aspa_invalid_peer(self, peer_asn: int, bgp_path: list[int]) -> bool:
-        remove_peer = list(dropwhile(lambda asn: asn != peer_asn, bgp_path))
-
-        for prev_asn, asn in zip(chain([peer_asn], remove_peer), remove_peer):
+    def is_aspa_invalid_peer(self, bgp_path: list[int]) -> bool:
+        for prev_asn, asn in zip(bgp_path, bgp_path[1:]):
             if prev_asn == asn:
                 continue
 
@@ -66,11 +64,11 @@ class BirdValidator(Validator):
 
         return False
 
-    def is_aspa_invalid_peer(self, peer_asn: int, bgp_path: list[int]) -> bool:
-        prev_asn = peer_asn
+    def is_aspa_invalid_peer(self, bgp_path: list[int]) -> bool:
+        prev_asn = bgp_path[0]
 
         for asn in bgp_path:
-            if asn != peer_asn and prev_asn != asn and self.is_invalid_pair(prev_asn, asn):
+            if prev_asn != asn and self.is_invalid_pair(prev_asn, asn):
                 return True
             prev_asn = asn
 
diff --git a/filter_aspa.conf b/filter_aspa.conf
index 4176074..96bd59d 100644
--- a/filter_aspa.conf
+++ b/filter_aspa.conf
@@ -10,12 +10,11 @@ function is_aspa_invalid_customer() {
     return false;
 }
 
-function is_aspa_invalid_peer(int peer_asn) {
-    int prev_asn = peer_asn;
+function is_aspa_invalid_peer() {
+    int prev_asn = bgp_path.first;
 
     for int cur_asn in bgp_path do {
-        if cur_asn != peer_asn && prev_asn != cur_asn &&
-                is_aspa_invalid_pair(prev_asn, cur_asn) then
+        if prev_asn != cur_asn && is_aspa_invalid_pair(prev_asn, cur_asn) then
             return true;
         prev_asn = cur_asn;
     }