diff --git a/src/Node.hs b/src/Node.hs
index 7434dcab4605cebc4fca4b570a1e0825eb79b998..0312ccfd42dd6ac762797b4766fb2afec0212c16 100644
--- a/src/Node.hs
+++ b/src/Node.hs
@@ -87,6 +87,10 @@ computeFailN1 :: Int -> Int -> Int -> Bool
 computeFailN1 new_rmem new_mem new_dsk =
     new_mem <= new_rmem || new_dsk <= 0
 
+-- | Given the new free memory and disk, fail if any of them is below zero.
+failHealth :: Int -> Int -> Bool
+failHealth new_mem new_dsk = new_mem <= 0 || new_dsk <= 0
+
 -- | Computes the maximum reserved memory for peers from a peer map.
 computeMaxRes :: PeerMap.PeerMap -> PeerMap.Elem
 computeMaxRes new_peers = PeerMap.maxElem new_peers
@@ -144,7 +148,7 @@ addPri t inst =
         new_mem = f_mem t - Instance.mem inst
         new_dsk = f_dsk t - Instance.dsk inst
         new_failn1 = computeFailN1 (maxRes t) new_mem new_dsk in
-      if new_failn1 then
+      if (failHealth new_mem new_dsk) || (new_failn1 && not (failN1 t)) then
         Nothing
       else
         let new_plist = iname:(plist t)
@@ -159,12 +163,13 @@ addSec :: Node -> Instance.Instance -> Int -> Maybe Node
 addSec t inst pdx =
     let iname = Instance.idx inst
         old_peers = peers t
+        old_mem = f_mem t
         new_dsk = f_dsk t - Instance.dsk inst
         new_peem = PeerMap.find pdx old_peers + Instance.mem inst
         new_peers = PeerMap.add pdx new_peem old_peers
         new_rmem = max (maxRes t) new_peem
-        new_failn1 = computeFailN1 new_rmem (f_mem t) new_dsk in
-    if new_failn1 then
+        new_failn1 = computeFailN1 new_rmem old_mem new_dsk in
+    if (failHealth old_mem new_dsk) || (new_failn1 && not (failN1 t)) then
         Nothing
     else
         let new_slist = iname:(slist t)