diff --git a/src/bindgen/config.rs b/src/bindgen/config.rs
index 9f85360c472b1ea696e2a1f755a3edb73d0f6cbe..e4a54d9fe6beb2b68d4e1355d7974d39493d6bde 100644
--- a/src/bindgen/config.rs
+++ b/src/bindgen/config.rs
@@ -267,6 +267,8 @@ pub struct Config {
     pub tab_width: usize,
     /// The language to output bindings for
     pub language: Language,
+    /// The names of crates to not parse
+    pub exclude: Vec<String>,
     /// The names of crates to parse with `rustc --pretty=expanded`
     pub expand: Vec<String>,
     /// The configuration options for functions
@@ -292,6 +294,7 @@ impl Default for Config {
             line_length: 100,
             tab_width: 2,
             language: Language::Cxx,
+            exclude: Vec::new(),
             expand: Vec::new(),
             function: FunctionConfig::default(),
             structure: StructConfig::default(),
diff --git a/src/bindgen/library.rs b/src/bindgen/library.rs
index 1794286a1991de8d0388e20513f17fa9607f0d64..3f1619577336754778052d9fd3654f63e074fe24 100644
--- a/src/bindgen/library.rs
+++ b/src/bindgen/library.rs
@@ -128,6 +128,7 @@ impl<'a> Library<'a> {
 
         rust_lib::parse_lib(crate_dir,
                             bindings_crate_name,
+                            &config.exclude,
                             &config.expand,
                             &mut |crate_name, items| {
             library.load_from_crate_mod(&crate_name, items);
diff --git a/src/bindgen/rust_lib.rs b/src/bindgen/rust_lib.rs
index 1dfb94ba1a0fd1c10050bc59e9b3516b2cfb4050..daa2002329957d6e06bcc6a04e83ab8b88655673 100644
--- a/src/bindgen/rust_lib.rs
+++ b/src/bindgen/rust_lib.rs
@@ -44,6 +44,7 @@ pub fn parse_src<F>(src_file: &Path,
 /// command to find the location of dependencies.
 pub fn parse_lib<F>(crate_path: &Path,
                     binding_crate_name: &str,
+                    exclude: &[String],
                     expand: &[String],
                     items_callback: &mut F) -> ParseResult
     where F: FnMut(&str, &Vec<syn::Item>)
@@ -60,6 +61,7 @@ pub fn parse_lib<F>(crate_path: &Path,
     let mut context = ParseLibContext {
         manifest_path: manifest_path,
         metadata: metadata,
+        exclude: exclude.to_owned(),
         expand: expand.to_owned(),
         cache_src: HashMap::new(),
         cache_expanded_crate: HashMap::new(),
@@ -74,6 +76,7 @@ struct ParseLibContext<F>
 {
     manifest_path: PathBuf,
     metadata: cargo_metadata::Metadata,
+    exclude: Vec<String>,
     expand: Vec<String>,
     cache_src: HashMap<PathBuf, Vec<syn::Item>>,
     cache_expanded_crate: HashMap<String, Vec<syn::Item>>,
@@ -103,7 +106,8 @@ impl<F> ParseLibContext<F>
 fn parse_crate<F>(crate_name: &str, context: &mut ParseLibContext<F>) -> ParseResult
     where F: FnMut(&str, &Vec<syn::Item>)
 {
-    if STD_CRATES.contains(&crate_name) {
+    if STD_CRATES.contains(&crate_name) ||
+       context.exclude.contains(&crate_name.to_owned()) {
         return Ok(());
     }