diff --git a/src/gpm-backlight.c b/src/gpm-backlight.c
--- a/src/gpm-backlight.c
+++ b/src/gpm-backlight.c
@@ -71,7 +71,8 @@
 	gboolean		 system_is_idle;
 	GTimer			*idle_timer;
 	guint			 idle_dim_timeout;
-	guint			 master_percentage;
+	guint			 ac_master_percentage;
+	guint			 battery_master_percentage;
 };
 
 enum {
@@ -97,6 +98,29 @@
 }
 
 /**
+ * gpm_backlight_should_use_battery_master
+ *
+ * Returns true if the system is currently on battery power and gpm is set to
+ * dim on battery power.
+ */
+static gboolean
+gpm_backlight_should_use_battery_master (GpmBacklight *backlight)
+{
+	gboolean on_battery;
+	gboolean battery_reduce;
+
+	/* get battery status */
+	g_object_get (backlight->priv->client,
+		      "on-battery", &on_battery,
+		      NULL);
+
+	/* should we reduce on battery */
+	battery_reduce = gconf_client_get_bool (backlight->priv->conf, GPM_CONF_BACKLIGHT_BATTERY_REDUCE, NULL);
+
+	return (on_battery && battery_reduce);
+}
+
+/**
  * gpm_backlight_get_brightness:
  **/
 gboolean
@@ -149,7 +173,11 @@
 	}
 
 	/* just set the master percentage for now, don't try to be clever */
-	backlight->priv->master_percentage = percentage;
+	if (gpm_backlight_should_use_battery_master (backlight)) {
+		backlight->priv->battery_master_percentage = percentage;
+	} else {
+		backlight->priv->ac_master_percentage = percentage;
+	}
 
 	/* sets the current policy brightness */
 	ret = gpm_brightness_set (backlight->priv->brightness, percentage, &hw_changed);
@@ -276,7 +304,6 @@
 	gboolean on_battery;
 	gboolean do_laptop_lcd;
 	gboolean enable_action;
-	gboolean battery_reduce;
 	gboolean hw_changed;
 	guint value;
 	guint old_value;
@@ -293,7 +320,11 @@
 	}
 
 	/* get the last set brightness */
-	brightness = backlight->priv->master_percentage / 100.0f;
+	if (gpm_backlight_should_use_battery_master (backlight)) {
+		brightness = backlight->priv->battery_master_percentage / 100.0f;
+	} else {
+		brightness = backlight->priv->ac_master_percentage / 100.0f;
+	}
 	egg_debug ("1. main brightness %f", brightness);
 
 	/* get battery status */
@@ -301,21 +332,6 @@
 		      "on-battery", &on_battery,
 		      NULL);
 
-	/* reduce if on battery power if we should */
-	battery_reduce = gconf_client_get_bool (backlight->priv->conf, GPM_CONF_BACKLIGHT_BATTERY_REDUCE, NULL);
-	if (on_battery && battery_reduce) {
-		value = gconf_client_get_int (backlight->priv->conf, GPM_CONF_BACKLIGHT_BRIGHTNESS_DIM_BATT, NULL);
-		if (value > 100) {
-			egg_warning ("cannot use battery brightness value %i, correcting to 50", value);
-			value = 50;
-		}
-		scale = (100 - value) / 100.0f;
-		brightness *= scale;
-	} else {
-		scale = 1.0f;
-	}
-	egg_debug ("2. battery scale %f, brightness %f", scale, brightness);
-
 	/* reduce if system is momentarily idle */
 	if (!on_battery)
 		enable_action = gconf_client_get_bool (backlight->priv->conf, GPM_CONF_BACKLIGHT_IDLE_DIM_AC, NULL);
@@ -381,11 +397,12 @@
 		      "on-battery", &on_battery,
 		      NULL);
 
-	if (!on_battery && strcmp (entry->key, GPM_CONF_BACKLIGHT_BRIGHTNESS_AC) == 0) {
-		backlight->priv->master_percentage = gconf_value_get_int (value);
+	if (strcmp (entry->key, GPM_CONF_BACKLIGHT_BRIGHTNESS_AC) == 0) {
+		backlight->priv->ac_master_percentage = gconf_value_get_int (value);
 		gpm_backlight_brightness_evaluate_and_set (backlight, FALSE);
 
-	} else if (on_battery && strcmp (entry->key, GPM_CONF_BACKLIGHT_BRIGHTNESS_DIM_BATT) == 0) {
+	} else if (strcmp (entry->key, GPM_CONF_BACKLIGHT_BRIGHTNESS_DIM_BATT) == 0) {
+		backlight->priv->battery_master_percentage = gconf_value_get_int (value);
 		gpm_backlight_brightness_evaluate_and_set (backlight, FALSE);
 
 	} else if (strcmp (entry->key, GPM_CONF_BACKLIGHT_IDLE_DIM_AC) == 0 ||
@@ -444,7 +461,11 @@
 								percentage);
 			gpm_backlight_dialog_show (backlight);
 			/* save the new percentage */
-			backlight->priv->master_percentage = percentage;
+			if (gpm_backlight_should_use_battery_master (backlight)) {
+				backlight->priv->battery_master_percentage = percentage;
+			} else {
+				backlight->priv->ac_master_percentage = percentage;
+			}
 		}
 		/* we emit a signal for the brightness applet */
 		if (ret && hw_changed) {
@@ -463,7 +484,11 @@
 								percentage);
 			gpm_backlight_dialog_show (backlight);
 			/* save the new percentage */
-			backlight->priv->master_percentage = percentage;
+			if (gpm_backlight_should_use_battery_master (backlight)) {
+				backlight->priv->battery_master_percentage = percentage;
+			} else {
+				backlight->priv->ac_master_percentage = percentage;
+			}
 		}
 		/* we emit a signal for the brightness applet */
 		if (ret && hw_changed) {
@@ -628,7 +653,11 @@
 brightness_changed_cb (GpmBrightness *brightness, guint percentage, GpmBacklight *backlight)
 {
 	/* save the new percentage */
-	backlight->priv->master_percentage = percentage;
+	if (gpm_backlight_should_use_battery_master (backlight)) {
+		backlight->priv->battery_master_percentage = percentage;
+	} else {
+		backlight->priv->ac_master_percentage = percentage;
+	}
 
 	/* we emit a signal for the brightness applet */
 	egg_debug ("emitting brightness-changed : %i", percentage);
@@ -761,7 +790,8 @@
 
 	/* set the main brightness, this is designed to be updated if the user changes the
 	 * brightness so we can undim to the 'correct' value */
-	backlight->priv->master_percentage = gconf_client_get_int (backlight->priv->conf, GPM_CONF_BACKLIGHT_BRIGHTNESS_AC, NULL);
+	backlight->priv->ac_master_percentage = gconf_client_get_int (backlight->priv->conf, GPM_CONF_BACKLIGHT_BRIGHTNESS_AC, NULL);
+	backlight->priv->battery_master_percentage = gconf_client_get_int (backlight->priv->conf, GPM_CONF_BACKLIGHT_BRIGHTNESS_DIM_BATT, NULL);
 
 	/* watch for brightness up and down buttons and also check lid state */
 	backlight->priv->button = gpm_button_new ();
