diff --git a/htools/Ganeti/Query/Query.hs b/htools/Ganeti/Query/Query.hs
index f9d7f46798a576c46890321de4b7ebf5476f26e2..b0090faa3fbec7a846827418523c80f87ae9aa0e 100644
--- a/htools/Ganeti/Query/Query.hs
+++ b/htools/Ganeti/Query/Query.hs
@@ -191,21 +191,21 @@ queryInner cfg _ (Query QRGroup fields qfilter) wanted = return $ do
 queryInner _ _ (Query qkind _ _) _ =
   return . Bad $ "Query '" ++ show qkind ++ "' not supported"
 
+-- | Helper for 'queryFields'.
+fieldsExtractor :: FieldMap a b -> [FilterField] -> QueryFieldsResult
+fieldsExtractor fieldsMap fields =
+  let selected = if null fields
+                   then map snd $ Map.toAscList fieldsMap
+                   else getSelectedFields fieldsMap fields
+  in QueryFieldsResult (map fst selected)
+
 -- | Query fields call.
--- FIXME: Looks generic enough to use a typeclass
 queryFields :: QueryFields -> Result QueryFieldsResult
 queryFields (QueryFields QRNode fields) =
-  let selected = if null fields
-                   then map snd $ Map.toAscList nodeFieldsMap
-                   else getSelectedFields nodeFieldsMap fields
-  in Ok $ QueryFieldsResult (map fst selected)
+  Ok $ fieldsExtractor nodeFieldsMap fields
 
 queryFields (QueryFields QRGroup fields) =
-  let selected = if null fields
-                   then map snd $ Map.toAscList groupFieldsMap
-                   else getSelectedFields groupFieldsMap fields
-  in Ok $ QueryFieldsResult (map fst selected)
-
+  Ok $ fieldsExtractor groupFieldsMap fields
 
 queryFields (QueryFields qkind _) =
   Bad $ "QueryFields '" ++ show qkind ++ "' not supported"