diff --git a/CHANGES.txt b/CHANGES.txt
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -1,5 +1,9 @@
 Changelog for Hoogle (* = breaking change)
 
+5.0.17.13, released 2019-12-07
+    #331, make --count work with --json
+    #332, support ?q= as well as ?hoogle= (since it used to be q)
+    #330, work with more browsers when JavaScript is disabled
 5.0.17.12, released 2019-11-02
     Allow haskell-src-exts-1.22
     #324, make unicode search work more
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.12
+version:            5.0.17.13
 license:            BSD3
 license-file:       LICENSE
 category:           Development
diff --git a/html/index.html b/html/index.html
--- a/html/index.html
+++ b/html/index.html
@@ -22,7 +22,7 @@
         <li><a href="https://www.haskell.org">haskell.org</a></li>
     </ul>
 </div>
-<form action="." method="get" id="search">
+<form action="" method="get" id="search">
     <a id="logo" href="#{home}">
         <img src="#{cdn}hoogle.png" width="160" height="58" alt="Hoogle"
     /></a>
diff --git a/src/Action/CmdLine.hs b/src/Action/CmdLine.hs
--- a/src/Action/CmdLine.hs
+++ b/src/Action/CmdLine.hs
@@ -27,7 +27,7 @@
         ,numbers :: Bool
         ,info :: Bool
         ,database :: FilePath
-        ,count :: Int
+        ,count :: Maybe Int
         ,query :: [String]
         ,repeat_ :: Int
         ,language :: Language
@@ -38,7 +38,7 @@
         ,database :: FilePath
         ,insecure :: Bool
         ,include :: [String]
-        ,count :: Int
+        ,count :: Maybe Int
         ,local_ :: [FilePath]
         ,haddock :: Maybe FilePath
         ,debug :: Bool
@@ -114,7 +114,7 @@
     ,numbers = def &= help "Give counter for each result"
     ,info = def &= help "Give extended information about the first result"
     ,database = def &= typFile &= help "Name of database to use (use .hoo extension)"
-    ,count = 10 &= name "n" &= help "Maximum number of results to return"
+    ,count = Nothing &= name "n" &= help "Maximum number of results to return (defaults to 10)"
     ,query = def &= args &= typ "QUERY"
     ,repeat_ = 1 &= help "Number of times to repeat (for benchmarking)"
     ,language = enum [x &= explicit &= name (lower $ show x) &= help ("Work with " ++ show x) | x <- [minBound..maxBound]] &= groupname "Language"
@@ -126,7 +126,7 @@
     ,insecure = def &= help "Allow insecure HTTPS connections"
     ,include = def &= args &= typ "PACKAGE"
     ,local_ = def &= opt "" &= help "Index local packages and link to local haddock docs"
-    ,count = 0 &= name "n" &= help "Maximum number of packages to index (defaults to all)"
+    ,count = Nothing &= name "n" &= help "Maximum number of packages to index (defaults to all)"
     ,haddock = def &= help "Use local haddocks"
     ,debug = def &= help "Generate debug information"
     } &= help "Generate Hoogle databases"
diff --git a/src/Action/Generate.hs b/src/Action/Generate.hs
--- a/src/Action/Generate.hs
+++ b/src/Action/Generate.hs
@@ -211,7 +211,7 @@
     popularity <- evaluate $ Map.adjust (max $ 1 + Map.findWithDefault 0 (strPack "mtl") popularity) (strPack "transformers") popularity
 
     want <- return $ if include /= [] then Set.fromList $ map strPack include else want
-    want <- return $ if count == 0 then want else Set.fromList $ take count $ Set.toList want
+    want <- return $ case count of Nothing -> want; Just count -> Set.fromList $ take count $ Set.toList want
 
     (stats, _) <- storeWriteFile database $ \store -> do
         xs <- withBinaryFile (database `replaceExtension` "warn") WriteMode $ \warnings -> do
