diff --git a/CHANGES.txt b/CHANGES.txt
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -1,5 +1,10 @@
 Changelog for HLint
 
+2.0.2
+    #323, try and avoid malformatted JSON
+    #324, use `backticks` in notes
+    #324, remove double escaping in note for --json
+    #322, fix the YAML syntax in default.yaml
 2.0.1
     #320, still read ./HLint.hs if it exists
 2.0
diff --git a/data/default.yaml b/data/default.yaml
--- a/data/default.yaml
+++ b/data/default.yaml
@@ -15,7 +15,7 @@
 #
 # - extensions:
 #   - default: false # all extension are banned by default
-#   - name: PatternGuards, ViewPatterns # only these listed extensions can be used
+#   - name: [PatternGuards, ViewPatterns] # only these listed extensions can be used
 #   - {name: CPP, within: CrossPlatform} # CPP can only be used in a given module
 #
 # - flags:
@@ -32,7 +32,7 @@
 # Add custom hints for this project
 #
 # Will suggest replacing "wibbleMany [myvar]" with "wibbleOne myvar"
-# - error: {lhs: wibbleMany [x], rhs: wibbleOne x}
+# - error: {lhs: "wibbleMany [x]", rhs: wibbleOne x}
 
 
 # Turn on hints that are off by default
diff --git a/data/hlint.yaml b/data/hlint.yaml
--- a/data/hlint.yaml
+++ b/data/hlint.yaml
@@ -150,12 +150,12 @@
     - warn: {lhs: "filter f x /= []", rhs: any f x}
     - warn: {lhs: any id, rhs: or}
     - warn: {lhs: all id, rhs: and}
-    - warn: {lhs: any ((==) a), rhs: elem a, note: ValidInstance "Eq" a}
+    - warn: {lhs: any ((==) a), rhs: elem a, note: ValidInstance Eq a}
     - warn: {lhs: any (== a), rhs: elem a}
-    - warn: {lhs: any (a ==), rhs: elem a, note: ValidInstance "Eq" a}
-    - warn: {lhs: all ((/=) a), rhs: notElem a, note: ValidInstance "Eq" a}
-    - warn: {lhs: all (/= a), rhs: notElem a, note: ValidInstance "Eq" a}
-    - warn: {lhs: all (a /=), rhs: notElem a, note: ValidInstance "Eq" a}
+    - warn: {lhs: any (a ==), rhs: elem a, note: ValidInstance Eq a}
+    - warn: {lhs: all ((/=) a), rhs: notElem a, note: ValidInstance Eq a}
+    - warn: {lhs: all (/= a), rhs: notElem a, note: ValidInstance Eq a}
+    - warn: {lhs: all (a /=), rhs: notElem a, note: ValidInstance Eq a}
     - warn: {lhs: elem True, rhs: or}
     - warn: {lhs: notElem False, rhs: and}
     - warn: {lhs: findIndex ((==) a), rhs: elemIndex a}
@@ -165,8 +165,8 @@
     - warn: {lhs: findIndices (a ==), rhs: elemIndices a}
     - warn: {lhs: findIndices (== a), rhs: elemIndices a}
     - warn: {lhs: "lookup b (zip l [0..])", rhs: elemIndex b l}
-    - hint: {lhs: "elem x [y]", rhs: x == y, note: ValidInstance "Eq" a}
-    - hint: {lhs: "notElem x [y]", rhs: x /= y, note: ValidInstance "Eq" a}
+    - hint: {lhs: "elem x [y]", rhs: x == y, note: ValidInstance Eq a}
+    - hint: {lhs: "notElem x [y]", rhs: x /= y, note: ValidInstance Eq a}
     - hint: {lhs: length x >= 0, rhs: "True", name: Length always non-negative}
     - hint: {lhs: length x > 0, rhs: not (null x), note: IncreasesLaziness, name: Use null}
     - hint: {lhs: length x >= 1, rhs: not (null x), note: IncreasesLaziness, name: Use null}
@@ -203,20 +203,20 @@
     - warn: {lhs: foldr  (>>) (return ()), rhs: sequence_}
     - warn: {lhs: foldr  (&&) True, rhs: and}
     - warn: {lhs: foldl  (&&) True, rhs: and, note: IncreasesLaziness}
-    - warn: {lhs: foldr1 (&&) , rhs: and, note: "RemovesError on []"}
-    - warn: {lhs: foldl1 (&&) , rhs: and, note: "RemovesError on []"}
+    - warn: {lhs: foldr1 (&&) , rhs: and, note: "RemovesError on `[]`"}
+    - warn: {lhs: foldl1 (&&) , rhs: and, note: "RemovesError on `[]`"}
     - warn: {lhs: foldr  (||) False, rhs: or}
     - warn: {lhs: foldl  (||) False, rhs: or, note: IncreasesLaziness}
-    - warn: {lhs: foldr1 (||) , rhs: or, note: "RemovesError on []"}
-    - warn: {lhs: foldl1 (||) , rhs: or, note: "RemovesError on []"}
+    - warn: {lhs: foldr1 (||) , rhs: or, note: "RemovesError on `[]`"}
+    - warn: {lhs: foldl1 (||) , rhs: or, note: "RemovesError on `[]`"}
     - warn: {lhs: foldl  (+) 0, rhs: sum}
     - warn: {lhs: foldr  (+) 0, rhs: sum}
