diff --git a/aioice/ice.py b/aioice/ice.py
index <HASH>..<HASH> 100644
--- a/aioice/ice.py
+++ b/aioice/ice.py
@@ -441,17 +441,23 @@ class Component:
         request.add_message_integrity(self.__connection.remote_password.encode('utf8'))
         request.add_fingerprint()
 
+        # transaction failed
         try:
             response, addr = await pair.protocol.request(request, pair.remote_addr)
-            if addr == pair.remote_addr:
-                pair.state = CandidatePair.State.SUCCEEDED
-                if self.__connection.ice_controlling or pair.remote_nominated:
-                    self.nominate_pair(pair)
-            else:
-                logger.warning('Checking pair %s -> not symetric' % repr(pair))
-                pair.state = CandidatePair.State.FAILED
         except exceptions.TransactionError as e:
             pair.state = CandidatePair.State.FAILED
+            return
+
+        # check remote address matches
+        if addr != pair.remote_addr:
+            logger.warning('Checking pair %s failed : source address mismatch' % repr(pair))
+            pair.state = CandidatePair.State.FAILED
+            return
+
+        # success
+        pair.state = CandidatePair.State.SUCCEEDED
+        if self.__connection.ice_controlling or pair.remote_nominated:
+            self.nominate_pair(pair)
 
     def nominate_pair(self, pair):
         logger.info('Nominated pair %s' % repr(pair))
[ice] refactor check outcome handling