diff --git a/Makefile.am b/Makefile.am
index 8d412c4068165755233566e7329064ef05e380b2..0402bc9c27decc8847e580bf3d0b169e20f34e66 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -413,11 +413,11 @@ HS_LIB_SRCS = \
 	htools/Ganeti/Objects.hs \
 	htools/Ganeti/OpCodes.hs \
 	htools/Ganeti/Rpc.hs \
+	htools/Ganeti/Qlang.hs \
 	htools/Ganeti/Queryd.hs \
 	htools/Ganeti/Runtime.hs \
 	htools/Ganeti/Ssconf.hs \
-	htools/Ganeti/THH.hs \
-	htools/Ganeti/Query2.hs
+	htools/Ganeti/THH.hs
 
 HS_BUILT_SRCS = htools/Ganeti/HTools/Version.hs htools/Ganeti/Constants.hs
 HS_BUILT_SRCS_IN = $(patsubst %,%.in,$(HS_BUILT_SRCS))
diff --git a/htools/Ganeti/HTools/Luxi.hs b/htools/Ganeti/HTools/Luxi.hs
index 109ccdb5005558b8ae71b7236a568ca570de0148..1374f33113ed50955dbb5099f5b3fd10fa15d1b8 100644
--- a/htools/Ganeti/HTools/Luxi.hs
+++ b/htools/Ganeti/HTools/Luxi.hs
@@ -39,7 +39,7 @@ import qualified Ganeti.HTools.Group as Group
 import qualified Ganeti.HTools.Node as Node
 import qualified Ganeti.HTools.Instance as Instance
 import Ganeti.HTools.JSON
-import Ganeti.Query2 as Query2
+import Ganeti.Qlang as Qlang
 
 {-# ANN module "HLint: ignore Eta reduce" #-}
 
@@ -100,7 +100,7 @@ queryNodesMsg :: L.LuxiOp
 queryNodesMsg =
   L.Query L.QRNode ["name", "mtotal", "mnode", "mfree", "dtotal", "dfree",
                     "ctotal", "offline", "drained", "vm_capable",
-                    "ndp/spindle_count", "group.uuid"] Query2.EmptyFilter
+                    "ndp/spindle_count", "group.uuid"] Qlang.EmptyFilter
 
 -- | The input data for instance query.
 queryInstancesMsg :: L.LuxiOp
@@ -108,7 +108,7 @@ queryInstancesMsg =
   L.Query L.QRInstance ["name", "disk_usage", "be/memory", "be/vcpus",
                         "status", "pnode", "snodes", "tags", "oper_ram",
                         "be/auto_balance", "disk_template",
-                        "be/spindle_use"] Query2.EmptyFilter
+                        "be/spindle_use"] Qlang.EmptyFilter
 
 -- | The input data for cluster query.
 queryClusterInfoMsg :: L.LuxiOp
@@ -118,7 +118,7 @@ queryClusterInfoMsg = L.QueryClusterInfo
 queryGroupsMsg :: L.LuxiOp
 queryGroupsMsg =
   L.Query L.QRGroup ["uuid", "name", "alloc_policy", "ipolicy"]
-   Query2.EmptyFilter
+   Qlang.EmptyFilter
 
 -- | Wraper over 'callMethod' doing node query.
 queryNodes :: L.Client -> IO (Result JSValue)
diff --git a/htools/Ganeti/HTools/QC.hs b/htools/Ganeti/HTools/QC.hs
index 4b902a7b9bc6071a6988ad0248e58def13bdb818..825bea437fcf7836dda7b91c254593d9321ceb2a 100644
--- a/htools/Ganeti/HTools/QC.hs
+++ b/htools/Ganeti/HTools/QC.hs
@@ -49,7 +49,7 @@ module Ganeti.HTools.QC
   , testLUXI
   , testSsconf
   , testRpc
-  , testQuery2
+  , testQlang
   ) where
 
 import Test.QuickCheck
@@ -79,7 +79,7 @@ import qualified Ganeti.Logging as Logging
 import qualified Ganeti.Luxi as Luxi
 import qualified Ganeti.Objects as Objects
 import qualified Ganeti.OpCodes as OpCodes
-import qualified Ganeti.Query2 as Query2
+import qualified Ganeti.Qlang as Qlang
 import qualified Ganeti.Rpc as Rpc
 import qualified Ganeti.Runtime as Runtime
 import qualified Ganeti.Ssconf as Ssconf
@@ -558,33 +558,33 @@ instance Arbitrary Rpc.RpcCallInstanceList where
 instance Arbitrary Rpc.RpcCallNodeInfo where
   arbitrary = Rpc.RpcCallNodeInfo <$> arbitrary <*> arbitrary
 
--- | Custom 'Query2.Filter' generator (top-level), which enforces a
+-- | Custom 'Qlang.Filter' generator (top-level), which enforces a
 -- (sane) limit on the depth of the generated filters.
-genFilter :: Gen Query2.Filter
+genFilter :: Gen Qlang.Filter
 genFilter = choose (0, 10) >>= genFilter'
 
 -- | Custom generator for filters that correctly halves the state of
 -- the generators at each recursive step, per the QuickCheck
 -- documentation, in order not to run out of memory.
-genFilter' :: Int -> Gen Query2.Filter
+genFilter' :: Int -> Gen Qlang.Filter
 genFilter' 0 =
