diff --git a/substrate/primitives/runtime/src/bounded/bounded_vec.rs b/substrate/primitives/runtime/src/bounded/bounded_vec.rs
index 555a34819a423d221cf06e849a0cf0226feb2a80..c9c9f851d324924b129eee646294bfd3ed89d15b 100644
--- a/substrate/primitives/runtime/src/bounded/bounded_vec.rs
+++ b/substrate/primitives/runtime/src/bounded/bounded_vec.rs
@@ -223,6 +223,15 @@ impl<'a, T, S> Clone for BoundedSlice<'a, T, S> {
 // Since a reference `&T` is always `Copy`, so is `BoundedSlice<'a, T, S>`.
 impl<'a, T, S> Copy for BoundedSlice<'a, T, S> {}
 
+// will allow for all immutable operations of `[T]` on `BoundedSlice<T>`.
+impl<'a, T, S> Deref for BoundedSlice<'a, T, S> {
+	type Target = [T];
+
+	fn deref(&self) -> &Self::Target {
+		self.0
+	}
+}
+
 impl<'a, T, S> sp_std::iter::IntoIterator for BoundedSlice<'a, T, S> {
 	type Item = &'a T;
 	type IntoIter = sp_std::slice::Iter<'a, T>;
@@ -647,7 +656,7 @@ impl<T, S> AsMut<[T]> for BoundedVec<T, S> {
 	}
 }
 
-// will allow for immutable all operations of `Vec<T>` on `BoundedVec<T>`.
+// will allow for all immutable operations of `Vec<T>` on `BoundedVec<T>`.
 impl<T, S> Deref for BoundedVec<T, S> {
 	type Target = Vec<T>;
 
@@ -970,7 +979,7 @@ pub mod test {
 	}
 
 	#[test]
-	fn deref_coercion_works() {
+	fn deref_vec_coercion_works() {
 		let bounded: BoundedVec<u32, ConstU32<7>> = bounded_vec![1, 2, 3];
 		// these methods come from deref-ed vec.
 		assert_eq!(bounded.len(), 3);
@@ -978,6 +987,15 @@ pub mod test {
 		assert!(!bounded.is_empty());
 	}
 
+	#[test]
+	fn deref_slice_coercion_works() {
+		let bounded = BoundedSlice::<u32, ConstU32<7>>::try_from(&[1, 2, 3][..]).unwrap();
+		// these methods come from deref-ed slice.
+		assert_eq!(bounded.len(), 3);
+		assert!(bounded.iter().next().is_some());
+		assert!(!bounded.is_empty());
+	}
+
 	#[test]
 	fn try_mutate_works() {
 		let bounded: BoundedVec<u32, ConstU32<7>> = bounded_vec![1, 2, 3, 4, 5, 6];