diff --git a/src/uu/dmesg/src/dmesg.rs b/src/uu/dmesg/src/dmesg.rs
index 54b3da4..5065325 100644
--- a/src/uu/dmesg/src/dmesg.rs
+++ b/src/uu/dmesg/src/dmesg.rs
@@ -261,17 +261,11 @@ impl Dmesg<'_> {
         Ok(())
     }
 
-    fn try_filtered_iter(&self) -> UResult<Box<dyn Iterator<Item = UResult<Record>> + '_>> {
-        Ok(match (&self.facility_filters, &self.level_filters) {
-            (None, None) => Box::new(self.try_iter()?),
-            (None, Some(set)) => Box::new(self.try_iter()?.filter(Self::is_record_in_set(set))),
-            (Some(set), None) => Box::new(self.try_iter()?.filter(Self::is_record_in_set(set))),
-            (Some(set_1), Some(set_2)) => Box::new(
-                self.try_iter()?
-                    .filter(Self::is_record_in_set(set_1))
-                    .filter(Self::is_record_in_set(set_2)),
-            ),
-        })
+    fn try_filtered_iter(&self) -> UResult<impl Iterator<Item = UResult<Record>> + '_> {
+        Ok(self
+            .try_iter()?
+            .filter(Self::is_record_in_set(&self.facility_filters))
+            .filter(Self::is_record_in_set(&self.level_filters)))
     }
 
     fn try_iter(&self) -> UResult<RecordIterator> {
@@ -282,17 +276,17 @@ impl Dmesg<'_> {
     }
 
     fn is_record_in_set<T>(
-        set: &HashSet<T>,
+        set: &Option<HashSet<T>>,
     ) -> impl Fn(&Result<Record, Box<dyn UError>>) -> bool + '_
     where
         T: TryFrom<u32> + Eq + Hash,
     {
-        |record: &UResult<Record>| match record {
-            Ok(record) => match T::try_from(record.priority_facility) {
+        move |record: &UResult<Record>| match (record, set) {
+            (Ok(record), Some(set)) => match T::try_from(record.priority_facility) {
                 Ok(t) => set.contains(&t),
-                Err(_) => true,
+                Err(_) => false,
             },
-            Err(_) => true,
+            _ => true,
         }
     }
 }