diff --git a/src/linux/up-device-supply.c b/src/linux/up-device-supply.c
index 309c0e3..93ee367 100644
--- a/src/linux/up-device-supply.c
+++ b/src/linux/up-device-supply.c
@@ -526,6 +526,31 @@ up_device_supply_refresh_battery (UpDeviceSupply *supply)
 	/* used to convert A to W later */
 	voltage_design = up_device_supply_get_design_voltage (native_path);
 
+    /* these don't change at runtime */
+    energy_full = sysfs_get_double (native_path, "energy_full") / 1000000.0;
+    energy_full_design = sysfs_get_double (native_path, "energy_full_design") / 1000000.0;
+
+    /* convert charge to energy */
+    if (energy < 0.01) {
+        energy_full = sysfs_get_double (native_path, "charge_full") / 1000000.0;
+        energy_full_design = sysfs_get_double (native_path, "charge_full_design") / 1000000.0;
+        energy_full *= voltage_design;
+        energy_full_design *= voltage_design;
+        supply->priv->coldplug_units = UP_DEVICE_SUPPLY_COLDPLUG_UNITS_CHARGE;
+    }
+
+    /* the last full should not be bigger than the design */
+    if (energy_full > energy_full_design)
+        g_warning ("energy_full (%f) is greater than energy_full_design (%f)",
+                 energy_full, energy_full_design);
+
+    /* some systems don't have this */
+    if (energy_full < 0.01 && energy_full_design > 0.01) {
+        g_warning ("correcting energy_full (%f) using energy_full_design (%f)",
+                 energy_full, energy_full_design);
+        energy_full = energy_full_design;
+    }
+
 	/* initial values */
 	if (!supply->priv->has_coldplug_values ||
 	    up_device_supply_units_changed (supply, native_path)) {
@@ -568,31 +593,6 @@ up_device_supply_refresh_battery (UpDeviceSupply *supply)
 			      "recall-url", recall_url,
 			      NULL);
 
-		/* these don't change at runtime */
-		energy_full = sysfs_get_double (native_path, "energy_full") / 1000000.0;
-		energy_full_design = sysfs_get_double (native_path, "energy_full_design") / 1000000.0;
-
-		/* convert charge to energy */
-		if (energy < 0.01) {
-			energy_full = sysfs_get_double (native_path, "charge_full") / 1000000.0;
-			energy_full_design = sysfs_get_double (native_path, "charge_full_design") / 1000000.0;
-			energy_full *= voltage_design;
-			energy_full_design *= voltage_design;
-			supply->priv->coldplug_units = UP_DEVICE_SUPPLY_COLDPLUG_UNITS_CHARGE;
-		}
-
-		/* the last full should not be bigger than the design */
-		if (energy_full > energy_full_design)
-			g_warning ("energy_full (%f) is greater than energy_full_design (%f)",
-				     energy_full, energy_full_design);
-
-		/* some systems don't have this */
-		if (energy_full < 0.01 && energy_full_design > 0.01) {
-			g_warning ("correcting energy_full (%f) using energy_full_design (%f)",
-				     energy_full, energy_full_design);
-			energy_full = energy_full_design;
-		}
-
 		/* calculate how broken our battery is */
 		if (energy_full > 0) {
 			capacity = (energy_full / energy_full_design) * 100.0f;
@@ -605,12 +605,6 @@ up_device_supply_refresh_battery (UpDeviceSupply *supply)
 
 		/* we only coldplug once, as these values will never change */
 		supply->priv->has_coldplug_values = TRUE;
-	} else {
-		/* get the old full */
-		g_object_get (device,
-			      "energy-full", &energy_full,
-			      "energy-full-design", &energy_full_design,
-			      NULL);
 	}
 
 	status = g_strstrip (sysfs_get_string (native_path, "status"));
