diff --git a/ChangeLog b/ChangeLog
index c93de12bfab633c1f5f37543df132d2592ab569f..9426dd13dd2d6a96cebb2d7a2e256958dd30f528 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,6 @@
+2009-05-19 12:30
+	* : Use GError in the get brightness method.
+
 2009-05-19 12:00
 	* : check brightness value and only display relevent values in
 	the brightness popup.
diff --git a/src/xfpm-brightness-hal.c b/src/xfpm-brightness-hal.c
index 305d248a89557590e6f3672432824905864c16f0..cd1fb3568d64b29476642afc5b5483a53928c733 100644
--- a/src/xfpm-brightness-hal.c
+++ b/src/xfpm-brightness-hal.c
@@ -86,23 +86,16 @@ static guint signals [LAST_SIGNAL] = { 0 };
 G_DEFINE_TYPE(XfpmBrightnessHal, xfpm_brightness_hal, G_TYPE_OBJECT)
 
 static gint 
-xfpm_brightness_hal_get_level (XfpmBrightnessHal *brg)
+xfpm_brightness_hal_get_level (XfpmBrightnessHal *brg, GError **error)
 {
-    GError *error = NULL;
     gint level = 0;
     gboolean ret = FALSE;
     
-    ret = dbus_g_proxy_call (brg->priv->proxy, "GetBrightness", &error,
+    ret = dbus_g_proxy_call (brg->priv->proxy, "GetBrightness", error,
 	 		     G_TYPE_INVALID,
 			     G_TYPE_INT, &level,
 			     G_TYPE_INVALID);
 
-    if ( error )
-    {
-	g_critical ("Error getting brightness level: %s\n", error->message);
-	g_error_free (error);
-    }
-		       
     if (!ret)
     {
 	g_warning("GetBrightness failed\n");
@@ -195,7 +188,7 @@ xfpm_brightness_hal_setup (XfpmBrightnessHal *brg)
     xfpm_brightness_hal_get_device (brg, udi[0]);
     xfpm_brightness_hal_set_proxy (brg, udi[0]);
 
-    brg->priv->hw_level = xfpm_brightness_hal_get_level (brg);
+    brg->priv->hw_level = xfpm_brightness_hal_get_level (brg, NULL);
     TRACE ("Current hw level =%d\n", brg->priv->hw_level);
     
     hal_manager_free_string_array (udi);
@@ -205,6 +198,8 @@ xfpm_brightness_hal_setup (XfpmBrightnessHal *brg)
 static void
 xfpm_brightness_hal_up (XfpmBrightnessHal *brg)
 {
+    GError *error = NULL;
+    
     gboolean enable_brightness = xfpm_xfconf_get_property_bool (brg->priv->conf, ENABLE_BRIGHTNESS_CONTROL);
     
     if ( enable_brightness == FALSE || brg->priv->brightness_in_hw)
@@ -217,14 +212,23 @@ xfpm_brightness_hal_up (XfpmBrightnessHal *brg)
     }
     
 signal:
-    brg->priv->hw_level = xfpm_brightness_hal_get_level (brg);
-    if ( G_LIKELY ( brg->priv->hw_level != 0 ) )
-	g_signal_emit (G_OBJECT (brg), signals [BRIGHTNESS_UP], 0, brg->priv->hw_level);
+    brg->priv->hw_level = xfpm_brightness_hal_get_level (brg, &error);
+   
+    if ( error )
+    {
+	g_warning ("Error getting brightness level: %s\n", error->message);
+	g_error_free (error);
+	return;
+    }
+	
+    g_signal_emit (G_OBJECT (brg), signals [BRIGHTNESS_UP], 0, brg->priv->hw_level);
 }
 
 static void
 xfpm_brightness_hal_down (XfpmBrightnessHal *brg)
 {
+    GError *error = NULL;
+    
     gboolean enable_brightness = xfpm_xfconf_get_property_bool (brg->priv->conf, ENABLE_BRIGHTNESS_CONTROL);
     
     if ( enable_brightness == FALSE || brg->priv->brightness_in_hw)
@@ -237,9 +241,15 @@ xfpm_brightness_hal_down (XfpmBrightnessHal *brg)
     }
     
 signal:
-    brg->priv->hw_level = xfpm_brightness_hal_get_level (brg);
-    if ( G_LIKELY ( brg->priv->hw_level != 0 ) )
-	g_signal_emit (G_OBJECT (brg), signals [BRIGHTNESS_DOWN], 0, brg->priv->hw_level);
+    brg->priv->hw_level = xfpm_brightness_hal_get_level (brg, &error);
+    
+    if ( error )
+    {
+	g_warning ("Error getting brightness level: %s\n", error->message);
+	g_error_free (error);
+	return;
+    }
+    g_signal_emit (G_OBJECT (brg), signals [BRIGHTNESS_UP], 0, brg->priv->hw_level);
 }
 
 static void
@@ -260,6 +270,7 @@ xfpm_brightness_hal_button_pressed_cb (XfpmButton *button, XfpmButtonKey type, X
 static void
 xfpm_brightness_hal_reset_cb (XfpmIdle *idle, XfpmBrightnessHal *brg)
 {
+    GError *error = NULL;
     guint level;
     
     if (brg->priv->block)
@@ -268,7 +279,14 @@ xfpm_brightness_hal_reset_cb (XfpmIdle *idle, XfpmBrightnessHal *brg)
     if ( brg->priv->inhibited )
 	return;
     
-    level = xfpm_brightness_hal_get_level(brg);
+    level = xfpm_brightness_hal_get_level (brg, &error);
+     
+    if ( error )
+    {
+	g_warning ("Error getting brightness level: %s\n", error->message);
+	g_error_free (error);
+	return;
+    }
      
     if ( level != brg->priv->hw_level )
     {
@@ -280,12 +298,20 @@ xfpm_brightness_hal_reset_cb (XfpmIdle *idle, XfpmBrightnessHal *brg)
 static void
 xfpm_brightness_timeout_on_ac (XfpmBrightnessHal *brg)
 {
+    GError *error = NULL;
     guint level;
     
     if ( brg->priv->on_battery )
 	    return;
     
-    level = xfpm_brightness_hal_get_level(brg);
+    level = xfpm_brightness_hal_get_level (brg, &error);
+    
+    if ( error )
+    {
+	g_warning ("Error getting brightness level: %s\n", error->message);
+	g_error_free (error);
+	return;
+    }
     
     if ( level != 0 && level != brg->priv->step )
     {
@@ -297,12 +323,20 @@ xfpm_brightness_timeout_on_ac (XfpmBrightnessHal *brg)
 static void
 xfpm_brightness_timeout_on_battery (XfpmBrightnessHal *brg)
 {
+    GError *error = NULL;
     guint level;
     
     if ( !brg->priv->on_battery )
 	    return;
     
-    level = xfpm_brightness_hal_get_level(brg);
+    level = xfpm_brightness_hal_get_level (brg, &error);
+    
+    if ( error )
+    {
+	g_warning ("Error getting brightness level: %s\n", error->message);
+	g_error_free (error);
+	return;
+    }
     
     if ( level != 0 && level != brg->priv->step )
     {