diff --git a/hscan.hs b/hscan.hs
index 631c06157c7d52110ec85560c726e3778246f324..b2a4a9f7def9022f98eebb45510787c93f7508b5 100644
--- a/hscan.hs
+++ b/hscan.hs
@@ -38,7 +38,6 @@ import Text.Printf (printf)
 
 import qualified Ganeti.HTools.Container as Container
 import qualified Ganeti.HTools.Cluster as Cluster
-import qualified Ganeti.HTools.Group as Group
 import qualified Ganeti.HTools.Node as Node
 import qualified Ganeti.HTools.Instance as Instance
 #ifndef NO_CURL
@@ -89,26 +88,25 @@ fixSlash :: String -> String
 fixSlash = map (\x -> if x == '/' then '_' else x)
 
 
--- | Generates serialized data from loader input
-processData :: Result ClusterData
-            -> Result (Group.List, Node.List, Instance.List, String)
+-- | Generates serialized data from loader input.
+processData :: Result ClusterData -> Result ClusterData
 processData input_data = do
-  cdata@(ClusterData gl nl il _) <- input_data >>= mergeData [] [] []
+  cdata@(ClusterData _ nl il _) <- input_data >>= mergeData [] [] []
   let (_, fix_nl) = checkData nl il
-      adata = serializeCluster cdata
-  return (gl, fix_nl, il, adata)
+  return cdata { cdNodes = fix_nl }
 
 -- | Writes cluster data out
 writeData :: Int
           -> String
           -> Options
-          -> Result (Group.List, Node.List, Instance.List, String)
+          -> Result ClusterData
           -> IO Bool
 writeData _ name _ (Bad err) =
   printf "\nError for %s: failed to load data. Details:\n%s\n" name err >>
   return False
 
-writeData nlen name opts (Ok (_, nl, il, adata)) = do
+writeData nlen name opts (Ok cdata) = do
+  let (ClusterData _ nl il _) = cdata
   printf "%-*s " nlen name :: IO ()
   hFlush stdout
   let shownodes = optShowNodes opts
@@ -118,7 +116,7 @@ writeData nlen name opts (Ok (_, nl, il, adata)) = do
   hFlush stdout
   when (isJust shownodes) $
        putStr $ Cluster.printNodes nl (fromJust shownodes)
-  writeFile (oname <.> "data") adata
+  writeFile (oname <.> "data") (serializeCluster cdata)
   return True
 
 -- | Main function.