diff --git a/src/uu/lsmem/src/lsmem.rs b/src/uu/lsmem/src/lsmem.rs
index cb768b3..c4cd6e8 100644
--- a/src/uu/lsmem/src/lsmem.rs
+++ b/src/uu/lsmem/src/lsmem.rs
@@ -28,6 +28,7 @@ const ABOUT: &str = help_about!("lsmem.md");
 const USAGE: &str = help_usage!("lsmem.md");
 
 mod options {
+    pub const ALL: &str = "all";
     pub const BYTES: &str = "bytes";
     pub const NOHEADINGS: &str = "noheadings";
     pub const JSON: &str = "json";
@@ -235,6 +236,7 @@ struct TableRowJson {
 }
 
 struct Options {
+    all: bool,
     have_nodes: bool,
     raw: bool,
     export: bool,
@@ -278,6 +280,7 @@ impl Lsmem {
 impl Options {
     fn new() -> Options {
         Options {
+            all: false,
             have_nodes: false,
             raw: false,
             export: false,
@@ -334,7 +337,7 @@ fn read_info(lsmem: &mut Lsmem, opts: &mut Options) {
         } else {
             lsmem.mem_offline += lsmem.block_size;
         }
-        if is_mergeable(lsmem, opts, &blk) {
+        if !opts.all && is_mergeable(lsmem, opts, &blk) {
             lsmem.blocks[lsmem.nblocks - 1].count += 1;
             continue;
         }
@@ -591,6 +594,7 @@ pub fn uumain(args: impl uucore::Args) -> UResult<()> {
 
     let mut lsmem = Lsmem::new();
     let mut opts = Options::new();
+    opts.all = matches.get_flag(options::ALL);
     opts.bytes = matches.get_flag(options::BYTES);
     opts.noheadings = matches.get_flag(options::NOHEADINGS);
     opts.json = matches.get_flag(options::JSON);
@@ -633,6 +637,13 @@ pub fn uu_app() -> Command {
         .about(ABOUT)
         .override_usage(format_usage(USAGE))
         .infer_long_args(true)
+        .arg(
+            Arg::new(options::ALL)
+                .short('a')
+                .long("all")
+                .help("list each individual memory block")
+                .action(ArgAction::SetTrue),
+        )
         .arg(
             Arg::new(options::BYTES)
                 .short('b')