diff --git a/clippy_lints/src/booleans.rs b/clippy_lints/src/booleans.rs
index 6fd935ea0f8..b0969f36378 100644
--- a/clippy_lints/src/booleans.rs
+++ b/clippy_lints/src/booleans.rs
@@ -195,7 +195,7 @@ impl<'a, 'tcx, 'v> SuggestContext<'a, 'tcx, 'v> {
         }
     }
 
-    fn recurse(&mut self, brackets: bool, suggestion: &Bool) {
+    fn recurse(&mut self, suggestion: &Bool) {
         use quine_mc_cluskey::Bool::*;
         match *suggestion {
             True => {
@@ -207,67 +207,56 @@ impl<'a, 'tcx, 'v> SuggestContext<'a, 'tcx, 'v> {
             Not(ref inner) => match **inner {
                 And(_) | Or(_) => {
                     self.output.push('!');
-                    self.recurse(true, inner)
+                    self.output.push('(');
+                    self.recurse(inner);
+                    self.output.push(')');
                 },
                 Term(n) => {
-                    if let Some(str) = self.simplify_not(self.terminals[n as usize]) {
+                    let terminal = self.terminals[n as usize];
+                    if let Some(str) = self.simplify_not(terminal) {
                         self.simplified = true;
                         self.output.push_str(&str)
                     } else {
                         self.output.push('!');
-                        self.recurse(false, inner)
+                        if let ExprBinary(..) = terminal.node {
+                            self.output.push('(');
+                        }
+                        self.recurse(inner);
+                        if let ExprBinary(..) = terminal.node {
+                            self.output.push(';');
+                        }
                     }
                 },
                 True | False | Not(_) => {
                     self.output.push('!');
-                    self.recurse(false, inner)
+                    self.recurse(inner)
                 },
             },
             And(ref v) => {
-                if brackets {
-                    self.output.push('(');
-                }
                 for (index, inner) in v.iter().enumerate() {
                     if index > 0 {
                         self.output.push_str(" && ");
                     }
                     if let Or(_) = *inner {
-                        self.recurse(true, inner);
+                        self.output.push('(');
+                        self.recurse(inner);
+                        self.output.push(')');
                     } else {
-                        self.recurse(false, inner);
+                        self.recurse(inner);
                     }
                 }
-                if brackets {
-                    self.output.push(')');
-                }
             },
             Or(ref v) => {
-                if brackets {
-                    self.output.push('(');
-                }
                 for (index, inner) in v.iter().enumerate() {
                     if index > 0 {
                         self.output.push_str(" || ");
                     }
-                    self.recurse(false, inner);
-                }
-                if brackets {
-                    self.output.push(')');
+                    self.recurse(inner);
                 }
             },
             Term(n) => {
-                let brackets = brackets && match self.terminals[n as usize].node {
-                    ExprBinary(..) => true,
-                    _ => false,
-                };
-                if brackets {
-                    self.output.push('(');
-                }
                 let snip = self.snip(self.terminals[n as usize]);
                 self.output.push_str(&snip);
-                if brackets {
-                    self.output.push(')');
-                }
             },
         }
     }
@@ -281,7 +270,7 @@ fn suggest(cx: &LateContext, suggestion: &Bool, terminals: &[&Expr]) -> (String,
         output: String::new(),
         simplified: false,
     };
-    suggest_context.recurse(false, suggestion);
+    suggest_context.recurse(suggestion);
     (suggest_context.output, suggest_context.simplified)
 }