diff --git a/bridges/modules/messages/src/inbound_lane.rs b/bridges/modules/messages/src/inbound_lane.rs
index 3f64ab765b5dae6b69eef27f7559e8462b702165..59ff56671958635cc1b316e2163658a3c725a5bf 100644
--- a/bridges/modules/messages/src/inbound_lane.rs
+++ b/bridges/modules/messages/src/inbound_lane.rs
@@ -198,19 +198,17 @@ impl<S: InboundLaneStorage> InboundLane<S> {
 		);
 
 		// now let's update inbound lane storage
-		let push_new = match data.relayers.back_mut() {
+		match data.relayers.back_mut() {
 			Some(entry) if entry.relayer == *relayer_at_bridged_chain => {
 				entry.messages.note_dispatched_message();
-				false
 			},
-			_ => true,
+			_ => {
+				data.relayers.push_back(UnrewardedRelayer {
+					relayer: relayer_at_bridged_chain.clone(),
+					messages: DeliveredMessages::new(nonce),
+				});
+			},
 		};
-		if push_new {
-			data.relayers.push_back(UnrewardedRelayer {
-				relayer: (*relayer_at_bridged_chain).clone(),
-				messages: DeliveredMessages::new(nonce),
-			});
-		}
 		self.storage.set_data(data);
 
 		ReceivalResult::Dispatched(dispatch_result)
diff --git a/bridges/primitives/messages/src/lib.rs b/bridges/primitives/messages/src/lib.rs
index 3910837a442e01fef5f790c50182c0a6b6f5e9fd..2828d5af006320bdb2e065f446d94b2965bbf1fd 100644
--- a/bridges/primitives/messages/src/lib.rs
+++ b/bridges/primitives/messages/src/lib.rs
@@ -164,11 +164,9 @@ impl<RelayerId> InboundLaneData<RelayerId> {
 	where
 		RelayerId: MaxEncodedLen,
 	{
-		let message_nonce_size = MessageNonce::max_encoded_len();
-		let relayer_id_encoded_size = RelayerId::max_encoded_len();
-		let relayers_entry_size = relayer_id_encoded_size.checked_add(2 * message_nonce_size)?;
-		let relayers_size = relayers_entries.checked_mul(relayers_entry_size)?;
-		relayers_size.checked_add(message_nonce_size)
+		relayers_entries
+			.checked_mul(UnrewardedRelayer::<RelayerId>::max_encoded_len())?
+			.checked_add(MessageNonce::max_encoded_len())
 	}
 
 	/// Returns the approximate size of the struct as u32, given a number of entries in the
@@ -223,7 +221,7 @@ pub struct InboundMessageDetails {
 ///
 /// This struct represents a continuous range of messages that have been delivered by the same
 /// relayer and whose confirmations are still pending.
-#[derive(Encode, Decode, Clone, RuntimeDebug, PartialEq, Eq, TypeInfo)]
+#[derive(Encode, Decode, Clone, RuntimeDebug, PartialEq, Eq, TypeInfo, MaxEncodedLen)]
 pub struct UnrewardedRelayer<RelayerId> {
 	/// Identifier of the relayer.
 	pub relayer: RelayerId,
@@ -270,7 +268,7 @@ pub enum ReceivalResult<DispatchLevelResult> {
 }
 
 /// Delivered messages with their dispatch result.
-#[derive(Clone, Default, Encode, Decode, RuntimeDebug, PartialEq, Eq, TypeInfo)]
+#[derive(Clone, Default, Encode, Decode, RuntimeDebug, PartialEq, Eq, TypeInfo, MaxEncodedLen)]
 pub struct DeliveredMessages {
 	/// Nonce of the first message that has been delivered (inclusive).
 	pub begin: MessageNonce,