diff --git a/src/Action/Search.hs b/src/Action/Search.hs
--- a/src/Action/Search.hs
+++ b/src/Action/Search.hs
@@ -39,18 +39,19 @@
 actionSearch Search{..} = replicateM_ repeat_ $ -- deliberately reopen the database each time
     withSearch database $ \store ->
         if null compare_ then do
+            count' <- return $ fromMaybe 10 count
             (q, res) <- return $ search store $ parseQuery $ unwords query
             whenLoud $ putStrLn $ "Query: " ++ unescapeHTML (LBS.unpack $ renderMarkup $ renderQuery q)
-            let (shown, hidden) = splitAt count $ nubOrd $ map (targetResultDisplay link) res
+            let (shown, hidden) = splitAt count' $ nubOrd $ map (targetResultDisplay link) res
             if null res then
                 putStrLn "No results found"
              else if info then do
                  putStr $ targetInfo $ head res
              else do
                 let toShow = if numbers && not info then addCounter shown else shown
-                if json then LBS.putStrLn $ JSON.encode $ map unHTMLtargetItem res else putStr $ unlines toShow
+                if json then LBS.putStrLn $ JSON.encode $ maybe id take count $ map unHTMLtargetItem res else putStr $ unlines toShow
                 when (hidden /= [] && not json) $ do
-                    whenNormal $ putStrLn $ "-- plus more results not shown, pass --count=" ++ show (count+10) ++ " to see more"
+                    whenNormal $ putStrLn $ "-- plus more results not shown, pass --count=" ++ show (count'+10) ++ " to see more"
         else do
             let parseType x = case parseQuery x of
                                   [QueryType t] -> (pretty t, hseToSig t)
@@ -258,12 +259,12 @@
             [ InTop 3 ("fmap" `inPackage` "base")
             ]
         query "IO a -> m a"
-            [ InTop 3 ("liftIO" `inPackage` "base")
+            [ InTop 5 ("liftIO" `inPackage` "base")
             ]
         query "a -> m a" -- see GitHub issue #180
             [ InTop 20 ("pure" `inPackage` "base")
             , InTop 50 ("return" `inPackage` "base")
-            , InTop 3 ("pure" `inPackage` "base")
+            , InTop 5 ("pure" `inPackage` "base")
             , KnownFailure "GitHub issue #267" $
                   InTop 3 ("return" `inPackage` "base")
             ]
diff --git a/src/Action/Server.hs b/src/Action/Server.hs
--- a/src/Action/Server.hs
+++ b/src/Action/Server.hs
@@ -88,11 +88,13 @@
 replyServer log local links haddock store cdn home htmlDir scope Input{..} = case inputURL of
     -- without -fno-state-hack things can get folded under this lambda
     [] -> do
-        let grab name = [x | (a,x) <- inputArgs, a == name, x /= ""]
+        let grabBy name = [x | (a,x) <- inputArgs, name a, x /= ""]
+            grab name = grabBy (== name)
             grabInt name def = fromMaybe def $ readMaybe =<< listToMaybe (grab name) :: Int
 
         let qScope = let xs = grab "scope" in [scope | null xs && scope /= ""] ++ xs
-        let qSource = grab "hoogle" ++ filter (/= "set:stackage") qScope
+        let qSearch = grabBy (`elem` ["hoogle","q"])
+        let qSource = qSearch ++ filter (/= "set:stackage") qScope
         let q = concatMap parseQuery qSource
         let (q2, results) = search store q
         let body = showResults local links haddock (filter ((/= "mode") . fst) inputArgs) q2 $
@@ -102,7 +104,7 @@
                         [("tags", html $ tagOptions qScope)
                         ,("body", html body)
                         ,("title", text $ unwords qSource ++ " - Hoogle")
-                        ,("search", text $ unwords $ grab "hoogle")
+                        ,("search", text $ unwords qSearch)
                         ,("robots", text $ if any isQueryScope q then "none" else "index")]
                     | otherwise -> OutputHTML <$> templateRender templateHome []
             Just "body" -> OutputHTML <$> if null qSource then templateRender templateEmpty [] else templateRender (html body) []
