diff --git a/bridges/modules/messages/src/lib.rs b/bridges/modules/messages/src/lib.rs
index 8f4911b8d032725808be26e646f5ddc846085e32..045015b775125896622f42c0de14c242cec012f2 100644
--- a/bridges/modules/messages/src/lib.rs
+++ b/bridges/modules/messages/src/lib.rs
@@ -329,9 +329,10 @@ pub mod pallet {
 					if let Some(updated_latest_confirmed_nonce) = updated_latest_confirmed_nonce {
 						log::trace!(
 							target: LOG_TARGET,
-							"Received lane {:?} state update: latest_confirmed_nonce={}",
+							"Received lane {:?} state update: latest_confirmed_nonce={}. Unrewarded relayers: {:?}",
 							lane_id,
 							updated_latest_confirmed_nonce,
+							UnrewardedRelayersState::from(&lane.storage().data()),
 						);
 					}
 				}
diff --git a/bridges/modules/messages/src/mock.rs b/bridges/modules/messages/src/mock.rs
index 3d78ab562d21ce77a2dff98eb644fd83043bf3f5..2e45d5b601f0b2989e2347bbee393a4e6f982098 100644
--- a/bridges/modules/messages/src/mock.rs
+++ b/bridges/modules/messages/src/mock.rs
@@ -26,8 +26,8 @@ use bp_messages::{
 		DeliveryPayments, DispatchMessage, DispatchMessageData, MessageDispatch,
 		ProvedLaneMessages, ProvedMessages, SourceHeaderChain,
 	},
-	total_unrewarded_messages, DeliveredMessages, InboundLaneData, LaneId, Message, MessageKey,
-	MessageNonce, MessagePayload, OutboundLaneData, UnrewardedRelayer, UnrewardedRelayersState,
+	DeliveredMessages, InboundLaneData, LaneId, Message, MessageKey, MessageNonce, MessagePayload,
+	OutboundLaneData, UnrewardedRelayer, UnrewardedRelayersState,
 };
 use bp_runtime::{messages::MessageDispatchResult, Size};
 use codec::{Decode, Encode};
@@ -485,17 +485,7 @@ pub fn unrewarded_relayer(
 /// Returns unrewarded relayers state at given lane.
 pub fn inbound_unrewarded_relayers_state(lane: bp_messages::LaneId) -> UnrewardedRelayersState {
 	let inbound_lane_data = crate::InboundLanes::<TestRuntime, ()>::get(lane).0;
-	let last_delivered_nonce = inbound_lane_data.last_delivered_nonce();
-	let relayers = inbound_lane_data.relayers;
-	UnrewardedRelayersState {
-		unrewarded_relayer_entries: relayers.len() as _,
-		messages_in_oldest_entry: relayers
-			.front()
-			.map(|entry| 1 + entry.messages.end - entry.messages.begin)
-			.unwrap_or(0),
-		total_messages: total_unrewarded_messages(&relayers).unwrap_or(MessageNonce::MAX),
-		last_delivered_nonce,
-	}
+	UnrewardedRelayersState::from(&inbound_lane_data)
 }
 
 /// Return test externalities to use in tests.
diff --git a/bridges/modules/relayers/src/lib.rs b/bridges/modules/relayers/src/lib.rs
index fd0e82aab8db5133902e2a7911a1954a8894b4b1..008c487836a3c8be7b64404f2a3c1efaa7da3ae3 100644
--- a/bridges/modules/relayers/src/lib.rs
+++ b/bridges/modules/relayers/src/lib.rs
@@ -159,6 +159,7 @@ pub mod pallet {
 				}
 				registration.stake = required_stake;
 
+				log::trace!(target: LOG_TARGET, "Successfully registered relayer: {:?}", relayer);
 				Self::deposit_event(Event::<T>::RegistrationUpdated {
 					relayer: relayer.clone(),
 					registration,
@@ -196,6 +197,7 @@ pub mod pallet {
 					Self::do_unreserve(&relayer, registration.stake)?;
 				}
 
+				log::trace!(target: LOG_TARGET, "Successfully deregistered relayer: {:?}", relayer);
 				Self::deposit_event(Event::<T>::Deregistered { relayer: relayer.clone() });
 
 				*maybe_registration = None;
diff --git a/bridges/primitives/messages/src/lib.rs b/bridges/primitives/messages/src/lib.rs
index 2828d5af006320bdb2e065f446d94b2965bbf1fd..e485aa2f801c3000772a5726c61629da78420145 100644
--- a/bridges/primitives/messages/src/lib.rs
+++ b/bridges/primitives/messages/src/lib.rs
@@ -316,6 +316,21 @@ pub struct UnrewardedRelayersState {
 	pub last_delivered_nonce: MessageNonce,
 }
 
+impl<RelayerId> From<&InboundLaneData<RelayerId>> for UnrewardedRelayersState {
+	fn from(lane: &InboundLaneData<RelayerId>) -> UnrewardedRelayersState {
+		UnrewardedRelayersState {
+			unrewarded_relayer_entries: lane.relayers.len() as _,
+			messages_in_oldest_entry: lane
+				.relayers
+				.front()
+				.and_then(|entry| (entry.messages.begin..=entry.messages.end).checked_len())
+				.unwrap_or(0),
+			total_messages: total_unrewarded_messages(&lane.relayers).unwrap_or(MessageNonce::MAX),
+			last_delivered_nonce: lane.last_delivered_nonce(),
+		}
+	}
+}
+
 /// Outbound lane data.
 #[derive(Encode, Decode, Clone, RuntimeDebug, PartialEq, Eq, TypeInfo, MaxEncodedLen)]
 pub struct OutboundLaneData {