diff --git a/src/args/arg_matches.rs b/src/args/arg_matches.rs
index da7598c55f1..ea603d7c6b3 100644
--- a/src/args/arg_matches.rs
+++ b/src/args/arg_matches.rs
@@ -506,6 +506,19 @@ impl<'a> ArgMatches<'a> {
 // commit: be5e1fa3c26e351761b33010ddbdaf5f05dbcc33
 // license: MIT - Copyright (c) 2015 The Rust Project Developers
 
+/// An iterator for getting multiple values out of an argument via the `Arg::values_of` method.
+///
+/// # Examples
+///
+/// ```rust
+/// # use clap::{App, Arg};
+/// let m = App::new("myapp")
+///     .arg(Arg::with_name("output")
+///         .takes_value(true))
+///     .get_matches_from(vec!["myapp", "something"]);
+///
+/// assert_eq!(m.value_of("output"), Some("something"));
+/// ```
 #[derive(Clone)]
 #[allow(missing_debug_implementations)]
 pub struct Values<'a> {
@@ -576,6 +589,23 @@ impl<'a, V> DoubleEndedIterator for Iter<'a, V> {
     }
 }
 
+/// An iterator for getting multiple values out of an argument via the `Arg::values_of_os` method.
+/// Usage of this iterator allows values which contain invalid UTF-8 code points unlike `Values`.
+///
+/// # Examples
+///
+/// ```ignore
+/// # use clap::{App, Arg};
+/// use std::ffi::OsString;
+/// use std::os::unix::ffi::OsStrExt;
+///
+/// let m = App::new("utf8")
+///     .arg(Arg::from_usage("<arg> 'some arg'"))
+///     .get_matches_from(vec![OsString::from("myprog"),
+///                             // "Hi {0xe9}!"
+///                             OsString::from_vec(vec![b'H', b'i', b' ', 0xe9, b'!'])]);
+/// assert_eq!(&*m.value_of_os("arg").unwrap().as_bytes(), [b'H', b'i', b' ', 0xe9, b'!']);
+/// ```
 #[derive(Clone)]
 #[allow(missing_debug_implementations)]
 pub struct OsValues<'a> {
diff --git a/src/args/mod.rs b/src/args/mod.rs
index 2a55f3edd99..b3daa9fa637 100644
--- a/src/args/mod.rs
+++ b/src/args/mod.rs
@@ -1,5 +1,5 @@
 pub use self::arg::Arg;
-pub use self::arg_matches::ArgMatches;
+pub use self::arg_matches::{Values, OsValues, ArgMatches};
 pub use self::arg_matcher::ArgMatcher;
 pub use self::subcommand::SubCommand;
 pub use self::arg_builder::{FlagBuilder, OptBuilder, PosBuilder};
diff --git a/src/args/settings.rs b/src/args/settings.rs
index 5715f583145..03143653495 100644
--- a/src/args/settings.rs
+++ b/src/args/settings.rs
@@ -46,7 +46,6 @@ impl Default for ArgFlags {
 /// Various settings that apply to arguments and may be set, unset, and checked via getter/setter
 /// methods `Arg::set`, `Arg::unset`, and `Arg::is_set`
 #[derive(Debug, PartialEq, Copy, Clone)]
-#[doc(hidden)]
 pub enum ArgSettings {
     /// The argument must be used
     Required,
diff --git a/src/lib.rs b/src/lib.rs
index 5cb19c343ec..55d7b560a22 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -417,7 +417,7 @@ extern crate vec_map;
 
 #[cfg(feature = "yaml")]
 pub use yaml_rust::YamlLoader;
-pub use args::{Arg, ArgGroup, ArgMatches, ArgSettings, SubCommand};
+pub use args::{Arg, ArgGroup, ArgMatches, ArgSettings, SubCommand, Values, OsValues};
 pub use app::{App, AppSettings};
 pub use fmt::Format;
 pub use errors::{Error, ErrorKind, Result};