diff --git a/Cargo.toml b/Cargo.toml
index eb97707e667..4c1b77c256c 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -48,9 +48,8 @@ rustc_tools_util = { version = "0.1.1", path = "rustc_tools_util"}
 cargo_metadata = "0.7.1"
 compiletest_rs = { version = "0.3.22", features = ["tmp"] }
 lazy_static = "1.0"
-serde_derive = "1.0"
 clippy-mini-macro-test = { version = "0.2", path = "mini-macro" }
-serde = "1.0"
+serde = { version = "1.0", features = ["derive"] }
 derive-new = "0.5"
 
 # A noop dependency that changes in the Rust repository, it's a bit of a hack.
diff --git a/clippy_lints/Cargo.toml b/clippy_lints/Cargo.toml
index 7fc8579dffb..20b3a3e4937 100644
--- a/clippy_lints/Cargo.toml
+++ b/clippy_lints/Cargo.toml
@@ -24,8 +24,7 @@ matches = "0.1.7"
 quine-mc_cluskey = "0.2.2"
 regex-syntax = "0.6"
 semver = "0.9.0"
-serde = "1.0"
-serde_derive = "1.0"
+serde = { version = "1.0", features = ["derive"] }
 toml = "0.5"
 unicode-normalization = "0.1"
 pulldown-cmark = "0.5.0"
diff --git a/clippy_lints/src/utils/conf.rs b/clippy_lints/src/utils/conf.rs
index 2c96d9a8b5a..6e371c9fe5f 100644
--- a/clippy_lints/src/utils/conf.rs
+++ b/clippy_lints/src/utils/conf.rs
@@ -64,7 +64,7 @@ macro_rules! define_Conf {
     ($(#[$doc: meta] ($rust_name: ident, $rust_name_str: expr, $default: expr => $($ty: tt)+),)+) => {
         pub use self::helpers::Conf;
         mod helpers {
-            use serde_derive::Deserialize;
+            use serde::Deserialize;
             /// Type used to store lint configuration.
             #[derive(Deserialize)]
             #[serde(rename_all="kebab-case", deny_unknown_fields)]