diff --git a/CHANGES.txt b/CHANGES.txt
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -1,5 +1,8 @@
 Changelog for Hoogle
 
+5.0.17.3, released 2018-04-17
+    Require extra-1.6.6
+    Fix the reported memory sizes
 5.0.17.2, released 2018-03-16
     Remove support for GHC 7.10
     Require conduit-1.3.0
diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -93,6 +93,9 @@
 
 [Ubiquity](https://wiki.mozilla.org/Labs/Ubiquity) provides a graphical command-line for Firefox. To install the Ubiquity Hoogle command, visit the [this page](http://www.randomhacks.net/git/ubiquity/hoogle/) and click "Subscribe..." when asked whether you want to install it. Further information is available [here](http://www.randomhacks.net/articles/2008/09/01/ubiquitous-hoogle).
 
+## Others
+
+* [Doc Browser](https://github.com/qwfy/doc-browser)
 
 ### The Source Code
 
diff --git a/hoogle.cabal b/hoogle.cabal
--- a/hoogle.cabal
+++ b/hoogle.cabal
@@ -1,7 +1,7 @@
 cabal-version:      >= 1.18
 build-type:         Simple
 name:               hoogle
-version:            5.0.17.2
+version:            5.0.17.3
 license:            BSD3
 license-file:       LICENSE
 category:           Development
@@ -64,7 +64,7 @@
         containers >= 0.5,
         deepseq,
         directory,
-        extra >= 1.4,
+        extra >= 1.6.6,
         filepath,
         old-locale,
         haskell-src-exts >= 1.18 && < 1.21,
diff --git a/src/Action/Generate.hs b/src/Action/Generate.hs
--- a/src/Action/Generate.hs
+++ b/src/Action/Generate.hs
@@ -125,7 +125,7 @@
     files <- concatMapM listFilesRecursive dirs
     -- We reverse/sort the list because of #206
     -- Two identical package names with different versions might be foo-2.0 and foo-1.0
-    -- We never distinguish on versions, so they are considered equal when reodering
+    -- We never distinguish on versions, so they are considered equal when reordering
     -- So put 2.0 first in the list and rely on stable sorting. A bit of a hack.
     let order a = second Down $ parseTrailingVersion a
     let packages = map (takeBaseName &&& id) $ sortOn (map order . splitDirectories) $ filter ((==) ".txt" . takeExtension) files
@@ -255,7 +255,7 @@
                 return [(a,b) | (a,bs) <- xs, b <- bs]
 
         itemsMemory <- getStatsCurrentLiveBytes
-        xs <- timed timing "Reodering items" $ return $! reorderItems settings (\s -> maybe 1 negate $ Map.lookup s popularity) xs
+        xs <- timed timing "Reordering items" $ return $! reorderItems settings (\s -> maybe 1 negate $ Map.lookup s popularity) xs
         timed timing "Writing tags" $ writeTags store (`Set.member` want) (\x -> maybe [] (map (both T.unpack) . packageTags) $ Map.lookup x cbl) xs
         timed timing "Writing names" $ writeNames store xs
         timed timing "Writing types" $ writeTypes store (if debug then Just $ dropExtension database else Nothing) xs
diff --git a/src/Action/Search.hs b/src/Action/Search.hs
--- a/src/Action/Search.hs
+++ b/src/Action/Search.hs
@@ -54,7 +54,7 @@
 
 -- | Returns the details printed out when hoogle --info is called
 targetInfo :: Target -> String
-targetInfo Target{..} = 
+targetInfo Target{..} =
     unlines $ [ unHTML targetItem ] ++
               [ unwords packageModule | not $ null packageModule] ++
               [ unHTML targetDocs ]
@@ -117,6 +117,7 @@
         "base" === hackage "base"
         "Prelude" === hackage "base/docs/Prelude.html"
         "map" === hackage "base/docs/Prelude.html#v:map"
+        "map is:ping" === hackage "base/docs/Prelude.html#v:map"
         "map package:base" === hackage "base/docs/Prelude.html#v:map"
         noResults "map package:package-not-in-db"
         noResults "map module:Module.Not.In.Db"
@@ -130,7 +131,7 @@
         "Action package:shake" === "https://hackage.haskell.org/package/shake/docs/Development-Shake.html#t:Action"
         "Action package:shake set:stackage" === "https://hackage.haskell.org/package/shake/docs/Development-Shake.html#t:Action"
         "map -package:base" ==$ \x -> not $ "/base/" `isInfixOf` x
-        "<>" === hackage "base/docs/Data-Monoid.html#v:-60--62-"
+        "<>" === hackage "base/docs/Prelude.html#v:-60--62-"
         "Data.Set.insert" === hackage "containers/docs/Data-Set.html#v:insert"
         "Set.insert" === hackage "containers/docs/Data-Set.html#v:insert"
         "Prelude.mapM_" === hackage "base/docs/Prelude.html#v:mapM_"
diff --git a/src/General/Util.hs b/src/General/Util.hs
--- a/src/General/Util.hs
+++ b/src/General/Util.hs
@@ -63,9 +63,9 @@
 
 showMb :: (Show a, Integral a) => a -> String
 #if RTS_STATS
-showMb x = show x ++ "Mb"
+showMb x = show (x `div` (1024*1024)) ++ "Mb"
 #else
-showMb x = show (x `mod` (1024*1024)) ++ "Mb"
+showMb x = show x ++ "Mb"
 #endif
 
 
@@ -199,26 +199,6 @@
         f Done = []
         f (Fail e) = error $ "tarballReadFiles on " ++ file ++ ", " ++ show e
 
-
--- | Take a piece of text and escape all the HTML special bits
-escapeHTML :: String -> String
-escapeHTML = concatMap f
-    where
-        f '<' = "&lt;"
-        f '>' = "&gt;"
-        f '&' = "&amp;"
-        f '\"' = "&quot;"
-        f  x  = [x]
-
--- | Only guarantees to be the inverse of escapeHTML
-unescapeHTML :: String -> String
-unescapeHTML ('&':xs)
-    | Just xs <- stripPrefix "lt;" xs = '<' : unescapeHTML xs
-    | Just xs <- stripPrefix "gt;" xs = '>' : unescapeHTML xs
-    | Just xs <- stripPrefix "amp;" xs = '&' : unescapeHTML xs
-    | Just xs <- stripPrefix "quot;" xs = '\"' : unescapeHTML xs
-unescapeHTML (x:xs) = x : unescapeHTML xs
-unescapeHTML [] = []
 
 innerTextHTML :: String -> String
 innerTextHTML ('<':xs) = innerTextHTML $ drop 1 $ dropWhile (/= '>') xs
diff --git a/src/Output/Tags.hs b/src/Output/Tags.hs
--- a/src/Output/Tags.hs
+++ b/src/Output/Tags.hs
@@ -81,11 +81,13 @@
 
 parseTag :: String -> String -> Maybe Tag
 parseTag k v
-    | k ~~ "is", v ~~ "exact" = Just IsExact
-    | k ~~ "is", v ~~ "package" = Just IsPackage
-    | k ~~ "is", v ~~ "module" = Just IsModule
-    | k ~~ "package", v /= "" = Just $ EqPackage v
-    | k ~~ "module", v /= "" = Just $ EqModule v
+    | k ~~ "is" = case () of
+        _ | v ~~ "exact" -> Just IsExact
+          | v ~~ "package" -> Just IsPackage
+          | v ~~ "module" -> Just IsModule
+          | otherwise -> Nothing
+    | k ~~ "package" = if v == "" then Nothing else Just $ EqPackage v
+    | k ~~ "module" = if v == "" then Nothing else Just $ EqModule v
     | v /= "" = Just $ EqCategory k v
     | otherwise = Nothing
     where