-  oneof [ return Query2.EmptyFilter
-        , Query2.TrueFilter     <$> getName
-        , Query2.EQFilter       <$> getName <*> value
-        , Query2.LTFilter       <$> getName <*> value
-        , Query2.GTFilter       <$> getName <*> value
-        , Query2.LEFilter       <$> getName <*> value
-        , Query2.GEFilter       <$> getName <*> value
-        , Query2.RegexpFilter   <$> getName <*> getName
-        , Query2.ContainsFilter <$> getName <*> value
+  oneof [ return Qlang.EmptyFilter
+        , Qlang.TrueFilter     <$> getName
+        , Qlang.EQFilter       <$> getName <*> value
+        , Qlang.LTFilter       <$> getName <*> value
+        , Qlang.GTFilter       <$> getName <*> value
+        , Qlang.LEFilter       <$> getName <*> value
+        , Qlang.GEFilter       <$> getName <*> value
+        , Qlang.RegexpFilter   <$> getName <*> getName
+        , Qlang.ContainsFilter <$> getName <*> value
         ]
-    where value = oneof [ Query2.QuotedString <$> getName
-                        , Query2.NumericValue <$> arbitrary
+    where value = oneof [ Qlang.QuotedString <$> getName
+                        , Qlang.NumericValue <$> arbitrary
                         ]
 genFilter' n = do
-  oneof [ Query2.AndFilter  <$> vectorOf n'' (genFilter' n')
-        , Query2.OrFilter   <$> vectorOf n'' (genFilter' n')
-        , Query2.NotFilter  <$> genFilter' n'
+  oneof [ Qlang.AndFilter  <$> vectorOf n'' (genFilter' n')
+        , Qlang.OrFilter   <$> vectorOf n'' (genFilter' n')
+        , Qlang.NotFilter  <$> genFilter' n'
         ]
   where n' = n `div` 2 -- sub-filter generator size
         n'' = max n' 2 -- but we don't want empty or 1-element lists,
@@ -1988,15 +1988,15 @@ testSuite "Rpc"
   , 'prop_Rpc_noffl_request_nodeinfo
   ]
 
--- * Query2 tests
+-- * Qlang tests
 
 -- | Tests that serialisation/deserialisation of filters is
 -- idempotent.
-prop_Query2_Serialisation :: Property
-prop_Query2_Serialisation =
+prop_Qlang_Serialisation :: Property
+prop_Qlang_Serialisation =
   forAll genFilter $ \flt ->
   J.readJSON (J.showJSON flt) ==? J.Ok flt
 
-testSuite "Query2"
-  [ 'prop_Query2_Serialisation
+testSuite "Qlang"
+  [ 'prop_Qlang_Serialisation
   ]
diff --git a/htools/Ganeti/Luxi.hs b/htools/Ganeti/Luxi.hs
index 1e59ce6519e42e292b76246d2e0a0f93e283e137..8f0c2967e6442efaf74823be178123e80c41ddc3 100644
--- a/htools/Ganeti/Luxi.hs
+++ b/htools/Ganeti/Luxi.hs
@@ -76,7 +76,7 @@ import Ganeti.HTools.Utils
 import Ganeti.Constants
 import Ganeti.Jobs (JobStatus)
 import Ganeti.OpCodes (OpCode)
-import qualified Ganeti.Query2 as Query2
+import qualified Ganeti.Qlang as Qlang
 import Ganeti.THH
 
 -- * Utility functions
@@ -115,7 +115,7 @@ $(genLuxiOp "LuxiOp"
   [(luxiReqQuery,
     [ ("what",    [t| QrViaLuxi |], [| id |])
     , ("fields",  [t| [String]  |], [| id |])
-    , ("qfilter", [t| Query2.Filter  |], [| id |])
+    , ("qfilter", [t| Qlang.Filter |], [| id |])
     ])
   , (luxiReqQueryNodes,
      [ ("names",  [t| [String] |], [| id |])
diff --git a/htools/Ganeti/Query2.hs b/htools/Ganeti/Qlang.hs
similarity index 98%
rename from htools/Ganeti/Query2.hs
rename to htools/Ganeti/Qlang.hs
index e37e2d0be61b6d8037436a03348626251d5534a7..3a7fde2b24d43f91274c1874e4a389393ec3877b 100644
--- a/htools/Ganeti/Query2.hs
+++ b/htools/Ganeti/Qlang.hs
@@ -25,7 +25,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
 
 -}
 
-module Ganeti.Query2
+module Ganeti.Qlang
     ( Filter(..)
     , FilterValue(..)
     , Query(..)
@@ -69,7 +69,7 @@ $(declareSADT "FieldType"
   ])
 $(makeJSONInstance ''FieldType)
 
--- | Supported items on which Query2 works.
+-- | Supported items on which Qlang works.
 $(declareSADT "ItemType"
   [ ("QRCluster",  'C.qrCluster )
   , ("QRInstance", 'C.qrInstance )
@@ -82,7 +82,7 @@ $(declareSADT "ItemType"
   ])
 $(makeJSONInstance ''ItemType)
 
--- * Main Query2 queries and responses.
+-- * Main Qlang queries and responses.
 
 -- | Query2 query.
 data Query = Query ItemType Fields (Maybe Filter)
diff --git a/htools/test.hs b/htools/test.hs
index 24fd9e6dae90a6ec47ee622f0fe3b6bd201d77a3..7693c00b064ad246a90d9156a90f61cc74a5907b 100644
--- a/htools/test.hs
+++ b/htools/test.hs
@@ -126,7 +126,7 @@ allTests =
   , (fast, testJSON)
   , (fast, testLUXI)
   , (fast, testSsconf)
-  , (fast, testQuery2)
+  , (fast, testQlang)
   , (slow, testCluster)
   , (fast, testRpc)
   ]