diff --git a/htools/Ganeti/HTools/Cluster.hs b/htools/Ganeti/HTools/Cluster.hs
index 10f34fdf36a6446f871600992a809f28973c73f9..c2b79089f4e73574bda5f60b7a6982982004f1e3 100644
--- a/htools/Ganeti/HTools/Cluster.hs
+++ b/htools/Ganeti/HTools/Cluster.hs
@@ -120,27 +120,27 @@ emptySolution = AllocSolution { asFailures = [], asAllocs = 0
 data Table = Table Node.List Instance.List Score [Placement]
              deriving (Show, Read)
 
-data CStats = CStats { csFmem :: Int    -- ^ Cluster free mem
-                     , csFdsk :: Int    -- ^ Cluster free disk
-                     , csAmem :: Int    -- ^ Cluster allocatable mem
-                     , csAdsk :: Int    -- ^ Cluster allocatable disk
-                     , csAcpu :: Int    -- ^ Cluster allocatable cpus
-                     , csMmem :: Int    -- ^ Max node allocatable mem
-                     , csMdsk :: Int    -- ^ Max node allocatable disk
-                     , csMcpu :: Int    -- ^ Max node allocatable cpu
-                     , csImem :: Int    -- ^ Instance used mem
-                     , csIdsk :: Int    -- ^ Instance used disk
-                     , csIcpu :: Int    -- ^ Instance used cpu
-                     , csTmem :: Double -- ^ Cluster total mem
-                     , csTdsk :: Double -- ^ Cluster total disk
-                     , csTcpu :: Double -- ^ Cluster total cpus
-                     , csVcpu :: Int    -- ^ Cluster virtual cpus (if
-                                        -- node pCpu has been set,
-                                        -- otherwise -1)
-                     , csXmem :: Int    -- ^ Unnacounted for mem
-                     , csNmem :: Int    -- ^ Node own memory
-                     , csScore :: Score -- ^ The cluster score
-                     , csNinst :: Int   -- ^ The total number of instances
+data CStats = CStats { csFmem :: Integer -- ^ Cluster free mem
+                     , csFdsk :: Integer -- ^ Cluster free disk
+                     , csAmem :: Integer -- ^ Cluster allocatable mem
+                     , csAdsk :: Integer -- ^ Cluster allocatable disk
+                     , csAcpu :: Integer -- ^ Cluster allocatable cpus
+                     , csMmem :: Integer -- ^ Max node allocatable mem
+                     , csMdsk :: Integer -- ^ Max node allocatable disk
+                     , csMcpu :: Integer -- ^ Max node allocatable cpu
+                     , csImem :: Integer -- ^ Instance used mem
+                     , csIdsk :: Integer -- ^ Instance used disk
+                     , csIcpu :: Integer -- ^ Instance used cpu
+                     , csTmem :: Double  -- ^ Cluster total mem
+                     , csTdsk :: Double  -- ^ Cluster total disk
+                     , csTcpu :: Double  -- ^ Cluster total cpus
+                     , csVcpu :: Integer -- ^ Cluster virtual cpus (if
+                                         -- node pCpu has been set,
+                                         -- otherwise -1)
+                     , csXmem :: Integer -- ^ Unnacounted for mem
+                     , csNmem :: Integer -- ^ Node own memory
+                     , csScore :: Score  -- ^ The cluster score
+                     , csNinst :: Int    -- ^ The total number of instances
                      }
             deriving (Show, Read)
 
@@ -196,23 +196,23 @@ updateCStats cs node =
         inc_vcpu = Node.hiCpu node
         inc_acpu = Node.availCpu node
 
-    in cs { csFmem = x_fmem + Node.fMem node
-          , csFdsk = x_fdsk + Node.fDsk node
-          , csAmem = x_amem + inc_amem'
-          , csAdsk = x_adsk + inc_adsk
-          , csAcpu = x_acpu + inc_acpu
-          , csMmem = max x_mmem inc_amem'
-          , csMdsk = max x_mdsk inc_adsk
-          , csMcpu = max x_mcpu inc_acpu
-          , csImem = x_imem + inc_imem
-          , csIdsk = x_idsk + inc_idsk
-          , csIcpu = x_icpu + inc_icpu
+    in cs { csFmem = x_fmem + fromIntegral (Node.fMem node)
+          , csFdsk = x_fdsk + fromIntegral (Node.fDsk node)
+          , csAmem = x_amem + fromIntegral inc_amem'
+          , csAdsk = x_adsk + fromIntegral inc_adsk
+          , csAcpu = x_acpu + fromIntegral inc_acpu
+          , csMmem = max x_mmem (fromIntegral inc_amem')
+          , csMdsk = max x_mdsk (fromIntegral inc_adsk)
+          , csMcpu = max x_mcpu (fromIntegral inc_acpu)
+          , csImem = x_imem + fromIntegral inc_imem
+          , csIdsk = x_idsk + fromIntegral inc_idsk
+          , csIcpu = x_icpu + fromIntegral inc_icpu
           , csTmem = x_tmem + Node.tMem node
           , csTdsk = x_tdsk + Node.tDsk node
           , csTcpu = x_tcpu + Node.tCpu node
-          , csVcpu = x_vcpu + inc_vcpu
-          , csXmem = x_xmem + Node.xMem node
-          , csNmem = x_nmem + Node.nMem node
+          , csVcpu = x_vcpu + fromIntegral inc_vcpu
+          , csXmem = x_xmem + fromIntegral (Node.xMem node)
+          , csNmem = x_nmem + fromIntegral (Node.nMem node)
           , csNinst = x_ninst + length (Node.pList node)
           }
 
@@ -233,10 +233,14 @@ computeAllocationDelta cini cfin =
     let CStats {csImem = i_imem, csIdsk = i_idsk, csIcpu = i_icpu} = cini
         CStats {csImem = f_imem, csIdsk = f_idsk, csIcpu = f_icpu,
                 csTmem = t_mem, csTdsk = t_dsk, csVcpu = v_cpu } = cfin
-        rini = RSpec i_icpu i_imem i_idsk
-        rfin = RSpec (f_icpu - i_icpu) (f_imem - i_imem) (f_idsk - i_idsk)
-        un_cpu = v_cpu - f_icpu
-        runa = RSpec un_cpu (truncate t_mem - f_imem) (truncate t_dsk - f_idsk)
+        rini = RSpec (fromIntegral i_icpu) (fromIntegral i_imem)
+               (fromIntegral i_idsk)
+        rfin = RSpec (fromIntegral (f_icpu - i_icpu))
+               (fromIntegral (f_imem - i_imem))
+               (fromIntegral (f_idsk - i_idsk))
+        un_cpu = fromIntegral (v_cpu - f_icpu)::Int
+        runa = RSpec un_cpu (truncate t_mem - fromIntegral f_imem)
+               (truncate t_dsk - fromIntegral f_idsk)
     in (rini, rfin, runa)
 
 -- | The names and weights of the individual elements in the CV list