diff --git a/src/rust/amadeus-next/lkt-rs/Cargo.toml b/src/rust/amadeus-next/lkt-rs/Cargo.toml
index 438b5e2958320ec1347eed8e15e14fbf2b774690..5ee088bf3d2c71bffd12e0e1cf0dc371db985e3d 100644
--- a/src/rust/amadeus-next/lkt-rs/Cargo.toml
+++ b/src/rust/amadeus-next/lkt-rs/Cargo.toml
@@ -15,6 +15,7 @@ clap = { version = "^4", default-features = false, features = [
     "usage",
     "help",
     "std",
+    "wrap_help",
     "suggestions",
     "error-context",
     "derive",
diff --git a/src/rust/amadeus-next/lkt-rs/src/args.rs b/src/rust/amadeus-next/lkt-rs/src/args.rs
index c61815f6ac9c0d273263b85441f14b8eb9007458..c6971d9e2cfa28a4f3fcf7bdb39fd6d4d9c283ed 100644
--- a/src/rust/amadeus-next/lkt-rs/src/args.rs
+++ b/src/rust/amadeus-next/lkt-rs/src/args.rs
@@ -22,14 +22,12 @@ pub struct Args {
 pub enum SubCommand {
     // Status commands
     #[command(
-        about = "Prints informations about the currently playing kara. Can be used to display the current kara in a status bar like xmobar or in the i3 panel.",
-        visible_aliases = [ "cur" ]
+        about = "Prints informations about the currently playing kara. Can be used to display the current kara in a status bar like xmobar or in the i3 panel."
     )]
     Current,
 
     #[command(
-        about = "Prints information about the state of lektor and the currently playing kara.",
-        visible_aliases = [ "sta" ]
+        about = "Prints information about the state of lektor and the currently playing kara."
     )]
     Status,
 
@@ -39,42 +37,13 @@ pub enum SubCommand {
     )]
     Play { index: Option<usize> },
 
-    #[command(about = "For lektord to be paused, don't do anything is lektord is already paused.")]
-    Pause,
-
-    #[command(
-        about = "Unpause lektord, starts at the begening of the queue if lektord was stopped.",
-        visible_aliases = [ "unpause" ]
-    )]
-    UnPause,
-
-    #[command(about = "Stop the playback and reading the queue, the state is now stopped.")]
-    Stop,
-
-    #[command(about = "Play next kara in the queue.")]
-    Next,
-
-    #[command(about = "Play the previous kara in the queue.", visible_aliases = [ "prev" ])]
-    Previous,
-
-    #[command(
-        about = "Shuffle the queue. If lektord was paused it will unpause but if it was stopped it won't start. If it exists, the current kara will be placed in the first place in the queue. You can also pass a level to shuffle up to.",
-        visible_aliases = [ "shuf" ]
-    )]
-    Shuffle {
-        #[arg(
-            default_value_t = PriorityLevel::Add,
-        )]
-        level: PriorityLevel,
-    },
-
     // Playlist commands
-    #[command(short_flag = 'P', visible_aliases = [ "plt" ])]
+    #[command(short_flag = 'P')]
     Playlist {
         #[arg( value_parser    = clap::builder::NonEmptyStringValueParser::new()
              , exclusive       = true
              , short           = 'c'
-             , visible_aliases = [ "create" ]
+             , long            = "create"
              , help            = "Create a new playlist with a specific name."
         )]
         create: Option<String>,
@@ -82,14 +51,14 @@ pub enum SubCommand {
         #[arg( value_parser    = clap::builder::NonEmptyStringValueParser::new()
              , exclusive       = true
              , short           = 'd'
-             , visible_aliases = [ "destroy" ]
+             , long            = "destroy"
              , help            = "Delete a playlist with all its content, do nothing if the playlist didn't exists."
         )]
         destroy: Option<String>,
 
         #[arg( action          = clap::ArgAction::Set
              , short           = 'l'
-             , visible_aliases = [ "list" ]
+             , long            = "list"
              , exclusive       = true
              , help            = "List the content of the playlist named if a name is passed. If missing returns a list of all the available playlists."
         )]
@@ -99,7 +68,7 @@ pub enum SubCommand {
              , exclusive       = true
              , num_args        = 2..
              , short           = 'r'
-             , visible_aliases = [ "remove" ]
+             , long            = "remove"
              , help            = "Deletes karas from a playlist with a valid query. The first element is the name of the playlist."
         )]
         remove: Option<Vec<String>>,
@@ -108,7 +77,7 @@ pub enum SubCommand {
              , exclusive       = true
              , num_args        = 2..
              , short           = 'a'
-             , visible_aliases = [ "add" ]
+             , long            = "add"
              , help            = "Add karas to a playlist with a valid query. The first element is the name of the playlist."
         )]
         add: Option<Vec<String>>,
