diff --git a/src/QBar/Blocks/Battery.hs b/src/QBar/Blocks/Battery.hs
index cfa9f28ca0486af63abbea8e35d12215bb77d992..f7d0358d71cb02702bbcb08c1e34086718b1c60f 100644
--- a/src/QBar/Blocks/Battery.hs
+++ b/src/QBar/Blocks/Battery.hs
@@ -158,8 +158,8 @@ batteryIsDischarging = any (singleBatteryIsDischarging . _status)
 batteryEstimate :: [BatteryState] -> Maybe Int
 batteryEstimate batteryStates
   | batteryPowerNow == 0 = Nothing
-  | isCharging, not isDischarging = Just $ div ((batteryEnergyFull - batteryEnergyNow) * 3600) batteryPowerNow
-  | isDischarging, not isCharging = Just $ div (batteryEnergyNow * 3600) batteryPowerNow
+  | isCharging, not isDischarging = ensure (>0) batteryEstimateCharging
+  | isDischarging, not isCharging = ensure (>0) batteryEstimateDischarging
   | otherwise = Nothing
   where
     isCharging :: Bool
@@ -176,3 +176,9 @@ batteryEstimate batteryStates
 
     batteryEnergyFull :: Int
     batteryEnergyFull = sum . map _energyFull $ batteryStates
+
+    batteryEstimateCharging :: Int
+    batteryEstimateCharging = div ((batteryEnergyFull - batteryEnergyNow) * 3600) batteryPowerNow
+
+    batteryEstimateDischarging :: Int
+    batteryEstimateDischarging = div (batteryEnergyNow * 3600) batteryPowerNow
diff --git a/src/QBar/Blocks/Utils.hs b/src/QBar/Blocks/Utils.hs
index 17b759a98dae3608b1c27376555887cfeb6af8dc..59304f2adcfafc7a67cd689cf914ba85aaaff0c1 100644
--- a/src/QBar/Blocks/Utils.hs
+++ b/src/QBar/Blocks/Utils.hs
@@ -14,6 +14,11 @@ formatFloatN = formatFloatN' 0
 formatFloatN' :: RealFloat a => Int -> Int -> a -> T.Text
 formatFloatN' padWithZeros decimalPlaces f = T.justifyRight (fromIntegral padWithZeros) '0' . T.pack $ showFFloat (Just decimalPlaces) f ""
 
+ensure :: (a -> Bool) -> a -> Maybe a
+ensure f a
+  | f a = Just a
+  | otherwise = Nothing
+
 tryMaybe :: IO a -> IO (Maybe a)
 tryMaybe a = tryMaybe' (Just <$> a)