Repository: clap-rs/clap
Pull request #1928 (2020-05-14 20:53:00)

Rename with_name to new for Arg & ArgGroup
<!--
If your PR closes some issues, please write `Closes #XXXX`
where `XXXX` is the number of the issue you want to fix.
Each issue goes on it's own line.
-->



Patch:
diff --git a/README.md b/README.md
index f0bac9db..03d77f7e 100644
--- a/README.md
+++ b/README.md
@@ -215,17 +215,17 @@ fn main() {
         .version("1.0")
         .author("Kevin K. <kbknapp@gmail.com>")
         .about("Does awesome things")
-        .arg(Arg::with_name("config")
+        .arg(Arg::new("config")
             .short('c')
             .long("config")
             .value_name("FILE")
             .about("Sets a custom config file")
             .takes_value(true))
-        .arg(Arg::with_name("INPUT")
+        .arg(Arg::new("INPUT")
             .about("Sets the input file to use")
             .required(true)
             .index(1))
-        .arg(Arg::with_name("v")
+        .arg(Arg::new("v")
             .short('v')
             .multiple(true)
             .about("Sets the level of verbosity"))
@@ -233,7 +233,7 @@ fn main() {
             .about("controls testing features")
             .version("1.3")
             .author("Someone E. <someone_else@other.com>")
-            .arg(Arg::with_name("debug")
+            .arg(Arg::new("debug")
                 .short('d')
                 .about("print debug information verbosely")))
         .get_matches();
diff --git a/benches/02_simple.rs b/benches/02_simple.rs
index 3a1489b4..77e83b2b 100644
--- a/benches/02_simple.rs
+++ b/benches/02_simple.rs
@@ -49,14 +49,14 @@ pub fn build_with_opt_ref(c: &mut Criterion) {
 
 pub fn build_with_pos(c: &mut Criterion) {
     c.bench_function("build_with_pos", |b| {
-        b.iter(|| App::new("claptests").arg(Arg::with_name("some")))
+        b.iter(|| App::new("claptests").arg(Arg::new("some")))
     });
 }
 
 pub fn build_with_pos_ref(c: &mut Criterion) {
     c.bench_function("build_with_pos_ref", |b| {
         b.iter(|| {
-            let arg = Arg::with_name("some");
+            let arg = Arg::new("some");
             App::new("claptests").arg(&arg)
         })
     });
diff --git a/benches/03_complex.rs b/benches/03_complex.rs
index 5dc73f97..95c6f8a6 100644
--- a/benches/03_complex.rs
+++ b/benches/03_complex.rs
@@ -53,20 +53,16 @@ pub fn build_from_builder(c: &mut Criterion) {
                 .about("tests clap library")
                 .author("Kevin K. <kbknapp@gmail.com>")
                 .arg(
-                    Arg::with_name("opt")
+                    Arg::new("opt")
                         .about("tests options")
                         .short('o')
                         .long("option")
                         .setting(ArgSettings::MultipleValues)
                         .setting(ArgSettings::MultipleOccurrences),
                 )
+                .arg(Arg::new("positional").about("tests positionals").index(1))
                 .arg(
-                    Arg::with_name("positional")
-                        .about("tests positionals")
-                        .index(1),
-                )
-                .arg(
-                    Arg::with_name("flag")
+                    Arg::new("flag")
                         .short('f')
                         .about("tests flags")
                         .long("flag")
@@ -74,14 +70,14 @@ pub fn build_from_builder(c: &mut Criterion) {
                         .settings(&[ArgSettings::MultipleOccurrences]),
                 )
                 .arg(
-                    Arg::with_name("flag2")
+                    Arg::new("flag2")
                         .short('F')
                         .about("tests flags with exclusions")
                         .conflicts_with("flag")
                         .requires("option2"),
                 )
                 .arg(
-                    Arg::with_name("option2")
+                    Arg::new("option2")
                         .about("tests long options with exclusions")
                         .conflicts_with("option")
                         .requires("positional2")
@@ -89,12 +85,12 @@ pub fn build_from_builder(c: &mut Criterion) {
                         .long("long-option-2"),
                 )
                 .arg(
-                    Arg::with_name("positional2")
+                    Arg::new("positional2")
                         .index(3)
                         .about("tests positionals with exclusions"),
                 )
                 .arg(
-                    Arg::with_name("option3")
+                    Arg::new("option3")
                         .short('O')
                         .long("Option")
                         .setting(ArgSettings::TakesValue)
@@ -102,7 +98,7 @@ pub fn build_from_builder(c: &mut Criterion) {
                         .possible_values(&OPT3_VALS),
                 )
                 .arg(
-                    Arg::with_name("positional3")
+                    Arg::new("positional3")
                         .setting(ArgSettings::MultipleValues)
                         .setting(ArgSettings::MultipleOccurrences)
                         .about("tests positionals with specific values")
@@ -110,13 +106,13 @@ pub fn build_from_builder(c: &mut Criterion) {
                         .possible_values(&POS3_VALS),
                 )
                 .arg(
-                    Arg::with_name("multvals")
+                    Arg::new("multvals")
                         .long("multvals")
                         .about("Tests mutliple values, not mult occs")
                         .value_names(&["one", "two"]),
                 )
                 .arg(
-                    Arg::with_name("multvalsmo")
+                    Arg::new("multvalsmo")
                         .long("multvalsmo")
                         .setting(ArgSettings::MultipleValues)
                         .setting(ArgSettings::MultipleOccurrences)
@@ -124,7 +120,7 @@ pub fn build_from_builder(c: &mut Criterion) {
                         .value_names(&["one", "two"]),
                 )
                 .arg(
-                    Arg::with_name("minvals")
+                    Arg::new("minvals")
                         .long("minvals2")
                         .setting(ArgSettings::MultipleValues)
                         .setting(ArgSettings::MultipleOccurrences)
@@ -132,7 +128,7 @@ pub fn build_from_builder(c: &mut Criterion) {
                         .min_values(2),
                 )
                 .arg(
-                    Arg::with_name("maxvals")
+                    Arg::new("maxvals")
                         .long("maxvals3")
                         .setting(ArgSettings::MultipleValues)
                         .setting(ArgSettings::MultipleOccurrences)
@@ -145,18 +141,14 @@ pub fn build_from_builder(c: &mut Criterion) {
                         .version("0.1")
                         .author("Kevin K. <kbknapp@gmail.com>")
                         .arg(
-                            Arg::with_name("scoption")
+                            Arg::new("scoption")
                                 .short('o')
                                 .long("option")
                                 .setting(ArgSettings::MultipleValues)
                                 .setting(ArgSettings::MultipleOccurrences)
                                 .about("tests options"),
                         )
-                        .arg(
-                            Arg::with_name("scpositional")
-                                .index(1)
-                                .about("tests positionals"),
-                        ),
+                        .arg(Arg::new("scpositional").index(1).about("tests positionals")),
                 )
         })
     });
diff --git a/benches/04_new_help.rs b/benches/04_new_help.rs
index b850d0b0..f245111e 100644
--- a/benches/04_new_help.rs
+++ b/benches/04_new_help.rs
@@ -35,17 +35,17 @@ fn app_example2<'c>() -> App<'c> {
 fn app_example3<'c>() -> App<'c> {
     App::new("MyApp")
         .arg(
-            Arg::with_name("debug")
+            Arg::new("debug")
                 .about("turn on debugging information")
                 .short('d'),
         )
         .args(&[
-            Arg::with_name("config")
+            Arg::new("config")
                 .about("sets the config file to use")
                 .setting(ArgSettings::TakesValue)
                 .short('c')
                 .long("config"),
-            Arg::with_name("input")
+            Arg::new("input")
                 .about("the input file to use")
                 .index(1)
                 .setting(ArgSettings::Required),
@@ -61,19 +61,19 @@ fn app_example4<'c>() -> App<'c> {
         .version("1.0")
         .author("Kevin K. <kbknapp@gmail.com>")
         .arg(
-            Arg::with_name("debug")
+            Arg::new("debug")
                 .about("turn on debugging information")
                 .short('d')
                 .long("debug"),
         )
         .arg(
-            Arg::with_name("config")
+            Arg::new("config")
                 .about("sets the config file to use")
                 .short('c')
                 .long("config"),
         )
         .arg(
-            Arg::with_name("input")
+            Arg::new("input")
                 .about("the input file to use")
                 .index(1)
                 .setting(ArgSettings::Required),
@@ -82,7 +82,7 @@ fn app_example4<'c>() -> App<'c> {
 
 fn app_example5<'c>() -> App<'c> {
     App::new("MyApp").arg(
-        Arg::with_name("awesome")
+        Arg::new("awesome")
             .about("turns up the awesome")
             .short('a')
             .long("awesome")
@@ -95,26 +95,22 @@ fn app_example5<'c>() -> App<'c> {
 fn app_example6<'c>() -> App<'c> {
     App::new("MyApp")
         .arg(
-            Arg::with_name("input")
+            Arg::new("input")
                 .about("the input file to use")
                 .index(1)
                 .requires("config")
                 .conflicts_with("output")
                 .setting(ArgSettings::Required),
         )
-        .arg(
-            Arg::with_name("config")
-                .about("the config file to use")
-                .index(2),
-        )
+        .arg(Arg::new("config").about("the config file to use").index(2))
 }
 
 fn app_example7<'c>() -> App<'c> {
     App::new("MyApp")
-        .arg(Arg::with_name("config"))
-        .arg(Arg::with_name("output"))
+        .arg(Arg::new("config"))
+        .arg(Arg::new("output"))
         .arg(
-            Arg::with_name("input")
+            Arg::new("input")
                 .about("the input file to use")
                 .settings(&[
                     ArgSettings::MultipleValues,
@@ -130,10 +126,10 @@ fn app_example7<'c>() -> App<'c> {
 
 fn app_example8<'c>() -> App<'c> {
     App::new("MyApp")
-        .arg(Arg::with_name("config"))
-        .arg(Arg::with_name("output"))
+        .arg(Arg::new("config"))
+        .arg(Arg::new("output"))
         .arg(
-            Arg::with_name("input")
+            Arg::new("input")
                 .about("the input file to use")
                 .settings(&[
                     ArgSettings::MultipleValues,
@@ -149,7 +145,7 @@ fn app_example8<'c>() -> App<'c> {
 
 fn app_example10<'c>() -> App<'c> {
     App::new("myapp").about("does awesome things").arg(
-        Arg::with_name("CONFIG")
+        Arg::new("CONFIG")
             .about("The config file to use (default is \"config.json\")")
             .short('c')
             .setting(ArgSettings::TakesValue),
diff --git a/benches/05_ripgrep.rs b/benches/05_ripgrep.rs
index 7a5f2858..3ae76eb1 100644
--- a/benches/05_ripgrep.rs
+++ b/benches/05_ripgrep.rs
@@ -298,7 +298,7 @@ fn app<F>(_next_line_help: bool, doc: F) -> App<'static>
 where
     F: Fn(&'static str) -> &'static str,
 {
-    let arg = |name| Arg::with_name(name).about(doc(name));
+    let arg = |name| Arg::new(name).about(doc(name));
     let flag = |name| arg(name).long(name);
 
     App::new("ripgrep")
diff --git a/benches/06_rustup.rs b/benches/06_rustup.rs
index e94a28c6..4a9d69ce 100644
--- a/benches/06_rustup.rs
+++ b/benches/06_rustup.rs
@@ -30,7 +30,7 @@ fn build_cli() -> App<'static> {
         .setting(AppSettings::DeriveDisplayOrder)
         // .setting(AppSettings::SubcommandRequiredElseHelp)
         .arg(
-            Arg::with_name("verbose")
+            Arg::new("verbose")
                 .about("Enable verbose output")
                 .short('v')
                 .long("verbose"),
@@ -45,15 +45,15 @@ fn build_cli() -> App<'static> {
                 .about("Update Rust toolchains")
                 .after_help(TOOLCHAIN_INSTALL_HELP)
                 .setting(AppSettings::Hidden) // synonym for 'toolchain install'
-                .arg(Arg::with_name("toolchain").setting(ArgSettings::Required)),
+                .arg(Arg::new("toolchain").setting(ArgSettings::Required)),
         )
         .subcommand(
             App::new("update")
                 .about("Update Rust toolchains")
                 .after_help(UPDATE_HELP)
-                .arg(Arg::with_name("toolchain").setting(ArgSettings::Required))
+                .arg(Arg::new("toolchain").setting(ArgSettings::Required))
                 .arg(
-                    Arg::with_name("no-self-update")
+                    Arg::new("no-self-update")
                         .about("Don't perform self update when running the `rustup` command")
                         .long("no-self-update")
                         .setting(ArgSettings::Hidden),
@@ -63,7 +63,7 @@ fn build_cli() -> App<'static> {
             App::new("default")
                 .about("Set the default toolchain")
                 .after_help(DEFAULT_HELP)
-                .arg(Arg::with_name("toolchain").setting(ArgSettings::Required)),
+                .arg(Arg::new("toolchain").setting(ArgSettings::Required)),
         )
         .subcommand(
             App::new("toolchain")
@@ -75,33 +75,33 @@ fn build_cli() -> App<'static> {
                 .subcommand(
                     App::new("install")
                         .about("Install or update a given toolchain")
-                        .arg(Arg::with_name("toolchain").setting(ArgSettings::Required)),
+                        .arg(Arg::new("toolchain").setting(ArgSettings::Required)),
                 )
                 .subcommand(
                     App::new("uninstall")
                         .about("Uninstall a toolchain")
-                        .arg(Arg::with_name("toolchain").setting(ArgSettings::Required)),
+                        .arg(Arg::new("toolchain").setting(ArgSettings::Required)),
                 )
                 .subcommand(
                     App::new("link")
                         .about("Create a custom toolchain by symlinking to a directory")
-                        .arg(Arg::with_name("toolchain").setting(ArgSettings::Required))
-                        .arg(Arg::with_name("path").setting(ArgSettings::Required)),
+                        .arg(Arg::new("toolchain").setting(ArgSettings::Required))
+                        .arg(Arg::new("path").setting(ArgSettings::Required)),
                 )
                 .subcommand(
                     App::new("update")
                         .setting(AppSettings::Hidden) // synonym for 'install'
-                        .arg(Arg::with_name("toolchain").setting(ArgSettings::Required)),
+                        .arg(Arg::new("toolchain").setting(ArgSettings::Required)),
                 )
                 .subcommand(
                     App::new("add")
                         .setting(AppSettings::Hidden) // synonym for 'install'
-                        .arg(Arg::with_name("toolchain").setting(ArgSettings::Required)),
+                        .arg(Arg::new("toolchain").setting(ArgSettings::Required)),
                 )
                 .subcommand(
                     App::new("remove")
                         .setting(AppSettings::Hidden) // synonym for 'uninstall'
-                        .arg(Arg::with_name("toolchain").setting(ArgSettings::Required)),
+                        .arg(Arg::new("toolchain").setting(ArgSettings::Required)),
                 ),
         )
         .subcommand(
@@ -114,7 +114,7 @@ fn build_cli() -> App<'static> {
                     App::new("list")
                         .about("List installed and available targets")
                         .arg(
-                            Arg::with_name("toolchain")
+                            Arg::new("toolchain")
                                 .long("toolchain")
                                 .setting(ArgSettings::TakesValue),
                         ),
@@ -122,9 +122,9 @@ fn build_cli() -> App<'static> {
                 .subcommand(
                     App::new("add")
                         .about("Add a target to a Rust toolchain")
-                        .arg(Arg::with_name("target").setting(ArgSettings::Required))
+                        .arg(Arg::new("target").setting(ArgSettings::Required))
                         .arg(
-                            Arg::with_name("toolchain")
+                            Arg::new("toolchain")
                                 .long("toolchain")
                                 .setting(ArgSettings::TakesValue),
                         ),
@@ -132,9 +132,9 @@ fn build_cli() -> App<'static> {
                 .subcommand(
                     App::new("remove")
                         .about("Remove a target  from a Rust toolchain")
-                        .arg(Arg::with_name("target").setting(ArgSettings::Required))
+                        .arg(Arg::new("target").setting(ArgSettings::Required))
                         .arg(
-                            Arg::with_name("toolchain")
+                            Arg::new("toolchain")
                                 .long("toolchain")
                                 .setting(ArgSettings::TakesValue),
                         ),
@@ -142,9 +142,9 @@ fn build_cli() -> App<'static> {
                 .subcommand(
                     App::new("install")
                         .setting(AppSettings::Hidden) // synonym for 'add'
-                        .arg(Arg::with_name("target").setting(ArgSettings::Required))
+                        .arg(Arg::new("target").setting(ArgSettings::Required))
                         .arg(
-                            Arg::with_name("toolchain")
+                            Arg::new("toolchain")
                                 .long("toolchain")
                                 .setting(ArgSettings::TakesValue),
                         ),
@@ -152,9 +152,9 @@ fn build_cli() -> App<'static> {
                 .subcommand(
                     App::new("uninstall")
                         .setting(AppSettings::Hidden) // synonym for 'remove'
-                        .arg(Arg::with_name("target").setting(ArgSettings::Required))
+                        .arg(Arg::new("target").setting(ArgSettings::Required))
                         .arg(
-                            Arg::with_name("toolchain")
+                            Arg::new("toolchain")
                                 .long("toolchain")
                                 .setting(ArgSettings::TakesValue),
                         ),
@@ -170,7 +170,7 @@ fn build_cli() -> App<'static> {
                     App::new("list")
                         .about("List installed and available components")
                         .arg(
-                            Arg::with_name("toolchain")
+                            Arg::new("toolchain")
                                 .long("toolchain")
                                 .setting(ArgSettings::TakesValue),
                         ),
@@ -178,14 +178,14 @@ fn build_cli() -> App<'static> {
                 .subcommand(
                     App::new("add")
                         .about("Add a component to a Rust toolchain")
-                        .arg(Arg::with_name("component").setting(ArgSettings::Required))
+                        .arg(Arg::new("component").setting(ArgSettings::Required))
                         .arg(
-                            Arg::with_name("toolchain")
+                            Arg::new("toolchain")
                                 .long("toolchain")
                                 .setting(ArgSettings::TakesValue),
                         )
                         .arg(
-                            Arg::with_name("target")
+                            Arg::new("target")
                                 .long("target")
                                 .setting(ArgSettings::TakesValue),
                         ),
@@ -193,14 +193,14 @@ fn build_cli() -> App<'static> {
                 .subcommand(
                     App::new("remove")
                         .about("Remove a component from a Rust toolchain")
-                        .arg(Arg::with_name("component").setting(ArgSettings::Required))
+                        .arg(Arg::new("component").setting(ArgSettings::Required))
                         .arg(
-                            Arg::with_name("toolchain")
+                            Arg::new("toolchain")
                                 .long("toolchain")
                                 .setting(ArgSettings::TakesValue),
                         )
                         .arg(
-                            Arg::with_name("target")
+                            Arg::new("target")
                                 .long("target")
                                 .setting(ArgSettings::TakesValue),
                         ),
@@ -217,20 +217,20 @@ fn build_cli() -> App<'static> {
                 .subcommand(
                     App::new("set")
                         .about("Set the override toolchain for a directory")
-                        .arg(Arg::with_name("toolchain").setting(ArgSettings::Required)),
+                        .arg(Arg::new("toolchain").setting(ArgSettings::Required)),
                 )
                 .subcommand(
                     App::new("unset")
                         .about("Remove the override toolchain for a directory")
                         .after_help(OVERRIDE_UNSET_HELP)
                         .arg(
-                            Arg::with_name("path")
+                            Arg::new("path")
                                 .long("path")
                                 .setting(ArgSettings::TakesValue)
                                 .about("Path to the directory"),
                         )
                         .arg(
-                            Arg::with_name("nonexistent")
+                            Arg::new("nonexistent")
                                 .long("nonexistent")
                                 .about("Remove override toolchain for all nonexistent directories"),
                         ),
@@ -238,19 +238,19 @@ fn build_cli() -> App<'static> {
                 .subcommand(
                     App::new("add")
                         .setting(AppSettings::Hidden) // synonym for 'set'
-                        .arg(Arg::with_name("toolchain").setting(ArgSettings::Required)),
+                        .arg(Arg::new("toolchain").setting(ArgSettings::Required)),
                 )
                 .subcommand(
                     App::new("remove")
                         .setting(AppSettings::Hidden) // synonym for 'unset'
                         .about("Remove the override toolchain for a directory")
                         .arg(
-                            Arg::with_name("path")
+                            Arg::new("path")
                                 .long("path")
                                 .setting(ArgSettings::TakesValue),
                         )
                         .arg(
-                            Arg::with_name("nonexistent")
+                            Arg::new("nonexistent")
                                 .long("nonexistent")
                                 .about("Remove override toolchain for all nonexistent directories"),
                         ),
@@ -261,8 +261,8 @@ fn build_cli() -> App<'static> {
                 .about("Run a command with an environment configured for a given toolchain")
                 .after_help(RUN_HELP)
                 .setting(AppSettings::TrailingVarArg)
-                .arg(Arg::with_name("toolchain").setting(ArgSettings::Required))
-                .arg(Arg::with_name("command").settings(&[
+                .arg(Arg::new("toolchain").setting(ArgSettings::Required))
+                .arg(Arg::new("command").settings(&[
                     ArgSettings::Required,
                     ArgSettings::MultipleValues,
                     ArgSettings::MultipleOccurrences,
@@ -271,30 +271,30 @@ fn build_cli() -> App<'static> {
         .subcommand(
             App::new("which")
                 .about("Display which binary will be run for a given command")
-                .arg(Arg::with_name("command").setting(ArgSettings::Required)),
+                .arg(Arg::new("command").setting(ArgSettings::Required)),
         )
         .subcommand(
             App::new("doc")
                 .about("Open the documentation for the current toolchain")
                 .after_help(DOC_HELP)
                 .arg(
-                    Arg::with_name("book")
+                    Arg::new("book")
                         .long("book")
                         .about("The Rust Programming Language book"),
                 )
                 .arg(
-                    Arg::with_name("std")
+                    Arg::new("std")
                         .long("std")
                         .about("Standard library API documentation"),
                 )
-                .group(ArgGroup::with_name("page").args(&["book", "std"])),
+                .group(ArgGroup::new("page").args(&["book", "std"])),
         )
         .subcommand(
             App::new("man")
                 .about("View the man page for a given command")
-                .arg(Arg::with_name("command").setting(ArgSettings::Required))
+                .arg(Arg::new("command").setting(ArgSettings::Required))
                 .arg(
-                    Arg::with_name("toolchain")
+                    Arg::new("toolchain")
                         .long("toolchain")
                         .setting(ArgSettings::TakesValue),
                 ),
@@ -308,7 +308,7 @@ fn build_cli() -> App<'static> {
                 .subcommand(
                     App::new("uninstall")
                         .about("Uninstall rustup.")
-                        .arg(Arg::with_name("no-prompt").short('y')),
+                        .arg(Arg::new("no-prompt").short('y')),
                 )
                 .subcommand(App::new("upgrade-data").about("Upgrade the internal data format.")),
         )
@@ -326,7 +326,7 @@ fn build_cli() -> App<'static> {
             App::new("set").about("Alter rustup settings").subcommand(
                 App::new("default-host")
                     .about("The triple used to identify toolchains when not specified")
-                    .arg(Arg::with_name("host_triple").setting(ArgSettings::Required)),
+                    .arg(Arg::new("host_triple").setting(ArgSettings::Required)),
             ),
         )
 }
diff --git a/clap_derive/examples/group.rs b/clap_derive/examples/group.rs
index 6ed40b40..661f3f64 100644
--- a/clap_derive/examples/group.rs
+++ b/clap_derive/examples/group.rs
@@ -3,7 +3,7 @@
 use clap::{ArgGroup, Clap};
 
 #[derive(Clap, Debug)]
-#[clap(group = ArgGroup::with_name("verb").required(true))]
+#[clap(group = ArgGroup::new("verb").required(true))]
 struct Opt {
     /// Set a custom HTTP verb
     #[clap(long, group = "verb")]
diff --git a/clap_derive/src/derives/into_app.rs b/clap_derive/src/derives/into_app.rs
index a006c364..747f270d 100644
--- a/clap_derive/src/derives/into_app.rs
+++ b/clap_derive/src/derives/into_app.rs
@@ -298,7 +298,7 @@ pub fn gen_app_augmentation(
 
                 Some(quote_spanned! { field.span()=>
                     let #app_var = #app_var.arg(
-                        ::clap::Arg::with_name(#name)
+                        ::clap::Arg::new(#name)
                             #modifier
                             #methods
                     );
diff --git a/clap_generate/src/generators/mod.rs b/clap_generate/src/generators/mod.rs
index 86066cbe..e7710850 100644
--- a/clap_generate/src/generators/mod.rs
+++ b/clap_generate/src/generators/mod.rs
@@ -183,7 +183,7 @@ pub trait Generator {
 
         if flags.iter().find(|x| x.get_name() == "help").is_none() {
             flags.push(
-                Arg::with_name("help")
+                Arg::new("help")
                     .short('h')
                     .long("help")
                     .about("Prints help information"),
@@ -194,7 +194,7 @@ pub trait Generator {
             && flags.iter().find(|x| x.get_name() == "version").is_none()
         {
             flags.push(
-                Arg::with_name("version")
+                Arg::new("version")
                     .short('V')
                     .long("version")
                     .about("Prints version information"),
@@ -225,7 +225,7 @@ mod tests {
             .subcommand(
                 App::new("test")
                     .subcommand(App::new("config"))
-                    .arg(Arg::with_name("file").short('f').long("file")),
+                    .arg(Arg::new("file").short('f').long("file")),
             )
             .subcommand(App::new("hello"))
             .bin_name("my-app");
diff --git a/clap_generate/src/lib.rs b/clap_generate/src/lib.rs
index 4c57ff9e..8973c0f7 100644
--- a/clap_generate/src/lib.rs
+++ b/clap_generate/src/lib.rs
@@ -57,11 +57,11 @@ pub use generators::Generator;
 /// pub fn build_cli() -> App<'static> {
 ///     App::new("compl")
 ///         .about("Tests completions")
-///         .arg(Arg::with_name("file")
+///         .arg(Arg::new("file")
 ///             .help("some input file"))
 ///         .subcommand(App::new("test")
 ///             .about("tests things")
-///             .arg(Arg::with_name("case")
+///             .arg(Arg::new("case")
 ///                 .long("case")
 ///                 .takes_value(true)
 ///                 .help("the case to test")))
diff --git a/examples/01b_quick_example.rs b/examples/01b_quick_example.rs
index 3eac6a3d..e8073c2c 100644
--- a/examples/01b_quick_example.rs
+++ b/examples/01b_quick_example.rs
@@ -6,7 +6,7 @@ fn main() {
     //
     // The example below is functionally identical to the 01a_quick_example.rs and 01c_quick_example.rs
     //
-    // *NOTE:* You can actually achieve the best of both worlds by using Arg::from() (instead of Arg::with_name())
+    // *NOTE:* You can actually achieve the best of both worlds by using Arg::from() (instead of Arg::new())
     // and *then* setting any additional properties.
     //
     // Create an application with 5 possible arguments (2 auto generated) and 2 subcommands (1 auto generated)
@@ -36,7 +36,7 @@ fn main() {
         .author("Kevin K. <kbknapp@gmail.com>")
         .about("Does awesome things")
         .arg(
-            Arg::with_name("config")
+            Arg::new("config")
                 .short('c')
                 .long("config")
                 .value_name("FILE")
@@ -44,12 +44,12 @@ fn main() {
                 .takes_value(true),
         )
         .arg(
-            Arg::with_name("output")
+            Arg::new("output")
                 .about("Sets an optional output file")
                 .index(1),
         )
         .arg(
-            Arg::with_name("debug")
+            Arg::new("debug")
                 .short('d')
                 .multiple(true)
                 .about("Turn debugging information on"),
@@ -57,7 +57,7 @@ fn main() {
         .subcommand(
             App::new("test")
                 .about("does testing things")
-                .arg(Arg::with_name("list").short('l').about("lists test values")),
+                .arg(Arg::new("list").short('l').about("lists test values")),
         )
         .get_matches();
 
diff --git a/examples/03_args.rs b/examples/03_args.rs
index c28ee209..dca9d2d6 100644
--- a/examples/03_args.rs
+++ b/examples/03_args.rs
@@ -27,27 +27,27 @@ fn main() {
         // All application settings go here...
         // A simple "Flag" argument example (i.e. "-d") using the builder pattern
         .arg(
-            Arg::with_name("debug")
+            Arg::new("debug")
                 .about("turn on debugging information")
                 .short('d'),
         )
         // Two arguments, one "Option" argument (i.e. one that takes a value) such
         // as "-c some", and one positional argument (i.e. "myapp some_file")
         .args(&[
-            Arg::with_name("config")
+            Arg::new("config")
                 .about("sets the config file to use")
                 .takes_value(true)
                 .short('c')
                 .long("config"),
-            Arg::with_name("input")
+            Arg::new("input")
                 .about("the input file to use")
                 .index(1)
                 .required(true),
         ])
         // *Note* the following two examples are convenience methods, if you wish
-        // to still get the full configurability of Arg::with_name() and the readability
+        // to still get the full configurability of Arg::new() and the readability
         // of arg(), you can instantiate a new Arg with Arg::from() and
-        // still be able to set all the additional properties, just like Arg::with_name()
+        // still be able to set all the additional properties, just like Arg::new()
         //
         //
         // One "Flag" using a usage string
diff --git a/examples/04_using_matches.rs b/examples/04_using_matches.rs
index ab5b8563..806f7b51 100644
--- a/examples/04_using_matches.rs
+++ b/examples/04_using_matches.rs
@@ -19,20 +19,20 @@ fn main() {
         .version("1.0")
         .author("Kevin K. <kbknapp@gmail.com>")
         .arg(
-            Arg::with_name("debug")
+            Arg::new("debug")
                 .about("turn on debugging information")
                 .short('d')
                 .long("debug"),
         )
         .arg(
-            Arg::with_name("config")
+            Arg::new("config")
                 .about("sets the config file to use")
                 .short('c')
                 .long("config")
                 .takes_value(true),
         )
         .arg(
-            Arg::with_name("input")
+            Arg::new("input")
                 .about("the input file to use")
                 .index(1)
                 .required(true),
diff --git a/examples/05_flag_args.rs b/examples/05_flag_args.rs
index ee1b02e0..d580d3a7 100644
--- a/examples/05_flag_args.rs
+++ b/examples/05_flag_args.rs
@@ -14,7 +14,7 @@ fn main() {
         // that you DO NOT need to set each of these for every flag, only the ones
         // you want for your individual case.
         .arg(
-            Arg::with_name("awesome")
+            Arg::new("awesome")
                 .about("turns up the awesome") // Displayed when showing help info
                 .short('a') // Trigger this arg with "-a"
                 .long("awesome") // Trigger this arg with "--awesome"
diff --git a/examples/06_positional_args.rs b/examples/06_positional_args.rs
index fb5e745a..a6a7f1db 100644
--- a/examples/06_positional_args.rs
+++ b/examples/06_positional_args.rs
@@ -12,7 +12,7 @@ fn main() {
         // mind that you DO NOT need to set each of these for every flag, only the
         // ones that apply to your individual case.
         .arg(
-            Arg::with_name("input")
+            Arg::new("input")
                 .about("the input file to use") // Displayed when showing help info
                 .index(1) // Set the order in which the user must
                 // specify this argument (Starts at 1)
@@ -28,11 +28,7 @@ fn main() {
                                  // NOTE: mutual exclusions take precedence over
                                  // required arguments
         )
-        .arg(
-            Arg::with_name("config")
-                .about("the config file to use")
-                .index(2),
-        ) // Note, we do not need to specify required(true)
+        .arg(Arg::new("config").about("the config file to use").index(2)) // Note, we do not need to specify required(true)
         // if we don't want to, because "input" already
         // requires "config"
         // Note, we also do not need to specify requires("input")
diff --git a/examples/07_option_args.rs b/examples/07_option_args.rs
index 99974b9b..15f20624 100644
--- a/examples/07_option_args.rs
+++ b/examples/07_option_args.rs
@@ -14,7 +14,7 @@ fn main() {
         // NOTE: You DO NOT need to specify each setting, only those which apply
         // to your particular case.
         .arg(
-            Arg::with_name("input")
+            Arg::new("input")
                 .about("the input file to use") // Displayed when showing help info
                 .takes_value(true) // MUST be set to true in order to be an "option" argument
                 .short('i') // This argument is triggered with "-i"
diff --git a/examples/08_subcommands.rs b/examples/08_subcommands.rs
index 337ba574..06aaa80a 100644
--- a/examples/08_subcommands.rs
+++ b/examples/08_subcommands.rs
@@ -27,7 +27,7 @@ fn main() {
                 .version("0.1") // Subcommands can have independent version
                 .author("Kevin K.") // And authors
                 .arg(
-                    Arg::with_name("input") // And their own arguments
+                    Arg::new("input") // And their own arguments
                         .about("the file to add")
                         .index(1)
                         .required(true),
diff --git a/examples/10_default_values.rs b/examples/10_default_values.rs
index 700f54dd..88ddde12 100644
--- a/examples/10_default_values.rs
+++ b/examples/10_default_values.rs
@@ -10,7 +10,7 @@ fn main() {
     let matches = App::new("myapp")
         .about("does awesome things")
         .arg(
-            Arg::with_name("INPUT")
+            Arg::new("INPUT")
                 .about("The input file to use") // Note, we don't need to specify
                 // anything like, "Defaults to..."
                 // because clap will automatically
@@ -21,7 +21,7 @@ fn main() {
         )
         // Next we'll use the Option::unwrap_or method on this "CONFIG" option
         .arg(
-            Arg::with_name("CONFIG")
+            Arg::new("CONFIG")
                 // Note that we have to manaully include some verbage to the user
                 // telling them what the default will be.
                 .about("The config file to use (default is \"config.json\")")
diff --git a/examples/11_only_specific_values.rs b/examples/11_only_specific_values.rs
index f4c2b977..63f1c370 100644
--- a/examples/11_only_specific_values.rs
+++ b/examples/11_only_specific_values.rs
@@ -13,7 +13,7 @@ fn main() {
     let matches = App::new("myapp")
         .about("does awesome things")
         .arg(
-            Arg::with_name("MODE")
+            Arg::new("MODE")
                 .about("What mode to run the program in")
                 .index(1)
                 .possible_values(&["fast", "slow"])
diff --git a/examples/14_groups.rs b/examples/14_groups.rs
index b9c3b54a..4fbc727d 100644
--- a/examples/14_groups.rs
+++ b/examples/14_groups.rs
@@ -32,7 +32,7 @@ fn main() {
         .arg("--patch         'auto inc patch'")
         // Create a group, make it required, and add the above arguments
         .group(
-            ArgGroup::with_name("vers")
+            ArgGroup::new("vers")
                 .required(true)
                 .args(&["ver", "major", "minor", "patch"]),
         )
@@ -43,7 +43,7 @@ fn main() {
         // Now let's assume we have a -c [config] argument which requires one of
         // (but **not** both) the "input" arguments
         .arg(
-            Arg::with_name("config")
+            Arg::new("config")
                 .short('c')
                 .takes_value(true)
                 .requires("input"),
diff --git a/examples/15_custom_validator.rs b/examples/15_custom_validator.rs
index e8255950..670030f6 100644
--- a/examples/15_custom_validator.rs
+++ b/examples/15_custom_validator.rs
@@ -8,7 +8,7 @@ fn main() {
     let matches = App::new("myapp")
         // Application logic goes here...
         .arg(
-            Arg::with_name("input")
+            Arg::new("input")
                 .about("the input file to use")
                 .index(1)
                 .required(true)
diff --git a/examples/20_subcommands.rs b/examples/20_subcommands.rs
index c6ca7b17..bbb38d3f 100644
--- a/examples/20_subcommands.rs
+++ b/examples/20_subcommands.rs
@@ -47,11 +47,9 @@ fn main() {
         .version("1.0")
         .author("Me")
         .subcommand(
-            App::new("clone").about("clones repos").arg(
-                Arg::with_name("repo")
-                    .about("The repo to clone")
-                    .required(true),
-            ),
+            App::new("clone")
+                .about("clones repos")
+                .arg(Arg::new("repo").about("The repo to clone").required(true)),
         )
         .subcommand(
             App::new("push")
@@ -62,7 +60,7 @@ fn main() {
                         // which in turn have their own subcommands
                         .about("pushes remote things")
                         .arg(
-                            Arg::with_name("repo")
+                            Arg::new("repo")
                                 .required(true)
                                 .about("The remote repo to push things to"),
                         ),
@@ -76,7 +74,7 @@ fn main() {
                 .version("v2.0 (I'm versioned differently") // or different version from their parents
                 .setting(AppSettings::ArgRequiredElseHelp) // They can even have different settings
                 .arg(
-                    Arg::with_name("stuff")
+                    Arg::new("stuff")
                         .long("stuff")
                         .about("Stuff to add")
                         .takes_value(true)
diff --git a/examples/21_aliases.rs b/examples/21_aliases.rs
index d311b516..601f0298 100644
--- a/examples/21_aliases.rs
+++ b/examples/21_aliases.rs
@@ -9,7 +9,7 @@ fn main() {
                 .version("0.1")
                 .author("Kevin K.")
                 .arg(
-                    Arg::with_name("input")
+                    Arg::new("input")
                         .about("the file to add")
                         .index(1)
                         .required(true),
diff --git a/examples/22_stop_parsing_with_--.rs b/examples/22_stop_parsing_with_--.rs
index 9e63a0ed..46371593 100644
--- a/examples/22_stop_parsing_with_--.rs
+++ b/examples/22_stop_parsing_with_--.rs
@@ -3,9 +3,9 @@ use clap::{App, Arg};
 /// myprog -f -p=bob -- sloppy slop slop
 fn main() {
     let matches = App::new("myprog")
-        .arg(Arg::with_name("eff").short('f'))
-        .arg(Arg::with_name("pea").short('p').takes_value(true))
-        .arg(Arg::with_name("slop").multiple(true).last(true))
+        .arg(Arg::new("eff").short('f'))
+        .arg(Arg::new("pea").short('p').takes_value(true))
+        .arg(Arg::new("slop").multiple(true).last(true))
         .get_matches();
 
     println!("-f used: {:?}", matches.is_present("eff"));
diff --git a/src/build/app/mod.rs b/src/build/app/mod.rs
index 1caa7181..abbc22e7 100644
--- a/src/build/app/mod.rs
+++ b/src/build/app/mod.rs
@@ -59,7 +59,7 @@ pub(crate) enum Propagation {
 ///     .version("1.0.2")
 ///     .about("Explains in brief what the program does")
 ///     .arg(
-///         Arg::with_name("in_file").index(1)
+///         Arg::new("in_file").index(1)
 ///     )
 ///     .after_help("Longer explanation to appear after the options when \
 ///                  displaying the help information from --help or -h")
@@ -675,9 +675,9 @@ impl<'b> App<'b> {
     /// ```no_run
     /// # use clap::{App, Arg};
     /// App::new("myprog")
-    ///     // Adding a single "flag" argument with a short and help text, using Arg::with_name()
+    ///     // Adding a single "flag" argument with a short and help text, using Arg::new()
     ///     .arg(
-    ///         Arg::with_name("debug")
+    ///         Arg::new("debug")
     ///            .short('d')
     ///            .help("turns on debugging mode")
     ///     )
@@ -725,7 +725,7 @@ impl<'b> App<'b> {
     /// App::new("myprog")
     ///     .args(&[
     ///         Arg::from("[debug] -d 'turns on debugging info'"),
-    ///         Arg::with_name("input").index(1).help("the input file to use")
+    ///         Arg::new("input").index(1).help("the input file to use")
     ///     ])
     /// # ;
     /// ```
@@ -776,7 +776,7 @@ impl<'b> App<'b> {
     /// let m = App::new("myprog")
     ///             .subcommand(App::new("test")
     ///                 .aliases(&["do-stuff", "do-tests", "tests"]))
-    ///                 .arg(Arg::with_name("input")
+    ///                 .arg(Arg::new("input")
     ///                             .help("the file to add")
     ///                             .index(1)
     ///                             .required(false))
@@ -879,7 +879,7 @@ impl<'b> App<'b> {
     ///     .arg("--major 'auto increase major'")
     ///     .arg("--minor 'auto increase minor'")
     ///     .arg("--patch 'auto increase patch'")
-    ///     .group(ArgGroup::with_name("vers")
+    ///     .group(ArgGroup::new("vers")
     ///          .args(&["set-ver", "major", "minor","patch"])
     ///          .required(true))
     /// # ;
@@ -905,10 +905,10 @@ impl<'b> App<'b> {
     ///     .arg("-c [FILE]       'a config file'")
     ///     .arg("-i [IFACE]      'an interface'")
     ///     .groups(&[
-    ///         ArgGroup::with_name("vers")
+    ///         ArgGroup::new("vers")
     ///             .args(&["set-ver", "major", "minor","patch"])
     ///             .required(true),
-    ///         ArgGroup::with_name("input")
+    ///         ArgGroup::new("input")
     ///             .args(&["c", "i"])
     ///     ])
     /// # ;
@@ -955,7 +955,7 @@ impl<'b> App<'b> {
     /// # App::new("myprog")
     /// .subcommands( vec![
     ///        App::new("config").about("Controls configuration functionality")
-    ///                                 .arg(Arg::with_name("config_file").index(1)),
+    ///                                 .arg(Arg::new("config_file").index(1)),
     ///        App::new("debug").about("Controls debug functionality")])
     /// # ;
     /// ```
@@ -1032,7 +1032,7 @@ impl<'b> App<'b> {
     /// # use clap::{App, Arg};
     ///
     /// let mut app = App::new("foo")
-    ///     .arg(Arg::with_name("bar")
+    ///     .arg(Arg::new("bar")
     ///         .short('b'))
     ///     .mut_arg("bar", |a| a.short('B'));
     ///
@@ -1500,7 +1500,7 @@ impl<'b> App<'b> {
                     found = true;
                 }
                 if !found {
-                    let mut ag = ArgGroup::_with_id(g.clone());
+                    let mut ag = ArgGroup::with_id(g.clone());
                     ag.args.push(a.id.clone());
                     self.groups.push(ag);
                 }
@@ -1776,7 +1776,7 @@ impl<'b> App<'b> {
             || self.is_set(AppSettings::DisableHelpFlags))
         {
             debug!("App::_create_help_and_version: Building --help");
-            let mut help = Arg::with_name("help")
+            let mut help = Arg::new("help")
                 .long("help")
                 .about("Prints help information");
             if !self.args.args.iter().any(|x| x.short == Some('h')) {
@@ -1793,7 +1793,7 @@ impl<'b> App<'b> {
             || self.is_set(AppSettings::DisableVersion))
         {
             debug!("App::_create_help_and_version: Building --version");
-            let mut version = Arg::with_name("version")
+            let mut version = Arg::new("version")
                 .long("version")
                 .about("Prints version information");
             if !self.args.args.iter().any(|x| x.short == Some('V')) {
diff --git a/src/build/app/settings.rs b/src/build/app/settings.rs
index 39d644a9..34658bff 100644
--- a/src/build/app/settings.rs
+++ b/src/build/app/settings.rs
@@ -219,7 +219,7 @@ pub enum AppSettings {
     /// // Imagine you needed to represent negative numbers as well, such as -10
     /// let m = App::new("nums")
     ///     .setting(AppSettings::AllowLeadingHyphen)
-    ///     .arg(Arg::with_name("neg").index(1))
+    ///     .arg(Arg::new("neg").index(1))
     ///     .get_matches_from(vec![
     ///         "nums", "-20"
     ///     ]);
@@ -246,7 +246,7 @@ pub enum AppSettings {
     /// let res = App::new("myprog")
     ///     .version("v1.1")
     ///     .setting(AppSettings::AllowNegativeNumbers)
-    ///     .arg(Arg::with_name("num"))
+    ///     .arg(Arg::new("num"))
     ///     .try_get_matches_from(vec![
     ///         "myprog", "-20"
     ///     ]);
@@ -295,8 +295,8 @@ pub enum AppSettings {
     /// // Assume there is an external subcommand named "subcmd"
     /// let m = App::new("myprog")
     ///     .setting(AppSettings::AllowMissingPositional)
-    ///     .arg(Arg::with_name("arg1"))
-    ///     .arg(Arg::with_name("arg2")
+    ///     .arg(Arg::new("arg1"))
+    ///     .arg(Arg::new("arg2")
     ///         .required(true))
     ///     .get_matches_from(vec![
     ///         "prog", "other"
@@ -313,9 +313,9 @@ pub enum AppSettings {
     /// // Assume there is an external subcommand named "subcmd"
     /// let m = App::new("myprog")
     ///     .setting(AppSettings::AllowMissingPositional)
-    ///     .arg(Arg::with_name("arg1")
+    ///     .arg(Arg::new("arg1")
     ///         .default_value("something"))
-    ///     .arg(Arg::with_name("arg2")
+    ///     .arg(Arg::new("arg2")
     ///         .required(true))
     ///     .get_matches_from(vec![
     ///         "prog", "other"
@@ -331,9 +331,9 @@ pub enum AppSettings {
     /// // Assume there is an external subcommand named "subcmd"
     /// let m = App::new("myprog")
     ///     .setting(AppSettings::AllowMissingPositional)
-    ///     .arg(Arg::with_name("foo"))
-    ///     .arg(Arg::with_name("bar"))
-    ///     .arg(Arg::with_name("baz").multiple(true))
+    ///     .arg(Arg::new("foo"))
+    ///     .arg(Arg::new("bar"))
+    ///     .arg(Arg::new("baz").multiple(true))
     ///     .get_matches_from(vec![
     ///         "prog", "foo", "bar", "baz1", "baz2", "baz3"
     ///     ]);
@@ -350,9 +350,9 @@ pub enum AppSettings {
     /// // Assume there is an external subcommand named "subcmd"
     /// let m = App::new("myprog")
     ///     .setting(AppSettings::AllowMissingPositional)
-    ///     .arg(Arg::with_name("foo"))
-    ///     .arg(Arg::with_name("bar"))
-    ///     .arg(Arg::with_name("baz").multiple(true))
+    ///     .arg(Arg::new("foo"))
+    ///     .arg(Arg::new("bar"))
+    ///     .arg(Arg::new("baz").multiple(true))
     ///     .get_matches_from(vec![
     ///         "prog", "--", "baz1", "baz2", "baz3"
     ///     ]);
@@ -471,7 +471,7 @@ pub enum AppSettings {
     /// ```rust
     /// # use clap::{App, AppSettings, Arg};
     /// let app = App::new("app").subcommand(App::new("sub")).arg(
-    ///     Arg::with_name("arg")
+    ///     Arg::new("arg")
     ///         .long("arg")
     ///         .multiple(true)
     ///         .takes_value(true),
@@ -751,7 +751,7 @@ pub enum AppSettings {
     /// App::new("myprog")
     ///     .setting(AppSettings::HelpRequired)
     ///     .arg(
-    ///         Arg::with_name("foo").help("It does foo stuff")
+    ///         Arg::new("foo").help("It does foo stuff")
     ///         // As required via AppSettings::HelpRequired, a help message was supplied
     ///      )
     /// #    .get_matches();
@@ -764,7 +764,7 @@ pub enum AppSettings {
     /// App::new("myapp")
     ///     .setting(AppSettings::HelpRequired)
     ///     .arg(
-    ///         Arg::with_name("foo")
+    ///         Arg::new("foo")
     ///         // Someone forgot to put .help("...") here
     ///         // Since the setting AppSettings::HelpRequired is activated, this will lead to
     ///         // a panic (if you are in debug mode)
@@ -849,7 +849,7 @@ pub enum AppSettings {
     /// # use clap::{App, Arg, AppSettings, ErrorKind};
     /// let err = App::new("myprog")
     ///     .setting(AppSettings::SubcommandsNegateReqs)
-    ///     .arg(Arg::with_name("opt").required(true))
+    ///     .arg(Arg::new("opt").required(true))
     ///     .subcommand(App::new("test"))
     ///     .try_get_matches_from(vec![
     ///         "myprog"
@@ -866,7 +866,7 @@ pub enum AppSettings {
     /// # use clap::{App, Arg, AppSettings, ErrorKind};
     /// let noerr = App::new("myprog")
     ///     .setting(AppSettings::SubcommandsNegateReqs)
-    ///     .arg(Arg::with_name("opt").required(true))
+    ///     .arg(Arg::new("opt").required(true))
     ///     .subcommand(App::new("test"))
     ///     .try_get_matches_from(vec![
     ///         "myprog", "test"
diff --git a/src/build/arg/mod.rs b/src/build/arg/mod.rs
index b2ccbc49..11cc4188 100644
--- a/src/build/arg/mod.rs
+++ b/src/build/arg/mod.rs
@@ -43,7 +43,7 @@ type ValidatorOs = Rc<dyn Fn(&OsStr) -> Result<(), String>>;
 /// ```rust
 /// # use clap::Arg;
 /// // Using the traditional builder pattern and setting each option manually
-/// let cfg = Arg::with_name("config")
+/// let cfg = Arg::new("config")
 ///       .short('c')
 ///       .long("config")
 ///       .takes_value(true)
@@ -141,16 +141,6 @@ impl<'help> Arg<'help> {
 }
 
 impl<'help> Arg<'help> {
-    /// @TODO @p2 @docs @v3-beta1: Write Docs
-    pub fn new<T: Key + ToString>(t: T) -> Self {
-        Arg {
-            id: t.into(),
-            disp_ord: 999,
-            unified_ord: 999,
-            ..Default::default()
-        }
-    }
-
     /// Creates a new instance of [`Arg`] using a unique string name. The name will be used to get
     /// information about whether or not the argument was used at runtime, get values, set
     /// relationships with other args, etc..
@@ -163,16 +153,16 @@ impl<'help> Arg<'help> {
     ///
     /// ```rust
     /// # use clap::{App, Arg};
-    /// Arg::with_name("config")
+    /// Arg::new("config")
     /// # ;
     /// ```
     /// [`Arg::takes_value(true)`]: ./struct.Arg.html#method.takes_value
     /// [`Arg`]: ./struct.Arg.html
-    #[inline]
-    pub fn with_name(n: &'help str) -> Self {
+    pub fn new<S: Into<&'help str>>(n: S) -> Self {
+        let name = n.into();
         Arg {
-            id: n.into(),
-            name: n,
+            id: Id::from(&*name),
+            name,
             disp_ord: 999,
             unified_ord: 999,
             ..Default::default()
@@ -193,7 +183,7 @@ impl<'help> Arg<'help> {
     ///
     /// ```rust
     /// # use clap::{App, Arg};
-    /// Arg::with_name("config")
+    /// Arg::new("config")
     ///     .short('c')
     /// # ;
     /// ```
@@ -203,7 +193,7 @@ impl<'help> Arg<'help> {
     /// ```rust
     /// # use clap::{App, Arg};
     /// let m = App::new("prog")
-    ///     .arg(Arg::with_name("config")
+    ///     .arg(Arg::new("config")
     ///         .short('c'))
     ///     .get_matches_from(vec![
     ///         "prog", "-c"
@@ -239,7 +229,7 @@ impl<'help> Arg<'help> {
     ///
     /// ```rust
     /// # use clap::{App, Arg};
-    /// Arg::with_name("cfg")
+    /// Arg::new("cfg")
     ///     .long("config")
     /// # ;
     /// ```
@@ -249,7 +239,7 @@ impl<'help> Arg<'help> {
     /// ```rust
     /// # use clap::{App, Arg};
     /// let m = App::new("prog")
-    ///     .arg(Arg::with_name("cfg")
+    ///     .arg(Arg::new("cfg")
     ///         .long("config"))
     ///     .get_matches_from(vec![
     ///         "prog", "--config"
@@ -273,7 +263,7 @@ impl<'help> Arg<'help> {
     /// ```rust
     /// # use clap::{App, Arg};
     /// let m = App::new("prog")
-    ///             .arg(Arg::with_name("test")
+    ///             .arg(Arg::new("test")
     ///             .long("test")
     ///             .alias("alias")
     ///             .takes_value(true))
@@ -299,7 +289,7 @@ impl<'help> Arg<'help> {
     /// ```rust
     /// # use clap::{App, Arg};
     /// let m = App::new("prog")
-    ///             .arg(Arg::with_name("test")
+    ///             .arg(Arg::new("test")
     ///             .short('t')
     ///             .short_alias('e')
     ///             .takes_value(true))
@@ -329,7 +319,7 @@ impl<'help> Arg<'help> {
     /// ```rust
     /// # use clap::{App, Arg};
     /// let m = App::new("prog")
-    ///             .arg(Arg::with_name("test")
+    ///             .arg(Arg::new("test")
     ///                     .long("test")
     ///                     .aliases(&["do-stuff", "do-tests", "tests"])
     ///                     .help("the file to add")
@@ -355,7 +345,7 @@ impl<'help> Arg<'help> {
     /// ```rust
     /// # use clap::{App, Arg};
     /// let m = App::new("prog")
-    ///             .arg(Arg::with_name("test")
+    ///             .arg(Arg::new("test")
     ///                     .short('t')
     ///                     .short_aliases(&['e', 's'])
     ///                     .help("the file to add")
@@ -384,7 +374,7 @@ impl<'help> Arg<'help> {
     /// ```rust
     /// # use clap::{App, Arg};
     /// let m = App::new("prog")
-    ///             .arg(Arg::with_name("test")
+    ///             .arg(Arg::new("test")
     ///                 .visible_alias("something-awesome")
     ///                 .long("test")
     ///                 .takes_value(true))
@@ -409,7 +399,7 @@ impl<'help> Arg<'help> {
     /// ```rust
     /// # use clap::{App, Arg};
     /// let m = App::new("prog")
-    ///             .arg(Arg::with_name("test")
+    ///             .arg(Arg::new("test")
     ///                 .long("test")
     ///                 .visible_short_alias('t')
     ///                 .takes_value(true))
@@ -438,7 +428,7 @@ impl<'help> Arg<'help> {
     /// ```rust
     /// # use clap::{App, Arg};
     /// let m = App::new("prog")
-    ///             .arg(Arg::with_name("test")
+    ///             .arg(Arg::new("test")
     ///                 .long("test")
     ///                 .visible_aliases(&["something", "awesome", "cool"]))
     ///        .get_matches_from(vec![
@@ -461,7 +451,7 @@ impl<'help> Arg<'help> {
     /// ```rust
     /// # use clap::{App, Arg};
     /// let m = App::new("prog")
-    ///             .arg(Arg::with_name("test")
+    ///             .arg(Arg::new("test")
     ///                 .long("test")
     ///                 .visible_short_aliases(&['t', 'e']))
     ///        .get_matches_from(vec![
@@ -512,7 +502,7 @@ impl<'help> Arg<'help> {
     ///
     /// ```rust
     /// # use clap::{App, Arg};
-    /// Arg::with_name("config")
+    /// Arg::new("config")
     ///     .about("The config file used by the myprog")
     /// # ;
     /// ```
@@ -523,7 +513,7 @@ impl<'help> Arg<'help> {
     /// ```rust
     /// # use clap::{App, Arg};
     /// let m = App::new("prog")
-    ///     .arg(Arg::with_name("cfg")
+    ///     .arg(Arg::new("cfg")
     ///         .long("config")
     ///         .about("Some help text describing the --config arg"))
     ///     .get_matches_from(vec![
@@ -568,7 +558,7 @@ impl<'help> Arg<'help> {
     ///
     /// ```rust
     /// # use clap::{App, Arg};
-    /// Arg::with_name("config")
+    /// Arg::new("config")
     ///     .long_about(
     /// "The config file used by the myprog must be in JSON format
     /// with only valid keys and may not contain other nonsense
@@ -583,7 +573,7 @@ impl<'help> Arg<'help> {
     /// ```rust
     /// # use clap::{App, Arg};
     /// let m = App::new("prog")
-    ///     .arg(Arg::with_name("cfg")
+    ///     .arg(Arg::new("cfg")
     ///         .long("config")
     ///         .long_about(
     /// "The config file used by the myprog must be in JSON format
@@ -633,7 +623,7 @@ impl<'help> Arg<'help> {
     ///
     /// ```rust
     /// # use clap::Arg;
-    /// Arg::with_name("config")
+    /// Arg::new("config")
     ///     .required_unless("debug")
     /// # ;
     /// ```
@@ -645,11 +635,11 @@ impl<'help> Arg<'help> {
     /// ```rust
     /// # use clap::{App, Arg};
     /// let res = App::new("prog")
-    ///     .arg(Arg::with_name("cfg")
+    ///     .arg(Arg::new("cfg")
     ///         .required_unless("dbg")
     ///         .takes_value(true)
     ///         .long("config"))
-    ///     .arg(Arg::with_name("dbg")
+    ///     .arg(Arg::new("dbg")
     ///         .long("debug"))
     ///     .try_get_matches_from(vec![
     ///         "prog", "--debug"
@@ -663,11 +653,11 @@ impl<'help> Arg<'help> {
     /// ```rust
     /// # use clap::{App, Arg, ErrorKind};
     /// let res = App::new("prog")
-    ///     .arg(Arg::with_name("cfg")
+    ///     .arg(Arg::new("cfg")
     ///         .required_unless("dbg")
     ///         .takes_value(true)
     ///         .long("config"))
-    ///     .arg(Arg::with_name("dbg")
+    ///     .arg(Arg::new("dbg")
     ///         .long("debug"))
     ///     .try_get_matches_from(vec![
     ///         "prog"
@@ -694,7 +684,7 @@ impl<'help> Arg<'help> {
     ///
     /// ```rust
     /// # use clap::Arg;
-    /// Arg::with_name("config")
+    /// Arg::new("config")
     ///     .required_unless_all(&["cfg", "dbg"])
     /// # ;
     /// ```
@@ -707,13 +697,13 @@ impl<'help> Arg<'help> {
     /// ```rust
     /// # use clap::{App, Arg};
     /// let res = App::new("prog")
-    ///     .arg(Arg::with_name("cfg")
+    ///     .arg(Arg::new("cfg")
     ///         .required_unless_all(&["dbg", "infile"])
     ///         .takes_value(true)
     ///         .long("config"))
-    ///     .arg(Arg::with_name("dbg")
+    ///     .arg(Arg::new("dbg")
     ///         .long("debug"))
-    ///     .arg(Arg::with_name("infile")
+    ///     .arg(Arg::new("infile")
     ///         .short('i')
     ///         .takes_value(true))
     ///     .try_get_matches_from(vec![
@@ -729,13 +719,13 @@ impl<'help> Arg<'help> {
     /// ```rust
     /// # use clap::{App, Arg, ErrorKind};
     /// let res = App::new("prog")
-    ///     .arg(Arg::with_name("cfg")
+    ///     .arg(Arg::new("cfg")
     ///         .required_unless_all(&["dbg", "infile"])
     ///         .takes_value(true)
     ///         .long("config"))
-    ///     .arg(Arg::with_name("dbg")
+    ///     .arg(Arg::new("dbg")
     ///         .long("debug"))
-    ///     .arg(Arg::with_name("infile")
+    ///     .arg(Arg::new("infile")
     ///         .short('i')
     ///         .takes_value(true))
     ///     .try_get_matches_from(vec![
@@ -762,7 +752,7 @@ impl<'help> Arg<'help> {
     ///
     /// ```rust
     /// # use clap::Arg;
-    /// Arg::with_name("config")
+    /// Arg::new("config")
     ///     .required_unless_all(&["cfg", "dbg"])
     /// # ;
     /// ```
@@ -775,13 +765,13 @@ impl<'help> Arg<'help> {
     /// ```rust
     /// # use clap::{App, Arg};
     /// let res = App::new("prog")
-    ///     .arg(Arg::with_name("cfg")
+    ///     .arg(Arg::new("cfg")
     ///         .required_unless_one(&["dbg", "infile"])
     ///         .takes_value(true)
     ///         .long("config"))
-    ///     .arg(Arg::with_name("dbg")
+    ///     .arg(Arg::new("dbg")
     ///         .long("debug"))
-    ///     .arg(Arg::with_name("infile")
+    ///     .arg(Arg::new("infile")
     ///         .short('i')
     ///         .takes_value(true))
     ///     .try_get_matches_from(vec![
@@ -797,13 +787,13 @@ impl<'help> Arg<'help> {
     /// ```rust
     /// # use clap::{App, Arg, ErrorKind};
     /// let res = App::new("prog")
-    ///     .arg(Arg::with_name("cfg")
+    ///     .arg(Arg::new("cfg")
     ///         .required_unless_one(&["dbg", "infile"])
     ///         .takes_value(true)
     ///         .long("config"))
-    ///     .arg(Arg::with_name("dbg")
+    ///     .arg(Arg::new("dbg")
     ///         .long("debug"))
-    ///     .arg(Arg::with_name("infile")
+    ///     .arg(Arg::new("infile")
     ///         .short('i')
     ///         .takes_value(true))
     ///     .try_get_matches_from(vec![
@@ -839,7 +829,7 @@ impl<'help> Arg<'help> {
     ///
     /// ```rust
     /// # use clap::Arg;
-    /// Arg::with_name("config")
+    /// Arg::new("config")
     ///     .conflicts_with("debug")
     /// # ;
     /// ```
@@ -849,11 +839,11 @@ impl<'help> Arg<'help> {
     /// ```rust
     /// # use clap::{App, Arg, ErrorKind};
     /// let res = App::new("prog")
-    ///     .arg(Arg::with_name("cfg")
+    ///     .arg(Arg::new("cfg")
     ///         .takes_value(true)
     ///         .conflicts_with("debug")
     ///         .long("config"))
-    ///     .arg(Arg::with_name("debug")
+    ///     .arg(Arg::new("debug")
     ///         .long("debug"))
     ///     .try_get_matches_from(vec![
     ///         "prog", "--debug", "--config", "file.conf"
@@ -887,7 +877,7 @@ impl<'help> Arg<'help> {
     ///
     /// ```rust
     /// # use clap::Arg;
-    /// Arg::with_name("config")
+    /// Arg::new("config")
     ///     .conflicts_with_all(&["debug", "input"])
     /// # ;
     /// ```
@@ -898,13 +888,13 @@ impl<'help> Arg<'help> {
     /// ```rust
     /// # use clap::{App, Arg, ErrorKind};
     /// let res = App::new("prog")
-    ///     .arg(Arg::with_name("cfg")
+    ///     .arg(Arg::new("cfg")
     ///         .takes_value(true)
     ///         .conflicts_with_all(&["debug", "input"])
     ///         .long("config"))
-    ///     .arg(Arg::with_name("debug")
+    ///     .arg(Arg::new("debug")
     ///         .long("debug"))
-    ///     .arg(Arg::with_name("input")
+    ///     .arg(Arg::new("input")
     ///         .index(1))
     ///     .try_get_matches_from(vec![
     ///         "prog", "--config", "file.conf", "file.txt"
@@ -928,7 +918,7 @@ impl<'help> Arg<'help> {
     ///
     /// ```rust
     /// # use clap::Arg;
-    /// Arg::with_name("config")
+    /// Arg::new("config")
     ///     .exclusive(true)
     /// # ;
     /// ```
@@ -945,13 +935,13 @@ impl<'help> Arg<'help> {
     /// ```rust
     /// # use clap::{App, Arg, ErrorKind};
     /// let res = App::new("prog")
-    ///     .arg(Arg::with_name("exclusive")
+    ///     .arg(Arg::new("exclusive")
     ///         .takes_value(true)
     ///         .exclusive(true)
     ///         .long("exclusive"))
-    ///     .arg(Arg::with_name("debug")
+    ///     .arg(Arg::new("debug")
     ///         .long("debug"))
-    ///     .arg(Arg::with_name("input")
+    ///     .arg(Arg::new("input")
     ///         .index(1))
     ///     .try_get_matches_from(vec![
     ///         "prog", "--exclusive", "file.conf", "file.txt"
@@ -1113,7 +1103,7 @@ impl<'help> Arg<'help> {
     ///
     /// ```rust
     /// # use clap::Arg;
-    /// Arg::with_name("config")
+    /// Arg::new("config")
     ///     .requires("input")
     /// # ;
     /// ```
@@ -1125,11 +1115,11 @@ impl<'help> Arg<'help> {
     /// ```rust
     /// # use clap::{App, Arg};
     /// let res = App::new("prog")
-    ///     .arg(Arg::with_name("cfg")
+    ///     .arg(Arg::new("cfg")
     ///         .takes_value(true)
     ///         .requires("input")
     ///         .long("config"))
-    ///     .arg(Arg::with_name("input")
+    ///     .arg(Arg::new("input")
     ///         .index(1))
     ///     .try_get_matches_from(vec![
     ///         "prog"
@@ -1143,11 +1133,11 @@ impl<'help> Arg<'help> {
     /// ```rust
     /// # use clap::{App, Arg, ErrorKind};
     /// let res = App::new("prog")
-    ///     .arg(Arg::with_name("cfg")
+    ///     .arg(Arg::new("cfg")
     ///         .takes_value(true)
     ///         .requires("input")
     ///         .long("config"))
-    ///     .arg(Arg::with_name("input")
+    ///     .arg(Arg::new("input")
     ///         .index(1))
     ///     .try_get_matches_from(vec![
     ///         "prog", "--config", "file.conf"
@@ -1178,7 +1168,7 @@ impl<'help> Arg<'help> {
     ///
     /// ```rust
     /// # use clap::Arg;
-    /// Arg::with_name("config")
+    /// Arg::new("config")
     ///     .requires_if("val", "arg")
     /// # ;
     /// ```
@@ -1190,11 +1180,11 @@ impl<'help> Arg<'help> {
     /// ```rust
     /// # use clap::{App, Arg};
     /// let res = App::new("prog")
-    ///     .arg(Arg::with_name("cfg")
+    ///     .arg(Arg::new("cfg")
     ///         .takes_value(true)
     ///         .requires_if("my.cfg", "other")
     ///         .long("config"))
-    ///     .arg(Arg::with_name("other"))
+    ///     .arg(Arg::new("other"))
     ///     .try_get_matches_from(vec![
     ///         "prog", "--config", "some.cfg"
     ///     ]);
@@ -1208,11 +1198,11 @@ impl<'help> Arg<'help> {
     /// ```rust
     /// # use clap::{App, Arg, ErrorKind};
     /// let res = App::new("prog")
-    ///     .arg(Arg::with_name("cfg")
+    ///     .arg(Arg::new("cfg")
     ///         .takes_value(true)
     ///         .requires_if("my.cfg", "input")
     ///         .long("config"))
-    ///     .arg(Arg::with_name("input"))
+    ///     .arg(Arg::new("input"))
     ///     .try_get_matches_from(vec![
     ///         "prog", "--config", "my.cfg"
     ///     ]);
@@ -1243,7 +1233,7 @@ impl<'help> Arg<'help> {
     ///
     /// ```rust
     /// # use clap::Arg;
-    /// Arg::with_name("config")
+    /// Arg::new("config")
     ///     .requires_ifs(&[
     ///         ("val", "arg"),
     ///         ("other_val", "arg2"),
@@ -1258,17 +1248,17 @@ impl<'help> Arg<'help> {
     /// ```rust
     /// # use clap::{App, Arg, ErrorKind};
     /// let res = App::new("prog")
-    ///     .arg(Arg::with_name("cfg")
+    ///     .arg(Arg::new("cfg")
     ///         .takes_value(true)
     ///         .requires_ifs(&[
     ///             ("special.conf", "opt"),
     ///             ("other.conf", "other"),
     ///         ])
     ///         .long("config"))
-    ///     .arg(Arg::with_name("opt")
+    ///     .arg(Arg::new("opt")
     ///         .long("option")
     ///         .takes_value(true))
-    ///     .arg(Arg::with_name("other"))
+    ///     .arg(Arg::new("other"))
     ///     .try_get_matches_from(vec![
     ///         "prog", "--config", "special.conf"
     ///     ]);
@@ -1299,7 +1289,7 @@ impl<'help> Arg<'help> {
     ///
     /// ```rust
     /// # use clap::Arg;
-    /// Arg::with_name("config")
+    /// Arg::new("config")
     ///     .required_if("other_arg", "value")
     /// # ;
     /// ```
@@ -1311,11 +1301,11 @@ impl<'help> Arg<'help> {
     /// ```rust
     /// # use clap::{App, Arg};
     /// let res = App::new("prog")
-    ///     .arg(Arg::with_name("cfg")
+    ///     .arg(Arg::new("cfg")
     ///         .takes_value(true)
     ///         .required_if("other", "special")
     ///         .long("config"))
-    ///     .arg(Arg::with_name("other")
+    ///     .arg(Arg::new("other")
     ///         .long("other")
     ///         .takes_value(true))
     ///     .try_get_matches_from(vec![
@@ -1331,11 +1321,11 @@ impl<'help> Arg<'help> {
     /// ```rust
     /// # use clap::{App, Arg, ErrorKind};
     /// let res = App::new("prog")
-    ///     .arg(Arg::with_name("cfg")
+    ///     .arg(Arg::new("cfg")
     ///         .takes_value(true)
     ///         .required_if("other", "special")
     ///         .long("config"))
-    ///     .arg(Arg::with_name("other")
+    ///     .arg(Arg::new("other")
     ///         .long("other")
     ///         .takes_value(true))
     ///     .try_get_matches_from(vec![
@@ -1369,7 +1359,7 @@ impl<'help> Arg<'help> {
     ///
     /// ```rust
     /// # use clap::Arg;
-    /// Arg::with_name("config")
+    /// Arg::new("config")
     ///     .required_ifs(&[
     ///         ("extra", "val"),
     ///         ("option", "spec")
@@ -1384,17 +1374,17 @@ impl<'help> Arg<'help> {
     /// ```rust
     /// # use clap::{App, Arg};
     /// let res = App::new("prog")
-    ///     .arg(Arg::with_name("cfg")
+    ///     .arg(Arg::new("cfg")
     ///         .required_ifs(&[
     ///             ("extra", "val"),
     ///             ("option", "spec")
     ///         ])
     ///         .takes_value(true)
     ///         .long("config"))
-    ///     .arg(Arg::with_name("extra")
+    ///     .arg(Arg::new("extra")
     ///         .takes_value(true)
     ///         .long("extra"))
-    ///     .arg(Arg::with_name("option")
+    ///     .arg(Arg::new("option")
     ///         .takes_value(true)
     ///         .long("option"))
     ///     .try_get_matches_from(vec![
@@ -1410,17 +1400,17 @@ impl<'help> Arg<'help> {
     /// ```rust
     /// # use clap::{App, Arg, ErrorKind};
     /// let res = App::new("prog")
-    ///     .arg(Arg::with_name("cfg")
+    ///     .arg(Arg::new("cfg")
     ///         .required_ifs(&[
     ///             ("extra", "val"),
     ///             ("option", "spec")
     ///         ])
     ///         .takes_value(true)
     ///         .long("config"))
-    ///     .arg(Arg::with_name("extra")
+    ///     .arg(Arg::new("extra")
     ///         .takes_value(true)
     ///         .long("extra"))
-    ///     .arg(Arg::with_name("option")
+    ///     .arg(Arg::new("option")
     ///         .takes_value(true)
     ///         .long("option"))
     ///     .try_get_matches_from(vec![
@@ -1449,7 +1439,7 @@ impl<'help> Arg<'help> {
     ///
     /// ```rust
     /// # use clap::Arg;
-    /// Arg::with_name("config")
+    /// Arg::new("config")
     ///     .requires_all(&["input", "output"])
     /// # ;
     /// ```
@@ -1461,13 +1451,13 @@ impl<'help> Arg<'help> {
     /// ```rust
     /// # use clap::{App, Arg};
     /// let res = App::new("prog")
-    ///     .arg(Arg::with_name("cfg")
+    ///     .arg(Arg::new("cfg")
     ///         .takes_value(true)
     ///         .requires("input")
     ///         .long("config"))
-    ///     .arg(Arg::with_name("input")
+    ///     .arg(Arg::new("input")
     ///         .index(1))
-    ///     .arg(Arg::with_name("output")
+    ///     .arg(Arg::new("output")
     ///         .index(2))
     ///     .try_get_matches_from(vec![
     ///         "prog"
@@ -1482,13 +1472,13 @@ impl<'help> Arg<'help> {
     /// ```rust
     /// # use clap::{App, Arg, ErrorKind};
     /// let res = App::new("prog")
-    ///     .arg(Arg::with_name("cfg")
+    ///     .arg(Arg::new("cfg")
     ///         .takes_value(true)
     ///         .requires_all(&["input", "output"])
     ///         .long("config"))
-    ///     .arg(Arg::with_name("input")
+    ///     .arg(Arg::new("input")
     ///         .index(1))
-    ///     .arg(Arg::with_name("output")
+    ///     .arg(Arg::new("output")
     ///         .index(2))
     ///     .try_get_matches_from(vec![
     ///         "prog", "--config", "file.conf", "in.txt"
@@ -1528,7 +1518,7 @@ impl<'help> Arg<'help> {
     ///
     /// ```rust
     /// # use clap::{App, Arg};
-    /// Arg::with_name("config")
+    /// Arg::new("config")
     ///     .index(1)
     /// # ;
     /// ```
@@ -1536,9 +1526,9 @@ impl<'help> Arg<'help> {
     /// ```rust
     /// # use clap::{App, Arg};
     /// let m = App::new("prog")
-    ///     .arg(Arg::with_name("mode")
+    ///     .arg(Arg::new("mode")
     ///         .index(1))
-    ///     .arg(Arg::with_name("debug")
+    ///     .arg(Arg::new("debug")
     ///         .long("debug"))
     ///     .get_matches_from(vec![
     ///         "prog", "--debug", "fast"
@@ -1574,7 +1564,7 @@ impl<'help> Arg<'help> {
     ///
     /// ```rust
     /// # use clap::{App, Arg};
-    /// Arg::with_name("vals")
+    /// Arg::new("vals")
     ///     .takes_value(true)
     ///     .multiple(true)
     ///     .value_terminator(";")
@@ -1586,11 +1576,11 @@ impl<'help> Arg<'help> {
     /// ```rust
     /// # use clap::{App, Arg};
     /// let m = App::new("prog")
-    ///     .arg(Arg::with_name("cmds")
+    ///     .arg(Arg::new("cmds")
     ///         .multiple(true)
     ///         .allow_hyphen_values(true)
     ///         .value_terminator(";"))
-    ///     .arg(Arg::with_name("location"))
+    ///     .arg(Arg::new("location"))
     ///     .get_matches_from(vec![
     ///         "prog", "find", "-type", "f", "-name", "special", ";", "/home/clap"
     ///     ]);
@@ -1620,7 +1610,7 @@ impl<'help> Arg<'help> {
     ///
     /// ```rust
     /// # use clap::{App, Arg};
-    /// Arg::with_name("mode")
+    /// Arg::new("mode")
     ///     .takes_value(true)
     ///     .possible_values(&["fast", "slow", "medium"])
     /// # ;
@@ -1629,7 +1619,7 @@ impl<'help> Arg<'help> {
     /// ```rust
     /// # use clap::{App, Arg};
     /// let m = App::new("prog")
-    ///     .arg(Arg::with_name("mode")
+    ///     .arg(Arg::new("mode")
     ///         .long("mode")
     ///         .takes_value(true)
     ///         .possible_values(&["fast", "slow", "medium"]))
@@ -1646,7 +1636,7 @@ impl<'help> Arg<'help> {
     /// ```rust
     /// # use clap::{App, Arg, ErrorKind};
     /// let res = App::new("prog")
-    ///     .arg(Arg::with_name("mode")
+    ///     .arg(Arg::new("mode")
     ///         .long("mode")
     ///         .takes_value(true)
     ///         .possible_values(&["fast", "slow", "medium"]))
@@ -1673,7 +1663,7 @@ impl<'help> Arg<'help> {
     ///
     /// ```rust
     /// # use clap::{App, Arg};
-    /// Arg::with_name("mode")
+    /// Arg::new("mode")
     ///     .takes_value(true)
     ///     .possible_value("fast")
     ///     .possible_value("slow")
@@ -1684,7 +1674,7 @@ impl<'help> Arg<'help> {
     /// ```rust
     /// # use clap::{App, Arg};
     /// let m = App::new("prog")
-    ///     .arg(Arg::with_name("mode")
+    ///     .arg(Arg::new("mode")
     ///         .long("mode")
     ///         .takes_value(true)
     ///         .possible_value("fast")
@@ -1703,7 +1693,7 @@ impl<'help> Arg<'help> {
     /// ```rust
     /// # use clap::{App, Arg, ErrorKind};
     /// let res = App::new("prog")
-    ///     .arg(Arg::with_name("mode")
+    ///     .arg(Arg::new("mode")
     ///         .long("mode")
     ///         .takes_value(true)
     ///         .possible_value("fast")
@@ -1729,7 +1719,7 @@ impl<'help> Arg<'help> {
     ///
     /// ```rust
     /// # use clap::{App, Arg};
-    /// Arg::with_name("debug")
+    /// Arg::new("debug")
     ///     .long("debug")
     ///     .group("mode")
     /// # ;
@@ -1741,10 +1731,10 @@ impl<'help> Arg<'help> {
     /// ```rust
     /// # use clap::{App, Arg};
     /// let m = App::new("prog")
-    ///     .arg(Arg::with_name("debug")
+    ///     .arg(Arg::new("debug")
     ///         .long("debug")
     ///         .group("mode"))
-    ///     .arg(Arg::with_name("verbose")
+    ///     .arg(Arg::new("verbose")
     ///         .long("verbose")
     ///         .group("mode"))
     ///     .get_matches_from(vec![
@@ -1764,7 +1754,7 @@ impl<'help> Arg<'help> {
     ///
     /// ```rust
     /// # use clap::{App, Arg};
-    /// Arg::with_name("debug")
+    /// Arg::new("debug")
     ///     .long("debug")
     ///     .groups(&["mode", "verbosity"])
     /// # ;
@@ -1776,10 +1766,10 @@ impl<'help> Arg<'help> {
     /// ```rust
     /// # use clap::{App, Arg};
     /// let m = App::new("prog")
-    ///     .arg(Arg::with_name("debug")
+    ///     .arg(Arg::new("debug")
     ///         .long("debug")
     ///         .groups(&["mode", "verbosity"]))
-    ///     .arg(Arg::with_name("verbose")
+    ///     .arg(Arg::new("verbose")
     ///         .long("verbose")
     ///         .groups(&["mode", "verbosity"]))
     ///     .get_matches_from(vec![
@@ -1807,7 +1797,7 @@ impl<'help> Arg<'help> {
     ///
     /// ```rust
     /// # use clap::{App, Arg};
-    /// Arg::with_name("file")
+    /// Arg::new("file")
     ///     .short('f')
     ///     .number_of_values(3)
     /// # ;
@@ -1818,7 +1808,7 @@ impl<'help> Arg<'help> {
     /// ```rust
     /// # use clap::{App, Arg, ErrorKind};
     /// let res = App::new("prog")
-    ///     .arg(Arg::with_name("file")
+    ///     .arg(Arg::new("file")
     ///         .takes_value(true)
     ///         .number_of_values(2)
     ///         .short('F'))
@@ -1860,7 +1850,7 @@ impl<'help> Arg<'help> {
     ///     Err(String::from("The value did not contain the required @ sigil"))
     /// }
     /// let res = App::new("prog")
-    ///     .arg(Arg::with_name("file")
+    ///     .arg(Arg::new("file")
     ///         .index(1)
     ///         .validator(has_at))
     ///     .try_get_matches_from(vec![
@@ -1899,7 +1889,7 @@ impl<'help> Arg<'help> {
     ///     Err(String::from("The value did not contain the required & sigil"))
     /// }
     /// let res = App::new("prog")
-    ///     .arg(Arg::with_name("file")
+    ///     .arg(Arg::new("file")
     ///         .index(1)
     ///         .validator_os(has_ampersand))
     ///     .try_get_matches_from(vec![
@@ -1936,7 +1926,7 @@ impl<'help> Arg<'help> {
     ///
     /// ```rust
     /// # use clap::{App, Arg};
-    /// Arg::with_name("file")
+    /// Arg::new("file")
     ///     .short('f')
     ///     .max_values(3)
     /// # ;
@@ -1947,7 +1937,7 @@ impl<'help> Arg<'help> {
     /// ```rust
     /// # use clap::{App, Arg};
     /// let res = App::new("prog")
-    ///     .arg(Arg::with_name("file")
+    ///     .arg(Arg::new("file")
     ///         .takes_value(true)
     ///         .max_values(3)
     ///         .short('F'))
@@ -1966,7 +1956,7 @@ impl<'help> Arg<'help> {
     /// ```rust
     /// # use clap::{App, Arg, ErrorKind};
     /// let res = App::new("prog")
-    ///     .arg(Arg::with_name("file")
+    ///     .arg(Arg::new("file")
     ///         .takes_value(true)
     ///         .max_values(2)
     ///         .short('F'))
@@ -2001,7 +1991,7 @@ impl<'help> Arg<'help> {
     ///
     /// ```rust
     /// # use clap::{App, Arg};
-    /// Arg::with_name("file")
+    /// Arg::new("file")
     ///     .short('f')
     ///     .min_values(3)
     /// # ;
@@ -2012,7 +2002,7 @@ impl<'help> Arg<'help> {
     /// ```rust
     /// # use clap::{App, Arg};
     /// let res = App::new("prog")
-    ///     .arg(Arg::with_name("file")
+    ///     .arg(Arg::new("file")
     ///         .takes_value(true)
     ///         .min_values(2)
     ///         .short('F'))
@@ -2031,7 +2021,7 @@ impl<'help> Arg<'help> {
     /// ```rust
     /// # use clap::{App, Arg, ErrorKind};
     /// let res = App::new("prog")
-    ///     .arg(Arg::with_name("file")
+    ///     .arg(Arg::new("file")
     ///         .takes_value(true)
     ///         .min_values(2)
     ///         .short('F'))
@@ -2060,7 +2050,7 @@ impl<'help> Arg<'help> {
     /// ```rust
     /// # use clap::{App, Arg};
     /// let m = App::new("prog")
-    ///     .arg(Arg::with_name("config")
+    ///     .arg(Arg::new("config")
     ///         .short('c')
     ///         .long("config")
     ///         .value_delimiter(";"))
@@ -2109,7 +2099,7 @@ impl<'help> Arg<'help> {
     ///
     /// ```rust
     /// # use clap::{App, Arg};
-    /// Arg::with_name("speed")
+    /// Arg::new("speed")
     ///     .short('s')
     ///     .value_names(&["fast", "slow"])
     /// # ;
@@ -2118,7 +2108,7 @@ impl<'help> Arg<'help> {
     /// ```rust
     /// # use clap::{App, Arg};
     /// let m = App::new("prog")
-    ///     .arg(Arg::with_name("io")
+    ///     .arg(Arg::new("io")
     ///         .long("io-files")
     ///         .value_names(&["INFILE", "OUTFILE"]))
     ///     .get_matches_from(vec![
@@ -2172,7 +2162,7 @@ impl<'help> Arg<'help> {
     ///
     /// ```rust
     /// # use clap::{App, Arg};
-    /// Arg::with_name("cfg")
+    /// Arg::new("cfg")
     ///     .long("config")
     ///     .value_name("FILE")
     /// # ;
@@ -2181,7 +2171,7 @@ impl<'help> Arg<'help> {
     /// ```rust
     /// # use clap::{App, Arg};
     /// let m = App::new("prog")
-    ///     .arg(Arg::with_name("config")
+    ///     .arg(Arg::new("config")
     ///         .long("config")
     ///         .value_name("FILE"))
     ///     .get_matches_from(vec![
@@ -2243,7 +2233,7 @@ impl<'help> Arg<'help> {
     /// ```rust
     /// # use clap::{App, Arg};
     /// let m = App::new("prog")
-    ///     .arg(Arg::with_name("opt")
+    ///     .arg(Arg::new("opt")
     ///         .long("myopt")
     ///         .default_value("myval"))
     ///     .get_matches_from(vec![
@@ -2260,7 +2250,7 @@ impl<'help> Arg<'help> {
     /// ```rust
     /// # use clap::{App, Arg};
     /// let m = App::new("prog")
-    ///     .arg(Arg::with_name("opt")
+    ///     .arg(Arg::new("opt")
     ///         .long("myopt")
     ///         .default_value("myval"))
     ///     .get_matches_from(vec![
@@ -2338,9 +2328,9 @@ impl<'help> Arg<'help> {
     /// ```rust
     /// # use clap::{App, Arg};
     /// let m = App::new("prog")
-    ///     .arg(Arg::with_name("flag")
+    ///     .arg(Arg::new("flag")
     ///         .long("flag"))
-    ///     .arg(Arg::with_name("other")
+    ///     .arg(Arg::new("other")
     ///         .long("other")
     ///         .default_value_if("flag", None, "default"))
     ///     .get_matches_from(vec![
@@ -2355,9 +2345,9 @@ impl<'help> Arg<'help> {
     /// ```rust
     /// # use clap::{App, Arg};
     /// let m = App::new("prog")
-    ///     .arg(Arg::with_name("flag")
+    ///     .arg(Arg::new("flag")
     ///         .long("flag"))
-    ///     .arg(Arg::with_name("other")
+    ///     .arg(Arg::new("other")
     ///         .long("other")
     ///         .default_value_if("flag", None, "default"))
     ///     .get_matches_from(vec![
@@ -2372,10 +2362,10 @@ impl<'help> Arg<'help> {
     /// ```rust
     /// # use clap::{App, Arg};
     /// let m = App::new("prog")
-    ///     .arg(Arg::with_name("opt")
+    ///     .arg(Arg::new("opt")
     ///         .takes_value(true)
     ///         .long("opt"))
-    ///     .arg(Arg::with_name("other")
+    ///     .arg(Arg::new("other")
     ///         .long("other")
     ///         .default_value_if("opt", Some("special"), "default"))
     ///     .get_matches_from(vec![
@@ -2391,10 +2381,10 @@ impl<'help> Arg<'help> {
     /// ```rust
     /// # use clap::{App, Arg};
     /// let m = App::new("prog")
-    ///     .arg(Arg::with_name("opt")
+    ///     .arg(Arg::new("opt")
     ///         .takes_value(true)
     ///         .long("opt"))
-    ///     .arg(Arg::with_name("other")
+    ///     .arg(Arg::new("other")
     ///         .long("other")
     ///         .default_value_if("opt", Some("special"), "default"))
     ///     .get_matches_from(vec![
@@ -2452,12 +2442,12 @@ impl<'help> Arg<'help> {
     /// ```rust
     /// # use clap::{App, Arg};
     /// let m = App::new("prog")
-    ///     .arg(Arg::with_name("flag")
+    ///     .arg(Arg::new("flag")
     ///         .long("flag"))
-    ///     .arg(Arg::with_name("opt")
+    ///     .arg(Arg::new("opt")
     ///         .long("opt")
     ///         .takes_value(true))
-    ///     .arg(Arg::with_name("other")
+    ///     .arg(Arg::new("other")
     ///         .long("other")
     ///         .default_value_ifs(&[
     ///             ("flag", None, "default"),
@@ -2475,9 +2465,9 @@ impl<'help> Arg<'help> {
     /// ```rust
     /// # use clap::{App, Arg};
     /// let m = App::new("prog")
-    ///     .arg(Arg::with_name("flag")
+    ///     .arg(Arg::new("flag")
     ///         .long("flag"))
-    ///     .arg(Arg::with_name("other")
+    ///     .arg(Arg::new("other")
     ///         .long("other")
     ///         .default_value_ifs(&[
     ///             ("flag", None, "default"),
@@ -2496,12 +2486,12 @@ impl<'help> Arg<'help> {
     /// ```rust
     /// # use clap::{App, Arg};
     /// let m = App::new("prog")
-    ///     .arg(Arg::with_name("flag")
+    ///     .arg(Arg::new("flag")
     ///         .long("flag"))
-    ///     .arg(Arg::with_name("opt")
+    ///     .arg(Arg::new("opt")
     ///         .long("opt")
     ///         .takes_value(true))
-    ///     .arg(Arg::with_name("other")
+    ///     .arg(Arg::new("other")
     ///         .long("other")
     ///         .default_value_ifs(&[
     ///             ("flag", None, "default"),
@@ -2568,7 +2558,7 @@ impl<'help> Arg<'help> {
     /// env::set_var("MY_FLAG", "env");
     ///
     /// let m = App::new("prog")
-    ///     .arg(Arg::with_name("flag")
+    ///     .arg(Arg::new("flag")
     ///         .long("flag")
     ///         .env("MY_FLAG"))
     ///     .get_matches_from(vec![
@@ -2587,7 +2577,7 @@ impl<'help> Arg<'help> {
     /// env::set_var("MY_FLAG", "env");
     ///
     /// let m = App::new("prog")
-    ///     .arg(Arg::with_name("flag")
+    ///     .arg(Arg::new("flag")
     ///         .long("flag")
     ///         .env("MY_FLAG"))
     ///     .get_matches_from(vec![
@@ -2607,7 +2597,7 @@ impl<'help> Arg<'help> {
     /// env::set_var("MY_FLAG", "env");
     ///
     /// let m = App::new("prog")
-    ///     .arg(Arg::with_name("flag")
+    ///     .arg(Arg::new("flag")
     ///         .long("flag")
     ///         .env("MY_FLAG")
     ///         .default_value("default"))
@@ -2627,7 +2617,7 @@ impl<'help> Arg<'help> {
     /// env::set_var("MY_FLAG_MULTI", "env1,env2");
     ///
     /// let m = App::new("prog")
-    ///     .arg(Arg::with_name("flag")
+    ///     .arg(Arg::new("flag")
     ///         .long("flag")
     ///         .env("MY_FLAG_MULTI")
     ///         .multiple(true)
@@ -2672,14 +2662,14 @@ impl<'help> Arg<'help> {
     /// ```rust
     /// # use clap::{App, Arg};
     /// let m = App::new("prog")
-    ///     .arg(Arg::with_name("a") // Typically args are grouped alphabetically by name.
+    ///     .arg(Arg::new("a") // Typically args are grouped alphabetically by name.
     ///                              // Args without a display_order have a value of 999 and are
     ///                              // displayed alphabetically with all other 999 valued args.
     ///         .long("long-option")
     ///         .short('o')
     ///         .takes_value(true)
     ///         .help("Some help and text"))
-    ///     .arg(Arg::with_name("b")
+    ///     .arg(Arg::new("b")
     ///         .long("other-option")
     ///         .short('O')
     ///         .takes_value(true)
@@ -2744,7 +2734,7 @@ impl<'help> Arg<'help> {
     ///
     /// ```rust
     /// # use clap::{Arg, ArgSettings};
-    /// Arg::with_name("args")
+    /// Arg::new("args")
     ///     .setting(ArgSettings::Last)
     /// # ;
     /// ```
@@ -2755,9 +2745,9 @@ impl<'help> Arg<'help> {
     /// ```rust
     /// # use clap::{App, Arg, ArgSettings};
     /// let res = App::new("prog")
-    ///     .arg(Arg::with_name("first"))
-    ///     .arg(Arg::with_name("second"))
-    ///     .arg(Arg::with_name("third")
+    ///     .arg(Arg::new("first"))
+    ///     .arg(Arg::new("second"))
+    ///     .arg(Arg::new("third")
     ///         .setting(ArgSettings::Last))
     ///     .try_get_matches_from(vec![
     ///         "prog", "one", "--", "three"
@@ -2775,9 +2765,9 @@ impl<'help> Arg<'help> {
     /// ```rust
     /// # use clap::{App, Arg, ErrorKind, ArgSettings};
     /// let res = App::new("prog")
-    ///     .arg(Arg::with_name("first"))
-    ///     .arg(Arg::with_name("second"))
-    ///     .arg(Arg::with_name("third")
+    ///     .arg(Arg::new("first"))
+    ///     .arg(Arg::new("second"))
+    ///     .arg(Arg::new("third")
     ///         .setting(ArgSettings::Last))
     ///     .try_get_matches_from(vec![
     ///         "prog", "one", "two", "three"
@@ -2816,7 +2806,7 @@ impl<'help> Arg<'help> {
     ///
     /// ```rust
     /// # use clap::{Arg, ArgSettings};
-    /// Arg::with_name("config")
+    /// Arg::new("config")
     ///     .setting(ArgSettings::Required)
     /// # ;
     /// ```
@@ -2826,7 +2816,7 @@ impl<'help> Arg<'help> {
     /// ```rust
     /// # use clap::{App, Arg, ArgSettings};
     /// let res = App::new("prog")
-    ///     .arg(Arg::with_name("cfg")
+    ///     .arg(Arg::new("cfg")
     ///         .settings(&[ArgSettings::Required, ArgSettings::TakesValue])
     ///         .long("config"))
     ///     .try_get_matches_from(vec![
@@ -2841,7 +2831,7 @@ impl<'help> Arg<'help> {
     /// ```rust
     /// # use clap::{App, Arg, ArgSettings, ErrorKind};
     /// let res = App::new("prog")
-    ///     .arg(Arg::with_name("cfg")
+    ///     .arg(Arg::new("cfg")
     ///         .settings(&[ArgSettings::Required, ArgSettings::TakesValue])
     ///         .long("config"))
     ///     .try_get_matches_from(vec![
@@ -2879,7 +2869,7 @@ impl<'help> Arg<'help> {
     ///
     /// ```rust
     /// # use clap::{App, Arg, ArgSettings};
-    /// Arg::with_name("config")
+    /// Arg::new("config")
     ///     .setting(ArgSettings::TakesValue)
     /// # ;
     /// ```
@@ -2887,7 +2877,7 @@ impl<'help> Arg<'help> {
     /// ```rust
     /// # use clap::{App, Arg, ArgSettings};
     /// let m = App::new("prog")
-    ///     .arg(Arg::with_name("mode")
+    ///     .arg(Arg::new("mode")
     ///         .long("mode")
     ///         .setting(ArgSettings::TakesValue))
     ///     .get_matches_from(vec![
@@ -2930,7 +2920,7 @@ impl<'help> Arg<'help> {
     ///
     /// ```rust
     /// # use clap::{Arg, ArgSettings};
-    /// Arg::with_name("pattern")
+    /// Arg::new("pattern")
     ///     .setting(ArgSettings::AllowHyphenValues)
     /// # ;
     /// ```
@@ -2938,7 +2928,7 @@ impl<'help> Arg<'help> {
     /// ```rust
     /// # use clap::{App, Arg, ArgSettings};
     /// let m = App::new("prog")
-    ///     .arg(Arg::with_name("pat")
+    ///     .arg(Arg::new("pat")
     ///         .setting(ArgSettings::AllowHyphenValues)
     ///         .long("pattern"))
     ///     .get_matches_from(vec![
@@ -2954,7 +2944,7 @@ impl<'help> Arg<'help> {
     /// ```rust
     /// # use clap::{App, Arg, ErrorKind, ArgSettings};
     /// let res = App::new("prog")
-    ///     .arg(Arg::with_name("pat")
+    ///     .arg(Arg::new("pat")
     ///         .setting(ArgSettings::TakesValue)
     ///         .long("pattern"))
     ///     .try_get_matches_from(vec![
@@ -2986,7 +2976,7 @@ impl<'help> Arg<'help> {
     ///
     /// ```rust
     /// # use clap::{Arg, ArgSettings};
-    /// Arg::with_name("config")
+    /// Arg::new("config")
     ///     .long("config")
     ///     .setting(ArgSettings::RequireEquals)
     /// # ;
@@ -2998,7 +2988,7 @@ impl<'help> Arg<'help> {
     /// ```rust
     /// # use clap::{App, Arg, ArgSettings};
     /// let res = App::new("prog")
-    ///     .arg(Arg::with_name("cfg")
+    ///     .arg(Arg::new("cfg")
     ///         .setting(ArgSettings::RequireEquals)
     ///         .long("config"))
     ///     .try_get_matches_from(vec![
@@ -3014,7 +3004,7 @@ impl<'help> Arg<'help> {
     /// ```rust
     /// # use clap::{App, Arg, ErrorKind, ArgSettings};
     /// let res = App::new("prog")
-    ///     .arg(Arg::with_name("cfg")
+    ///     .arg(Arg::new("cfg")
     ///         .setting(ArgSettings::RequireEquals)
     ///         .long("config"))
     ///     .try_get_matches_from(vec![
@@ -3048,7 +3038,7 @@ impl<'help> Arg<'help> {
     ///
     /// ```rust
     /// # use clap::{App, Arg, ArgSettings};
-    /// Arg::with_name("debug")
+    /// Arg::new("debug")
     ///     .short('d')
     ///     .global(true)
     /// # ;
@@ -3061,7 +3051,7 @@ impl<'help> Arg<'help> {
     /// ```rust
     /// # use clap::{App, Arg, ArgSettings};
     /// let m = App::new("prog")
-    ///     .arg(Arg::with_name("verb")
+    ///     .arg(Arg::new("verb")
     ///         .long("verbose")
     ///         .short('v')
     ///         .global(true))
@@ -3107,7 +3097,7 @@ impl<'help> Arg<'help> {
     /// ```rust
     /// # use clap::{App, Arg, ArgSettings};
     /// let delims = App::new("prog")
-    ///     .arg(Arg::with_name("opt")
+    ///     .arg(Arg::new("opt")
     ///         .short('o')
     ///         .settings(&[ArgSettings::RequireDelimiter, ArgSettings::MultipleValues]))
     ///     .get_matches_from(vec![
@@ -3122,7 +3112,7 @@ impl<'help> Arg<'help> {
     /// ```rust
     /// # use clap::{App, Arg, ErrorKind, ArgSettings};
     /// let res = App::new("prog")
-    ///     .arg(Arg::with_name("opt")
+    ///     .arg(Arg::new("opt")
     ///         .short('o')
     ///         .setting(ArgSettings::RequireDelimiter))
     ///     .try_get_matches_from(vec![
@@ -3143,7 +3133,7 @@ impl<'help> Arg<'help> {
     /// ```rust
     /// # use clap::{App, Arg, ArgSettings};
     /// let delims = App::new("prog")
-    ///     .arg(Arg::with_name("opt")
+    ///     .arg(Arg::new("opt")
     ///         .short('o')
     ///         .setting(ArgSettings::MultipleValues))
     ///     .get_matches_from(vec![
@@ -3181,7 +3171,7 @@ impl<'help> Arg<'help> {
     ///
     /// ```rust
     /// # use clap::{App, Arg, ArgSettings};
-    /// Arg::with_name("config")
+    /// Arg::new("config")
     ///     .setting(ArgSettings::HidePossibleValues)
     /// # ;
     /// ```
@@ -3189,7 +3179,7 @@ impl<'help> Arg<'help> {
     /// ```rust
     /// # use clap::{App, Arg, ArgSettings};
     /// let m = App::new("prog")
-    ///     .arg(Arg::with_name("mode")
+    ///     .arg(Arg::new("mode")
     ///         .long("mode")
     ///         .possible_values(&["fast", "slow"])
     ///         .setting(ArgSettings::HidePossibleValues));
@@ -3215,7 +3205,7 @@ impl<'help> Arg<'help> {
     ///
     /// ```rust
     /// # use clap::{App, Arg, ArgSettings};
-    /// Arg::with_name("config")
+    /// Arg::new("config")
     ///     .setting(ArgSettings::HideDefaultValue)
     /// # ;
     /// ```
@@ -3223,7 +3213,7 @@ impl<'help> Arg<'help> {
     /// ```rust
     /// # use clap::{App, Arg, ArgSettings};
     /// let m = App::new("connect")
-    ///     .arg(Arg::with_name("host")
+    ///     .arg(Arg::new("host")
     ///         .long("host")
     ///         .default_value("localhost")
     ///         .setting(ArgSettings::HideDefaultValue));
@@ -3249,7 +3239,7 @@ impl<'help> Arg<'help> {
     ///
     /// ```rust
     /// # use clap::{App, Arg, ArgSettings};
-    /// Arg::with_name("debug")
+    /// Arg::new("debug")
     ///     .setting(ArgSettings::Hidden)
     /// # ;
     /// ```
@@ -3258,7 +3248,7 @@ impl<'help> Arg<'help> {
     /// ```rust
     /// # use clap::{App, Arg, ArgSettings};
     /// let m = App::new("prog")
-    ///     .arg(Arg::with_name("cfg")
+    ///     .arg(Arg::new("cfg")
     ///         .long("config")
     ///         .setting(ArgSettings::Hidden)
     ///         .help("Some help text describing the --config arg"))
@@ -3298,7 +3288,7 @@ impl<'help> Arg<'help> {
     /// ```rust
     /// # use clap::{App, Arg, ArgSettings};
     /// let m = App::new("pv")
-    ///     .arg(Arg::with_name("option")
+    ///     .arg(Arg::new("option")
     ///         .long("--option")
     ///         .setting(ArgSettings::IgnoreCase)
     ///         .possible_value("test123"))
@@ -3314,7 +3304,7 @@ impl<'help> Arg<'help> {
     /// ```rust
     /// # use clap::{App, Arg, ArgSettings};
     /// let m = App::new("pv")
-    ///     .arg(Arg::with_name("option")
+    ///     .arg(Arg::new("option")
     ///         .short('o')
     ///         .long("--option")
     ///         .settings(&[ArgSettings::IgnoreCase, ArgSettings::MultipleValues])
@@ -3353,7 +3343,7 @@ impl<'help> Arg<'help> {
     /// ```rust
     /// # use clap::{App, Arg, ArgSettings};
     /// let delims = App::new("prog")
-    ///     .arg(Arg::with_name("option")
+    ///     .arg(Arg::new("option")
     ///         .long("option")
     ///         .setting(ArgSettings::UseValueDelimiter)
     ///         .takes_value(true))
@@ -3371,7 +3361,7 @@ impl<'help> Arg<'help> {
     /// ```rust
     /// # use clap::{App, Arg, ArgSettings};
     /// let nodelims = App::new("prog")
-    ///     .arg(Arg::with_name("option")
+    ///     .arg(Arg::new("option")
     ///         .long("option")
     ///         .setting(ArgSettings::TakesValue))
     ///     .get_matches_from(vec![
@@ -3410,7 +3400,7 @@ impl<'help> Arg<'help> {
     ///
     /// ```rust
     /// # use clap::{App, Arg, ArgSettings};
-    /// Arg::with_name("config")
+    /// Arg::new("config")
     ///     .setting(ArgSettings::HideDefaultValue)
     /// # ;
     /// ```
@@ -3418,7 +3408,7 @@ impl<'help> Arg<'help> {
     /// ```rust
     /// # use clap::{App, Arg, ArgSettings};
     /// let m = App::new("connect")
-    ///     .arg(Arg::with_name("host")
+    ///     .arg(Arg::new("host")
     ///         .long("host")
     ///         .env("CONNECT")
     ///         .setting(ArgSettings::HideEnvValues));
@@ -3448,7 +3438,7 @@ impl<'help> Arg<'help> {
     /// ```rust
     /// # use clap::{App, Arg, ArgSettings};
     /// let m = App::new("prog")
-    ///     .arg(Arg::with_name("opt")
+    ///     .arg(Arg::new("opt")
     ///         .long("long-option-flag")
     ///         .short('o')
     ///         .settings(&[ArgSettings::TakesValue, ArgSettings::NextLineHelp])
@@ -3543,7 +3533,7 @@ impl<'help> Arg<'help> {
     ///
     /// ```rust
     /// # use clap::{App, Arg, ArgSettings};
-    /// Arg::with_name("debug")
+    /// Arg::new("debug")
     ///     .short('d')
     ///     .setting(ArgSettings::MultipleValues)
     /// # ;
@@ -3553,7 +3543,7 @@ impl<'help> Arg<'help> {
     /// ```rust
     /// # use clap::{App, Arg, ArgSettings};
     /// let m = App::new("prog")
-    ///     .arg(Arg::with_name("verbose")
+    ///     .arg(Arg::new("verbose")
     ///         .setting(ArgSettings::MultipleOccurrences)
     ///         .short('v'))
     ///     .get_matches_from(vec![
@@ -3569,7 +3559,7 @@ impl<'help> Arg<'help> {
     /// ```rust
     /// # use clap::{App, Arg, ArgSettings};
     /// let m = App::new("prog")
-    ///     .arg(Arg::with_name("file")
+    ///     .arg(Arg::new("file")
     ///         .setting(ArgSettings::MultipleValues) // implies TakesValue
     ///         .short('F'))
     ///     .get_matches_from(vec![
@@ -3586,7 +3576,7 @@ impl<'help> Arg<'help> {
     /// ```rust
     /// # use clap::{App, Arg, ErrorKind, ArgSettings};
     /// let res = App::new("prog")
-    ///     .arg(Arg::with_name("file")
+    ///     .arg(Arg::new("file")
     ///         .setting(ArgSettings::MultipleValues) // implies TakesValue
     ///         .short('F'))
     ///     .try_get_matches_from(vec![
@@ -3602,10 +3592,10 @@ impl<'help> Arg<'help> {
     /// ```rust
     /// # use clap::{App, Arg, ArgSettings};
     /// let m = App::new("prog")
-    ///     .arg(Arg::with_name("file")
+    ///     .arg(Arg::new("file")
     ///         .setting(ArgSettings::MultipleValues) // implies TakesValue
     ///         .short('F'))
-    ///     .arg(Arg::with_name("word")
+    ///     .arg(Arg::new("word")
     ///         .index(1))
     ///     .get_matches_from(vec![
     ///         "prog", "-F", "file1", "file2", "file3", "word"
@@ -3626,10 +3616,10 @@ impl<'help> Arg<'help> {
     /// ```rust
     /// # use clap::{App, Arg, ArgSettings};
     /// let m = App::new("prog")
-    ///     .arg(Arg::with_name("file")
+    ///     .arg(Arg::new("file")
     ///         .settings(&[ArgSettings::MultipleOccurrences, ArgSettings::TakesValue])
     ///         .short('F'))
-    ///     .arg(Arg::with_name("word")
+    ///     .arg(Arg::new("word")
     ///         .index(1))
     ///     .get_matches_from(vec![
     ///         "prog", "-F", "file1", "-F", "file2", "-F", "file3", "word"
@@ -3646,10 +3636,10 @@ impl<'help> Arg<'help> {
     /// ```rust
     /// # use clap::{App, Arg, ErrorKind, ArgSettings};
     /// let res = App::new("prog")
-    ///     .arg(Arg::with_name("file")
+    ///     .arg(Arg::new("file")
     ///         .settings(&[ArgSettings::MultipleOccurrences, ArgSettings::TakesValue])
     ///         .short('F'))
-    ///     .arg(Arg::with_name("word")
+    ///     .arg(Arg::new("word")
     ///         .index(1))
     ///     .try_get_matches_from(vec![
     ///         "prog", "-F", "file1", "file2", "file3", "word"
@@ -3691,7 +3681,7 @@ impl<'help> Arg<'help> {
     ///
     /// ```rust
     /// # use clap::{App, Arg, ArgSettings};
-    /// Arg::with_name("file")
+    /// Arg::new("file")
     ///     .long("file")
     ///     .setting(ArgSettings::AllowEmptyValues)
     /// # ;
@@ -3701,7 +3691,7 @@ impl<'help> Arg<'help> {
     /// ```rust
     /// # use clap::{App, Arg, ErrorKind, ArgSettings};
     /// let res = App::new("prog")
-    ///     .arg(Arg::with_name("cfg")
+    ///     .arg(Arg::new("cfg")
     ///         .long("config")
     ///         .short('v')
     ///         .setting(ArgSettings::TakesValue))
@@ -3717,7 +3707,7 @@ impl<'help> Arg<'help> {
     /// ```rust
     /// # use clap::{App, Arg, ArgSettings};
     /// let res = App::new("prog")
-    ///     .arg(Arg::with_name("cfg")
+    ///     .arg(Arg::new("cfg")
     ///         .long("config")
     ///         .short('v')
     ///         .setting(ArgSettings::AllowEmptyValues)) // implies TakesValue
@@ -3750,7 +3740,7 @@ impl<'help> Arg<'help> {
     ///
     /// ```rust
     /// # use clap::{App, Arg, ArgSettings};
-    /// Arg::with_name("debug")
+    /// Arg::new("debug")
     ///     .short('d')
     ///     .setting(ArgSettings::MultipleOccurrences)
     /// # ;
@@ -3760,7 +3750,7 @@ impl<'help> Arg<'help> {
     /// ```rust
     /// # use clap::{App, Arg, ArgSettings};
     /// let m = App::new("prog")
-    ///     .arg(Arg::with_name("verbose")
+    ///     .arg(Arg::new("verbose")
     ///         .setting(ArgSettings::MultipleOccurrences)
     ///         .short('v'))
     ///     .get_matches_from(vec![
@@ -3776,7 +3766,7 @@ impl<'help> Arg<'help> {
     /// ```rust
     /// # use clap::{App, Arg, ArgSettings};
     /// let m = App::new("prog")
-    ///     .arg(Arg::with_name("file")
+    ///     .arg(Arg::new("file")
     ///         .settings(&[ArgSettings::MultipleOccurrences, ArgSettings::TakesValue])
     ///         .short('F'))
     ///     .get_matches_from(vec![
@@ -3843,7 +3833,7 @@ impl<'help> Arg<'help> {
     ///
     /// ```rust
     /// # use clap::{App, Arg};
-    /// Arg::with_name("debug")
+    /// Arg::new("debug")
     ///     .hidden_short_help(true)
     /// # ;
     /// ```
@@ -3852,7 +3842,7 @@ impl<'help> Arg<'help> {
     /// ```rust
     /// # use clap::{App, Arg};
     /// let m = App::new("prog")
-    ///     .arg(Arg::with_name("cfg")
+    ///     .arg(Arg::new("cfg")
     ///         .long("config")
     ///         .hidden_short_help(true)
     ///         .help("Some help text describing the --config arg"))
@@ -3879,7 +3869,7 @@ impl<'help> Arg<'help> {
     /// ```rust
     /// # use clap::{App, Arg};
     /// let m = App::new("prog")
-    ///     .arg(Arg::with_name("cfg")
+    ///     .arg(Arg::new("cfg")
     ///         .long("config")
     ///         .hidden_short_help(true)
     ///         .help("Some help text describing the --config arg"))
@@ -3921,7 +3911,7 @@ impl<'help> Arg<'help> {
     ///
     /// ```rust
     /// # use clap::{App, Arg};
-    /// Arg::with_name("debug")
+    /// Arg::new("debug")
     ///     .hidden_long_help(true)
     /// # ;
     /// ```
@@ -3930,7 +3920,7 @@ impl<'help> Arg<'help> {
     /// ```rust
     /// # use clap::{App, Arg};
     /// let m = App::new("prog")
-    ///     .arg(Arg::with_name("cfg")
+    ///     .arg(Arg::new("cfg")
     ///         .long("config")
     ///         .hidden_long_help(true)
     ///         .help("Some help text describing the --config arg"))
@@ -3957,7 +3947,7 @@ impl<'help> Arg<'help> {
     /// ```rust
     /// # use clap::{App, Arg};
     /// let m = App::new("prog")
-    ///     .arg(Arg::with_name("cfg")
+    ///     .arg(Arg::new("cfg")
     ///         .long("config")
     ///         .hidden_long_help(true)
     ///         .help("Some help text describing the --config arg"))
@@ -4147,7 +4137,7 @@ impl<'a> From<&'a Yaml> for Arg<'a> {
         // We WANT this to panic on error...so expect() is good.
         let name_yml = y.keys().next().unwrap();
         let name_str = name_yml.as_str().unwrap();
-        let mut a = Arg::with_name(name_str);
+        let mut a = Arg::new(name_str);
         let arg_settings = y.get(name_yml).unwrap().as_hash().unwrap();
 
         for (k, v) in arg_settings.iter() {
@@ -4395,13 +4385,13 @@ mod test {
 
     #[test]
     fn flag_display() {
-        let mut f = Arg::with_name("flg");
+        let mut f = Arg::new("flg");
         f.settings.set(ArgSettings::MultipleOccurrences);
         f.long = Some("flag");
 
         assert_eq!(&*format!("{}", f), "--flag");
 
-        let mut f2 = Arg::with_name("flg");
+        let mut f2 = Arg::new("flg");
         f2.short = Some('f');
 
         assert_eq!(&*format!("{}", f2), "-f");
@@ -4409,7 +4399,7 @@ mod test {
 
     #[test]
     fn flag_display_single_alias() {
-        let mut f = Arg::with_name("flg");
+        let mut f = Arg::new("flg");
         f.long = Some("flag");
         f.aliases = vec![("als", true)];
 
@@ -4418,7 +4408,7 @@ mod test {
 
     #[test]
     fn flag_display_multiple_aliases() {
-        let mut f = Arg::with_name("flg");
+        let mut f = Arg::new("flg");
         f.short = Some('f');
         f.aliases = vec![
             ("alias_not_visible", false),
@@ -4431,7 +4421,7 @@ mod test {
 
     #[test]
     fn flag_display_single_short_alias() {
-        let mut f = Arg::with_name("flg");
+        let mut f = Arg::new("flg");
         f.short = Some('a');
         f.short_aliases = vec![('b', true)];
 
@@ -4440,7 +4430,7 @@ mod test {
 
     #[test]
     fn flag_display_multiple_short_aliases() {
-        let mut f = Arg::with_name("flg");
+        let mut f = Arg::new("flg");
         f.short = Some('a');
         f.short_aliases = vec![('b', false), ('c', true), ('d', true), ('e', true)];
         assert_eq!(&*format!("{}", f), "-a");
@@ -4450,7 +4440,7 @@ mod test {
 
     #[test]
     fn option_display1() {
-        let o = Arg::with_name("opt")
+        let o = Arg::new("opt")
             .long("option")
             .takes_value(true)
             .multiple(true);
@@ -4460,16 +4450,14 @@ mod test {
 
     #[test]
     fn option_display2() {
-        let o2 = Arg::with_name("opt")
-            .short('o')
-            .value_names(&["file", "name"]);
+        let o2 = Arg::new("opt").short('o').value_names(&["file", "name"]);
 
         assert_eq!(&*format!("{}", o2), "-o <file> <name>");
     }
 
     #[test]
     fn option_display3() {
-        let o2 = Arg::with_name("opt")
+        let o2 = Arg::new("opt")
             .short('o')
             .multiple(true)
             .value_names(&["file", "name"]);
@@ -4479,7 +4467,7 @@ mod test {
 
     #[test]
     fn option_display_single_alias() {
-        let o = Arg::with_name("opt")
+        let o = Arg::new("opt")
             .takes_value(true)
             .long("option")
             .visible_alias("als");
@@ -4489,7 +4477,7 @@ mod test {
 
     #[test]
     fn option_display_multiple_aliases() {
-        let o = Arg::with_name("opt")
+        let o = Arg::new("opt")
             .long("option")
             .takes_value(true)
             .visible_aliases(&["als2", "als3", "als4"])
@@ -4500,7 +4488,7 @@ mod test {
 
     #[test]
     fn option_display_single_short_alias() {
-        let o = Arg::with_name("opt")
+        let o = Arg::new("opt")
             .takes_value(true)
             .short('a')
             .visible_short_alias('b');
@@ -4510,7 +4498,7 @@ mod test {
 
     #[test]
     fn option_display_multiple_short_aliases() {
-        let o = Arg::with_name("opt")
+        let o = Arg::new("opt")
             .short('a')
             .takes_value(true)
             .visible_short_aliases(&['b', 'c', 'd'])
@@ -4523,7 +4511,7 @@ mod test {
 
     #[test]
     fn positiona_display_mult() {
-        let mut p = Arg::with_name("pos").index(1);
+        let mut p = Arg::new("pos").index(1);
         p.set_mut(ArgSettings::MultipleValues);
 
         assert_eq!(&*format!("{}", p), "<pos>...");
@@ -4531,7 +4519,7 @@ mod test {
 
     #[test]
     fn positional_display_required() {
-        let mut p2 = Arg::with_name("pos").index(1);
+        let mut p2 = Arg::new("pos").index(1);
         p2.settings.set(ArgSettings::Required);
 
         assert_eq!(&*format!("{}", p2), "<pos>");
@@ -4539,7 +4527,7 @@ mod test {
 
     #[test]
     fn positional_display_val_names() {
-        let mut p2 = Arg::with_name("pos").index(1);
+        let mut p2 = Arg::new("pos").index(1);
         let mut vm = VecMap::new();
         vm.insert(0, "file1");
         vm.insert(1, "file2");
@@ -4550,7 +4538,7 @@ mod test {
 
     #[test]
     fn positional_display_val_names_req() {
-        let mut p2 = Arg::with_name("pos").index(1);
+        let mut p2 = Arg::new("pos").index(1);
         p2.settings.set(ArgSettings::Required);
         let mut vm = VecMap::new();
         vm.insert(0, "file1");
diff --git a/src/build/arg_group.rs b/src/build/arg_group.rs
index bd1c9e0d..c9d93199 100644
--- a/src/build/arg_group.rs
+++ b/src/build/arg_group.rs
@@ -45,7 +45,7 @@ use yaml_rust::Yaml;
 ///     .arg("--major         'auto increase major'")
 ///     .arg("--minor         'auto increase minor'")
 ///     .arg("--patch         'auto increase patch'")
-///     .group(ArgGroup::with_name("vers")
+///     .group(ArgGroup::new("vers")
 ///          .args(&["set-ver", "major", "minor", "patch"])
 ///          .required(true))
 ///     .try_get_matches_from(vec!["app", "--major", "--patch"]);
@@ -63,7 +63,7 @@ use yaml_rust::Yaml;
 ///     .arg("--major         'auto increase major'")
 ///     .arg("--minor         'auto increase minor'")
 ///     .arg("--patch         'auto increase patch'")
-///     .group(ArgGroup::with_name("vers")
+///     .group(ArgGroup::new("vers")
 ///          .args(&["set-ver", "major", "minor","patch"])
 ///          .required(true))
 ///     .try_get_matches_from(vec!["app", "--major"]);
@@ -89,16 +89,13 @@ pub struct ArgGroup<'a> {
 }
 
 impl<'a> ArgGroup<'a> {
-    pub(crate) fn _with_id(id: Id) -> Self {
+    pub(crate) fn with_id(id: Id) -> Self {
         ArgGroup {
             id,
             ..ArgGroup::default()
         }
     }
-    /// @TODO @p2 @docs @v3-beta1: Write Docs
-    pub fn new<T: Key>(id: T) -> Self {
-        ArgGroup::_with_id(id.into())
-    }
+
     /// Creates a new instance of `ArgGroup` using a unique string name. The name will be used to
     /// get values from the group or refer to the group inside of conflict and requirement rules.
     ///
@@ -106,13 +103,14 @@ impl<'a> ArgGroup<'a> {
     ///
     /// ```rust
     /// # use clap::{App, ArgGroup};
-    /// ArgGroup::with_name("config")
+    /// ArgGroup::new("config")
     /// # ;
     /// ```
-    pub fn with_name(n: &'a str) -> Self {
+    pub fn new<S: Into<&'a str>>(n: S) -> Self {
+        let name = n.into();
         ArgGroup {
-            id: n.into(),
-            name: n,
+            id: Id::from(&*name),
+            name,
             ..ArgGroup::default()
         }
     }
@@ -124,11 +122,11 @@ impl<'a> ArgGroup<'a> {
     /// ```rust
     /// # use clap::{App, Arg, ArgGroup};
     /// let m = App::new("myprog")
-    ///     .arg(Arg::with_name("flag")
+    ///     .arg(Arg::new("flag")
     ///         .short('f'))
-    ///     .arg(Arg::with_name("color")
+    ///     .arg(Arg::new("color")
     ///         .short('c'))
-    ///     .group(ArgGroup::with_name("req_flags")
+    ///     .group(ArgGroup::new("req_flags")
     ///         .arg("flag")
     ///         .arg("color"))
     ///     .get_matches_from(vec!["myprog", "-f"]);
@@ -150,11 +148,11 @@ impl<'a> ArgGroup<'a> {
     /// ```rust
     /// # use clap::{App, Arg, ArgGroup};
     /// let m = App::new("myprog")
-    ///     .arg(Arg::with_name("flag")
+    ///     .arg(Arg::new("flag")
     ///         .short('f'))
-    ///     .arg(Arg::with_name("color")
+    ///     .arg(Arg::new("color")
     ///         .short('c'))
-    ///     .group(ArgGroup::with_name("req_flags")
+    ///     .group(ArgGroup::new("req_flags")
     ///         .args(&["flag", "color"]))
     ///     .get_matches_from(vec!["myprog", "-f"]);
     /// // maybe we don't know which of the two flags was used...
@@ -180,11 +178,11 @@ impl<'a> ArgGroup<'a> {
     /// ```rust
     /// # use clap::{App, Arg, ArgGroup};
     /// let m = App::new("myprog")
-    ///     .arg(Arg::with_name("flag")
+    ///     .arg(Arg::new("flag")
     ///         .short('f'))
-    ///     .arg(Arg::with_name("color")
+    ///     .arg(Arg::new("color")
     ///         .short('c'))
-    ///     .group(ArgGroup::with_name("req_flags")
+    ///     .group(ArgGroup::new("req_flags")
     ///         .args(&["flag", "color"])
     ///         .multiple(true))
     ///     .get_matches_from(vec!["myprog", "-f", "-c"]);
@@ -197,11 +195,11 @@ impl<'a> ArgGroup<'a> {
     /// ```rust
     /// # use clap::{App, Arg, ArgGroup, ErrorKind};
     /// let result = App::new("myprog")
-    ///     .arg(Arg::with_name("flag")
+    ///     .arg(Arg::new("flag")
     ///         .short('f'))
-    ///     .arg(Arg::with_name("color")
+    ///     .arg(Arg::new("color")
     ///         .short('c'))
-    ///     .group(ArgGroup::with_name("req_flags")
+    ///     .group(ArgGroup::new("req_flags")
     ///         .args(&["flag", "color"]))
     ///     .try_get_matches_from(vec!["myprog", "-f", "-c"]);
     /// // Because we used both args in the group it's an error
@@ -234,11 +232,11 @@ impl<'a> ArgGroup<'a> {
     /// ```rust
     /// # use clap::{App, Arg, ArgGroup, ErrorKind};
     /// let result = App::new("myprog")
-    ///     .arg(Arg::with_name("flag")
+    ///     .arg(Arg::new("flag")
     ///         .short('f'))
-    ///     .arg(Arg::with_name("color")
+    ///     .arg(Arg::new("color")
     ///         .short('c'))
-    ///     .group(ArgGroup::with_name("req_flags")
+    ///     .group(ArgGroup::new("req_flags")
     ///         .args(&["flag", "color"])
     ///         .required(true))
     ///     .try_get_matches_from(vec!["myprog"]);
@@ -268,13 +266,13 @@ impl<'a> ArgGroup<'a> {
     /// ```rust
     /// # use clap::{App, Arg, ArgGroup, ErrorKind};
     /// let result = App::new("myprog")
-    ///     .arg(Arg::with_name("flag")
+    ///     .arg(Arg::new("flag")
     ///         .short('f'))
-    ///     .arg(Arg::with_name("color")
+    ///     .arg(Arg::new("color")
     ///         .short('c'))
-    ///     .arg(Arg::with_name("debug")
+    ///     .arg(Arg::new("debug")
     ///         .short('d'))
-    ///     .group(ArgGroup::with_name("req_flags")
+    ///     .group(ArgGroup::new("req_flags")
     ///         .args(&["flag", "color"])
     ///         .requires("debug"))
     ///     .try_get_matches_from(vec!["myprog", "-c"]);
@@ -303,15 +301,15 @@ impl<'a> ArgGroup<'a> {
     /// ```rust
     /// # use clap::{App, Arg, ArgGroup, ErrorKind};
     /// let result = App::new("myprog")
-    ///     .arg(Arg::with_name("flag")
+    ///     .arg(Arg::new("flag")
     ///         .short('f'))
-    ///     .arg(Arg::with_name("color")
+    ///     .arg(Arg::new("color")
     ///         .short('c'))
-    ///     .arg(Arg::with_name("debug")
+    ///     .arg(Arg::new("debug")
     ///         .short('d'))
-    ///     .arg(Arg::with_name("verb")
+    ///     .arg(Arg::new("verb")
     ///         .short('v'))
-    ///     .group(ArgGroup::with_name("req_flags")
+    ///     .group(ArgGroup::new("req_flags")
     ///         .args(&["flag", "color"])
     ///         .requires_all(&["debug", "verb"]))
     ///     .try_get_matches_from(vec!["myprog", "-c", "-d"]);
@@ -341,13 +339,13 @@ impl<'a> ArgGroup<'a> {
     /// ```rust
     /// # use clap::{App, Arg, ArgGroup, ErrorKind};
     /// let result = App::new("myprog")
-    ///     .arg(Arg::with_name("flag")
+    ///     .arg(Arg::new("flag")
     ///         .short('f'))
-    ///     .arg(Arg::with_name("color")
+    ///     .arg(Arg::new("color")
     ///         .short('c'))
-    ///     .arg(Arg::with_name("debug")
+    ///     .arg(Arg::new("debug")
     ///         .short('d'))
-    ///     .group(ArgGroup::with_name("req_flags")
+    ///     .group(ArgGroup::new("req_flags")
     ///         .args(&["flag", "color"])
     ///         .conflicts_with("debug"))
     ///     .try_get_matches_from(vec!["myprog", "-c", "-d"]);
@@ -373,15 +371,15 @@ impl<'a> ArgGroup<'a> {
     /// ```rust
     /// # use clap::{App, Arg, ArgGroup, ErrorKind};
     /// let result = App::new("myprog")
-    ///     .arg(Arg::with_name("flag")
+    ///     .arg(Arg::new("flag")
     ///         .short('f'))
-    ///     .arg(Arg::with_name("color")
+    ///     .arg(Arg::new("color")
     ///         .short('c'))
-    ///     .arg(Arg::with_name("debug")
+    ///     .arg(Arg::new("debug")
     ///         .short('d'))
-    ///     .arg(Arg::with_name("verb")
+    ///     .arg(Arg::new("verb")
     ///         .short('v'))
-    ///     .group(ArgGroup::with_name("req_flags")
+    ///     .group(ArgGroup::new("req_flags")
     ///         .args(&["flag", "color"])
     ///         .conflicts_with_all(&["debug", "verb"]))
     ///     .try_get_matches_from(vec!["myprog", "-c", "-v"]);
@@ -504,7 +502,7 @@ mod test {
 
     #[test]
     fn groups() {
-        let g = ArgGroup::with_name("test")
+        let g = ArgGroup::new("test")
             .arg("a1")
             .arg("a4")
             .args(&["a2", "a3"])
@@ -527,7 +525,7 @@ mod test {
 
     #[test]
     fn test_debug() {
-        let g = ArgGroup::with_name("test")
+        let g = ArgGroup::new("test")
             .arg("a1")
             .arg("a4")
             .args(&["a2", "a3"])
@@ -573,7 +571,7 @@ mod test {
 
     #[test]
     fn test_from() {
-        let g = ArgGroup::with_name("test")
+        let g = ArgGroup::new("test")
             .arg("a1")
             .arg("a4")
             .args(&["a2", "a3"])
diff --git a/src/macros.rs b/src/macros.rs
index 33dd03c1..af127c1d 100644
--- a/src/macros.rs
+++ b/src/macros.rs
@@ -323,21 +323,21 @@ macro_rules! clap_app {
     (@app ($builder:expr) (@arg ($name:expr): $($tail:tt)*) $($tt:tt)*) => {
         $crate::clap_app!{ @app
             ($builder.arg(
-                $crate::clap_app!{ @arg ($crate::Arg::with_name($name)) (-) $($tail)* }))
+                $crate::clap_app!{ @arg ($crate::Arg::new($name)) (-) $($tail)* }))
             $($tt)*
         }
     };
     (@app ($builder:expr) (@arg $name:literal: $($tail:tt)*) $($tt:tt)*) => {
         $crate::clap_app!{ @app
             ($builder.arg(
-                $crate::clap_app!{ @arg ($crate::Arg::with_name(stringify!($name).trim_matches('"'))) (-) $($tail)* }))
+                $crate::clap_app!{ @arg ($crate::Arg::new(stringify!($name).trim_matches('"'))) (-) $($tail)* }))
             $($tt)*
         }
     };
     (@app ($builder:expr) (@arg $name:ident: $($tail:tt)*) $($tt:tt)*) => {
         $crate::clap_app!{ @app
             ($builder.arg(
-                $crate::clap_app!{ @arg ($crate::Arg::with_name(stringify!($name))) (-) $($tail)* }))
+                $crate::clap_app!{ @arg ($crate::Arg::new(stringify!($name))) (-) $($tail)* }))
             $($tt)*
         }
     };
@@ -355,19 +355,19 @@ macro_rules! clap_app {
     // ArgGroup
     (@app ($builder:expr) (@group $name:ident => $($tail:tt)*) $($tt:tt)*) => {
         $crate::clap_app!{ @app
-            ($crate::clap_app!{ @group ($builder, $crate::ArgGroup::with_name(stringify!($name))) $($tail)* })
+            ($crate::clap_app!{ @group ($builder, $crate::ArgGroup::new(stringify!($name))) $($tail)* })
             $($tt)*
         }
     };
     (@app ($builder:expr) (@group $name:ident !$ident:ident => $($tail:tt)*) $($tt:tt)*) => {
         $crate::clap_app!{ @app
-            ($crate::clap_app!{ @group ($builder, $crate::ArgGroup::with_name(stringify!($name)).$ident(false)) $($tail)* })
+            ($crate::clap_app!{ @group ($builder, $crate::ArgGroup::new(stringify!($name)).$ident(false)) $($tail)* })
             $($tt)*
         }
     };
     (@app ($builder:expr) (@group $name:ident +$ident:ident => $($tail:tt)*) $($tt:tt)*) => {
         $crate::clap_app!{ @app
-            ($crate::clap_app!{ @group ($builder, $crate::ArgGroup::with_name(stringify!($name)).$ident(true)) $($tail)* })
+            ($crate::clap_app!{ @group ($builder, $crate::ArgGroup::new(stringify!($name)).$ident(true)) $($tail)* })
             $($tt)*
         }
     };
diff --git a/src/parse/errors.rs b/src/parse/errors.rs
index c5215d19..8da0bf87 100644
--- a/src/parse/errors.rs
+++ b/src/parse/errors.rs
@@ -31,7 +31,7 @@ pub enum ErrorKind {
     /// ```rust
     /// # use clap::{App, Arg, ErrorKind};
     /// let result = App::new("prog")
-    ///     .arg(Arg::with_name("speed")
+    ///     .arg(Arg::new("speed")
     ///         .possible_value("fast")
     ///         .possible_value("slow"))
     ///     .try_get_matches_from(vec!["prog", "other"]);
@@ -68,7 +68,7 @@ pub enum ErrorKind {
     /// let result = App::new("prog")
     ///     .subcommand(App::new("config")
     ///         .about("Used for configuration")
-    ///         .arg(Arg::with_name("config_file")
+    ///         .arg(Arg::new("config_file")
     ///             .help("The configuration file to use")
     ///             .index(1)))
     ///     .try_get_matches_from(vec!["prog", "confi"]);
@@ -94,7 +94,7 @@ pub enum ErrorKind {
     /// let result = App::new("prog")
     ///     .subcommand(App::new("config")
     ///         .about("Used for configuration")
-    ///         .arg(Arg::with_name("config_file")
+    ///         .arg(Arg::new("config_file")
     ///             .help("The configuration file to use")
     ///             .index(1)))
     ///     .try_get_matches_from(vec!["prog", "help", "nothing"]);
@@ -114,7 +114,7 @@ pub enum ErrorKind {
     /// ```rust
     /// # use clap::{App, Arg, ErrorKind, ArgSettings};
     /// let res = App::new("prog")
-    ///     .arg(Arg::with_name("color")
+    ///     .arg(Arg::new("color")
     ///          .setting(ArgSettings::TakesValue)
     ///          .long("color"))
     ///     .try_get_matches_from(vec!["prog", "--color="]);
@@ -138,7 +138,7 @@ pub enum ErrorKind {
     /// }
     ///
     /// let result = App::new("prog")
-    ///     .arg(Arg::with_name("num")
+    ///     .arg(Arg::new("num")
     ///          .validator(is_numeric))
     ///     .try_get_matches_from(vec!["prog", "NotANumber"]);
     /// assert!(result.is_err());
@@ -154,7 +154,7 @@ pub enum ErrorKind {
     /// ```rust
     /// # use clap::{App, Arg, ErrorKind};
     /// let result = App::new("prog")
-    ///     .arg(Arg::with_name("arg")
+    ///     .arg(Arg::new("arg")
     ///         .multiple(true)
     ///         .max_values(2))
     ///     .try_get_matches_from(vec!["prog", "too", "many", "values"]);
@@ -172,7 +172,7 @@ pub enum ErrorKind {
     /// ```rust
     /// # use clap::{App, Arg, ErrorKind};
     /// let result = App::new("prog")
-    ///     .arg(Arg::with_name("some_opt")
+    ///     .arg(Arg::new("some_opt")
     ///         .long("opt")
     ///         .min_values(3))
     ///     .try_get_matches_from(vec!["prog", "--opt", "too", "few"]);
@@ -191,7 +191,7 @@ pub enum ErrorKind {
     /// ```rust
     /// # use clap::{App, Arg, ErrorKind};
     /// let result = App::new("prog")
-    ///     .arg(Arg::with_name("some_opt")
+    ///     .arg(Arg::new("some_opt")
     ///         .long("opt")
     ///         .takes_value(true)
     ///         .number_of_values(2))
@@ -212,10 +212,10 @@ pub enum ErrorKind {
     /// ```rust
     /// # use clap::{App, Arg, ErrorKind};
     /// let result = App::new("prog")
-    ///     .arg(Arg::with_name("debug")
+    ///     .arg(Arg::new("debug")
     ///         .long("debug")
     ///         .conflicts_with("color"))
-    ///     .arg(Arg::with_name("color")
+    ///     .arg(Arg::new("color")
     ///         .long("color"))
     ///     .try_get_matches_from(vec!["prog", "--debug", "--color"]);
     /// assert!(result.is_err());
@@ -230,7 +230,7 @@ pub enum ErrorKind {
     /// ```rust
     /// # use clap::{App, Arg, ErrorKind};
     /// let result = App::new("prog")
-    ///     .arg(Arg::with_name("debug")
+    ///     .arg(Arg::new("debug")
     ///         .required(true))
     ///     .try_get_matches_from(vec!["prog"]);
     /// assert!(result.is_err());
@@ -269,7 +269,7 @@ pub enum ErrorKind {
     ///     .setting(AppSettings::ArgRequiredElseHelp)
     ///     .subcommand(App::new("config")
     ///         .about("Used for configuration")
-    ///         .arg(Arg::with_name("config_file")
+    ///         .arg(Arg::new("config_file")
     ///             .help("The configuration file to use")))
     ///     .try_get_matches_from(vec!["prog"]);
     /// assert!(result.is_err());
@@ -286,7 +286,7 @@ pub enum ErrorKind {
     /// ```rust
     /// # use clap::{App, Arg, ErrorKind};
     /// let result = App::new("prog")
-    ///     .arg(Arg::with_name("debug")
+    ///     .arg(Arg::new("debug")
     ///         .long("debug")
     ///         .multiple(false))
     ///     .try_get_matches_from(vec!["prog", "--debug", "--debug"]);
@@ -311,7 +311,7 @@ pub enum ErrorKind {
     /// # use std::ffi::OsString;
     /// let result = App::new("prog")
     ///     .setting(AppSettings::StrictUtf8)
-    ///     .arg(Arg::with_name("utf8")
+    ///     .arg(Arg::new("utf8")
     ///         .short('u')
     ///         .takes_value(true))
     ///     .try_get_matches_from(vec![OsString::from("myprog"),
diff --git a/src/parse/matches/arg_matches.rs b/src/parse/matches/arg_matches.rs
index 6e80941e..1294c735 100644
--- a/src/parse/matches/arg_matches.rs
+++ b/src/parse/matches/arg_matches.rs
@@ -34,14 +34,14 @@ pub(crate) struct SubCommand {
 /// ```no_run
 /// # use clap::{App, Arg};
 /// let matches = App::new("MyApp")
-///     .arg(Arg::with_name("out")
+///     .arg(Arg::new("out")
 ///         .long("output")
 ///         .required(true)
 ///         .takes_value(true))
-///     .arg(Arg::with_name("debug")
+///     .arg(Arg::new("debug")
 ///         .short('d')
 ///         .multiple(true))
-///     .arg(Arg::with_name("cfg")
+///     .arg(Arg::new("cfg")
 ///         .short('c')
 ///         .takes_value(true))
 ///     .get_matches(); // builds the instance of ArgMatches
@@ -105,7 +105,7 @@ impl ArgMatches {
     /// ```rust
     /// # use clap::{App, Arg};
     /// let m = App::new("myapp")
-    ///     .arg(Arg::with_name("output")
+    ///     .arg(Arg::new("output")
     ///         .takes_value(true))
     ///     .get_matches_from(vec!["myapp", "something"]);
     ///
@@ -202,7 +202,7 @@ impl ArgMatches {
     /// ```rust
     /// # use clap::{App, Arg};
     /// let m = App::new("myprog")
-    ///     .arg(Arg::with_name("output")
+    ///     .arg(Arg::new("output")
     ///         .multiple(true)
     ///         .short('o')
     ///         .takes_value(true))
@@ -489,7 +489,7 @@ impl ArgMatches {
     /// ```rust
     /// # use clap::{App, Arg};
     /// let m = App::new("myprog")
-    ///     .arg(Arg::with_name("debug")
+    ///     .arg(Arg::new("debug")
     ///         .short('d'))
     ///     .get_matches_from(vec![
     ///         "myprog", "-d"
@@ -520,7 +520,7 @@ impl ArgMatches {
     /// ```rust
     /// # use clap::{App, Arg, ArgSettings};
     /// let m = App::new("myprog")
-    ///     .arg(Arg::with_name("debug")
+    ///     .arg(Arg::new("debug")
     ///         .short('d')
     ///         .setting(ArgSettings::MultipleOccurrences))
     ///     .get_matches_from(vec![
@@ -535,10 +535,10 @@ impl ArgMatches {
     /// ```rust
     /// # use clap::{App, Arg, ArgSettings};
     /// let m = App::new("myprog")
-    ///     .arg(Arg::with_name("debug")
+    ///     .arg(Arg::new("debug")
     ///         .short('d')
     ///         .setting(ArgSettings::MultipleOccurrences))
-    ///     .arg(Arg::with_name("flag")
+    ///     .arg(Arg::new("flag")
     ///         .short('f'))
     ///     .get_matches_from(vec![
     ///         "myprog", "-ddfd"
@@ -577,9 +577,9 @@ impl ArgMatches {
     /// ```rust
     /// # use clap::{App, Arg};
     /// let m = App::new("myapp")
-    ///     .arg(Arg::with_name("flag")
+    ///     .arg(Arg::new("flag")
     ///         .short('f'))
-    ///     .arg(Arg::with_name("option")
+    ///     .arg(Arg::new("option")
     ///         .short('o')
     ///         .takes_value(true))
     ///     .get_matches_from(vec!["myapp", "-f", "-o", "val"]);
@@ -595,9 +595,9 @@ impl ArgMatches {
     /// ```rust
     /// # use clap::{App, Arg};
     /// let m = App::new("myapp")
-    ///     .arg(Arg::with_name("flag")
+    ///     .arg(Arg::new("flag")
     ///         .short('f'))
-    ///     .arg(Arg::with_name("option")
+    ///     .arg(Arg::new("option")
     ///         .short('o')
     ///         .takes_value(true))
     ///     .get_matches_from(vec!["myapp", "-f", "-o=val"]);
@@ -614,13 +614,13 @@ impl ArgMatches {
     /// ```rust
     /// # use clap::{App, Arg};
     /// let m = App::new("myapp")
-    ///     .arg(Arg::with_name("flag")
+    ///     .arg(Arg::new("flag")
     ///         .short('f'))
-    ///     .arg(Arg::with_name("flag2")
+    ///     .arg(Arg::new("flag2")
     ///         .short('F'))
-    ///     .arg(Arg::with_name("flag3")
+    ///     .arg(Arg::new("flag3")
     ///         .short('z'))
-    ///     .arg(Arg::with_name("option")
+    ///     .arg(Arg::new("option")
     ///         .short('o')
     ///         .takes_value(true))
     ///     .get_matches_from(vec!["myapp", "-fzF", "-oval"]);
@@ -640,13 +640,13 @@ impl ArgMatches {
     /// ```rust
     /// # use clap::{App, Arg};
     /// let m = App::new("myapp")
-    ///     .arg(Arg::with_name("flag")
+    ///     .arg(Arg::new("flag")
     ///         .short('f'))
-    ///     .arg(Arg::with_name("flag2")
+    ///     .arg(Arg::new("flag2")
     ///         .short('F'))
-    ///     .arg(Arg::with_name("flag3")
+    ///     .arg(Arg::new("flag3")
     ///         .short('z'))
-    ///     .arg(Arg::with_name("option")
+    ///     .arg(Arg::new("option")
     ///         .short('o')
     ///         .takes_value(true)
     ///         .multiple(true))
@@ -667,7 +667,7 @@ impl ArgMatches {
     /// ```rust
     /// # use clap::{App, Arg};
     /// let m = App::new("myapp")
-    ///     .arg(Arg::with_name("option")
+    ///     .arg(Arg::new("option")
     ///         .short('o')
     ///         .takes_value(true)
     ///         .multiple(true))
@@ -706,7 +706,7 @@ impl ArgMatches {
     /// ```rust
     /// # use clap::{App, Arg};
     /// let m = App::new("myapp")
-    ///     .arg(Arg::with_name("option")
+    ///     .arg(Arg::new("option")
     ///         .short('o')
     ///         .takes_value(true)
     ///         .use_delimiter(true)
@@ -725,11 +725,11 @@ impl ArgMatches {
     /// ```rust
     /// # use clap::{App, Arg};
     /// let m = App::new("myapp")
-    ///     .arg(Arg::with_name("option")
+    ///     .arg(Arg::new("option")
     ///         .short('o')
     ///         .takes_value(true)
     ///         .multiple(true))
-    ///     .arg(Arg::with_name("flag")
+    ///     .arg(Arg::new("flag")
     ///         .short('f')
     ///         .multiple_occurrences(true))
     ///     .get_matches_from(vec!["myapp", "-o", "val1", "-f", "-o", "val2", "-f"]);
@@ -748,7 +748,7 @@ impl ArgMatches {
     /// ```rust
     /// # use clap::{App, Arg};
     /// let m = App::new("myapp")
-    ///     .arg(Arg::with_name("option")
+    ///     .arg(Arg::new("option")
     ///         .short('o')
     ///         .takes_value(true)
     ///         .multiple(true))
@@ -778,10 +778,10 @@ impl ArgMatches {
     /// ```rust
     /// # use clap::{App, Arg, };
     /// let app_m = App::new("myprog")
-    ///     .arg(Arg::with_name("debug")
+    ///     .arg(Arg::new("debug")
     ///         .short('d'))
     ///     .subcommand(App::new("test")
-    ///         .arg(Arg::with_name("opt")
+    ///         .arg(Arg::new("opt")
     ///             .long("option")
     ///             .takes_value(true)))
     ///     .get_matches_from(vec![
@@ -940,7 +940,7 @@ impl ArgMatches {
 /// ```rust
 /// # use clap::{App, Arg};
 /// let m = App::new("myapp")
-///     .arg(Arg::with_name("output")
+///     .arg(Arg::new("output")
 ///         .short('o')
 ///         .multiple(true)
 ///         .takes_value(true))
@@ -1060,7 +1060,7 @@ impl<'a> Default for OsValues<'a> {
 /// ```rust
 /// # use clap::{App, Arg};
 /// let m = App::new("myapp")
-///     .arg(Arg::with_name("output")
+///     .arg(Arg::new("output")
 ///         .short('o')
 ///         .multiple(true)
 ///         .takes_value(true))
diff --git a/src/parse/parser.rs b/src/parse/parser.rs
index f2fbae3f..c2ab2eee 100644
--- a/src/parse/parser.rs
+++ b/src/parse/parser.rs
@@ -891,7 +891,7 @@ where
         let parser = Parser::new(&mut sc);
 
         if help_help {
-            let mut pb = Arg::with_name("subcommand")
+            let mut pb = Arg::new("subcommand")
                 .index(1)
                 .setting(ArgSettings::MultipleValues)
                 .about("The subcommand whose help message to display");


Test patch:
diff --git a/clap_derive/tests/issues.rs b/clap_derive/tests/issues.rs
index dfe9b0e2..dcb920df 100644
--- a/clap_derive/tests/issues.rs
+++ b/clap_derive/tests/issues.rs
@@ -8,7 +8,7 @@ use clap::{AppSettings, ArgGroup, Clap};
 #[test]
 fn issue_151() {
     #[derive(Clap, Debug)]
-    #[clap(group = ArgGroup::with_name("verb").required(true).multiple(true))]
+    #[clap(group = ArgGroup::new("verb").required(true).multiple(true))]
     struct Opt {
         #[clap(long, group = "verb")]
         foo: bool,
diff --git a/clap_generate/tests/completions.rs b/clap_generate/tests/completions.rs
index 74046645..8135ddf6 100644
--- a/clap_generate/tests/completions.rs
+++ b/clap_generate/tests/completions.rs
@@ -719,10 +719,10 @@ fn build_app() -> App<'static> {
 fn build_app_with_name(s: &'static str) -> App<'static> {
     App::new(s)
         .about("Tests completions")
-        .arg(Arg::with_name("file").about("some input file"))
+        .arg(Arg::new("file").about("some input file"))
         .subcommand(
             App::new("test").about("tests things").arg(
-                Arg::with_name("case")
+                Arg::new("case")
                     .long("case")
                     .takes_value(true)
                     .about("the case to test"),
@@ -734,7 +734,7 @@ fn build_app_special_commands() -> App<'static> {
     build_app_with_name("my_app")
         .subcommand(
             App::new("some_cmd").about("tests other things").arg(
-                Arg::with_name("config")
+                Arg::new("config")
                     .long("--config")
                     .takes_value(true)
                     .about("the other case to test"),
@@ -746,32 +746,28 @@ fn build_app_special_commands() -> App<'static> {
 fn build_app_special_help() -> App<'static> {
     App::new("my_app")
         .arg(
-            Arg::with_name("single-quotes")
+            Arg::new("single-quotes")
                 .long("single-quotes")
                 .about("Can be 'always', 'auto', or 'never'"),
         )
         .arg(
-            Arg::with_name("double-quotes")
+            Arg::new("double-quotes")
                 .long("double-quotes")
                 .about("Can be \"always\", \"auto\", or \"never\""),
         )
         .arg(
-            Arg::with_name("backticks")
+            Arg::new("backticks")
                 .long("backticks")
                 .about("For more information see `echo test`"),
         )
+        .arg(Arg::new("backslash").long("backslash").about("Avoid '\\n'"))
         .arg(
-            Arg::with_name("backslash")
-                .long("backslash")
-                .about("Avoid '\\n'"),
-        )
-        .arg(
-            Arg::with_name("brackets")
+            Arg::new("brackets")
                 .long("brackets")
                 .about("List packages [filter]"),
         )
         .arg(
-            Arg::with_name("expansions")
+            Arg::new("expansions")
                 .long("expansions")
                 .about("Execute the shell command with $SHELL"),
         )
diff --git a/tests/app_settings.rs b/tests/app_settings.rs
index 40ad2aaf..ee24a862 100644
--- a/tests/app_settings.rs
+++ b/tests/app_settings.rs
@@ -74,7 +74,7 @@ OPTIONS:
 fn sub_command_negate_required() {
     App::new("sub_command_negate")
         .setting(AppSettings::SubcommandsNegateReqs)
-        .arg(Arg::with_name("test").required(true).index(1))
+        .arg(Arg::new("test").required(true).index(1))
         .subcommand(App::new("sub1"))
         .get_matches_from(vec!["myprog", "sub1"]);
 }
@@ -83,7 +83,7 @@ fn sub_command_negate_required() {
 fn sub_command_negate_required_2() {
     let result = App::new("sub_command_negate")
         .setting(AppSettings::SubcommandsNegateReqs)
-        .arg(Arg::with_name("test").required(true).index(1))
+        .arg(Arg::new("test").required(true).index(1))
         .subcommand(App::new("sub1"))
         .try_get_matches_from(vec![""]);
     assert!(result.is_err());
@@ -106,7 +106,7 @@ fn sub_command_required() {
 fn arg_required_else_help() {
     let result = App::new("arg_required")
         .setting(AppSettings::ArgRequiredElseHelp)
-        .arg(Arg::with_name("test").index(1))
+        .arg(Arg::new("test").index(1))
         .try_get_matches_from(vec![""]);
     assert!(result.is_err());
     let err = result.err().unwrap();
@@ -117,7 +117,7 @@ fn arg_required_else_help() {
 fn arg_required_else_help_over_reqs() {
     let result = App::new("arg_required")
         .setting(AppSettings::ArgRequiredElseHelp)
-        .arg(Arg::with_name("test").index(1).required(true))
+        .arg(Arg::new("test").index(1).required(true))
         .try_get_matches_from(vec![""]);
     assert!(result.is_err());
     let err = result.err().unwrap();
@@ -152,7 +152,7 @@ fn infer_subcommands_fail_no_args() {
 fn infer_subcommands_fail_with_args() {
     let m = App::new("prog")
         .setting(AppSettings::InferSubcommands)
-        .arg(Arg::with_name("some"))
+        .arg(Arg::new("some"))
         .subcommand(App::new("test"))
         .subcommand(App::new("temp"))
         .try_get_matches_from(vec!["prog", "t"]);
@@ -164,7 +164,7 @@ fn infer_subcommands_fail_with_args() {
 fn infer_subcommands_fail_with_args2() {
     let m = App::new("prog")
         .setting(AppSettings::InferSubcommands)
-        .arg(Arg::with_name("some"))
+        .arg(Arg::new("some"))
         .subcommand(App::new("test"))
         .subcommand(App::new("temp"))
         .try_get_matches_from(vec!["prog", "te"]);
@@ -230,7 +230,7 @@ fn infer_subcommands_fail_suggestions() {
 fn no_bin_name() {
     let result = App::new("arg_required")
         .setting(AppSettings::NoBinaryName)
-        .arg(Arg::with_name("test").required(true).index(1))
+        .arg(Arg::new("test").required(true).index(1))
         .try_get_matches_from(vec!["testing"]);
     assert!(result.is_ok());
     let matches = result.unwrap();
@@ -376,8 +376,8 @@ fn delim_values_trailingvararg_with_delim() {
 fn leading_hyphen_short() {
     let res = App::new("leadhy")
         .setting(AppSettings::AllowLeadingHyphen)
-        .arg(Arg::with_name("some"))
-        .arg(Arg::with_name("other").short('o'))
+        .arg(Arg::new("some"))
+        .arg(Arg::new("other").short('o'))
         .try_get_matches_from(vec!["", "-bar", "-o"]);
     assert!(res.is_ok(), "Error: {:?}", res.unwrap_err().kind);
     let m = res.unwrap();
@@ -390,8 +390,8 @@ fn leading_hyphen_short() {
 fn leading_hyphen_long() {
     let res = App::new("leadhy")
         .setting(AppSettings::AllowLeadingHyphen)
-        .arg(Arg::with_name("some"))
-        .arg(Arg::with_name("other").short('o'))
+        .arg(Arg::new("some"))
+        .arg(Arg::new("other").short('o'))
         .try_get_matches_from(vec!["", "--bar", "-o"]);
     assert!(res.is_ok(), "Error: {:?}", res.unwrap_err().kind);
     let m = res.unwrap();
@@ -404,8 +404,8 @@ fn leading_hyphen_long() {
 fn leading_hyphen_opt() {
     let res = App::new("leadhy")
         .setting(AppSettings::AllowLeadingHyphen)
-        .arg(Arg::with_name("some").takes_value(true).long("opt"))
-        .arg(Arg::with_name("other").short('o'))
+        .arg(Arg::new("some").takes_value(true).long("opt"))
+        .arg(Arg::new("other").short('o'))
         .try_get_matches_from(vec!["", "--opt", "--bar", "-o"]);
     assert!(res.is_ok(), "Error: {:?}", res.unwrap_err().kind);
     let m = res.unwrap();
@@ -418,8 +418,8 @@ fn leading_hyphen_opt() {
 fn allow_negative_numbers() {
     let res = App::new("negnum")
         .setting(AppSettings::AllowNegativeNumbers)
-        .arg(Arg::with_name("panum"))
-        .arg(Arg::with_name("onum").short('o').takes_value(true))
+        .arg(Arg::new("panum"))
+        .arg(Arg::new("onum").short('o').takes_value(true))
         .try_get_matches_from(vec!["negnum", "-20", "-o", "-1.2"]);
     assert!(res.is_ok(), "Error: {:?}", res.unwrap_err().kind);
     let m = res.unwrap();
@@ -431,8 +431,8 @@ fn allow_negative_numbers() {
 fn allow_negative_numbers_fail() {
     let res = App::new("negnum")
         .setting(AppSettings::AllowNegativeNumbers)
-        .arg(Arg::with_name("panum"))
-        .arg(Arg::with_name("onum").short('o').takes_value(true))
+        .arg(Arg::new("panum"))
+        .arg(Arg::new("onum").short('o').takes_value(true))
         .try_get_matches_from(vec!["negnum", "--foo", "-o", "-1.2"]);
     assert!(res.is_err());
     assert_eq!(res.unwrap_err().kind, ErrorKind::UnknownArgument)
@@ -491,9 +491,9 @@ fn dont_collapse_args() {
         .version("v1.4.8")
         .setting(AppSettings::DontCollapseArgsInUsage)
         .args(&[
-            Arg::with_name("arg1").about("some"),
-            Arg::with_name("arg2").about("some"),
-            Arg::with_name("arg3").about("some"),
+            Arg::new("arg1").about("some"),
+            Arg::new("arg2").about("some"),
+            Arg::new("arg3").about("some"),
         ]);
     assert!(utils::compare_output(
         app,
@@ -506,7 +506,7 @@ fn dont_collapse_args() {
 #[test]
 fn require_eq() {
     let app = App::new("clap-test").version("v1.4.8").arg(
-        Arg::with_name("opt")
+        Arg::new("opt")
             .long("opt")
             .short('o')
             .required(true)
diff --git a/tests/arg_aliases.rs b/tests/arg_aliases.rs
index 2a75b898..ef682528 100644
--- a/tests/arg_aliases.rs
+++ b/tests/arg_aliases.rs
@@ -34,7 +34,7 @@ OPTIONS:
 fn single_alias_of_option() {
     let a = App::new("single_alias")
         .arg(
-            Arg::with_name("alias")
+            Arg::new("alias")
                 .long("alias")
                 .takes_value(true)
                 .about("single alias")
@@ -50,7 +50,7 @@ fn single_alias_of_option() {
 #[test]
 fn multiple_aliases_of_option() {
     let a = App::new("multiple_aliases").arg(
-        Arg::with_name("aliases")
+        Arg::new("aliases")
             .long("aliases")
             .takes_value(true)
             .about("multiple aliases")
@@ -93,7 +93,7 @@ fn multiple_aliases_of_option() {
 #[test]
 fn single_alias_of_flag() {
     let a = App::new("test")
-        .arg(Arg::with_name("flag").long("flag").alias("alias"))
+        .arg(Arg::new("flag").long("flag").alias("alias"))
         .try_get_matches_from(vec!["", "--alias"]);
     assert!(a.is_ok());
     let a = a.unwrap();
@@ -102,7 +102,7 @@ fn single_alias_of_flag() {
 
 #[test]
 fn multiple_aliases_of_flag() {
-    let a = App::new("test").arg(Arg::with_name("flag").long("flag").aliases(&[
+    let a = App::new("test").arg(Arg::new("flag").long("flag").aliases(&[
         "invisible",
         "set",
         "of",
@@ -137,7 +137,7 @@ fn alias_on_a_subcommand_option() {
     let m = App::new("test")
         .subcommand(
             App::new("some").arg(
-                Arg::with_name("test")
+                Arg::new("test")
                     .short('t')
                     .long("test")
                     .takes_value(true)
@@ -145,11 +145,7 @@ fn alias_on_a_subcommand_option() {
                     .about("testing testing"),
             ),
         )
-        .arg(
-            Arg::with_name("other")
-                .long("other")
-                .aliases(&["o1", "o2", "o3"]),
-        )
+        .arg(Arg::new("other").long("other").aliases(&["o1", "o2", "o3"]))
         .get_matches_from(vec!["test", "some", "--opt", "awesome"]);
 
     assert!(m.subcommand_matches("some").is_some());
@@ -165,7 +161,7 @@ fn invisible_arg_aliases_help_output() {
             .about("Some help")
             .version("1.2")
             .arg(
-                Arg::with_name("opt")
+                Arg::new("opt")
                     .long("opt")
                     .short('o')
                     .takes_value(true)
@@ -188,7 +184,7 @@ fn visible_arg_aliases_help_output() {
             .about("Some help")
             .version("1.2")
             .arg(
-                Arg::with_name("opt")
+                Arg::new("opt")
                     .long("opt")
                     .short('o')
                     .takes_value(true)
@@ -196,7 +192,7 @@ fn visible_arg_aliases_help_output() {
                     .visible_alias("visible"),
             )
             .arg(
-                Arg::with_name("flg")
+                Arg::new("flg")
                     .long("flag")
                     .short('f')
                     .visible_aliases(&["v_flg", "flag2", "flg3"]),
diff --git a/tests/arg_aliases_short.rs b/tests/arg_aliases_short.rs
index ced33326..65d0f564 100644
--- a/tests/arg_aliases_short.rs
+++ b/tests/arg_aliases_short.rs
@@ -34,7 +34,7 @@ OPTIONS:
 fn single_short_alias_of_option() {
     let a = App::new("single_alias")
         .arg(
-            Arg::with_name("alias")
+            Arg::new("alias")
                 .long("alias")
                 .takes_value(true)
                 .about("single short alias")
@@ -50,7 +50,7 @@ fn single_short_alias_of_option() {
 #[test]
 fn multiple_short_aliases_of_option() {
     let a = App::new("multiple_aliases").arg(
-        Arg::with_name("aliases")
+        Arg::new("aliases")
             .long("aliases")
             .takes_value(true)
             .about("multiple aliases")
@@ -87,7 +87,7 @@ fn multiple_short_aliases_of_option() {
 #[test]
 fn single_short_alias_of_flag() {
     let a = App::new("test")
-        .arg(Arg::with_name("flag").long("flag").short_alias('f'))
+        .arg(Arg::new("flag").long("flag").short_alias('f'))
         .try_get_matches_from(vec!["", "-f"]);
     assert!(a.is_ok());
     let a = a.unwrap();
@@ -97,7 +97,7 @@ fn single_short_alias_of_flag() {
 #[test]
 fn multiple_short_aliases_of_flag() {
     let a = App::new("test").arg(
-        Arg::with_name("flag")
+        Arg::new("flag")
             .long("flag")
             .short_aliases(&['a', 'b', 'c', 'd', 'e']),
     );
@@ -129,7 +129,7 @@ fn short_alias_on_a_subcommand_option() {
     let m = App::new("test")
         .subcommand(
             App::new("some").arg(
-                Arg::with_name("test")
+                Arg::new("test")
                     .short('t')
                     .long("test")
                     .takes_value(true)
@@ -138,7 +138,7 @@ fn short_alias_on_a_subcommand_option() {
             ),
         )
         .arg(
-            Arg::with_name("other")
+            Arg::new("other")
                 .long("other")
                 .short_aliases(&['1', '2', '3']),
         )
@@ -157,7 +157,7 @@ fn invisible_short_arg_aliases_help_output() {
             .about("Some help")
             .version("1.2")
             .arg(
-                Arg::with_name("opt")
+                Arg::new("opt")
                     .long("opt")
                     .short('o')
                     .takes_value(true)
@@ -180,7 +180,7 @@ fn visible_short_arg_aliases_help_output() {
             .about("Some help")
             .version("1.2")
             .arg(
-                Arg::with_name("opt")
+                Arg::new("opt")
                     .long("opt")
                     .short('o')
                     .takes_value(true)
@@ -188,7 +188,7 @@ fn visible_short_arg_aliases_help_output() {
                     .visible_short_alias('v'),
             )
             .arg(
-                Arg::with_name("flg")
+                Arg::new("flg")
                     .long("flag")
                     .short('f')
                     .visible_alias("flag1")
diff --git a/tests/borrowed.rs b/tests/borrowed.rs
index bb0d6255..4ec5fd1b 100644
--- a/tests/borrowed.rs
+++ b/tests/borrowed.rs
@@ -2,16 +2,13 @@ use clap::{App, Arg};
 
 #[test]
 fn borrowed_args() {
-    let arg = Arg::with_name("some")
-        .short('s')
-        .long("some")
-        .about("other help");
-    let arg2 = Arg::with_name("some2")
+    let arg = Arg::new("some").short('s').long("some").about("other help");
+    let arg2 = Arg::new("some2")
         .short('S')
         .long("some-thing")
         .about("other help");
     let result = App::new("sub_command_negate")
-        .arg(Arg::with_name("test").index(1))
+        .arg(Arg::new("test").index(1))
         .arg(&arg)
         .arg(&arg2)
         .subcommand(App::new("sub1").arg(&arg))
diff --git a/tests/conflicts.rs b/tests/conflicts.rs
index e2ace81e..c5154e51 100644
--- a/tests/conflicts.rs
+++ b/tests/conflicts.rs
@@ -64,12 +64,7 @@ fn flag_conflict_with_everything() {
 fn group_conflict() {
     let result = App::new("group_conflict")
         .arg(Arg::from("-f, --flag 'some flag'").conflicts_with("gr"))
-        .group(
-            ArgGroup::with_name("gr")
-                .required(true)
-                .arg("some")
-                .arg("other"),
-        )
+        .group(ArgGroup::new("gr").required(true).arg("some").arg("other"))
         .arg(Arg::from("--some 'some arg'"))
         .arg(Arg::from("--other 'other arg'"))
         .try_get_matches_from(vec!["myprog", "--other", "-f"]);
@@ -82,12 +77,7 @@ fn group_conflict() {
 fn group_conflict_2() {
     let result = App::new("group_conflict")
         .arg(Arg::from("-f, --flag 'some flag'").conflicts_with("gr"))
-        .group(
-            ArgGroup::with_name("gr")
-                .required(true)
-                .arg("some")
-                .arg("other"),
-        )
+        .group(ArgGroup::new("gr").required(true).arg("some").arg("other"))
         .arg(Arg::from("--some 'some arg'"))
         .arg(Arg::from("--other 'other arg'"))
         .try_get_matches_from(vec!["myprog", "-f", "--some"]);
@@ -132,12 +122,12 @@ fn conflict_with_unused_default_value() {
 fn two_conflicting_arguments() {
     let a = App::new("two_conflicting_arguments")
         .arg(
-            Arg::with_name("develop")
+            Arg::new("develop")
                 .long("develop")
                 .conflicts_with("production"),
         )
         .arg(
-            Arg::with_name("production")
+            Arg::new("production")
                 .long("production")
                 .conflicts_with("develop"),
         )
@@ -155,17 +145,17 @@ fn two_conflicting_arguments() {
 fn three_conflicting_arguments() {
     let a = App::new("two_conflicting_arguments")
         .arg(
-            Arg::with_name("one")
+            Arg::new("one")
                 .long("one")
                 .conflicts_with_all(&["two", "three"]),
         )
         .arg(
-            Arg::with_name("two")
+            Arg::new("two")
                 .long("two")
                 .conflicts_with_all(&["one", "three"]),
         )
         .arg(
-            Arg::with_name("three")
+            Arg::new("three")
                 .long("three")
                 .conflicts_with_all(&["one", "two"]),
         )
@@ -184,11 +174,7 @@ fn three_conflicting_arguments() {
 #[should_panic = "Argument 'config' cannot conflict with itself"]
 fn self_conflicting_arg() {
     let _ = App::new("prog")
-        .arg(
-            Arg::with_name("config")
-                .long("config")
-                .conflicts_with("config"),
-        )
+        .arg(Arg::new("config").long("config").conflicts_with("config"))
         .try_get_matches_from(vec!["", "--config"]);
 }
 
@@ -197,11 +183,7 @@ fn self_conflicting_arg() {
 #[should_panic = "Argument or group 'extra' specified in 'conflicts_with*' for 'config' does not exist"]
 fn conflicts_with_invalid_arg() {
     let _ = App::new("prog")
-        .arg(
-            Arg::with_name("config")
-                .long("config")
-                .conflicts_with("extra"),
-        )
+        .arg(Arg::new("config").long("config").conflicts_with("extra"))
         .try_get_matches_from(vec!["", "--config"]);
 }
 
diff --git a/tests/default_vals.rs b/tests/default_vals.rs
index 9b671d81..75abf60c 100644
--- a/tests/default_vals.rs
+++ b/tests/default_vals.rs
@@ -385,20 +385,20 @@ fn conditional_reqs_fail() {
         .author("F0x06")
         .about("Arg test")
         .arg(
-            Arg::with_name("target")
+            Arg::new("target")
                 .takes_value(true)
                 .default_value("file")
                 .possible_values(&["file", "stdout"])
                 .long("target"),
         )
         .arg(
-            Arg::with_name("input")
+            Arg::new("input")
                 .takes_value(true)
                 .required(true)
                 .long("input"),
         )
         .arg(
-            Arg::with_name("output")
+            Arg::new("output")
                 .takes_value(true)
                 .required_if("target", "file")
                 .long("output"),
@@ -416,20 +416,20 @@ fn conditional_reqs_pass() {
         .author("F0x06")
         .about("Arg test")
         .arg(
-            Arg::with_name("target")
+            Arg::new("target")
                 .takes_value(true)
                 .default_value("file")
                 .possible_values(&["file", "stdout"])
                 .long("target"),
         )
         .arg(
-            Arg::with_name("input")
+            Arg::new("input")
                 .takes_value(true)
                 .required(true)
                 .long("input"),
         )
         .arg(
-            Arg::with_name("output")
+            Arg::new("output")
                 .takes_value(true)
                 .required_if("target", "file")
                 .long("output"),
@@ -446,7 +446,7 @@ fn conditional_reqs_pass() {
 fn multiple_defaults() {
     let r = App::new("diff")
         .arg(
-            Arg::with_name("files")
+            Arg::new("files")
                 .long("files")
                 .number_of_values(2)
                 .default_values(&["old", "new"]),
@@ -462,7 +462,7 @@ fn multiple_defaults() {
 fn multiple_defaults_override() {
     let r = App::new("diff")
         .arg(
-            Arg::with_name("files")
+            Arg::new("files")
                 .long("files")
                 .number_of_values(2)
                 .default_values(&["old", "new"]),
@@ -478,7 +478,7 @@ fn multiple_defaults_override() {
 fn issue_1050_num_vals_and_defaults() {
     let res = App::new("hello")
         .arg(
-            Arg::with_name("exit-code")
+            Arg::new("exit-code")
                 .long("exit-code")
                 .required(true)
                 .takes_value(true)
diff --git a/tests/delimiters.rs b/tests/delimiters.rs
index 0aecaa96..0e01506f 100644
--- a/tests/delimiters.rs
+++ b/tests/delimiters.rs
@@ -4,7 +4,7 @@ use clap::{App, Arg, ArgSettings};
 fn opt_default_no_delim() {
     let m = App::new("no_delim")
         .arg(
-            Arg::with_name("option")
+            Arg::new("option")
                 .long("option")
                 .setting(ArgSettings::TakesValue),
         )
@@ -22,7 +22,7 @@ fn opt_default_no_delim() {
 fn opt_eq_no_delim() {
     let m = App::new("no_delim")
         .arg(
-            Arg::with_name("option")
+            Arg::new("option")
                 .long("option")
                 .setting(ArgSettings::TakesValue),
         )
@@ -40,7 +40,7 @@ fn opt_eq_no_delim() {
 fn opt_s_eq_no_delim() {
     let m = App::new("no_delim")
         .arg(
-            Arg::with_name("option")
+            Arg::new("option")
                 .short('o')
                 .setting(ArgSettings::TakesValue),
         )
@@ -58,7 +58,7 @@ fn opt_s_eq_no_delim() {
 fn opt_s_default_no_delim() {
     let m = App::new("no_delim")
         .arg(
-            Arg::with_name("option")
+            Arg::new("option")
                 .short('o')
                 .setting(ArgSettings::TakesValue),
         )
@@ -76,7 +76,7 @@ fn opt_s_default_no_delim() {
 fn opt_s_no_space_no_delim() {
     let m = App::new("no_delim")
         .arg(
-            Arg::with_name("option")
+            Arg::new("option")
                 .short('o')
                 .setting(ArgSettings::TakesValue),
         )
@@ -94,7 +94,7 @@ fn opt_s_no_space_no_delim() {
 fn opt_s_no_space_mult_no_delim() {
     let m = App::new("no_delim")
         .arg(
-            Arg::with_name("option")
+            Arg::new("option")
                 .short('o')
                 .setting(ArgSettings::MultipleValues),
         )
@@ -112,7 +112,7 @@ fn opt_s_no_space_mult_no_delim() {
 fn opt_eq_mult_def_delim() {
     let m = App::new("no_delim")
         .arg(
-            Arg::with_name("option")
+            Arg::new("option")
                 .long("opt")
                 .multiple(true)
                 .use_delimiter(true)
diff --git a/tests/derive_order.rs b/tests/derive_order.rs
index a90886d1..96e7b90b 100644
--- a/tests/derive_order.rs
+++ b/tests/derive_order.rs
@@ -117,13 +117,13 @@ OPTIONS:
 #[test]
 fn no_derive_order() {
     let app = App::new("test").version("1.2").args(&[
-        Arg::with_name("flag_b").long("flag_b").about("first flag"),
-        Arg::with_name("option_b")
+        Arg::new("flag_b").long("flag_b").about("first flag"),
+        Arg::new("option_b")
             .long("option_b")
             .takes_value(true)
             .about("first option"),
-        Arg::with_name("flag_a").long("flag_a").about("second flag"),
-        Arg::with_name("option_a")
+        Arg::new("flag_a").long("flag_a").about("second flag"),
+        Arg::new("option_a")
             .long("option_a")
             .takes_value(true)
             .about("second option"),
@@ -143,13 +143,13 @@ fn derive_order() {
         .setting(AppSettings::DeriveDisplayOrder)
         .version("1.2")
         .args(&[
-            Arg::with_name("flag_b").long("flag_b").about("first flag"),
-            Arg::with_name("option_b")
+            Arg::new("flag_b").long("flag_b").about("first flag"),
+            Arg::new("option_b")
                 .long("option_b")
                 .takes_value(true)
                 .about("first option"),
-            Arg::with_name("flag_a").long("flag_a").about("second flag"),
-            Arg::with_name("option_a")
+            Arg::new("flag_a").long("flag_a").about("second flag"),
+            Arg::new("option_a")
                 .long("option_a")
                 .takes_value(true)
                 .about("second option"),
@@ -169,13 +169,13 @@ fn unified_help() {
         .setting(AppSettings::UnifiedHelpMessage)
         .version("1.2")
         .args(&[
-            Arg::with_name("flag_b").long("flag_b").about("first flag"),
-            Arg::with_name("option_b")
+            Arg::new("flag_b").long("flag_b").about("first flag"),
+            Arg::new("option_b")
                 .long("option_b")
                 .takes_value(true)
                 .about("first option"),
-            Arg::with_name("flag_a").long("flag_a").about("second flag"),
-            Arg::with_name("option_a")
+            Arg::new("flag_a").long("flag_a").about("second flag"),
+            Arg::new("option_a")
                 .long("option_a")
                 .takes_value(true)
                 .about("second option"),
@@ -196,13 +196,13 @@ fn unified_help_and_derive_order() {
         .setting(AppSettings::UnifiedHelpMessage)
         .version("1.2")
         .args(&[
-            Arg::with_name("flag_b").long("flag_b").about("first flag"),
-            Arg::with_name("option_b")
+            Arg::new("flag_b").long("flag_b").about("first flag"),
+            Arg::new("option_b")
                 .long("option_b")
                 .takes_value(true)
                 .about("first option"),
-            Arg::with_name("flag_a").long("flag_a").about("second flag"),
-            Arg::with_name("option_a")
+            Arg::new("flag_a").long("flag_a").about("second flag"),
+            Arg::new("option_a")
                 .long("option_a")
                 .takes_value(true)
                 .about("second option"),
@@ -223,13 +223,13 @@ fn derive_order_subcommand_propagate() {
         .version("1.2")
         .subcommand(
             App::new("sub").version("1.2").args(&[
-                Arg::with_name("flag_b").long("flag_b").about("first flag"),
-                Arg::with_name("option_b")
+                Arg::new("flag_b").long("flag_b").about("first flag"),
+                Arg::new("option_b")
                     .long("option_b")
                     .takes_value(true)
                     .about("first option"),
-                Arg::with_name("flag_a").long("flag_a").about("second flag"),
-                Arg::with_name("option_a")
+                Arg::new("flag_a").long("flag_a").about("second flag"),
+                Arg::new("option_a")
                     .long("option_a")
                     .takes_value(true)
                     .about("second option"),
@@ -250,13 +250,13 @@ fn unified_help_subcommand_propagate() {
         .global_setting(AppSettings::UnifiedHelpMessage)
         .subcommand(
             App::new("sub").version("1.2").args(&[
-                Arg::with_name("flag_b").long("flag_b").about("first flag"),
-                Arg::with_name("option_b")
+                Arg::new("flag_b").long("flag_b").about("first flag"),
+                Arg::new("option_b")
                     .long("option_b")
                     .takes_value(true)
                     .about("first option"),
-                Arg::with_name("flag_a").long("flag_a").about("second flag"),
-                Arg::with_name("option_a")
+                Arg::new("flag_a").long("flag_a").about("second flag"),
+                Arg::new("option_a")
                     .long("option_a")
                     .takes_value(true)
                     .about("second option"),
@@ -278,13 +278,13 @@ fn unified_help_and_derive_order_subcommand_propagate() {
         .global_setting(AppSettings::UnifiedHelpMessage)
         .subcommand(
             App::new("sub").version("1.2").args(&[
-                Arg::with_name("flag_b").long("flag_b").about("first flag"),
-                Arg::with_name("option_b")
+                Arg::new("flag_b").long("flag_b").about("first flag"),
+                Arg::new("option_b")
                     .long("option_b")
                     .takes_value(true)
                     .about("first option"),
-                Arg::with_name("flag_a").long("flag_a").about("second flag"),
-                Arg::with_name("option_a")
+                Arg::new("flag_a").long("flag_a").about("second flag"),
+                Arg::new("option_a")
                     .long("option_a")
                     .takes_value(true)
                     .about("second option"),
@@ -306,16 +306,16 @@ fn unified_help_and_derive_order_subcommand_propagate_with_explicit_display_orde
         .global_setting(AppSettings::UnifiedHelpMessage)
         .subcommand(
             App::new("sub").version("1.2").args(&[
-                Arg::with_name("flag_b").long("flag_b").about("first flag"),
-                Arg::with_name("option_b")
+                Arg::new("flag_b").long("flag_b").about("first flag"),
+                Arg::new("option_b")
                     .long("option_b")
                     .takes_value(true)
                     .about("first option"),
-                Arg::with_name("flag_a")
+                Arg::new("flag_a")
                     .long("flag_a")
                     .about("second flag")
                     .display_order(0),
-                Arg::with_name("option_a")
+                Arg::new("option_a")
                     .long("option_a")
                     .takes_value(true)
                     .about("second option"),
diff --git a/tests/global_args.rs b/tests/global_args.rs
index dd76abf9..3846cf70 100644
--- a/tests/global_args.rs
+++ b/tests/global_args.rs
@@ -5,7 +5,7 @@ use clap::{App, Arg};
 fn get_app() -> App<'static> {
     App::new("myprog")
         .arg(
-            Arg::with_name("GLOBAL_ARG")
+            Arg::new("GLOBAL_ARG")
                 .long("global-arg")
                 .about("Specifies something needed by the subcommands")
                 .global(true)
@@ -13,7 +13,7 @@ fn get_app() -> App<'static> {
                 .default_value("default_value"),
         )
         .arg(
-            Arg::with_name("GLOBAL_FLAG")
+            Arg::new("GLOBAL_FLAG")
                 .long("global-flag")
                 .about("Specifies something needed by the subcommands")
                 .multiple(true)
diff --git a/tests/groups.rs b/tests/groups.rs
index 1001336c..40bd3b14 100644
--- a/tests/groups.rs
+++ b/tests/groups.rs
@@ -53,11 +53,7 @@ fn required_group_missing_arg() {
     let result = App::new("group")
         .arg("-f, --flag 'some flag'")
         .arg(" -c, --color 'some other flag'")
-        .group(
-            ArgGroup::with_name("req")
-                .args(&["flag", "color"])
-                .required(true),
-        )
+        .group(ArgGroup::new("req").args(&["flag", "color"]).required(true))
         .try_get_matches_from(vec![""]);
     assert!(result.is_err());
     let err = result.err().unwrap();
@@ -71,11 +67,7 @@ fn non_existing_arg() {
     let _ = App::new("group")
         .arg("-f, --flag 'some flag'")
         .arg("-c, --color 'some other flag'")
-        .group(
-            ArgGroup::with_name("req")
-                .args(&["flg", "color"])
-                .required(true),
-        )
+        .group(ArgGroup::new("req").args(&["flg", "color"]).required(true))
         .try_get_matches_from(vec![""]);
 }
 
@@ -86,27 +78,27 @@ fn unique_group_name() {
     let _ = App::new("group")
         .arg("-f, --flag 'some flag'")
         .arg("-c, --color 'some other flag'")
-        .group(ArgGroup::with_name("req").args(&["flag"]).required(true))
-        .group(ArgGroup::with_name("req").args(&["color"]).required(true))
+        .group(ArgGroup::new("req").args(&["flag"]).required(true))
+        .group(ArgGroup::new("req").args(&["color"]).required(true))
         .try_get_matches_from(vec![""]);
 }
 
 #[cfg(debug_assertions)]
 #[test]
 #[should_panic = "Argument group name '' must not conflict with argument name"]
-fn groups_with_name_of_arg_name() {
+fn groups_new_of_arg_name() {
     let _ = App::new("group")
-        .arg(Arg::with_name("a").long("a").group("a"))
+        .arg(Arg::new("a").long("a").group("a"))
         .try_get_matches_from(vec!["", "--a"]);
 }
 
 #[cfg(debug_assertions)]
 #[test]
 #[should_panic = "Argument group name 'a' must not conflict with argument name"]
-fn arg_group_with_name_of_arg_name() {
+fn arg_group_new_of_arg_name() {
     let _ = App::new("group")
-        .arg(Arg::with_name("a").long("a").group("a"))
-        .group(ArgGroup::with_name("a"))
+        .arg(Arg::new("a").long("a").group("a"))
+        .group(ArgGroup::new("a"))
         .try_get_matches_from(vec!["", "--a"]);
 }
 
@@ -115,7 +107,7 @@ fn group_single_value() {
     let res = App::new("group")
         .arg("-f, --flag 'some flag'")
         .arg("-c, --color [color] 'some option'")
-        .group(ArgGroup::with_name("grp").args(&["flag", "color"]))
+        .group(ArgGroup::new("grp").args(&["flag", "color"]))
         .try_get_matches_from(vec!["", "-c", "blue"]);
     assert!(res.is_ok());
 
@@ -129,7 +121,7 @@ fn group_single_flag() {
     let res = App::new("group")
         .arg("-f, --flag 'some flag'")
         .arg("-c, --color [color] 'some option'")
-        .group(ArgGroup::with_name("grp").args(&["flag", "color"]))
+        .group(ArgGroup::new("grp").args(&["flag", "color"]))
         .try_get_matches_from(vec!["", "-f"]);
     assert!(res.is_ok());
 
@@ -143,7 +135,7 @@ fn group_empty() {
     let res = App::new("group")
         .arg("-f, --flag 'some flag'")
         .arg("-c, --color [color] 'some option'")
-        .group(ArgGroup::with_name("grp").args(&["flag", "color"]))
+        .group(ArgGroup::new("grp").args(&["flag", "color"]))
         .try_get_matches_from(vec![""]);
     assert!(res.is_ok());
 
@@ -157,11 +149,7 @@ fn group_reqired_flags_empty() {
     let result = App::new("group")
         .arg("-f, --flag 'some flag'")
         .arg("-c, --color 'some option'")
-        .group(
-            ArgGroup::with_name("grp")
-                .required(true)
-                .args(&["flag", "color"]),
-        )
+        .group(ArgGroup::new("grp").required(true).args(&["flag", "color"]))
         .try_get_matches_from(vec![""]);
     assert!(result.is_err());
     let err = result.err().unwrap();
@@ -173,7 +161,7 @@ fn group_multi_value_single_arg() {
     let res = App::new("group")
         .arg("-f, --flag 'some flag'")
         .arg("-c, --color [color]... 'some option'")
-        .group(ArgGroup::with_name("grp").args(&["flag", "color"]))
+        .group(ArgGroup::new("grp").args(&["flag", "color"]))
         .try_get_matches_from(vec!["", "-c", "blue", "red", "green"]);
     assert!(res.is_ok(), "{:?}", res.unwrap_err().kind);
 
@@ -189,7 +177,7 @@ fn group_multi_value_single_arg() {
 fn empty_group() {
     let r = App::new("empty_group")
         .arg(Arg::from("-f, --flag 'some flag'"))
-        .group(ArgGroup::with_name("vers").required(true))
+        .group(ArgGroup::new("vers").required(true))
         .try_get_matches_from(vec!["empty_prog"]);
     assert!(r.is_err());
     let err = r.err().unwrap();
@@ -202,7 +190,7 @@ fn req_group_usage_string() {
         .arg("[base] 'Base commit'")
         .arg("-d, --delete 'Remove the base commit information'")
         .group(
-            ArgGroup::with_name("base_or_delete")
+            ArgGroup::new("base_or_delete")
                 .args(&["base", "delete"])
                 .required(true),
         );
@@ -223,7 +211,7 @@ fn req_group_with_conflict_usage_string() {
             "-d, --delete 'Remove the base commit information'",
         ))
         .group(
-            ArgGroup::with_name("base_or_delete")
+            ArgGroup::new("base_or_delete")
                 .args(&["base", "delete"])
                 .required(true),
         );
@@ -245,7 +233,7 @@ fn req_group_with_conflict_usage_string_only_options() {
             "<delete> -d, --delete 'Remove the base commit information'",
         ))
         .group(
-            ArgGroup::with_name("all_or_delete")
+            ArgGroup::new("all_or_delete")
                 .args(&["all", "delete"])
                 .required(true),
         );
@@ -264,7 +252,7 @@ fn required_group_multiple_args() {
         .arg("-f, --flag 'some flag'")
         .arg("-c, --color 'some other flag'")
         .group(
-            ArgGroup::with_name("req")
+            ArgGroup::new("req")
                 .args(&["flag", "color"])
                 .required(true)
                 .multiple(true),
@@ -281,7 +269,7 @@ fn group_multiple_args_error() {
     let result = App::new("group")
         .arg("-f, --flag 'some flag'")
         .arg("-c, --color 'some other flag'")
-        .group(ArgGroup::with_name("req").args(&["flag", "color"]))
+        .group(ArgGroup::new("req").args(&["flag", "color"]))
         .try_get_matches_from(vec!["group", "-f", "-c"]);
     assert!(result.is_err());
     let err = result.unwrap_err();
@@ -291,8 +279,8 @@ fn group_multiple_args_error() {
 #[test]
 fn group_acts_like_arg() {
     let m = App::new("prog")
-        .arg(Arg::with_name("debug").long("debug").group("mode"))
-        .arg(Arg::with_name("verbose").long("verbose").group("mode"))
+        .arg(Arg::new("debug").long("debug").group("mode"))
+        .arg(Arg::new("verbose").long("verbose").group("mode"))
         .get_matches_from(vec!["prog", "--debug"]);
     assert!(m.is_present("mode"));
 }
@@ -301,11 +289,11 @@ fn group_acts_like_arg() {
 fn issue_1794() {
     let app = clap::App::new("hello")
         .bin_name("deno")
-        .arg(Arg::with_name("option1").long("option1").takes_value(false))
-        .arg(Arg::with_name("pos1").takes_value(true))
-        .arg(Arg::with_name("pos2").takes_value(true))
+        .arg(Arg::new("option1").long("option1").takes_value(false))
+        .arg(Arg::new("pos1").takes_value(true))
+        .arg(Arg::new("pos2").takes_value(true))
         .group(
-            ArgGroup::with_name("arg1")
+            ArgGroup::new("arg1")
                 .args(&["pos1", "option1"])
                 .required(true),
         );
diff --git a/tests/help.rs b/tests/help.rs
index 57799617..be0a15a8 100644
--- a/tests/help.rs
+++ b/tests/help.rs
@@ -630,33 +630,33 @@ fn args_with_last_usage() {
         .version("0.1")
         .setting(AppSettings::TrailingVarArg)
         .arg(
-            Arg::with_name("verbose")
+            Arg::new("verbose")
                 .about("Prints out more stuff.")
                 .short('v')
                 .long("verbose")
                 .setting(ArgSettings::MultipleOccurrences),
         )
         .arg(
-            Arg::with_name("timeout")
+            Arg::new("timeout")
                 .about("Timeout in seconds.")
                 .short('t')
                 .long("timeout")
                 .value_name("SECONDS"),
         )
         .arg(
-            Arg::with_name("frequency")
+            Arg::new("frequency")
                 .about("The sampling frequency.")
                 .short('f')
                 .long("frequency")
                 .value_name("HERTZ"),
         )
         .arg(
-            Arg::with_name("binary path")
+            Arg::new("binary path")
                 .about("The path of the binary to be profiled. for a binary.")
                 .value_name("BINFILE"),
         )
         .arg(
-            Arg::with_name("pass through args")
+            Arg::new("pass through args")
                 .about("Any arguments you wish to pass to the being profiled.")
                 .settings(&[
                     ArgSettings::MultipleValues,
@@ -780,7 +780,7 @@ fn complex_subcommand_help_output() {
 #[test]
 fn issue_626_unicode_cutoff() {
     let app = App::new("ctest").version("0.1").set_term_width(70).arg(
-        Arg::with_name("cafe")
+        Arg::new("cafe")
             .short('c')
             .long("cafe")
             .value_name("FILE")
@@ -807,7 +807,7 @@ fn hide_possible_vals() {
     let app = App::new("ctest")
         .version("0.1")
         .arg(
-            Arg::with_name("pos")
+            Arg::new("pos")
                 .short('p')
                 .long("pos")
                 .value_name("VAL")
@@ -816,7 +816,7 @@ fn hide_possible_vals() {
                 .takes_value(true),
         )
         .arg(
-            Arg::with_name("cafe")
+            Arg::new("cafe")
                 .short('c')
                 .long("cafe")
                 .value_name("FILE")
@@ -838,7 +838,7 @@ fn issue_626_panic() {
     let app = App::new("ctest")
         .version("0.1")
         .set_term_width(52)
-        .arg(Arg::with_name("cafe")
+        .arg(Arg::new("cafe")
            .short('c')
            .long("cafe")
            .value_name("FILE")
@@ -860,7 +860,7 @@ fn issue_626_variable_panic() {
         let _ = App::new("ctest")
             .version("0.1")
             .set_term_width(i)
-            .arg(Arg::with_name("cafe")
+            .arg(Arg::new("cafe")
                .short('c')
                .long("cafe")
                .value_name("FILE")
@@ -885,15 +885,14 @@ fn final_word_wrapping() {
 
 #[test]
 fn wrapping_newline_chars() {
-    let app =
-        App::new("ctest")
-            .version("0.1")
-            .set_term_width(60)
-            .arg(Arg::with_name("mode").about(
-                "x, max, maximum   20 characters, contains symbols.\n\
+    let app = App::new("ctest")
+        .version("0.1")
+        .set_term_width(60)
+        .arg(Arg::new("mode").about(
+            "x, max, maximum   20 characters, contains symbols.\n\
              l, long           Copy-friendly, 14 characters, contains symbols.\n\
              m, med, medium    Copy-friendly, 8 characters, contains symbols.\n",
-            ));
+        ));
     assert!(utils::compare_output(
         app,
         "ctest --help",
@@ -905,7 +904,7 @@ fn wrapping_newline_chars() {
 #[test]
 fn old_newline_chars() {
     let app = App::new("ctest").version("0.1").arg(
-        Arg::with_name("mode")
+        Arg::new("mode")
             .short('m')
             .about("Some help with some wrapping\n(Defaults to something)"),
     );
@@ -925,7 +924,7 @@ fn issue_688_hidden_pos_vals() {
             .version("0.1")
 			.set_term_width(120)
 			.setting(AppSettings::HidePossibleValuesInHelp)
-			.arg(Arg::with_name("filter")
+			.arg(Arg::new("filter")
 				.about("Sets the filter, or sampling method, to use for interpolation when resizing the particle \
                 images. The default is Linear (Bilinear). [possible values: Nearest, Linear, Cubic, Gaussian, Lanczos3]")
 				.long("filter")
@@ -941,7 +940,7 @@ fn issue_688_hidden_pos_vals() {
     let app2 = App::new("ctest")
             .version("0.1")
 			.set_term_width(120)
-			.arg(Arg::with_name("filter")
+			.arg(Arg::new("filter")
 				.about("Sets the filter, or sampling method, to use for interpolation when resizing the particle \
                 images. The default is Linear (Bilinear).")
 				.long("filter")
@@ -957,7 +956,7 @@ fn issue_688_hidden_pos_vals() {
     let app3 = App::new("ctest")
             .version("0.1")
 			.set_term_width(120)
-			.arg(Arg::with_name("filter")
+			.arg(Arg::new("filter")
 				.about("Sets the filter, or sampling method, to use for interpolation when resizing the particle \
                 images. The default is Linear (Bilinear). [possible values: Nearest, Linear, Cubic, Gaussian, Lanczos3]")
 				.long("filter")
@@ -976,24 +975,24 @@ fn issue_702_multiple_values() {
         .version("1.0")
         .author("foo")
         .about("bar")
-        .arg(Arg::with_name("arg1").about("some option"))
-        .arg(Arg::with_name("arg2").multiple(true).about("some option"))
+        .arg(Arg::new("arg1").about("some option"))
+        .arg(Arg::new("arg2").multiple(true).about("some option"))
         .arg(
-            Arg::with_name("some")
+            Arg::new("some")
                 .about("some option")
                 .short('s')
                 .long("some")
                 .takes_value(true),
         )
         .arg(
-            Arg::with_name("other")
+            Arg::new("other")
                 .about("some other option")
                 .short('o')
                 .long("other")
                 .takes_value(true),
         )
         .arg(
-            Arg::with_name("label")
+            Arg::new("label")
                 .about("a label")
                 .short('l')
                 .long("label")
@@ -1012,7 +1011,7 @@ fn long_about() {
         .long_about(
             "something really really long, with\nmultiple lines of text\nthat should be displayed",
         )
-        .arg(Arg::with_name("arg1").about("some option"));
+        .arg(Arg::new("arg1").about("some option"));
     assert!(utils::compare_output(
         app,
         "myapp --help",
@@ -1026,7 +1025,7 @@ fn issue_760() {
     let app = App::new("ctest")
         .version("0.1")
         .arg(
-            Arg::with_name("option")
+            Arg::new("option")
                 .about("tests options")
                 .short('o')
                 .long("option")
@@ -1035,7 +1034,7 @@ fn issue_760() {
                 .number_of_values(1),
         )
         .arg(
-            Arg::with_name("opt")
+            Arg::new("opt")
                 .about("tests options")
                 .short('O')
                 .long("opt")
@@ -1096,7 +1095,7 @@ fn sc_negates_reqs() {
         .version("1.0")
         .setting(AppSettings::SubcommandsNegateReqs)
         .arg("-o, --opt <FILE> 'tests options'")
-        .arg(Arg::with_name("PATH").about("help"))
+        .arg(Arg::new("PATH").about("help"))
         .subcommand(App::new("test"));
     assert!(utils::compare_output(
         app,
@@ -1112,7 +1111,7 @@ fn hidden_args() {
         .version("1.0")
         .arg("-f, --flag 'testing flags'")
         .arg("-o, --opt [FILE] 'tests options'")
-        .arg(Arg::with_name("pos").hidden(true));
+        .arg(Arg::new("pos").hidden(true));
     assert!(utils::compare_output(
         app,
         "prog --help",
@@ -1128,7 +1127,7 @@ fn args_negate_sc() {
         .setting(AppSettings::ArgsNegateSubcommands)
         .arg("-f, --flag 'testing flags'")
         .arg("-o, --opt [FILE] 'tests options'")
-        .arg(Arg::with_name("PATH").about("help"))
+        .arg(Arg::new("PATH").about("help"))
         .subcommand(App::new("test"));
     assert!(utils::compare_output(
         app,
@@ -1144,7 +1143,7 @@ fn issue_1046_hidden_scs() {
         .version("1.0")
         .arg("-f, --flag 'testing flags'")
         .arg("-o, --opt [FILE] 'tests options'")
-        .arg(Arg::with_name("PATH").about("some"))
+        .arg(Arg::new("PATH").about("some"))
         .subcommand(App::new("test").setting(AppSettings::Hidden));
     assert!(utils::compare_output(
         app,
@@ -1188,7 +1187,7 @@ fn customize_version_and_help() {
 
 #[test]
 fn arg_short_conflict_with_help() {
-    let app = App::new("conflict").arg(Arg::with_name("home").short('h'));
+    let app = App::new("conflict").arg(Arg::new("home").short('h'));
 
     assert!(utils::compare_output(
         app,
@@ -1203,7 +1202,7 @@ fn arg_short_conflict_with_help() {
 #[should_panic = "Short option names must be unique for each argument, but '-h' is in use by both 'home' and 'help'"]
 fn arg_short_conflict_with_help_mut_arg() {
     let _ = App::new("conflict")
-        .arg(Arg::with_name("home").short('h'))
+        .arg(Arg::new("home").short('h'))
         .mut_arg("help", |h| h.short('h'))
         .try_get_matches_from(vec![""]);
 }
@@ -1212,14 +1211,9 @@ fn arg_short_conflict_with_help_mut_arg() {
 fn last_arg_mult_usage() {
     let app = App::new("last")
         .version("0.1")
-        .arg(Arg::with_name("TARGET").required(true).about("some"))
-        .arg(Arg::with_name("CORPUS").about("some"))
-        .arg(
-            Arg::with_name("ARGS")
-                .multiple(true)
-                .last(true)
-                .about("some"),
-        );
+        .arg(Arg::new("TARGET").required(true).about("some"))
+        .arg(Arg::new("CORPUS").about("some"))
+        .arg(Arg::new("ARGS").multiple(true).last(true).about("some"));
     assert!(utils::compare_output(app, "last --help", LAST_ARG, false));
 }
 
@@ -1227,10 +1221,10 @@ fn last_arg_mult_usage() {
 fn last_arg_mult_usage_req() {
     let app = App::new("last")
         .version("0.1")
-        .arg(Arg::with_name("TARGET").required(true).about("some"))
-        .arg(Arg::with_name("CORPUS").about("some"))
+        .arg(Arg::new("TARGET").required(true).about("some"))
+        .arg(Arg::new("CORPUS").about("some"))
         .arg(
-            Arg::with_name("ARGS")
+            Arg::new("ARGS")
                 .multiple(true)
                 .last(true)
                 .required(true)
@@ -1249,10 +1243,10 @@ fn last_arg_mult_usage_req_with_sc() {
     let app = App::new("last")
         .version("0.1")
         .setting(AppSettings::SubcommandsNegateReqs)
-        .arg(Arg::with_name("TARGET").required(true).about("some"))
-        .arg(Arg::with_name("CORPUS").about("some"))
+        .arg(Arg::new("TARGET").required(true).about("some"))
+        .arg(Arg::new("CORPUS").about("some"))
         .arg(
-            Arg::with_name("ARGS")
+            Arg::new("ARGS")
                 .multiple(true)
                 .last(true)
                 .required(true)
@@ -1272,14 +1266,9 @@ fn last_arg_mult_usage_with_sc() {
     let app = App::new("last")
         .version("0.1")
         .setting(AppSettings::ArgsNegateSubcommands)
-        .arg(Arg::with_name("TARGET").required(true).about("some"))
-        .arg(Arg::with_name("CORPUS").about("some"))
-        .arg(
-            Arg::with_name("ARGS")
-                .multiple(true)
-                .last(true)
-                .about("some"),
-        )
+        .arg(Arg::new("TARGET").required(true).about("some"))
+        .arg(Arg::new("CORPUS").about("some"))
+        .arg(Arg::new("ARGS").multiple(true).last(true).about("some"))
         .subcommand(App::new("test").about("some"));
     assert!(utils::compare_output(
         app,
@@ -1292,7 +1281,7 @@ fn last_arg_mult_usage_with_sc() {
 #[test]
 fn hidden_default_val() {
     let app1 = App::new("default").version("0.1").set_term_width(120).arg(
-        Arg::with_name("argument")
+        Arg::new("argument")
             .about("Pass an argument to the program. [default: default-argument]")
             .long("arg")
             .default_value("default-argument")
@@ -1306,7 +1295,7 @@ fn hidden_default_val() {
     ));
 
     let app2 = App::new("default").version("0.1").set_term_width(120).arg(
-        Arg::with_name("argument")
+        Arg::new("argument")
             .about("Pass an argument to the program.")
             .long("arg")
             .default_value("default-argument"),
@@ -1397,7 +1386,7 @@ fn hide_env_vals() {
     let app = App::new("ctest")
         .version("0.1")
         .arg(
-            Arg::with_name("pos")
+            Arg::new("pos")
                 .short('p')
                 .long("pos")
                 .value_name("VAL")
@@ -1406,7 +1395,7 @@ fn hide_env_vals() {
                 .takes_value(true),
         )
         .arg(
-            Arg::with_name("cafe")
+            Arg::new("cafe")
                 .short('c')
                 .long("cafe")
                 .value_name("FILE")
@@ -1431,7 +1420,7 @@ fn show_env_vals() {
     let app = App::new("ctest")
         .version("0.1")
         .arg(
-            Arg::with_name("pos")
+            Arg::new("pos")
                 .short('p')
                 .long("pos")
                 .value_name("VAL")
@@ -1440,7 +1429,7 @@ fn show_env_vals() {
                 .takes_value(true),
         )
         .arg(
-            Arg::with_name("cafe")
+            Arg::new("cafe")
                 .short('c')
                 .long("cafe")
                 .value_name("FILE")
@@ -1470,7 +1459,7 @@ fn custom_headers_headers() {
         )
         .help_heading("NETWORKING")
         .arg(
-            Arg::with_name("no-proxy")
+            Arg::new("no-proxy")
                 .short('n')
                 .long("no-proxy")
                 .about("Do not use system proxy settings"),
@@ -1518,7 +1507,7 @@ fn multiple_custom_help_headers() {
         )
         .help_heading("NETWORKING")
         .arg(
-            Arg::with_name("no-proxy")
+            Arg::new("no-proxy")
                 .short('n')
                 .long("no-proxy")
                 .about("Do not use system proxy settings"),
@@ -1529,7 +1518,7 @@ fn multiple_custom_help_headers() {
         ))
         .stop_custom_headings()
         .arg(
-            Arg::with_name("speed")
+            Arg::new("speed")
                 .long("speed")
                 .short('s')
                 .value_name("SPEED")
@@ -1604,14 +1593,14 @@ fn show_short_about_issue_897() {
 #[test]
 fn issue_1364_no_short_options() {
     let app = App::new("demo")
-        .arg(Arg::with_name("foo").short('f'))
+        .arg(Arg::new("foo").short('f'))
         .arg(
-            Arg::with_name("baz")
+            Arg::new("baz")
                 .short('z')
                 .value_name("BAZ")
                 .hidden_short_help(true),
         )
-        .arg(Arg::with_name("files").value_name("FILES").multiple(true));
+        .arg(Arg::new("files").value_name("FILES").multiple(true));
 
     assert!(utils::compare_output(app, "demo -h", ISSUE_1364, false));
 }
@@ -1620,11 +1609,11 @@ fn issue_1364_no_short_options() {
 #[test]
 fn issue_1487() {
     let app = App::new("test")
-        .arg(Arg::with_name("arg1")
+        .arg(Arg::new("arg1")
             .group("group1"))
-        .arg(Arg::with_name("arg2")
+        .arg(Arg::new("arg2")
             .group("group1"))
-        .group(ArgGroup::with_name("group1")
+        .group(ArgGroup::new("group1")
             .args(&["arg1", "arg2"])
             .required(true));
     assert!(utils::compare_output(app, "ctest -h", ISSUE_1487, false));
@@ -1636,7 +1625,7 @@ fn issue_1487() {
 fn help_required_but_not_given() {
     App::new("myapp")
         .setting(AppSettings::HelpRequired)
-        .arg(Arg::with_name("foo"))
+        .arg(Arg::new("foo"))
         .get_matches();
 }
 
@@ -1645,7 +1634,7 @@ fn help_required_but_not_given() {
 #[should_panic = "AppSettings::HelpRequired is enabled for the App"]
 fn help_required_but_not_given_settings_after_args() {
     App::new("myapp")
-        .arg(Arg::with_name("foo"))
+        .arg(Arg::new("foo"))
         .setting(AppSettings::HelpRequired)
         .get_matches();
 }
@@ -1656,8 +1645,8 @@ fn help_required_but_not_given_settings_after_args() {
 fn help_required_but_not_given_for_one_of_two_arguments() {
     App::new("myapp")
         .setting(AppSettings::HelpRequired)
-        .arg(Arg::with_name("foo"))
-        .arg(Arg::with_name("bar").about("It does bar stuff"))
+        .arg(Arg::new("foo"))
+        .arg(Arg::new("bar").about("It does bar stuff"))
         .get_matches();
 }
 
@@ -1665,11 +1654,11 @@ fn help_required_but_not_given_for_one_of_two_arguments() {
 fn help_required_locally_but_not_given_for_subcommand() {
     App::new("myapp")
         .setting(AppSettings::HelpRequired)
-        .arg(Arg::with_name("foo").about("It does foo stuff"))
+        .arg(Arg::new("foo").about("It does foo stuff"))
         .subcommand(
             App::new("bar")
-                .arg(Arg::with_name("create").about("creates bar"))
-                .arg(Arg::with_name("delete")),
+                .arg(Arg::new("create").about("creates bar"))
+                .arg(Arg::new("delete")),
         )
         .get_matches();
 }
@@ -1680,11 +1669,11 @@ fn help_required_locally_but_not_given_for_subcommand() {
 fn help_required_globally_but_not_given_for_subcommand() {
     App::new("myapp")
         .global_setting(AppSettings::HelpRequired)
-        .arg(Arg::with_name("foo").about("It does foo stuff"))
+        .arg(Arg::new("foo").about("It does foo stuff"))
         .subcommand(
             App::new("bar")
-                .arg(Arg::with_name("create").about("creates bar"))
-                .arg(Arg::with_name("delete")),
+                .arg(Arg::new("create").about("creates bar"))
+                .arg(Arg::new("delete")),
         )
         .get_matches();
 }
@@ -1693,11 +1682,11 @@ fn help_required_globally_but_not_given_for_subcommand() {
 fn help_required_and_given_for_subcommand() {
     App::new("myapp")
         .setting(AppSettings::HelpRequired)
-        .arg(Arg::with_name("foo").about("It does foo stuff"))
+        .arg(Arg::new("foo").about("It does foo stuff"))
         .subcommand(
             App::new("bar")
-                .arg(Arg::with_name("create").about("creates bar"))
-                .arg(Arg::with_name("delete").about("deletes bar")),
+                .arg(Arg::new("create").about("creates bar"))
+                .arg(Arg::new("delete").about("deletes bar")),
         )
         .get_matches();
 }
@@ -1706,7 +1695,7 @@ fn help_required_and_given_for_subcommand() {
 fn help_required_and_given() {
     App::new("myapp")
         .setting(AppSettings::HelpRequired)
-        .arg(Arg::with_name("foo").about("It does foo stuff"))
+        .arg(Arg::new("foo").about("It does foo stuff"))
         .get_matches();
 }
 
diff --git a/tests/hidden_args.rs b/tests/hidden_args.rs
index 9c32aec3..ee98ab64 100644
--- a/tests/hidden_args.rs
+++ b/tests/hidden_args.rs
@@ -27,7 +27,7 @@ fn hidden_args() {
             Arg::from("-f, --flag 'some flag'").hidden(true),
             Arg::from("-F, --flag2 'some other flag'"),
             Arg::from("--option [opt] 'some option'"),
-            Arg::with_name("DUMMY").hidden(true),
+            Arg::new("DUMMY").hidden(true),
         ]);
     assert!(utils::compare_output(
         app,
@@ -77,12 +77,12 @@ fn hidden_short_args() {
         .author("Steve P.")
         .version("2.31.2")
         .args(&[
-            Arg::with_name("cfg")
+            Arg::new("cfg")
                 .short('c')
                 .long("config")
                 .hidden_short_help(true)
                 .about("Some help text describing the --config arg"),
-            Arg::with_name("visible")
+            Arg::new("visible")
                 .short('v')
                 .long("visible")
                 .about("This text should be visible"),
@@ -104,12 +104,12 @@ fn hidden_short_args_long_help() {
         .author("Steve P.")
         .version("2.31.2")
         .args(&[
-            Arg::with_name("cfg")
+            Arg::new("cfg")
                 .short('c')
                 .long("config")
                 .hidden_short_help(true)
                 .about("Some help text describing the --config arg"),
-            Arg::with_name("visible")
+            Arg::new("visible")
                 .short('v')
                 .long("visible")
                 .about("This text should be visible"),
@@ -147,12 +147,12 @@ fn hidden_long_args() {
         .author("Steve P.")
         .version("2.31.2")
         .args(&[
-            Arg::with_name("cfg")
+            Arg::new("cfg")
                 .short('c')
                 .long("config")
                 .hidden_long_help(true)
                 .about("Some help text describing the --config arg"),
-            Arg::with_name("visible")
+            Arg::new("visible")
                 .short('v')
                 .long("visible")
                 .about("This text should be visible"),
@@ -186,12 +186,12 @@ fn hidden_long_args_short_help() {
         .author("Steve P.")
         .version("2.31.2")
         .args(&[
-            Arg::with_name("cfg")
+            Arg::new("cfg")
                 .short('c')
                 .long("config")
                 .hidden_long_help(true)
                 .about("Some help text describing the --config arg"),
-            Arg::with_name("visible")
+            Arg::new("visible")
                 .short('v')
                 .long("visible")
                 .about("This text should be visible"),
diff --git a/tests/indices.rs b/tests/indices.rs
index 1e68c187..1702d4d3 100644
--- a/tests/indices.rs
+++ b/tests/indices.rs
@@ -6,13 +6,13 @@ use clap::{App, Arg};
 fn indices_mult_opts() {
     let m = App::new("ind")
         .arg(
-            Arg::with_name("exclude")
+            Arg::new("exclude")
                 .short('e')
                 .takes_value(true)
                 .multiple(true),
         )
         .arg(
-            Arg::with_name("include")
+            Arg::new("include")
                 .short('i')
                 .takes_value(true)
                 .multiple(true),
@@ -33,13 +33,13 @@ fn indices_mult_opts() {
 fn index_mult_opts() {
     let m = App::new("ind")
         .arg(
-            Arg::with_name("exclude")
+            Arg::new("exclude")
                 .short('e')
                 .takes_value(true)
                 .multiple(true),
         )
         .arg(
-            Arg::with_name("include")
+            Arg::new("include")
                 .short('i')
                 .takes_value(true)
                 .multiple(true),
@@ -53,8 +53,8 @@ fn index_mult_opts() {
 #[test]
 fn index_flag() {
     let m = App::new("ind")
-        .arg(Arg::with_name("exclude").short('e'))
-        .arg(Arg::with_name("include").short('i'))
+        .arg(Arg::new("exclude").short('e'))
+        .arg(Arg::new("include").short('i'))
         .get_matches_from(vec!["ind", "-e", "-i"]);
 
     assert_eq!(m.index_of("exclude"), Some(1));
@@ -64,16 +64,8 @@ fn index_flag() {
 #[test]
 fn index_flags() {
     let m = App::new("ind")
-        .arg(
-            Arg::with_name("exclude")
-                .short('e')
-                .multiple_occurrences(true),
-        )
-        .arg(
-            Arg::with_name("include")
-                .short('i')
-                .multiple_occurrences(true),
-        )
+        .arg(Arg::new("exclude").short('e').multiple_occurrences(true))
+        .arg(Arg::new("include").short('i').multiple_occurrences(true))
         .get_matches_from(vec!["ind", "-e", "-i", "-e", "-e", "-i"]);
 
     assert_eq!(m.index_of("exclude"), Some(1));
@@ -83,16 +75,8 @@ fn index_flags() {
 #[test]
 fn indices_mult_flags() {
     let m = App::new("ind")
-        .arg(
-            Arg::with_name("exclude")
-                .short('e')
-                .multiple_occurrences(true),
-        )
-        .arg(
-            Arg::with_name("include")
-                .short('i')
-                .multiple_occurrences(true),
-        )
+        .arg(Arg::new("exclude").short('e').multiple_occurrences(true))
+        .arg(Arg::new("include").short('i').multiple_occurrences(true))
         .get_matches_from(vec!["ind", "-e", "-i", "-e", "-e", "-i"]);
 
     assert_eq!(
@@ -108,16 +92,8 @@ fn indices_mult_flags() {
 #[test]
 fn indices_mult_flags_combined() {
     let m = App::new("ind")
-        .arg(
-            Arg::with_name("exclude")
-                .short('e')
-                .multiple_occurrences(true),
-        )
-        .arg(
-            Arg::with_name("include")
-                .short('i')
-                .multiple_occurrences(true),
-        )
+        .arg(Arg::new("exclude").short('e').multiple_occurrences(true))
+        .arg(Arg::new("include").short('i').multiple_occurrences(true))
         .get_matches_from(vec!["ind", "-eieei"]);
 
     assert_eq!(
@@ -133,17 +109,9 @@ fn indices_mult_flags_combined() {
 #[test]
 fn indices_mult_flags_opt_combined() {
     let m = App::new("ind")
-        .arg(
-            Arg::with_name("exclude")
-                .short('e')
-                .multiple_occurrences(true),
-        )
-        .arg(
-            Arg::with_name("include")
-                .short('i')
-                .multiple_occurrences(true),
-        )
-        .arg(Arg::with_name("option").short('o').takes_value(true))
+        .arg(Arg::new("exclude").short('e').multiple_occurrences(true))
+        .arg(Arg::new("include").short('i').multiple_occurrences(true))
+        .arg(Arg::new("option").short('o').takes_value(true))
         .get_matches_from(vec!["ind", "-eieeio", "val"]);
 
     assert_eq!(
@@ -160,17 +128,9 @@ fn indices_mult_flags_opt_combined() {
 #[test]
 fn indices_mult_flags_opt_combined_eq() {
     let m = App::new("ind")
-        .arg(
-            Arg::with_name("exclude")
-                .short('e')
-                .multiple_occurrences(true),
-        )
-        .arg(
-            Arg::with_name("include")
-                .short('i')
-                .multiple_occurrences(true),
-        )
-        .arg(Arg::with_name("option").short('o').takes_value(true))
+        .arg(Arg::new("exclude").short('e').multiple_occurrences(true))
+        .arg(Arg::new("include").short('i').multiple_occurrences(true))
+        .arg(Arg::new("option").short('o').takes_value(true))
         .get_matches_from(vec!["ind", "-eieeio=val"]);
 
     assert_eq!(
@@ -188,7 +148,7 @@ fn indices_mult_flags_opt_combined_eq() {
 fn indices_mult_opt_value_delim_eq() {
     let m = App::new("myapp")
         .arg(
-            Arg::with_name("option")
+            Arg::new("option")
                 .short('o')
                 .takes_value(true)
                 .use_delimiter(true)
@@ -205,7 +165,7 @@ fn indices_mult_opt_value_delim_eq() {
 fn indices_mult_opt_value_no_delim_eq() {
     let m = App::new("myapp")
         .arg(
-            Arg::with_name("option")
+            Arg::new("option")
                 .short('o')
                 .takes_value(true)
                 .multiple(true),
@@ -218,12 +178,12 @@ fn indices_mult_opt_value_no_delim_eq() {
 fn indices_mult_opt_mult_flag() {
     let m = App::new("myapp")
         .arg(
-            Arg::with_name("option")
+            Arg::new("option")
                 .short('o')
                 .takes_value(true)
                 .multiple_occurrences(true),
         )
-        .arg(Arg::with_name("flag").short('f').multiple_occurrences(true))
+        .arg(Arg::new("flag").short('f').multiple_occurrences(true))
         .get_matches_from(vec!["myapp", "-o", "val1", "-f", "-o", "val2", "-f"]);
 
     assert_eq!(m.indices_of("option").unwrap().collect::<Vec<_>>(), &[2, 5]);
diff --git a/tests/multiple_occurrences.rs b/tests/multiple_occurrences.rs
index 9a6fbe55..36805bc0 100644
--- a/tests/multiple_occurrences.rs
+++ b/tests/multiple_occurrences.rs
@@ -78,7 +78,7 @@ fn multiple_occurrences_of_flags_large_quantity() {
 #[test]
 fn multiple_occurrences_of_before_env() {
     let app = App::new("mo_before_env").arg(
-        Arg::with_name("verbose")
+        Arg::new("verbose")
             .env("VERBOSE")
             .short('v')
             .long("verbose")
@@ -105,7 +105,7 @@ fn multiple_occurrences_of_before_env() {
 #[test]
 fn multiple_occurrences_of_after_env() {
     let app = App::new("mo_after_env").arg(
-        Arg::with_name("verbose")
+        Arg::new("verbose")
             .short('v')
             .long("verbose")
             .takes_value(false)
diff --git a/tests/multiple_values.rs b/tests/multiple_values.rs
index 2d481d00..ba0f8a05 100644
--- a/tests/multiple_values.rs
+++ b/tests/multiple_values.rs
@@ -4,7 +4,7 @@ use clap::{App, Arg, ErrorKind};
 fn option_long() {
     let m = App::new("multiple_values")
         .arg(
-            Arg::with_name("option")
+            Arg::new("option")
                 .long("option")
                 .about("multiple options")
                 .takes_value(true)
@@ -29,7 +29,7 @@ fn option_long() {
 fn option_short() {
     let m = App::new("multiple_values")
         .arg(
-            Arg::with_name("option")
+            Arg::new("option")
                 .short('o')
                 .about("multiple options")
                 .takes_value(true)
@@ -52,7 +52,7 @@ fn option_short() {
 fn option_mixed() {
     let m = App::new("multiple_values")
         .arg(
-            Arg::with_name("option")
+            Arg::new("option")
                 .long("option")
                 .short('o')
                 .about("multiple options")
@@ -78,7 +78,7 @@ fn option_mixed() {
 fn option_exact_exact() {
     let m = App::new("multiple_values")
         .arg(
-            Arg::with_name("option")
+            Arg::new("option")
                 .short('o')
                 .about("multiple options")
                 .takes_value(true)
@@ -102,7 +102,7 @@ fn option_exact_exact() {
 fn option_exact_exact_not_mult() {
     let m = App::new("multiple_values")
         .arg(
-            Arg::with_name("option")
+            Arg::new("option")
                 .short('o')
                 .about("multiple options")
                 .takes_value(true)
@@ -125,7 +125,7 @@ fn option_exact_exact_not_mult() {
 fn option_exact_exact_mult() {
     let m = App::new("multiple_values")
         .arg(
-            Arg::with_name("option")
+            Arg::new("option")
                 .short('o')
                 .about("multiple options")
                 .takes_value(true)
@@ -151,7 +151,7 @@ fn option_exact_exact_mult() {
 fn option_exact_less() {
     let m = App::new("multiple_values")
         .arg(
-            Arg::with_name("option")
+            Arg::new("option")
                 .short('o')
                 .about("multiple options")
                 .takes_value(true)
@@ -168,7 +168,7 @@ fn option_exact_less() {
 fn option_exact_more() {
     let m = App::new("multiple_values")
         .arg(
-            Arg::with_name("option")
+            Arg::new("option")
                 .short('o')
                 .about("multiple options")
                 .takes_value(true)
@@ -187,7 +187,7 @@ fn option_exact_more() {
 fn option_min_exact() {
     let m = App::new("multiple_values")
         .arg(
-            Arg::with_name("option")
+            Arg::new("option")
                 .short('o')
                 .about("multiple options")
                 .takes_value(true)
@@ -211,7 +211,7 @@ fn option_min_exact() {
 fn option_min_less() {
     let m = App::new("multiple_values")
         .arg(
-            Arg::with_name("option")
+            Arg::new("option")
                 .short('o')
                 .about("multiple options")
                 .takes_value(true)
@@ -227,9 +227,9 @@ fn option_min_less() {
 #[test]
 fn option_short_min_more_mult_occurs() {
     let res = App::new("multiple_values")
-        .arg(Arg::with_name("arg").required(true))
+        .arg(Arg::new("arg").required(true))
         .arg(
-            Arg::with_name("option")
+            Arg::new("option")
                 .short('o')
                 .about("multiple options")
                 .takes_value(true)
@@ -256,9 +256,9 @@ fn option_short_min_more_mult_occurs() {
 #[test]
 fn option_short_min_more_single_occur() {
     let res = App::new("multiple_values")
-        .arg(Arg::with_name("arg").required(true))
+        .arg(Arg::new("arg").required(true))
         .arg(
-            Arg::with_name("option")
+            Arg::new("option")
                 .short('o')
                 .about("multiple options")
                 .takes_value(true)
@@ -284,7 +284,7 @@ fn option_short_min_more_single_occur() {
 fn option_max_exact() {
     let m = App::new("multiple_values")
         .arg(
-            Arg::with_name("option")
+            Arg::new("option")
                 .short('o')
                 .about("multiple options")
                 .takes_value(true)
@@ -308,7 +308,7 @@ fn option_max_exact() {
 fn option_max_less() {
     let m = App::new("multiple_values")
         .arg(
-            Arg::with_name("option")
+            Arg::new("option")
                 .short('o')
                 .about("multiple options")
                 .takes_value(true)
@@ -332,7 +332,7 @@ fn option_max_less() {
 fn option_max_more() {
     let m = App::new("multiple_values")
         .arg(
-            Arg::with_name("option")
+            Arg::new("option")
                 .short('o')
                 .about("multiple options")
                 .takes_value(true)
@@ -350,11 +350,7 @@ fn option_max_more() {
 #[test]
 fn positional() {
     let m = App::new("multiple_values")
-        .arg(
-            Arg::with_name("pos")
-                .about("multiple positionals")
-                .multiple(true),
-        )
+        .arg(Arg::new("pos").about("multiple positionals").multiple(true))
         .try_get_matches_from(vec!["myprog", "val1", "val2", "val3"]);
 
     assert!(m.is_ok());
@@ -372,7 +368,7 @@ fn positional() {
 fn positional_exact_exact() {
     let m = App::new("multiple_values")
         .arg(
-            Arg::with_name("pos")
+            Arg::new("pos")
                 .about("multiple positionals")
                 .number_of_values(3),
         )
@@ -393,7 +389,7 @@ fn positional_exact_exact() {
 fn positional_exact_less() {
     let m = App::new("multiple_values")
         .arg(
-            Arg::with_name("pos")
+            Arg::new("pos")
                 .about("multiple positionals")
                 .number_of_values(3),
         )
@@ -407,7 +403,7 @@ fn positional_exact_less() {
 fn positional_exact_more() {
     let m = App::new("multiple_values")
         .arg(
-            Arg::with_name("pos")
+            Arg::new("pos")
                 .about("multiple positionals")
                 .number_of_values(3),
         )
@@ -420,11 +416,7 @@ fn positional_exact_more() {
 #[test]
 fn positional_min_exact() {
     let m = App::new("multiple_values")
-        .arg(
-            Arg::with_name("pos")
-                .about("multiple positionals")
-                .min_values(3),
-        )
+        .arg(Arg::new("pos").about("multiple positionals").min_values(3))
         .try_get_matches_from(vec!["myprog", "val1", "val2", "val3"]);
 
     assert!(m.is_ok());
@@ -441,11 +433,7 @@ fn positional_min_exact() {
 #[test]
 fn positional_min_less() {
     let m = App::new("multiple_values")
-        .arg(
-            Arg::with_name("pos")
-                .about("multiple positionals")
-                .min_values(3),
-        )
+        .arg(Arg::new("pos").about("multiple positionals").min_values(3))
         .try_get_matches_from(vec!["myprog", "val1", "val2"]);
 
     assert!(m.is_err());
@@ -455,11 +443,7 @@ fn positional_min_less() {
 #[test]
 fn positional_min_more() {
     let m = App::new("multiple_values")
-        .arg(
-            Arg::with_name("pos")
-                .about("multiple positionals")
-                .min_values(3),
-        )
+        .arg(Arg::new("pos").about("multiple positionals").min_values(3))
         .try_get_matches_from(vec!["myprog", "val1", "val2", "val3", "val4"]);
 
     assert!(m.is_ok());
@@ -476,11 +460,7 @@ fn positional_min_more() {
 #[test]
 fn positional_max_exact() {
     let m = App::new("multiple_values")
-        .arg(
-            Arg::with_name("pos")
-                .about("multiple positionals")
-                .max_values(3),
-        )
+        .arg(Arg::new("pos").about("multiple positionals").max_values(3))
         .try_get_matches_from(vec!["myprog", "val1", "val2", "val3"]);
 
     assert!(m.is_ok());
@@ -497,11 +477,7 @@ fn positional_max_exact() {
 #[test]
 fn positional_max_less() {
     let m = App::new("multiple_values")
-        .arg(
-            Arg::with_name("pos")
-                .about("multiple positionals")
-                .max_values(3),
-        )
+        .arg(Arg::new("pos").about("multiple positionals").max_values(3))
         .try_get_matches_from(vec!["myprog", "val1", "val2"]);
 
     assert!(m.is_ok());
@@ -518,11 +494,7 @@ fn positional_max_less() {
 #[test]
 fn positional_max_more() {
     let m = App::new("multiple_values")
-        .arg(
-            Arg::with_name("pos")
-                .about("multiple positionals")
-                .max_values(3),
-        )
+        .arg(Arg::new("pos").about("multiple positionals").max_values(3))
         .try_get_matches_from(vec!["myprog", "val1", "val2", "val3", "val4"]);
 
     assert!(m.is_err());
@@ -533,7 +505,7 @@ fn positional_max_more() {
 fn sep_long_equals() {
     let m = App::new("multiple_values")
         .arg(
-            Arg::with_name("option")
+            Arg::new("option")
                 .long("option")
                 .use_delimiter(true)
                 .about("multiple options")
@@ -557,7 +529,7 @@ fn sep_long_equals() {
 fn sep_long_space() {
     let m = App::new("multiple_values")
         .arg(
-            Arg::with_name("option")
+            Arg::new("option")
                 .long("option")
                 .use_delimiter(true)
                 .about("multiple options")
@@ -581,7 +553,7 @@ fn sep_long_space() {
 fn sep_short_equals() {
     let m = App::new("multiple_values")
         .arg(
-            Arg::with_name("option")
+            Arg::new("option")
                 .short('o')
                 .about("multiple options")
                 .use_delimiter(true)
@@ -605,7 +577,7 @@ fn sep_short_equals() {
 fn sep_short_space() {
     let m = App::new("multiple_values")
         .arg(
-            Arg::with_name("option")
+            Arg::new("option")
                 .short('o')
                 .about("multiple options")
                 .use_delimiter(true)
@@ -629,7 +601,7 @@ fn sep_short_space() {
 fn sep_short_no_space() {
     let m = App::new("multiple_values")
         .arg(
-            Arg::with_name("option")
+            Arg::new("option")
                 .short('o')
                 .about("multiple options")
                 .use_delimiter(true)
@@ -653,7 +625,7 @@ fn sep_short_no_space() {
 fn sep_positional() {
     let m = App::new("multiple_values")
         .arg(
-            Arg::with_name("option")
+            Arg::new("option")
                 .about("multiple options")
                 .use_delimiter(true)
                 .multiple(true),
@@ -675,7 +647,7 @@ fn sep_positional() {
 fn different_sep() {
     let m = App::new("multiple_values")
         .arg(
-            Arg::with_name("option")
+            Arg::new("option")
                 .long("option")
                 .about("multiple options")
                 .takes_value(true)
@@ -698,7 +670,7 @@ fn different_sep() {
 fn different_sep_positional() {
     let m = App::new("multiple_values")
         .arg(
-            Arg::with_name("option")
+            Arg::new("option")
                 .about("multiple options")
                 .value_delimiter(";"),
         )
@@ -719,7 +691,7 @@ fn different_sep_positional() {
 fn no_sep() {
     let m = App::new("multiple_values")
         .arg(
-            Arg::with_name("option")
+            Arg::new("option")
                 .long("option")
                 .about("multiple options")
                 .takes_value(true)
@@ -739,7 +711,7 @@ fn no_sep() {
 fn no_sep_positional() {
     let m = App::new("multiple_values")
         .arg(
-            Arg::with_name("option")
+            Arg::new("option")
                 .about("multiple options")
                 .use_delimiter(false),
         )
@@ -757,14 +729,14 @@ fn no_sep_positional() {
 fn req_delimiter_long() {
     let m = App::new("multiple_values")
         .arg(
-            Arg::with_name("option")
+            Arg::new("option")
                 .long("option")
                 .multiple(true)
                 .use_delimiter(true)
                 .require_delimiter(true)
                 .takes_value(true),
         )
-        .arg(Arg::with_name("args").multiple(true).index(1))
+        .arg(Arg::new("args").multiple(true).index(1))
         .try_get_matches_from(vec!["", "--option", "val1", "val2", "val3"]);
 
     assert!(m.is_ok());
@@ -786,14 +758,14 @@ fn req_delimiter_long() {
 fn req_delimiter_long_with_equal() {
     let m = App::new("multiple_values")
         .arg(
-            Arg::with_name("option")
+            Arg::new("option")
                 .long("option")
                 .multiple(true)
                 .use_delimiter(true)
                 .require_delimiter(true)
                 .takes_value(true),
         )
-        .arg(Arg::with_name("args").multiple(true).index(1))
+        .arg(Arg::new("args").multiple(true).index(1))
         .try_get_matches_from(vec!["", "--option=val1", "val2", "val3"]);
 
     assert!(m.is_ok());
@@ -815,14 +787,14 @@ fn req_delimiter_long_with_equal() {
 fn req_delimiter_short_with_space() {
     let m = App::new("multiple_values")
         .arg(
-            Arg::with_name("option")
+            Arg::new("option")
                 .short('o')
                 .multiple(true)
                 .use_delimiter(true)
                 .require_delimiter(true)
                 .takes_value(true),
         )
-        .arg(Arg::with_name("args").multiple(true).index(1))
+        .arg(Arg::new("args").multiple(true).index(1))
         .try_get_matches_from(vec!["", "-o", "val1", "val2", "val3"]);
 
     assert!(m.is_ok());
@@ -844,14 +816,14 @@ fn req_delimiter_short_with_space() {
 fn req_delimiter_short_with_no_space() {
     let m = App::new("multiple_values")
         .arg(
-            Arg::with_name("option")
+            Arg::new("option")
                 .short('o')
                 .multiple(true)
                 .use_delimiter(true)
                 .require_delimiter(true)
                 .takes_value(true),
         )
-        .arg(Arg::with_name("args").multiple(true).index(1))
+        .arg(Arg::new("args").multiple(true).index(1))
         .try_get_matches_from(vec!["", "-oval1", "val2", "val3"]);
 
     assert!(m.is_ok());
@@ -873,14 +845,14 @@ fn req_delimiter_short_with_no_space() {
 fn req_delimiter_short_with_equal() {
     let m = App::new("multiple_values")
         .arg(
-            Arg::with_name("option")
+            Arg::new("option")
                 .short('o')
                 .multiple(true)
                 .use_delimiter(true)
                 .require_delimiter(true)
                 .takes_value(true),
         )
-        .arg(Arg::with_name("args").multiple(true).index(1))
+        .arg(Arg::new("args").multiple(true).index(1))
         .try_get_matches_from(vec!["", "-o=val1", "val2", "val3"]);
 
     assert!(m.is_ok());
@@ -902,7 +874,7 @@ fn req_delimiter_short_with_equal() {
 fn req_delimiter_complex() {
     let m = App::new("multiple_values")
         .arg(
-            Arg::with_name("option")
+            Arg::new("option")
                 .long("option")
                 .short('o')
                 .multiple(true)
@@ -910,7 +882,7 @@ fn req_delimiter_complex() {
                 .require_delimiter(true)
                 .takes_value(true),
         )
-        .arg(Arg::with_name("args").multiple(true).index(1))
+        .arg(Arg::new("args").multiple(true).index(1))
         .try_get_matches_from(vec![
             "",
             "val1",
@@ -970,13 +942,8 @@ positional argument (i.e the one with the highest index) *must* have \
 .required(true) or .last(true) set."]
 fn low_index_positional_not_required() {
     let _ = App::new("lip")
-        .arg(
-            Arg::with_name("files")
-                .index(1)
-                .required(true)
-                .multiple(true),
-        )
-        .arg(Arg::with_name("target").index(2))
+        .arg(Arg::new("files").index(1).required(true).multiple(true))
+        .arg(Arg::new("target").index(2))
         .try_get_matches_from(vec![""]);
 }
 
@@ -987,18 +954,8 @@ fn low_index_positional_not_required() {
 set is allowed per command, unless the second one also has .last(true) set"]
 fn low_index_positional_last_multiple_too() {
     let _ = App::new("lip")
-        .arg(
-            Arg::with_name("files")
-                .index(1)
-                .required(true)
-                .multiple(true),
-        )
-        .arg(
-            Arg::with_name("target")
-                .index(2)
-                .required(true)
-                .multiple(true),
-        )
+        .arg(Arg::new("files").index(1).required(true).multiple(true))
+        .arg(Arg::new("target").index(2).required(true).multiple(true))
         .try_get_matches_from(vec![""]);
 }
 
@@ -1009,27 +966,17 @@ fn low_index_positional_last_multiple_too() {
 last positional argument may be set to .multiple(true)"]
 fn low_index_positional_too_far_back() {
     let _ = App::new("lip")
-        .arg(
-            Arg::with_name("files")
-                .index(1)
-                .required(true)
-                .multiple(true),
-        )
-        .arg(Arg::with_name("target").required(true).index(2))
-        .arg(Arg::with_name("target2").required(true).index(3))
+        .arg(Arg::new("files").index(1).required(true).multiple(true))
+        .arg(Arg::new("target").required(true).index(2))
+        .arg(Arg::new("target2").required(true).index(3))
         .try_get_matches_from(vec![""]);
 }
 
 #[test]
 fn low_index_positional() {
     let m = App::new("lip")
-        .arg(
-            Arg::with_name("files")
-                .index(1)
-                .required(true)
-                .multiple(true),
-        )
-        .arg(Arg::with_name("target").index(2).required(true))
+        .arg(Arg::new("files").index(1).required(true).multiple(true))
+        .arg(Arg::new("target").index(2).required(true))
         .try_get_matches_from(vec!["lip", "file1", "file2", "file3", "target"]);
 
     assert!(m.is_ok(), "{:?}", m.unwrap_err().kind);
@@ -1051,13 +998,8 @@ fn low_index_positional_in_subcmd() {
     let m = App::new("lip")
         .subcommand(
             App::new("test")
-                .arg(
-                    Arg::with_name("files")
-                        .index(1)
-                        .required(true)
-                        .multiple(true),
-                )
-                .arg(Arg::with_name("target").index(2).required(true)),
+                .arg(Arg::new("files").index(1).required(true).multiple(true))
+                .arg(Arg::new("target").index(2).required(true)),
         )
         .try_get_matches_from(vec!["lip", "test", "file1", "file2", "file3", "target"]);
 
@@ -1079,14 +1021,9 @@ fn low_index_positional_in_subcmd() {
 #[test]
 fn low_index_positional_with_option() {
     let m = App::new("lip")
-        .arg(
-            Arg::with_name("files")
-                .required(true)
-                .index(1)
-                .multiple(true),
-        )
-        .arg(Arg::with_name("target").index(2).required(true))
-        .arg(Arg::with_name("opt").long("option").takes_value(true))
+        .arg(Arg::new("files").required(true).index(1).multiple(true))
+        .arg(Arg::new("target").index(2).required(true))
+        .arg(Arg::new("opt").long("option").takes_value(true))
         .try_get_matches_from(vec![
             "lip", "file1", "file2", "file3", "target", "--option", "test",
         ]);
@@ -1109,14 +1046,9 @@ fn low_index_positional_with_option() {
 #[test]
 fn low_index_positional_with_flag() {
     let m = App::new("lip")
-        .arg(
-            Arg::with_name("files")
-                .index(1)
-                .required(true)
-                .multiple(true),
-        )
-        .arg(Arg::with_name("target").index(2).required(true))
-        .arg(Arg::with_name("flg").long("flag"))
+        .arg(Arg::new("files").index(1).required(true).multiple(true))
+        .arg(Arg::new("target").index(2).required(true))
+        .arg(Arg::new("flg").long("flag"))
         .try_get_matches_from(vec!["lip", "file1", "file2", "file3", "target", "--flag"]);
 
     assert!(m.is_ok(), "{:?}", m.unwrap_err().kind);
@@ -1138,12 +1070,12 @@ fn low_index_positional_with_flag() {
 fn multiple_value_terminator_option() {
     let m = App::new("lip")
         .arg(
-            Arg::with_name("files")
+            Arg::new("files")
                 .short('f')
                 .value_terminator(";")
                 .multiple(true),
         )
-        .arg(Arg::with_name("other"))
+        .arg(Arg::new("other"))
         .try_get_matches_from(vec!["lip", "-f", "val1", "val2", ";", "otherval"]);
 
     assert!(m.is_ok(), "{:?}", m.unwrap_err().kind);
@@ -1163,13 +1095,13 @@ fn multiple_value_terminator_option() {
 fn multiple_value_terminator_option_other_arg() {
     let m = App::new("lip")
         .arg(
-            Arg::with_name("files")
+            Arg::new("files")
                 .short('f')
                 .value_terminator(";")
                 .multiple(true),
         )
-        .arg(Arg::with_name("other"))
-        .arg(Arg::with_name("flag").short('F'))
+        .arg(Arg::new("other"))
+        .arg(Arg::new("flag").short('F'))
         .try_get_matches_from(vec!["lip", "-f", "val1", "val2", "-F", "otherval"]);
 
     assert!(m.is_ok(), "{:?}", m.unwrap_err().kind);
@@ -1189,12 +1121,12 @@ fn multiple_value_terminator_option_other_arg() {
 fn multiple_vals_with_hyphen() {
     let res = App::new("do")
         .arg(
-            Arg::with_name("cmds")
+            Arg::new("cmds")
                 .multiple(true)
                 .allow_hyphen_values(true)
                 .value_terminator(";"),
         )
-        .arg(Arg::with_name("location"))
+        .arg(Arg::new("location"))
         .try_get_matches_from(vec![
             "do",
             "find",
@@ -1217,13 +1149,13 @@ fn multiple_vals_with_hyphen() {
 fn issue_1480_max_values_consumes_extra_arg_1() {
     let res = App::new("prog")
         .arg(
-            Arg::with_name("field")
+            Arg::new("field")
                 .takes_value(true)
                 .multiple(false)
                 .max_values(1)
                 .long("field"),
         )
-        .arg(Arg::with_name("positional").required(true).index(1))
+        .arg(Arg::new("positional").required(true).index(1))
         .try_get_matches_from(vec!["prog", "--field", "1", "file"]);
 
     assert!(res.is_ok());
@@ -1233,7 +1165,7 @@ fn issue_1480_max_values_consumes_extra_arg_1() {
 fn issue_1480_max_values_consumes_extra_arg_2() {
     let res = App::new("prog")
         .arg(
-            Arg::with_name("field")
+            Arg::new("field")
                 .takes_value(true)
                 .multiple(false)
                 .max_values(1)
@@ -1249,7 +1181,7 @@ fn issue_1480_max_values_consumes_extra_arg_2() {
 fn issue_1480_max_values_consumes_extra_arg_3() {
     let res = App::new("prog")
         .arg(
-            Arg::with_name("field")
+            Arg::new("field")
                 .takes_value(true)
                 .multiple(false)
                 .max_values(1)
diff --git a/tests/opts.rs b/tests/opts.rs
index 77bdc4ef..0a9813ac 100644
--- a/tests/opts.rs
+++ b/tests/opts.rs
@@ -32,7 +32,7 @@ For more information try --help";
 fn require_equals_fail() {
     let res = App::new("prog")
         .arg(
-            Arg::with_name("cfg")
+            Arg::new("cfg")
                 .setting(ArgSettings::RequireEquals)
                 .setting(ArgSettings::TakesValue)
                 .long("config"),
@@ -46,12 +46,12 @@ fn require_equals_fail() {
 fn require_equals_min_values_zero() {
     let res = App::new("prog")
         .arg(
-            Arg::with_name("cfg")
+            Arg::new("cfg")
                 .setting(ArgSettings::RequireEquals)
                 .min_values(0)
                 .long("config"),
         )
-        .arg(Arg::with_name("cmd"))
+        .arg(Arg::new("cmd"))
         .try_get_matches_from(vec!["prog", "--config", "cmd"]);
     assert!(res.is_ok());
     let m = res.unwrap();
@@ -63,7 +63,7 @@ fn require_equals_min_values_zero() {
 fn double_hyphen_as_value() {
     let res = App::new("prog")
         .arg(
-            Arg::with_name("cfg")
+            Arg::new("cfg")
                 .setting(ArgSettings::AllowHyphenValues)
                 .long("config"),
         )
@@ -76,11 +76,11 @@ fn double_hyphen_as_value() {
 fn require_equals_no_empty_values_fail() {
     let res = App::new("prog")
         .arg(
-            Arg::with_name("cfg")
+            Arg::new("cfg")
                 .setting(ArgSettings::RequireEquals)
                 .long("config"),
         )
-        .arg(Arg::with_name("some"))
+        .arg(Arg::new("some"))
         .try_get_matches_from(vec!["prog", "--config=", "file.conf"]);
     assert!(res.is_err());
     assert_eq!(res.unwrap_err().kind, ErrorKind::EmptyValue);
@@ -90,7 +90,7 @@ fn require_equals_no_empty_values_fail() {
 fn require_equals_empty_vals_pass() {
     let res = App::new("prog")
         .arg(
-            Arg::with_name("cfg")
+            Arg::new("cfg")
                 .setting(ArgSettings::RequireEquals)
                 .setting(ArgSettings::AllowEmptyValues)
                 .long("config"),
@@ -103,7 +103,7 @@ fn require_equals_empty_vals_pass() {
 fn require_equals_pass() {
     let res = App::new("prog")
         .arg(
-            Arg::with_name("cfg")
+            Arg::new("cfg")
                 .setting(ArgSettings::RequireEquals)
                 .long("config"),
         )
@@ -397,7 +397,7 @@ fn issue_665() {
 fn issue_1047_min_zero_vals_default_val() {
     let m = App::new("foo")
         .arg(
-            Arg::with_name("del")
+            Arg::new("del")
                 .short('d')
                 .long("del")
                 .setting(ArgSettings::RequireEquals)
@@ -474,8 +474,8 @@ fn issue_1105_empty_value_short_explicit_no_space() {
 #[cfg(feature = "suggestions")]
 fn issue_1073_suboptimal_flag_suggestion() {
     let app = App::new("ripgrep-616")
-        .arg(Arg::with_name("files-with-matches").long("files-with-matches"))
-        .arg(Arg::with_name("files-without-match").long("files-without-match"));
+        .arg(Arg::new("files-with-matches").long("files-with-matches"))
+        .arg(Arg::new("files-without-match").long("files-without-match"));
     assert!(utils::compare_output(
         app,
         "ripgrep-616 --files-without-matches",
diff --git a/tests/positionals.rs b/tests/positionals.rs
index 3b3ad401..343a4c82 100644
--- a/tests/positionals.rs
+++ b/tests/positionals.rs
@@ -21,7 +21,7 @@ fn issue_946() {
         .setting(clap::AppSettings::AllowLeadingHyphen)
         .arg("--exact    'filters match exactly'")
         .arg(
-            clap::Arg::with_name("filter")
+            clap::Arg::new("filter")
                 .index(1)
                 .takes_value(true)
                 .about("filters to apply to output"),
@@ -39,7 +39,7 @@ fn positional() {
     let r = App::new("positional")
         .args(&[
             Arg::from("-f, --flag 'some flag'"),
-            Arg::with_name("positional").index(1),
+            Arg::new("positional").index(1),
         ])
         .try_get_matches_from(vec!["", "-f", "test"]);
     assert!(r.is_ok(), "{:#?}", r);
@@ -51,7 +51,7 @@ fn positional() {
     let m = App::new("positional")
         .args(&[
             Arg::from("-f, --flag 'some flag'"),
-            Arg::with_name("positional").index(1),
+            Arg::new("positional").index(1),
         ])
         .get_matches_from(vec!["", "test", "--flag"]);
     assert!(m.is_present("positional"));
@@ -104,7 +104,7 @@ fn positional_multiple() {
     let r = App::new("positional_multiple")
         .args(&[
             Arg::from("-f, --flag 'some flag'"),
-            Arg::with_name("positional").index(1).multiple(true),
+            Arg::new("positional").index(1).multiple(true),
         ])
         .try_get_matches_from(vec!["", "-f", "test1", "test2", "test3"]);
     assert!(r.is_ok(), "{:#?}", r);
@@ -122,7 +122,7 @@ fn positional_multiple_3() {
     let r = App::new("positional_multiple")
         .args(&[
             Arg::from("-f, --flag 'some flag'"),
-            Arg::with_name("positional").index(1).multiple(true),
+            Arg::new("positional").index(1).multiple(true),
         ])
         .try_get_matches_from(vec!["", "test1", "test2", "test3", "--flag"]);
     assert!(r.is_ok(), "{:#?}", r);
@@ -140,7 +140,7 @@ fn positional_multiple_2() {
     let result = App::new("positional_multiple")
         .args(&[
             Arg::from("-f, --flag 'some flag'"),
-            Arg::with_name("positional").index(1),
+            Arg::new("positional").index(1),
         ])
         .try_get_matches_from(vec!["", "-f", "test1", "test2", "test3"]);
     assert!(result.is_err());
@@ -153,9 +153,7 @@ fn positional_possible_values() {
     let r = App::new("positional_possible_values")
         .args(&[
             Arg::from("-f, --flag 'some flag'"),
-            Arg::with_name("positional")
-                .index(1)
-                .possible_value("test123"),
+            Arg::new("positional").index(1).possible_value("test123"),
         ])
         .try_get_matches_from(vec!["", "-f", "test123"]);
     assert!(r.is_ok(), "{:#?}", r);
@@ -171,14 +169,14 @@ fn positional_possible_values() {
 #[test]
 fn create_positional() {
     let _ = App::new("test")
-        .arg(Arg::with_name("test").index(1).about("testing testing"))
+        .arg(Arg::new("test").index(1).about("testing testing"))
         .get_matches_from(vec![""]);
 }
 
 #[test]
 fn positional_hyphen_does_not_panic() {
     let _ = App::new("test")
-        .arg(Arg::with_name("dummy"))
+        .arg(Arg::new("dummy"))
         .get_matches_from(vec!["test", "-"]);
 }
 
diff --git a/tests/posix_compatible.rs b/tests/posix_compatible.rs
index be3a72ed..80b3fbd9 100644
--- a/tests/posix_compatible.rs
+++ b/tests/posix_compatible.rs
@@ -258,7 +258,7 @@ fn conflict_overriden_4() {
 #[test]
 fn pos_required_overridden_by_flag() {
     let result = App::new("require_overriden")
-        .arg(Arg::with_name("pos").index(1).required(true))
+        .arg(Arg::new("pos").index(1).required(true))
         .arg(Arg::from("-c, --color 'some flag'").overrides_with("pos"))
         .try_get_matches_from(vec!["", "test", "-c"]);
     assert!(result.is_ok(), "{:?}", result.unwrap_err());
@@ -267,7 +267,7 @@ fn pos_required_overridden_by_flag() {
 #[test]
 fn require_overriden_2() {
     let m = App::new("require_overriden")
-        .arg(Arg::with_name("req_pos").required(true))
+        .arg(Arg::new("req_pos").required(true))
         .arg(Arg::from("-c, --color 'other flag'").overrides_with("req_pos"))
         .get_matches_from(vec!["", "-c", "req_pos"]);
     assert!(!m.is_present("color"));
diff --git a/tests/possible_values.rs b/tests/possible_values.rs
index 60f65a3d..9583b3f2 100644
--- a/tests/possible_values.rs
+++ b/tests/possible_values.rs
@@ -25,11 +25,7 @@ For more information try --help";
 #[test]
 fn possible_values_of_positional() {
     let m = App::new("possible_values")
-        .arg(
-            Arg::with_name("positional")
-                .index(1)
-                .possible_value("test123"),
-        )
+        .arg(Arg::new("positional").index(1).possible_value("test123"))
         .try_get_matches_from(vec!["myprog", "test123"]);
 
     assert!(m.is_ok());
@@ -42,11 +38,7 @@ fn possible_values_of_positional() {
 #[test]
 fn possible_values_of_positional_fail() {
     let m = App::new("possible_values")
-        .arg(
-            Arg::with_name("positional")
-                .index(1)
-                .possible_value("test123"),
-        )
+        .arg(Arg::new("positional").index(1).possible_value("test123"))
         .try_get_matches_from(vec!["myprog", "notest"]);
 
     assert!(m.is_err());
@@ -57,7 +49,7 @@ fn possible_values_of_positional_fail() {
 fn possible_values_of_positional_multiple() {
     let m = App::new("possible_values")
         .arg(
-            Arg::with_name("positional")
+            Arg::new("positional")
                 .index(1)
                 .possible_value("test123")
                 .possible_value("test321")
@@ -79,7 +71,7 @@ fn possible_values_of_positional_multiple() {
 fn possible_values_of_positional_multiple_fail() {
     let m = App::new("possible_values")
         .arg(
-            Arg::with_name("positional")
+            Arg::new("positional")
                 .index(1)
                 .possible_value("test123")
                 .possible_value("test321")
@@ -95,7 +87,7 @@ fn possible_values_of_positional_multiple_fail() {
 fn possible_values_of_option() {
     let m = App::new("possible_values")
         .arg(
-            Arg::with_name("option")
+            Arg::new("option")
                 .short('o')
                 .long("--option")
                 .takes_value(true)
@@ -114,7 +106,7 @@ fn possible_values_of_option() {
 fn possible_values_of_option_fail() {
     let m = App::new("possible_values")
         .arg(
-            Arg::with_name("option")
+            Arg::new("option")
                 .short('o')
                 .long("--option")
                 .takes_value(true)
@@ -130,7 +122,7 @@ fn possible_values_of_option_fail() {
 fn possible_values_of_option_multiple() {
     let m = App::new("possible_values")
         .arg(
-            Arg::with_name("option")
+            Arg::new("option")
                 .short('o')
                 .long("--option")
                 .takes_value(true)
@@ -154,7 +146,7 @@ fn possible_values_of_option_multiple() {
 fn possible_values_of_option_multiple_fail() {
     let m = App::new("possible_values")
         .arg(
-            Arg::with_name("option")
+            Arg::new("option")
                 .short('o')
                 .long("--option")
                 .takes_value(true)
@@ -182,7 +174,7 @@ fn possible_values_output() {
 fn case_insensitive() {
     let m = App::new("pv")
         .arg(
-            Arg::with_name("option")
+            Arg::new("option")
                 .short('o')
                 .long("--option")
                 .takes_value(true)
@@ -204,7 +196,7 @@ fn case_insensitive() {
 fn case_insensitive_faili() {
     let m = App::new("pv")
         .arg(
-            Arg::with_name("option")
+            Arg::new("option")
                 .short('o')
                 .long("--option")
                 .takes_value(true)
@@ -221,7 +213,7 @@ fn case_insensitive_faili() {
 fn case_insensitive_multiple() {
     let m = App::new("pv")
         .arg(
-            Arg::with_name("option")
+            Arg::new("option")
                 .short('o')
                 .long("--option")
                 .takes_value(true)
@@ -243,7 +235,7 @@ fn case_insensitive_multiple() {
 fn case_insensitive_multiple_fail() {
     let m = App::new("pv")
         .arg(
-            Arg::with_name("option")
+            Arg::new("option")
                 .short('o')
                 .long("--option")
                 .takes_value(true)
diff --git a/tests/propagate_globals.rs b/tests/propagate_globals.rs
index a2cb830f..2c3c9c0e 100644
--- a/tests/propagate_globals.rs
+++ b/tests/propagate_globals.rs
@@ -5,7 +5,7 @@ use clap::{App, Arg, ArgMatches, ArgSettings};
 fn get_app() -> App<'static> {
     App::new("myprog")
         .arg(
-            Arg::with_name("GLOBAL_ARG")
+            Arg::new("GLOBAL_ARG")
                 .long("global-arg")
                 .about("Specifies something needed by the subcommands")
                 .global(true)
@@ -13,7 +13,7 @@ fn get_app() -> App<'static> {
                 .default_value("default_value"),
         )
         .arg(
-            Arg::with_name("GLOBAL_FLAG")
+            Arg::new("GLOBAL_FLAG")
                 .long("global-flag")
                 .about("Specifies something needed by the subcommands")
                 .global(true)
diff --git a/tests/require.rs b/tests/require.rs
index 502e8f60..a143b333 100644
--- a/tests/require.rs
+++ b/tests/require.rs
@@ -74,7 +74,7 @@ fn option_required_2() {
 #[test]
 fn positional_required() {
     let result = App::new("positional_required")
-        .arg(Arg::with_name("flag").index(1).required(true))
+        .arg(Arg::new("flag").index(1).required(true))
         .try_get_matches_from(vec![""]);
     assert!(result.is_err());
     let err = result.err().unwrap();
@@ -84,7 +84,7 @@ fn positional_required() {
 #[test]
 fn positional_required_2() {
     let m = App::new("positional_required")
-        .arg(Arg::with_name("flag").index(1).required(true))
+        .arg(Arg::new("flag").index(1).required(true))
         .get_matches_from(vec!["", "someval"]);
     assert!(m.is_present("flag"));
     assert_eq!(m.value_of("flag").unwrap(), "someval");
@@ -94,12 +94,7 @@ fn positional_required_2() {
 fn group_required() {
     let result = App::new("group_required")
         .arg(Arg::from("-f, --flag 'some flag'"))
-        .group(
-            ArgGroup::with_name("gr")
-                .required(true)
-                .arg("some")
-                .arg("other"),
-        )
+        .group(ArgGroup::new("gr").required(true).arg("some").arg("other"))
         .arg(Arg::from("--some 'some arg'"))
         .arg(Arg::from("--other 'other arg'"))
         .try_get_matches_from(vec!["", "-f"]);
@@ -112,12 +107,7 @@ fn group_required() {
 fn group_required_2() {
     let m = App::new("group_required")
         .arg(Arg::from("-f, --flag 'some flag'"))
-        .group(
-            ArgGroup::with_name("gr")
-                .required(true)
-                .arg("some")
-                .arg("other"),
-        )
+        .group(ArgGroup::new("gr").required(true).arg("some").arg("other"))
         .arg(Arg::from("--some 'some arg'"))
         .arg(Arg::from("--other 'other arg'"))
         .get_matches_from(vec!["", "-f", "--some"]);
@@ -130,12 +120,7 @@ fn group_required_2() {
 fn group_required_3() {
     let m = App::new("group_required")
         .arg(Arg::from("-f, --flag 'some flag'"))
-        .group(
-            ArgGroup::with_name("gr")
-                .required(true)
-                .arg("some")
-                .arg("other"),
-        )
+        .group(ArgGroup::new("gr").required(true).arg("some").arg("other"))
         .arg(Arg::from("--some 'some arg'"))
         .arg(Arg::from("--other 'other arg'"))
         .get_matches_from(vec!["", "-f", "--other"]);
@@ -148,7 +133,7 @@ fn group_required_3() {
 fn arg_require_group() {
     let result = App::new("arg_require_group")
         .arg(Arg::from("-f, --flag 'some flag'").requires("gr"))
-        .group(ArgGroup::with_name("gr").arg("some").arg("other"))
+        .group(ArgGroup::new("gr").arg("some").arg("other"))
         .arg(Arg::from("--some 'some arg'"))
         .arg(Arg::from("--other 'other arg'"))
         .try_get_matches_from(vec!["", "-f"]);
@@ -161,7 +146,7 @@ fn arg_require_group() {
 fn arg_require_group_2() {
     let res = App::new("arg_require_group")
         .arg(Arg::from("-f, --flag 'some flag'").requires("gr"))
-        .group(ArgGroup::with_name("gr").arg("some").arg("other"))
+        .group(ArgGroup::new("gr").arg("some").arg("other"))
         .arg(Arg::from("--some 'some arg'"))
         .arg(Arg::from("--other 'other arg'"))
         .try_get_matches_from(vec!["", "-f", "--some"]);
@@ -176,7 +161,7 @@ fn arg_require_group_2() {
 fn arg_require_group_3() {
     let res = App::new("arg_require_group")
         .arg(Arg::from("-f, --flag 'some flag'").requires("gr"))
-        .group(ArgGroup::with_name("gr").arg("some").arg("other"))
+        .group(ArgGroup::new("gr").arg("some").arg("other"))
         .arg(Arg::from("--some 'some arg'"))
         .arg(Arg::from("--other 'other arg'"))
         .try_get_matches_from(vec!["", "-f", "--other"]);
@@ -214,12 +199,12 @@ fn issue_753() {
 fn required_unless() {
     let res = App::new("unlesstest")
         .arg(
-            Arg::with_name("cfg")
+            Arg::new("cfg")
                 .required_unless("dbg")
                 .takes_value(true)
                 .long("config"),
         )
-        .arg(Arg::with_name("dbg").long("debug"))
+        .arg(Arg::new("dbg").long("debug"))
         .try_get_matches_from(vec!["unlesstest", "--debug"]);
 
     assert!(res.is_ok());
@@ -232,12 +217,12 @@ fn required_unless() {
 fn required_unless_err() {
     let res = App::new("unlesstest")
         .arg(
-            Arg::with_name("cfg")
+            Arg::new("cfg")
                 .required_unless("dbg")
                 .takes_value(true)
                 .long("config"),
         )
-        .arg(Arg::with_name("dbg").long("debug"))
+        .arg(Arg::new("dbg").long("debug"))
         .try_get_matches_from(vec!["unlesstest"]);
 
     assert!(res.is_err());
@@ -250,13 +235,13 @@ fn required_unless_err() {
 fn required_unless_all() {
     let res = App::new("unlessall")
         .arg(
-            Arg::with_name("cfg")
+            Arg::new("cfg")
                 .required_unless_all(&["dbg", "infile"])
                 .takes_value(true)
                 .long("config"),
         )
-        .arg(Arg::with_name("dbg").long("debug"))
-        .arg(Arg::with_name("infile").short('i').takes_value(true))
+        .arg(Arg::new("dbg").long("debug"))
+        .arg(Arg::new("infile").short('i').takes_value(true))
         .try_get_matches_from(vec!["unlessall", "--debug", "-i", "file"]);
 
     assert!(res.is_ok());
@@ -270,13 +255,13 @@ fn required_unless_all() {
 fn required_unless_all_err() {
     let res = App::new("unlessall")
         .arg(
-            Arg::with_name("cfg")
+            Arg::new("cfg")
                 .required_unless_all(&["dbg", "infile"])
                 .takes_value(true)
                 .long("config"),
         )
-        .arg(Arg::with_name("dbg").long("debug"))
-        .arg(Arg::with_name("infile").short('i').takes_value(true))
+        .arg(Arg::new("dbg").long("debug"))
+        .arg(Arg::new("infile").short('i').takes_value(true))
         .try_get_matches_from(vec!["unlessall", "--debug"]);
 
     assert!(res.is_err());
@@ -289,13 +274,13 @@ fn required_unless_all_err() {
 fn required_unless_one() {
     let res = App::new("unlessone")
         .arg(
-            Arg::with_name("cfg")
+            Arg::new("cfg")
                 .required_unless_one(&["dbg", "infile"])
                 .takes_value(true)
                 .long("config"),
         )
-        .arg(Arg::with_name("dbg").long("debug"))
-        .arg(Arg::with_name("infile").short('i').takes_value(true))
+        .arg(Arg::new("dbg").long("debug"))
+        .arg(Arg::new("infile").short('i').takes_value(true))
         .try_get_matches_from(vec!["unlessone", "--debug"]);
 
     assert!(res.is_ok());
@@ -310,13 +295,13 @@ fn required_unless_one_2() {
     // instead of the first.
     let res = App::new("unlessone")
         .arg(
-            Arg::with_name("cfg")
+            Arg::new("cfg")
                 .required_unless_one(&["dbg", "infile"])
                 .takes_value(true)
                 .long("config"),
         )
-        .arg(Arg::with_name("dbg").long("debug"))
-        .arg(Arg::with_name("infile").short('i').takes_value(true))
+        .arg(Arg::new("dbg").long("debug"))
+        .arg(Arg::new("infile").short('i').takes_value(true))
         .try_get_matches_from(vec!["unlessone", "-i", "file"]);
 
     assert!(res.is_ok());
@@ -329,13 +314,9 @@ fn required_unless_one_2() {
 fn required_unless_one_works_with_short() {
     // GitHub issue: https://github.com/kbknapp/clap-rs/issues/1135
     let res = App::new("unlessone")
-        .arg(Arg::with_name("a").conflicts_with("b").short('a'))
-        .arg(Arg::with_name("b").short('b'))
-        .arg(
-            Arg::with_name("x")
-                .short('x')
-                .required_unless_one(&["a", "b"]),
-        )
+        .arg(Arg::new("a").conflicts_with("b").short('a'))
+        .arg(Arg::new("b").short('b'))
+        .arg(Arg::new("x").short('x').required_unless_one(&["a", "b"]))
         .try_get_matches_from(vec!["unlessone", "-a"]);
 
     assert!(res.is_ok());
@@ -344,13 +325,9 @@ fn required_unless_one_works_with_short() {
 #[test]
 fn required_unless_one_works_with_short_err() {
     let res = App::new("unlessone")
-        .arg(Arg::with_name("a").conflicts_with("b").short('a'))
-        .arg(Arg::with_name("b").short('b'))
-        .arg(
-            Arg::with_name("x")
-                .short('x')
-                .required_unless_one(&["a", "b"]),
-        )
+        .arg(Arg::new("a").conflicts_with("b").short('a'))
+        .arg(Arg::new("b").short('b'))
+        .arg(Arg::new("x").short('x').required_unless_one(&["a", "b"]))
         .try_get_matches_from(vec!["unlessone"]);
 
     assert!(!res.is_ok());
@@ -359,9 +336,9 @@ fn required_unless_one_works_with_short_err() {
 #[test]
 fn required_unless_one_works_without() {
     let res = App::new("unlessone")
-        .arg(Arg::with_name("a").conflicts_with("b").short('a'))
-        .arg(Arg::with_name("b").short('b'))
-        .arg(Arg::with_name("x").required_unless_one(&["a", "b"]))
+        .arg(Arg::new("a").conflicts_with("b").short('a'))
+        .arg(Arg::new("b").short('b'))
+        .arg(Arg::new("x").required_unless_one(&["a", "b"]))
         .try_get_matches_from(vec!["unlessone", "-a"]);
 
     assert!(res.is_ok());
@@ -370,10 +347,10 @@ fn required_unless_one_works_without() {
 #[test]
 fn required_unless_one_works_with_long() {
     let res = App::new("unlessone")
-        .arg(Arg::with_name("a").conflicts_with("b").short('a'))
-        .arg(Arg::with_name("b").short('b'))
+        .arg(Arg::new("a").conflicts_with("b").short('a'))
+        .arg(Arg::new("b").short('b'))
         .arg(
-            Arg::with_name("x")
+            Arg::new("x")
                 .long("x_is_the_option")
                 .required_unless_one(&["a", "b"]),
         )
@@ -386,13 +363,13 @@ fn required_unless_one_works_with_long() {
 fn required_unless_one_1() {
     let res = App::new("unlessone")
         .arg(
-            Arg::with_name("cfg")
+            Arg::new("cfg")
                 .required_unless_one(&["dbg", "infile"])
                 .takes_value(true)
                 .long("config"),
         )
-        .arg(Arg::with_name("dbg").long("debug"))
-        .arg(Arg::with_name("infile").short('i').takes_value(true))
+        .arg(Arg::new("dbg").long("debug"))
+        .arg(Arg::new("infile").short('i').takes_value(true))
         .try_get_matches_from(vec!["unlessone", "--debug"]);
 
     assert!(res.is_ok());
@@ -406,13 +383,13 @@ fn required_unless_one_1() {
 fn required_unless_one_err() {
     let res = App::new("unlessone")
         .arg(
-            Arg::with_name("cfg")
+            Arg::new("cfg")
                 .required_unless_one(&["dbg", "infile"])
                 .takes_value(true)
                 .long("config"),
         )
-        .arg(Arg::with_name("dbg").long("debug"))
-        .arg(Arg::with_name("infile").short('i').takes_value(true))
+        .arg(Arg::new("dbg").long("debug"))
+        .arg(Arg::new("infile").short('i').takes_value(true))
         .try_get_matches_from(vec!["unlessone"]);
 
     assert!(res.is_err());
@@ -435,12 +412,12 @@ fn missing_required_output() {
 fn requires_if_present_val() {
     let res = App::new("unlessone")
         .arg(
-            Arg::with_name("cfg")
+            Arg::new("cfg")
                 .requires_if("my.cfg", "extra")
                 .takes_value(true)
                 .long("config"),
         )
-        .arg(Arg::with_name("extra").long("extra"))
+        .arg(Arg::new("extra").long("extra"))
         .try_get_matches_from(vec!["unlessone", "--config=my.cfg"]);
 
     assert!(res.is_err());
@@ -451,13 +428,13 @@ fn requires_if_present_val() {
 fn requires_if_present_mult() {
     let res = App::new("unlessone")
         .arg(
-            Arg::with_name("cfg")
+            Arg::new("cfg")
                 .requires_ifs(&[("my.cfg", "extra"), ("other.cfg", "other")])
                 .takes_value(true)
                 .long("config"),
         )
-        .arg(Arg::with_name("extra").long("extra"))
-        .arg(Arg::with_name("other").long("other"))
+        .arg(Arg::new("extra").long("extra"))
+        .arg(Arg::new("other").long("other"))
         .try_get_matches_from(vec!["unlessone", "--config=other.cfg"]);
 
     assert!(res.is_err());
@@ -468,13 +445,13 @@ fn requires_if_present_mult() {
 fn requires_if_present_mult_pass() {
     let res = App::new("unlessone")
         .arg(
-            Arg::with_name("cfg")
+            Arg::new("cfg")
                 .requires_ifs(&[("my.cfg", "extra"), ("other.cfg", "other")])
                 .takes_value(true)
                 .long("config"),
         )
-        .arg(Arg::with_name("extra").long("extra"))
-        .arg(Arg::with_name("other").long("other"))
+        .arg(Arg::new("extra").long("extra"))
+        .arg(Arg::new("other").long("other"))
         .try_get_matches_from(vec!["unlessone", "--config=some.cfg"]);
 
     assert!(res.is_ok());
@@ -484,12 +461,12 @@ fn requires_if_present_mult_pass() {
 fn requires_if_present_val_no_present_pass() {
     let res = App::new("unlessone")
         .arg(
-            Arg::with_name("cfg")
+            Arg::new("cfg")
                 .requires_if("my.cfg", "extra")
                 .takes_value(true)
                 .long("config"),
         )
-        .arg(Arg::with_name("extra").long("extra"))
+        .arg(Arg::new("extra").long("extra"))
         .try_get_matches_from(vec!["unlessone"]);
 
     assert!(res.is_ok());
@@ -501,12 +478,12 @@ fn requires_if_present_val_no_present_pass() {
 fn required_if_val_present_pass() {
     let res = App::new("ri")
         .arg(
-            Arg::with_name("cfg")
+            Arg::new("cfg")
                 .required_if("extra", "val")
                 .takes_value(true)
                 .long("config"),
         )
-        .arg(Arg::with_name("extra").takes_value(true).long("extra"))
+        .arg(Arg::new("extra").takes_value(true).long("extra"))
         .try_get_matches_from(vec!["ri", "--extra", "val", "--config", "my.cfg"]);
 
     assert!(res.is_ok());
@@ -516,12 +493,12 @@ fn required_if_val_present_pass() {
 fn required_if_val_present_fail() {
     let res = App::new("ri")
         .arg(
-            Arg::with_name("cfg")
+            Arg::new("cfg")
                 .required_if("extra", "val")
                 .takes_value(true)
                 .long("config"),
         )
-        .arg(Arg::with_name("extra").takes_value(true).long("extra"))
+        .arg(Arg::new("extra").takes_value(true).long("extra"))
         .try_get_matches_from(vec!["ri", "--extra", "val"]);
 
     assert!(res.is_err());
@@ -535,20 +512,20 @@ fn required_if_val_present_fail_error_output() {
         .author("F0x06")
         .about("Arg test")
         .arg(
-            Arg::with_name("target")
+            Arg::new("target")
                 .takes_value(true)
                 .required(true)
                 .possible_values(&["file", "stdout"])
                 .long("target"),
         )
         .arg(
-            Arg::with_name("input")
+            Arg::new("input")
                 .takes_value(true)
                 .required(true)
                 .long("input"),
         )
         .arg(
-            Arg::with_name("output")
+            Arg::new("output")
                 .takes_value(true)
                 .required_if("target", "file")
                 .long("output"),
@@ -566,12 +543,12 @@ fn required_if_val_present_fail_error_output() {
 fn required_if_wrong_val() {
     let res = App::new("ri")
         .arg(
-            Arg::with_name("cfg")
+            Arg::new("cfg")
                 .required_if("extra", "val")
                 .takes_value(true)
                 .long("config"),
         )
-        .arg(Arg::with_name("extra").takes_value(true).long("extra"))
+        .arg(Arg::new("extra").takes_value(true).long("extra"))
         .try_get_matches_from(vec!["ri", "--extra", "other"]);
 
     assert!(res.is_ok());
@@ -581,13 +558,13 @@ fn required_if_wrong_val() {
 fn required_ifs_val_present_pass() {
     let res = App::new("ri")
         .arg(
-            Arg::with_name("cfg")
+            Arg::new("cfg")
                 .required_ifs(&[("extra", "val"), ("option", "spec")])
                 .takes_value(true)
                 .long("config"),
         )
-        .arg(Arg::with_name("option").takes_value(true).long("option"))
-        .arg(Arg::with_name("extra").takes_value(true).long("extra"))
+        .arg(Arg::new("option").takes_value(true).long("option"))
+        .arg(Arg::new("extra").takes_value(true).long("extra"))
         .try_get_matches_from(vec!["ri", "--option", "spec", "--config", "my.cfg"]);
 
     assert!(res.is_ok());
@@ -597,13 +574,13 @@ fn required_ifs_val_present_pass() {
 fn required_ifs_val_present_fail() {
     let res = App::new("ri")
         .arg(
-            Arg::with_name("cfg")
+            Arg::new("cfg")
                 .required_ifs(&[("extra", "val"), ("option", "spec")])
                 .takes_value(true)
                 .long("config"),
         )
-        .arg(Arg::with_name("extra").takes_value(true).long("extra"))
-        .arg(Arg::with_name("option").takes_value(true).long("option"))
+        .arg(Arg::new("extra").takes_value(true).long("extra"))
+        .arg(Arg::new("option").takes_value(true).long("option"))
         .try_get_matches_from(vec!["ri", "--option", "spec"]);
 
     assert!(res.is_err());
@@ -614,13 +591,13 @@ fn required_ifs_val_present_fail() {
 fn required_ifs_wrong_val() {
     let res = App::new("ri")
         .arg(
-            Arg::with_name("cfg")
+            Arg::new("cfg")
                 .required_ifs(&[("extra", "val"), ("option", "spec")])
                 .takes_value(true)
                 .long("config"),
         )
-        .arg(Arg::with_name("extra").takes_value(true).long("extra"))
-        .arg(Arg::with_name("option").takes_value(true).long("option"))
+        .arg(Arg::new("extra").takes_value(true).long("extra"))
+        .arg(Arg::new("option").takes_value(true).long("option"))
         .try_get_matches_from(vec!["ri", "--option", "other"]);
 
     assert!(res.is_ok());
@@ -630,13 +607,13 @@ fn required_ifs_wrong_val() {
 fn required_ifs_wrong_val_mult_fail() {
     let res = App::new("ri")
         .arg(
-            Arg::with_name("cfg")
+            Arg::new("cfg")
                 .required_ifs(&[("extra", "val"), ("option", "spec")])
                 .takes_value(true)
                 .long("config"),
         )
-        .arg(Arg::with_name("extra").takes_value(true).long("extra"))
-        .arg(Arg::with_name("option").takes_value(true).long("option"))
+        .arg(Arg::new("extra").takes_value(true).long("extra"))
+        .arg(Arg::new("option").takes_value(true).long("option"))
         .try_get_matches_from(vec!["ri", "--extra", "other", "--option", "spec"]);
 
     assert!(res.is_err());
@@ -646,7 +623,7 @@ fn required_ifs_wrong_val_mult_fail() {
 #[test]
 fn require_eq() {
     let app = App::new("clap-test").version("v1.4.8").arg(
-        Arg::with_name("opt")
+        Arg::new("opt")
             .long("opt")
             .short('o')
             .required(true)
@@ -710,7 +687,7 @@ fn issue_1643_args_mutually_require_each_other() {
 
     let app = App::new("test")
         .arg(
-            Arg::with_name("relation_id")
+            Arg::new("relation_id")
                 .about("The relation id to get the data from")
                 .long("relation-id")
                 .short('r')
@@ -718,7 +695,7 @@ fn issue_1643_args_mutually_require_each_other() {
                 .requires("remote_unit_name"),
         )
         .arg(
-            Arg::with_name("remote_unit_name")
+            Arg::new("remote_unit_name")
                 .about("The name of the remote unit to get data from")
                 .long("remote-unit")
                 .short('u')
@@ -734,7 +711,7 @@ fn issue_1643_args_mutually_require_each_other() {
 #[should_panic = "Argument or group 'extra' specified in 'requires*' for 'config' does not exist"]
 fn requires_invalid_arg() {
     let _ = App::new("prog")
-        .arg(Arg::with_name("config").requires("extra").long("config"))
+        .arg(Arg::new("config").requires("extra").long("config"))
         .try_get_matches_from(vec!["", "--config"]);
 }
 
@@ -744,7 +721,7 @@ fn requires_invalid_arg() {
 fn requires_if_invalid_arg() {
     let _ = App::new("prog")
         .arg(
-            Arg::with_name("config")
+            Arg::new("config")
                 .requires_if("val", "extra")
                 .long("config"),
         )
@@ -757,7 +734,7 @@ fn requires_if_invalid_arg() {
 fn required_if_invalid_arg() {
     let _ = App::new("prog")
         .arg(
-            Arg::with_name("config")
+            Arg::new("config")
                 .required_if("extra", "val")
                 .long("config"),
         )
@@ -769,10 +746,6 @@ fn required_if_invalid_arg() {
 #[should_panic = "Argument or group 'extra' specified in 'required_unless*' for 'config' does not exist"]
 fn required_unless_invalid_arg() {
     let _ = App::new("prog")
-        .arg(
-            Arg::with_name("config")
-                .required_unless("extra")
-                .long("config"),
-        )
+        .arg(Arg::new("config").required_unless("extra").long("config"))
         .try_get_matches_from(vec![""]);
 }
diff --git a/tests/subcommands.rs b/tests/subcommands.rs
index d21af5dd..f6a06d6f 100644
--- a/tests/subcommands.rs
+++ b/tests/subcommands.rs
@@ -98,14 +98,14 @@ fn subcommand() {
     let m = App::new("test")
         .subcommand(
             App::new("some").arg(
-                Arg::with_name("test")
+                Arg::new("test")
                     .short('t')
                     .long("test")
                     .takes_value(true)
                     .about("testing testing"),
             ),
         )
-        .arg(Arg::with_name("other").long("other"))
+        .arg(Arg::new("other").long("other"))
         .get_matches_from(vec!["myprog", "some", "--test", "testing"]);
 
     assert_eq!(m.subcommand_name().unwrap(), "some");
@@ -119,14 +119,14 @@ fn subcommand_none_given() {
     let m = App::new("test")
         .subcommand(
             App::new("some").arg(
-                Arg::with_name("test")
+                Arg::new("test")
                     .short('t')
                     .long("test")
                     .takes_value(true)
                     .about("testing testing"),
             ),
         )
-        .arg(Arg::with_name("other").long("other"))
+        .arg(Arg::new("other").long("other"))
         .get_matches_from(vec![""]);
 
     assert!(m.subcommand_name().is_none());
@@ -137,15 +137,15 @@ fn subcommand_multiple() {
     let m = App::new("test")
         .subcommands(vec![
             App::new("some").arg(
-                Arg::with_name("test")
+                Arg::new("test")
                     .short('t')
                     .long("test")
                     .takes_value(true)
                     .about("testing testing"),
             ),
-            App::new("add").arg(Arg::with_name("roster").short('r')),
+            App::new("add").arg(Arg::new("roster").short('r')),
         ])
-        .arg(Arg::with_name("other").long("other"))
+        .arg(Arg::new("other").long("other"))
         .get_matches_from(vec!["myprog", "some", "--test", "testing"]);
 
     assert!(m.subcommand_matches("some").is_some());
@@ -161,10 +161,10 @@ fn subcommand_display_order() {
     let app_subcmd_alpha_order = App::new("test").version("1").subcommands(vec![
         App::new("b1")
             .about("blah b1")
-            .arg(Arg::with_name("test").short('t')),
+            .arg(Arg::new("test").short('t')),
         App::new("a1")
             .about("blah a1")
-            .arg(Arg::with_name("roster").short('r')),
+            .arg(Arg::new("roster").short('r')),
     ]);
 
     assert!(utils::compare_output(
@@ -180,10 +180,10 @@ fn subcommand_display_order() {
         .subcommands(vec![
             App::new("b1")
                 .about("blah b1")
-                .arg(Arg::with_name("test").short('t')),
+                .arg(Arg::new("test").short('t')),
             App::new("a1")
                 .about("blah a1")
-                .arg(Arg::with_name("roster").short('r')),
+                .arg(Arg::new("roster").short('r')),
         ]);
 
     assert!(utils::compare_output(
@@ -321,9 +321,9 @@ fn issue_1031_args_with_same_name_no_more_vals() {
 fn issue_1161_multiple_hyphen_hyphen() {
     // from example 22
     let res = App::new("myprog")
-        .arg(Arg::with_name("eff").short('f'))
-        .arg(Arg::with_name("pea").short('p').takes_value(true))
-        .arg(Arg::with_name("slop").multiple(true).last(true))
+        .arg(Arg::new("eff").short('f'))
+        .arg(Arg::new("pea").short('p').takes_value(true))
+        .arg(Arg::new("slop").multiple(true).last(true))
         .try_get_matches_from(vec![
             "-f",
             "-p=bob",
@@ -358,7 +358,7 @@ fn issue_1161_multiple_hyphen_hyphen() {
 fn issue_1722_not_emit_error_when_arg_follows_similar_to_a_subcommand() {
     let m = App::new("myprog")
         .subcommand(App::new("subcommand"))
-        .arg(Arg::with_name("argument"))
+        .arg(Arg::new("argument"))
         .try_get_matches_from(vec!["myprog", "--", "subcommand"]);
     assert_eq!(m.unwrap().value_of("argument"), Some("subcommand"));
 }
diff --git a/tests/tests.rs b/tests/tests.rs
index 33928851..33651322 100644
--- a/tests/tests.rs
+++ b/tests/tests.rs
@@ -232,10 +232,7 @@ fn create_app() {
 #[test]
 fn add_multiple_arg() {
     let _ = App::new("test")
-        .args(&[
-            Arg::with_name("test").short('s'),
-            Arg::with_name("test2").short('l'),
-        ])
+        .args(&[Arg::new("test").short('s'), Arg::new("test2").short('l')])
         .get_matches_from(vec![""]);
 }
 #[test]
diff --git a/tests/unique_args.rs b/tests/unique_args.rs
index d2007f66..8a416cd2 100644
--- a/tests/unique_args.rs
+++ b/tests/unique_args.rs
@@ -5,10 +5,7 @@ use clap::{App, Arg};
 #[should_panic = "Argument names must be unique, but 'arg1' is in use by more than one argument or group"]
 fn unique_arg_names() {
     let _ = App::new("some")
-        .args(&[
-            Arg::with_name("arg1").short('a'),
-            Arg::with_name("arg1").short('b'),
-        ])
+        .args(&[Arg::new("arg1").short('a'), Arg::new("arg1").short('b')])
         .try_get_matches();
 }
 
@@ -17,10 +14,7 @@ fn unique_arg_names() {
 #[should_panic = "Short option names must be unique for each argument, but '-a' is in use by both 'arg1' and 'arg2'"]
 fn unique_arg_shorts() {
     let _ = App::new("some")
-        .args(&[
-            Arg::with_name("arg1").short('a'),
-            Arg::with_name("arg2").short('a'),
-        ])
+        .args(&[Arg::new("arg1").short('a'), Arg::new("arg2").short('a')])
         .try_get_matches();
 }
 
@@ -29,9 +23,6 @@ fn unique_arg_shorts() {
 #[should_panic = "Long option names must be unique for each argument, but '--long' is in use by both 'arg1' and 'arg2'"]
 fn unique_arg_longs() {
     let _ = App::new("some")
-        .args(&[
-            Arg::with_name("arg1").long("long"),
-            Arg::with_name("arg2").long("long"),
-        ])
+        .args(&[Arg::new("arg1").long("long"), Arg::new("arg2").long("long")])
         .try_get_matches();
 }
diff --git a/tests/validators.rs b/tests/validators.rs
index 5abedf6c..31e7186d 100644
--- a/tests/validators.rs
+++ b/tests/validators.rs
@@ -6,7 +6,7 @@ use clap::{App, Arg};
 fn both_validator_and_validator_os() {
     let _ = App::new("test")
         .arg(
-            Arg::with_name("test")
+            Arg::new("test")
                 .validator(|val| val.parse::<u32>().map_err(|e| e.to_string()))
                 .validator_os(|val| {
                     val.to_str()