@@ -120,6 +89,7 @@ pub enum SubCommand {
         #[arg( action    = clap::ArgAction::Set
              , exclusive = true
              , short     = 'S'
+             , long      = "seek"
              , help      = "Goto to the kara with the specified id in the queue."
              , id        = "ID"
         )]
@@ -129,6 +99,7 @@ pub enum SubCommand {
              , value_parser = crate::parsers::RangeParser::new()
              , exclusive    = true
              , short        = 'l'
+             , long         = "list"
              , help         = "Prints the names and ids of karas in the queue. Karas are designated by a range of positions."
              , id           = "LOWER:UPPER"
         )]
@@ -137,6 +108,7 @@ pub enum SubCommand {
         #[arg( action    = clap::ArgAction::SetTrue
              , exclusive = true
              , short     = 'C'
+             , long      = "crop"
              , help      = "Crop the queue, delete every kara from it appart from the currently playing one."
         )]
         crop: bool,
@@ -144,23 +116,68 @@ pub enum SubCommand {
         #[arg( action    = clap::ArgAction::SetTrue
              , exclusive = true
              , short     = 'c'
+             , long      = "clear"
              , help      = "Clear the queue and set the state to stopped."
         )]
         clear: bool,
 
-        #[arg( action          = clap::ArgAction::Set
-             , exclusive       = true
-             , num_args        = 2
-             , short           = 's'
-             , visible_aliases = [ "swap" ]
-             , help            = "Swap two karas in the queue by their position"
-             , id              = "POS"
+        #[arg( action    = clap::ArgAction::Set
+             , exclusive = true
+             , num_args  = 2
+             , short     = 's'
+             , long      = "swap"
+             , help      = "Swap two karas in the queue by their position"
+             , id        = "POS"
         )]
         swap: Option<Vec<String>>,
+
+        #[arg( action    = clap::ArgAction::SetTrue
+             , exclusive = true
+             , short     = 'n'
+             , long      = "next"
+             , help      = "Play the next kara in the queue."
+        )]
+        next: bool,
+
+        #[arg( action    = clap::ArgAction::SetTrue
+             , exclusive = true
+             , short     = 'p'
+             , long      = "previous"
+             , help      = "Play the previous kara in the queue."
+        )]
+        previous: bool,
+
+        #[arg( action        = clap::ArgAction::Set
+             , exclusive     = true
+             , short         = 'P'
+             , long          = "pause"
+             , help          = "Toggle the play/pause state. If an argument is passed, it sets the pause state to the value, converted to boolean."
+             , default_value = None
+        )]
+        pause: Option<Option<bool>>,
+
+        #[arg( action    = clap::ArgAction::SetTrue
+             , exclusive = true
+             , short     = 'k'
+             , long      = "stop"
+             , help      = "Stop the playback."
+        )]
+        stop: bool,
+
+        #[arg( action        = clap::ArgAction::Set
+             , default_value = PriorityLevel::Add
+             , exclusive     = true
+             , short         = 'z'
+             , long          = "shuffle"
+             , help          = concat!( "Shuffle the queue. If lektord was paused it will unpause but if it was stopped it won't start. "
+                                      , "If it exists, the current kara will be placed in the first place in the queue. "
+                                      , "You can also pass a level to shuffle up to. The level can be assed as a numeric or its string representation"
+        ))]
+        shuffle: Option<PriorityLevel>,
     },
 
     // Search commands
-    #[command(short_flag = 'S', visible_aliases = [ "find" ])]
+    #[command(short_flag = 'S')]
     Search {
         #[arg( action          = clap::ArgAction::Append
              , exclusive       = true
@@ -168,7 +185,7 @@ pub enum SubCommand {
              , last            = false
              , num_args        = 1..
              , short           = 'd'
-             , visible_aliases = [ "db", "database" ]
+             , long            = "database"
              , help            = "Search kara in the whole database with a query."
         )]
         database: Option<Vec<String>>,
@@ -179,15 +196,15 @@ pub enum SubCommand {
              , last            = false
              , num_args        = 1..
              , short           = 'c'
-             , visible_aliases = [ "count" ]
+             , long            = "count"
              , help            = "Search kara in the whole database with a query and returns the count of matching karas."
         )]
         count: Option<Vec<String>>,
 
         #[arg( action          = clap::ArgAction::Set
              , exclusive       = true
-             , short           = 'g'
-             , visible_aliases = [ "get", "info" ]
+             , short           = 'i'
+             , long            = "info"
              , help            = "Prints more informations about a specific kara from the database."
         )]
         get: Option<usize>,