-    - warn: {lhs: foldl1 (+)  , rhs: sum, note: "RemovesError on []"}
-    - warn: {lhs: foldr1 (+)  , rhs: sum, note: "RemovesError on []"}
+    - warn: {lhs: foldl1 (+)  , rhs: sum, note: "RemovesError on `[]`"}
+    - warn: {lhs: foldr1 (+)  , rhs: sum, note: "RemovesError on `[]`"}
     - warn: {lhs: foldl  (*) 1, rhs: product}
     - warn: {lhs: foldr  (*) 1, rhs: product}
-    - warn: {lhs: foldl1 (*)  , rhs: product, note: "RemovesError on []"}
-    - warn: {lhs: foldr1 (*)  , rhs: product, note: "RemovesError on []"}
+    - warn: {lhs: foldl1 (*)  , rhs: product, note: "RemovesError on `[]`"}
+    - warn: {lhs: foldr1 (*)  , rhs: product, note: "RemovesError on `[]`"}
     - warn: {lhs: foldl1 max  , rhs: maximum}
     - warn: {lhs: foldr1 max  , rhs: maximum}
     - warn: {lhs: foldl1 min  , rhs: minimum}
diff --git a/hlint.cabal b/hlint.cabal
--- a/hlint.cabal
+++ b/hlint.cabal
@@ -1,7 +1,7 @@
 cabal-version:      >= 1.18
 build-type:         Simple
 name:               hlint
-version:            2.0.1
+version:            2.0.2
 license:            BSD3
 license-file:       LICENSE
 category:           Development
diff --git a/src/Config/Type.hs b/src/Config/Type.hs
--- a/src/Config/Type.hs
+++ b/src/Config/Type.hs
@@ -64,7 +64,7 @@
     show IncreasesLaziness = "increases laziness"
     show DecreasesLaziness = "decreases laziness"
     show (RemovesError x) = "removes error " ++ x
-    show (ValidInstance x y) = "requires a valid " ++ x ++ " instance for " ++ y
+    show (ValidInstance x y) = "requires a valid `" ++ x ++ "` instance for `" ++ y ++ "`"
     show (Note x) = x
 
 
diff --git a/src/Idea.hs b/src/Idea.hs
--- a/src/Idea.hs
+++ b/src/Idea.hs
@@ -46,7 +46,7 @@
     ,("endColumn", show srcSpanEndColumn)
     ,("from", str ideaFrom)
     ,("to", maybe "null" str ideaTo)
-    ,("note", show $ map (str . show) ideaNote)
+    ,("note", "[" ++ intercalate "," (map (str . show) ideaNote) ++ "]")
     ,("refactorings", str $ show ideaRefactoring)
     ]
   where
@@ -54,7 +54,8 @@
         where f '\"' = "\\\""
               f '\\' = "\\\\"
               f '\n' = "\\n"
-              f x | not $ isAscii x = "\\u" ++ takeEnd 4 ("0000" ++ showHex (ord x) "")
+              f '\r' = "\\r"
+              f x | isControl x || not (isAscii x) = "\\u" ++ takeEnd 4 ("0000" ++ showHex (ord x) "")
               f x = [x]
     mkPair (k, v) = show k ++ ":" ++ v
     wrap x = "{" ++ x ++ "}"
diff --git a/src/Report.hs b/src/Report.hs
--- a/src/Report.hs
+++ b/src/Report.hs
@@ -57,10 +57,15 @@
         Just to ->
             ["Why not" ++ (if to == "" then " remove it." else "") ++ "<br/>"
             ,hsColourHTML to]) ++
-    [let n = showNotes ideaNote in if n /= "" then "<span class='note'>Note: " ++ n ++ "</span>" else ""
+    [let n = showNotes ideaNote in if n /= "" then "<span class='note'>Note: " ++ writeNote n ++ "</span>" else ""
     ,"</div>"
     ,""]
 
+-- Unescaped, but may have `backticks` for code
+writeNote :: String -> String
+writeNote = f . splitOn "`"
+    where f (a:b:c) = escapeHTML a ++ "<tt>" ++ escapeHTML b ++ "</tt>" ++ f c
+          f xs = concatMap escapeHTML xs
 
 escapeHTML :: String -> String
 escapeHTML = concatMap f
diff --git a/src/Test/All.hs b/src/Test/All.hs
--- a/src/Test/All.hs
+++ b/src/Test/All.hs
@@ -3,10 +3,13 @@
 
 module Test.All(test) where
 
+import Control.Exception
 import Control.Monad
+import Data.Char
 import Data.List
 import System.Directory
 import System.FilePath
+import Data.Functor
 import Prelude
 
 import Config.Type
@@ -35,6 +38,7 @@
     let wrap msg act = putStr (msg ++ " ") >> act >> putStrLn ""
 
     putStrLn "Testing"
+    checkCommentedYaml $ dataDir </> "default.yaml"
     config <- readFilesConfig [(".hlint.yaml",Nothing)]
     when useSrc $ wrap "Source annotations" $
         forM_ builtinHints $ \(name,_) -> do
@@ -59,3 +63,11 @@
 testNames  hints = sequence_
     [ failed ["No name for the hint " ++ prettyPrint hintRuleLHS ++ " ==> " ++ prettyPrint hintRuleRHS]
     | SettingMatchExp x@HintRule{..} <- hints, hintRuleName == defaultHintName]
+
+checkCommentedYaml :: FilePath -> IO ()
+checkCommentedYaml file = do
+    src <- lines <$> readFile' file
+    let src2 = [x | x <- src, Just x <- [stripPrefix "# " x], not $ all isAlpha $ take 1 x]
+    e <- readFilesConfig [(file, Just $ unlines src2)]
+    void $ evaluate $ length e
+
