diff --git a/ChangeLog.md b/ChangeLog.md
--- a/ChangeLog.md
+++ b/ChangeLog.md
@@ -1,5 +1,9 @@
 # rhbzquery releases
 
+## 0.4.2 (2021-01-08)
+- add --query command
+- add --server option
+
 ## 0.4.1 (2020-12-17)
 - set no stdout buffering (reported by @clrkwllms)
 - change license from BSD3 to GPLv2+ and add SPDX tags
diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -10,11 +10,11 @@
 
 ## Usage examples
 
-`rhbzquery f33 xyz` : F33 bugs for package xyz
+`rhbzquery f33 xyz` : Fedora 33 bugs for package xyz
 
 `rhbzquery closed rawhide xyz` : closed rawhide bugs for package xyz
 
-`rhbzquery --mine` : your open bugs (gets userid from `.bugzillarc`)
+`rhbzquery --mine` : your open bugs (gets userid from `~/.bugzillarc`)
 
 `rhbzquery rhel8.3 bash` : RHEL 8.3 bash bugs
 
@@ -25,6 +25,8 @@
 `rhbzquery component~bugzilla summary~bugzilla` : open bugs with component and summary containing "bugzilla"
 
 `rhbzquery --file f33 xyz` : file a bug against the xyz package in F33
+
+`rhbzquery --query rhel8 ...`: open an advanced bugzilla search for RHEL 8
 
 ### Help
 `rhbzquery --help` describes arguments
diff --git a/TODO b/TODO
--- a/TODO
+++ b/TODO
@@ -1,4 +1,3 @@
-- --url for server
 - tui bug browser
 - --json output
 - cc=me, reporter=me
diff --git a/rhbzquery.cabal b/rhbzquery.cabal
--- a/rhbzquery.cabal
+++ b/rhbzquery.cabal
@@ -1,5 +1,5 @@
 name:                rhbzquery
-version:             0.4.1
+version:             0.4.2
 synopsis:            Bugzilla query tool
 description:
         A CLI tool for creating bugzilla queries for bugzilla.redhat.com.
@@ -16,7 +16,7 @@
                      README.md
                      TODO
 cabal-version:       1.18
-tested-with:         GHC == 8.4.4, GHC == 8.6.5, GHC == 8.8.4, GHC == 8.10.2
+tested-with:         GHC == 8.4.4, GHC == 8.6.5, GHC == 8.8.4, GHC == 8.10.3
 
 source-repository head
   type:                git
diff --git a/src/Fields.hs b/src/Fields.hs
--- a/src/Fields.hs
+++ b/src/Fields.hs
@@ -98,7 +98,7 @@
           "flag" -> "flagtypes.name"
           "flags" -> "flagtypes.name"
           p -> L.replace "-" "_" p
-  in if longname `elem` allBzFields
+  in if longname `elem` ("format":allBzFields)
      then longname
      else if "cf_" ++ longname `elem` allBzFields
           then "cf_" ++ longname
diff --git a/src/Main.hs b/src/Main.hs
--- a/src/Main.hs
+++ b/src/Main.hs
@@ -35,7 +35,9 @@
 import Paths_rhbzquery
 import User
 
-data QueryMode = BugList | ListFields | ListOperators | CreateBug | APIQuery
+data QueryMode = BugList | ListFields | ListOperators | CreateBug
+               | QueryPage | APIQuery
+  deriving Eq
 
 main :: IO ()
 main = do
@@ -44,25 +46,28 @@
     run <$>
     switchWith 'n' "dryrun" "Do not open url" <*>
     switchWith 'm' "mine" "My bugs" <*>
+    strOptionalWith 's' "server" "SERVER" ("Bugzilla server [default: " ++ brc ++ "]") brc <*>
     (flagWith' ListFields 'l' "list-fields" "List query FIELDs" <|>
      flagWith' ListOperators 'o' "list-operators" "List op search operator types" <|>
      flagWith' CreateBug 'f' "file" "File a bug" <|>
+     flagWith' QueryPage 'q' "query" "Open advanced query page" <|>
      flagWith BugList APIQuery 'w' "api" "Web API query") <*>
     many (strArg argHelp)
   where
