diff --git a/Ganeti/HTools/IAlloc.hs b/Ganeti/HTools/IAlloc.hs
index f015f9d42f0a0436f9cbe925e8a368480797e897..68a598f5bec0f86ba6194423f354f3b297cd98a7 100644
--- a/Ganeti/HTools/IAlloc.hs
+++ b/Ganeti/HTools/IAlloc.hs
@@ -156,7 +156,7 @@ parseData body = do
               let ex_ndx = map Node.idx ex_nodes
               return $ Evacuate ex_ndx
         other -> fail ("Invalid request type '" ++ other ++ "'")
-  return $ Request rqtype map_g map_n map_i ptags
+  return $ Request rqtype (ClusterData map_g map_n map_i ptags)
 
 -- | Format the result
 formatRVal :: RqType -> [Node.AllocElement] -> JSValue
diff --git a/Ganeti/HTools/Loader.hs b/Ganeti/HTools/Loader.hs
index 81ccbfee9181f98a8abcaf1be26bd1049614c888..13c10d655bd1d8d1b7cbba486bcf1219d8b9f182 100644
--- a/Ganeti/HTools/Loader.hs
+++ b/Ganeti/HTools/Loader.hs
@@ -73,7 +73,7 @@ data RqType
     deriving (Show)
 
 -- | A complete request, as received from Ganeti.
-data Request = Request RqType Group.List Node.List Instance.List [String]
+data Request = Request RqType ClusterData
     deriving (Show)
 
 -- | The cluster state.
diff --git a/hail.hs b/hail.hs
index 9fdaea64d66df3770518e0a62e938abaec394d24..ed67005718f348f2c47551aa3cdcdf83108cef54 100644
--- a/hail.hs
+++ b/hail.hs
@@ -37,7 +37,7 @@ import qualified Ganeti.HTools.Cluster as Cluster
 import Ganeti.HTools.CLI
 import Ganeti.HTools.IAlloc
 import Ganeti.HTools.Types
-import Ganeti.HTools.Loader (RqType(..), Request(..))
+import Ganeti.HTools.Loader (RqType(..), Request(..), ClusterData(..))
 import Ganeti.HTools.ExtLoader (loadExternalData)
 
 -- | Options list and functions
@@ -68,7 +68,7 @@ processResults _ as =
 processRequest :: Request
                -> Result Cluster.AllocSolution
 processRequest request =
-  let Request rqtype gl nl il _ = request
+  let Request rqtype (ClusterData gl nl il _) = request
   in case rqtype of
        Allocate xi reqn -> Cluster.tryMGAlloc gl nl il xi reqn
        Relocate idx reqn exnodes -> Cluster.tryReloc nl il idx reqn exnodes
@@ -90,8 +90,8 @@ readRequest opts args = do
   r2 <- if isJust (optDataFile opts) ||  (not . null . optNodeSim) opts
         then  do
           (gl, nl, il, ctags) <- loadExternalData opts
-          let Request rqt _ _ _ _ = r1
-          return $ Request rqt gl nl il ctags
+          let Request rqt _ = r1
+          return $ Request rqt (ClusterData gl nl il ctags)
         else return r1
   return r2
 
@@ -105,11 +105,12 @@ main = do
 
   request <- readRequest opts args
 
-  let Request rq _ nl _ _ = request
+  let Request rq cdata = request
 
   when (isJust shownodes) $ do
          hPutStrLn stderr "Initial cluster status:"
-         hPutStrLn stderr $ Cluster.printNodes nl (fromJust shownodes)
+         hPutStrLn stderr $ Cluster.printNodes (cdNodes cdata)
+                       (fromJust shownodes)
 
   let sols = processRequest request >>= processResults rq
   let (ok, info, rn) =