@@ -198,7 +215,7 @@ pub enum SubCommand {
              , last            = false
              , num_args        = 2..
              , short           = 'p'
-             , visible_aliases = [ "playlist", "plt" ]
+             , long            = "playlist"
              , help            = "Search kara in a playlist with a query. The first element is the name of the playlist."
         )]
         plt: Option<Vec<String>>,
@@ -209,17 +226,18 @@ pub enum SubCommand {
              , last            = false
              , num_args        = 1..
              , short           = 'q'
-             , visible_aliases = [ "queue" ]
+             , long            = "queue"
              , help            = "Search kara in the queue with a query."
         )]
         queue: Option<Vec<String>>,
     },
 
     // Admin commands
-    #[command(short_flag = 'A', visible_aliases = [ "adm" ])]
+    #[command(short_flag = 'A')]
     Admin {
         #[arg( action = clap::ArgAction::SetTrue
              , short  = 'p'
+             , long   = "ping"
              , group  = "action"
              , help   = "Pings the lektord daemon, prints OK only if the ping succeeded."
         )]
@@ -227,6 +245,7 @@ pub enum SubCommand {
 
         #[arg( action = clap::ArgAction::SetTrue
              , short  = 'k'
+             , long   = "kill"
              , group  = "action"
              , help   = "Kill the lektord daemon."
         )]
@@ -234,6 +253,7 @@ pub enum SubCommand {
 
         #[arg( action = clap::ArgAction::SetTrue
              , short  = 'r'
+             , long   = "restart"
              , group  = "action"
              , help   = "Try to restart the lektord daemon."
         )]
@@ -241,15 +261,26 @@ pub enum SubCommand {
 
         #[arg( action = clap::ArgAction::SetTrue
              , short  = 'u'
+             , long   = "update"
              , group  = "action"
              , help   = "Update the base from all the repos from the config file. Don't scan for new files in the filesystem."
         )]
         update: bool,
 
         #[arg( action = clap::ArgAction::SetTrue
-             , long   = "dry"
-             , help   = "Don't do the action. For update only fetch the metadata and not the karas."
+             , short  = 'P'
+             , long   = "populate"
+             , group  = "action"
+             , help   = "Update the base from what is present on disk. The kara files and metadata files must be present on the disk."
         )]
+        populate: bool,
+
+        #[arg( action = clap::ArgAction::SetTrue
+             , long   = "dry"
+             , help   = concat!( "Don't do the action. For update only fetch the metadata and not the karas. "
+                               , "For the populate don't mark the karas as downloaded. This flag can't be "
+                               , "applied to the '-h', '-p', '-k' and '-r' flags."
+        ))]
         dry: bool,
     },
 }
diff --git a/src/rust/amadeus-next/lkt-rs/src/types.rs b/src/rust/amadeus-next/lkt-rs/src/types.rs
index 1b2e616e3ecc2727426f3db8e798ff5f460b9226..70c63816d573cd136ddde3b5a499f670aa549df5 100644
--- a/src/rust/amadeus-next/lkt-rs/src/types.rs
+++ b/src/rust/amadeus-next/lkt-rs/src/types.rs
@@ -32,11 +32,32 @@ impl Default for PriorityLevel {
 impl std::fmt::Display for PriorityLevel {
     fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
         f.write_str(match self {
-            PriorityLevel::Add => "add",
-            PriorityLevel::Suggest => "suggest",
-            PriorityLevel::Insert => "insert",
-            PriorityLevel::Pick => "pick",
-            PriorityLevel::Enforce => "enforce",
+            PriorityLevel::Add => "1",
+            PriorityLevel::Suggest => "2",
+            PriorityLevel::Insert => "3",
+            PriorityLevel::Pick => "4",
+            PriorityLevel::Enforce => "5",
+        })
+    }
+}
+
+impl From<clap::builder::OsStr> for PriorityLevel {
+    fn from(value: clap::builder::OsStr) -> Self {
+        let value = value
+            .to_str()
+            .unwrap_or_else(|| panic!("invalid utf8 string: {}", value.to_string_lossy()));
+        PriorityLevel::from(value)
+    }
+}
+
+impl From<PriorityLevel> for clap::builder::OsStr {
+    fn from(val: PriorityLevel) -> Self {
+        clap::builder::OsStr::from(match val {
+            PriorityLevel::Add => "1",
+            PriorityLevel::Suggest => "2",
+            PriorityLevel::Insert => "3",
+            PriorityLevel::Pick => "4",
+            PriorityLevel::Enforce => "5",
         })
     }
 }