-    run :: Bool -> Bool -> QueryMode -> [String] -> IO ()
+    run :: Bool -> Bool -> String -> QueryMode -> [String] -> IO ()
     -- FIXME list aliases
-    run _ _ ListFields _ = mapM_ putStrLn allBzFields
-    run _ _ ListOperators _ =
+    run _ _ _ ListFields _ = mapM_ putStrLn allBzFields
+    run _ _ _ ListOperators _ =
       mapM_ putStrLn $ map showOpHelp operators ++
         ["", "content~ uses matches", "content!~ uses notmatches"]
     -- FIXME should really use some and many
-    run _ _ _ [] = error' "please give an argument or --help"
-    run dryrun mine mode args = do
-      user <- if mine
+    run _ _ _ _ [] = error' "please give an argument or --help"
+    run dryrun mine server mode args = do
+      user <-
+        if mine
         then do
-        mail <- getBzUser
-        return [ArgParameter "assigned_to" Equals mail]
+          mail <- getRhBzUser
+          return [ArgParameter "assigned_to" Equals mail]
         else return []
       let argtypes = mapMaybe readBzQueryArg args
           url =
@@ -71,20 +76,22 @@
                     CreateBug -> L.nub $ concatMap argToSimpleField argtypes
                     _ ->
                       let status = [ArgParameter "bug_status" Equals "__open__" | not (hasStatusSet argtypes)]
-                      in L.nub $ numberMetaFields $ status ++ user ++ argtypes
-            in queryURL mode query
+                          advanced = [ArgParameter "format" Equals "advanced" | mode == QueryPage]
+                      in L.nub $ numberMetaFields $ advanced ++ status ++ user ++ argtypes
+            in queryURL server mode query
       B.putStrLn url
       unless dryrun $ do
         whenJustM (findExecutable "xdg-open") $ \xdgOpen ->
           cmd_ xdgOpen [B.unpack url]
 
-    queryURL :: QueryMode -> [(BzFields,String)] -> B.ByteString
-    queryURL mode query =
-      "https://" <> B.pack brc <> "/" <>
+    queryURL :: String -> QueryMode -> [(BzFields,String)] -> B.ByteString
+    queryURL server mode query =
+      "https://" <> B.pack server <> "/" <>
       case mode of
         APIQuery -> "rest/bug"
         BugList -> "buglist.cgi"
         CreateBug -> "enter_bug.cgi"
+        QueryPage -> "query.cgi"
         ListFields -> "query.cgi" -- unused
         ListOperators -> "query.cgi" -- unused
       <> renderQuery True (bzQuery query)
diff --git a/src/User.hs b/src/User.hs
--- a/src/User.hs
+++ b/src/User.hs
@@ -3,7 +3,7 @@
 -- SPDX-License-Identifier: GPL-2.0-or-later
 
 module User (
-  getBzUser
+  getRhBzUser
   )
 where
 
@@ -22,8 +22,8 @@
 
 import Bugzilla
 
-eitherBzUser :: IO (Either FilePath String)
-eitherBzUser = do
+eitherRhBzUser :: IO (Either FilePath String)
+eitherRhBzUser = do
   home <- getEnv "HOME"
   let rc = home </> ".bugzillarc"
   -- FIXME assumption if file exists then it has b.r.c user
@@ -41,9 +41,9 @@
       ini <- T.readFile inifile
       return $ either error fn $ parseIniFile ini iniparser
 
-getBzUser :: IO String
-getBzUser = do
-  euser <- eitherBzUser
+getRhBzUser :: IO String
+getRhBzUser = do
+  euser <- eitherRhBzUser
   case euser of
     Right user -> return user
     Left rc -> do
@@ -51,7 +51,7 @@
       when (emailIsValid email) $ do
         writeFile rc $ "[" <> brc <> "]\nuser = " <> email <> "\n"
         putStrLn $ "Saved in " ++ rc
-      getBzUser
+      getRhBzUser
   where
     emailIsValid :: String -> Bool
     emailIsValid = Email.isValid . B.pack
