diff --git a/Ganeti/HTools/Cluster.hs b/Ganeti/HTools/Cluster.hs
index 6877f6c91b23aad728a33f66c2c24208a0c91fe3..5bba46e1401e5c71dd0cfa57b25d9292fb41101a 100644
--- a/Ganeti/HTools/Cluster.hs
+++ b/Ganeti/HTools/Cluster.hs
@@ -643,8 +643,10 @@ printNodes ktn nl =
         snl' = map (\ n -> ((fromJust $ lookup (Node.idx n) ktn), n)) snl
         m_name = maximum . (map length) . fst . unzip $ snl'
         helper = Node.list m_name
-        header = printf "%2s %-*s %5s %5s %5s %5s %5s %5s %3s %3s %7s %7s"
-                 " F" m_name "Name" "t_mem" "n_mem" "f_mem" "r_mem"
+        header = printf
+                 "%2s %-*s %5s %5s %5s %5s %5s %5s %5s %5s %3s %3s %7s %7s"
+                 " F" m_name "Name"
+                 "t_mem" "n_mem" "i_mem" "x_mem" "f_mem" "r_mem"
                  "t_dsk" "f_dsk"
                  "pri" "sec" "p_fmem" "p_fdsk"
     in unlines $ (header:map (uncurry helper) snl')
diff --git a/Ganeti/HTools/Node.hs b/Ganeti/HTools/Node.hs
index 3ecf6852553233a57661b172075749d5977715cc..c18b21b24ebee316d1dd6cbe0c243519447f9b21 100644
--- a/Ganeti/HTools/Node.hs
+++ b/Ganeti/HTools/Node.hs
@@ -217,10 +217,15 @@ list mname n t =
         dp = p_dsk t
         off = offline t
         fn = failN1 t
+        tmem = t_mem t
+        nmem = n_mem t
+        xmem = x_mem t
+        fmem = f_mem t
+        imem = (truncate tmem) - nmem - xmem - fmem
     in
-      printf " %c %-*s %5.0f %5d %5d %5d %5.0f %5d %3d %3d %.5f %.5f"
+      printf " %c %-*s %5.0f %5d %5d %5d %5d %5d %5.0f %5d %3d %3d %.5f %.5f"
                  (if off then '-' else if fn then '*' else ' ')
-                 mname n (t_mem t) (n_mem t) (f_mem t) (r_mem t)
+                 mname n tmem nmem imem xmem fmem (r_mem t)
                  ((t_dsk t) / 1024) ((f_dsk t) `div` 1024)
                  (length pl) (length sl)
                  mp dp
diff --git a/hbal.hs b/hbal.hs
index b34cd52473a7ac6085432e4f42e0a7f94ae511c9..e97b5127fed4ded6f8de8c2be2ca85a6254c2c70 100644
--- a/hbal.hs
+++ b/hbal.hs
@@ -153,6 +153,11 @@ main = do
                      readData getInstances host)
 
   (loaded_nl, il, csf, ktn, kti) <- liftM2 Cluster.loadData node_data inst_data
+  let (fix_msgs, fixed_nl) = Cluster.checkData loaded_nl il ktn kti
+
+  unless (null fix_msgs) $ do
+         putStrLn "Warning: cluster has inconsistent data:"
+         putStrLn . unlines . map (\s -> printf "  - %s" s) $ fix_msgs
 
   let offline_names = optOffline opts
       offline_indices = fst . unzip .
@@ -160,7 +165,7 @@ main = do
 
   let nl = Container.map (\n -> if elem (Node.idx n) offline_indices
                                 then Node.setOffline n True
-                                else n) loaded_nl
+                                else n) fixed_nl
 
   unless oneline $ printf "Loaded %d nodes, %d instances\n"
              (Container.size nl)
diff --git a/hn1.hs b/hn1.hs
index c452c959eff19ef93ba031ac8cc91224bdbcd15a..4140674dff6d49390ebac48d9f8a4be148f0447a 100644
--- a/hn1.hs
+++ b/hn1.hs
@@ -137,7 +137,13 @@ main = do
             host -> (readData getNodes host,
                      readData getInstances host)
 
-  (nl, il, csf, ktn, kti) <- liftM2 Cluster.loadData node_data inst_data
+  (loaded_nl, il, csf, ktn, kti) <- liftM2 Cluster.loadData node_data inst_data
+
+  let (fix_msgs, nl) = Cluster.checkData loaded_nl il ktn kti
+
+  unless (null fix_msgs) $ do
+         putStrLn "Warning: cluster has inconsistent data:"
+         putStrLn . unlines . map (\s -> printf "  - %s" s) $ fix_msgs
 
   printf "Loaded %d nodes, %d instances\n"
              (Container.size nl)
diff --git a/hscan.hs b/hscan.hs
index 8a3a64e489d6b47ac84392771391611cf51b1bc8..634cbe52c677f5a5fcb8f09927a529c70aad4b8e 100644
--- a/hscan.hs
+++ b/hscan.hs
@@ -162,8 +162,9 @@ main = do
                           (nl, il, csf, ktn, kti) =
                               Cluster.loadData ndata idata
                       putStrLn $ printCluster nl il ktn kti
-                      when (optShowNodes opts) $
-                           putStr $ Cluster.printNodes ktn nl
+                      when (optShowNodes opts) $ do
+                           let (_, fix_nl) = Cluster.checkData nl il ktn kti
+                           putStr $ Cluster.printNodes ktn fix_nl
                       let ndata = serializeNodes nl csf ktn
                           idata = serializeInstances il csf ktn kti
                           oname = odir </> name