diff --git a/sflphone-client-gnome/src/dbus/configurationmanager-introspec.xml b/sflphone-client-gnome/src/dbus/configurationmanager-introspec.xml
index 7f5eac2ad6bf9104978f3ca794f002dc35d1f5c5..14ab67581a91ef703868f05f6b977c3d13c96f5e 100644
--- a/sflphone-client-gnome/src/dbus/configurationmanager-introspec.xml
+++ b/sflphone-client-gnome/src/dbus/configurationmanager-introspec.xml
@@ -243,6 +243,7 @@
     </method>
 
     <method name="setDialpad">
+      <arg type="b" name="display" direction="in"/>
     </method>
 
     <method name="getSearchbar">
diff --git a/sflphone-client-gnome/src/dbus/dbus.c b/sflphone-client-gnome/src/dbus/dbus.c
index 73543bd3286b748e850b5c790d41ffdbf0704a88..4b5cfdbfb94bff38742b14f9b2b1649fccb2db39 100644
--- a/sflphone-client-gnome/src/dbus/dbus.c
+++ b/sflphone-client-gnome/src/dbus/dbus.c
@@ -1627,13 +1627,13 @@ dbus_get_dialpad()
     return state;
 }
 
-    void
-dbus_set_dialpad(  )
+void dbus_set_dialpad (gboolean display)
 {
     
     GError* error = NULL;
     org_sflphone_SFLphone_ConfigurationManager_set_dialpad(
             configurationManagerProxy,
+			display,
             &error);
     if(error)
     {
diff --git a/sflphone-client-gnome/src/dbus/dbus.h b/sflphone-client-gnome/src/dbus/dbus.h
index 12ef975ff443ca893c1a2e6809421c0b1638061d..96404da971db48b76564911debe50e476a3956c6 100644
--- a/sflphone-client-gnome/src/dbus/dbus.h
+++ b/sflphone-client-gnome/src/dbus/dbus.h
@@ -363,7 +363,7 @@ void dbus_set_ringtone_choice( const gchar* tone );
 /**
  * ConfigurationManager - Set the dialpad visible or not
  */
-void dbus_set_dialpad(  );
+void dbus_set_dialpad (gboolean display);
 
 /**
  * ConfigurationManager - Tells if the user wants to display the dialpad or not
diff --git a/sflphone-client-gnome/src/mainwindow.c b/sflphone-client-gnome/src/mainwindow.c
index adf556f326783aecd412b262fd7236bff71d1f62..d8607eb30fe0345c35222ba6674e99eabb117177 100644
--- a/sflphone-client-gnome/src/mainwindow.c
+++ b/sflphone-client-gnome/src/mainwindow.c
@@ -315,8 +315,10 @@ main_window_info_message(gchar * markup){
 	main_window_message(GTK_MESSAGE_INFO, markup);
 }
 
-void
-main_window_dialpad( gboolean state ){
+void main_window_dialpad (gboolean state){
+
+	g_print ("main_window_dialpad\n");
+
 	if(state) {
 		dialpad = create_dialpad();
 		gtk_box_pack_end (GTK_BOX (subvbox), dialpad, FALSE /*expand*/, TRUE /*fill*/, 0 /*padding*/);
diff --git a/sflphone-client-gnome/src/uimanager.c b/sflphone-client-gnome/src/uimanager.c
index 4e782bb4d5ca67dce2db6446a616aeb85e351e39..9d6d3ca97dc32b71e383a7d22522964435b15fc4 100644
--- a/sflphone-client-gnome/src/uimanager.c
+++ b/sflphone-client-gnome/src/uimanager.c
@@ -245,7 +245,6 @@ void update_voicemail_status (void)
 static void volume_bar_cb (GtkToggleAction *togglemenuitem, gpointer user_data)
 {
 	gboolean toggled = gtk_toggle_action_get_active (togglemenuitem);
-	// DEBUG("%i\n", toggled);
 	main_window_volume_controls(toggled);
 	if (toggled || SHOW_VOLUME)
 		dbus_set_volume_controls(toggled);
@@ -254,7 +253,10 @@ static void volume_bar_cb (GtkToggleAction *togglemenuitem, gpointer user_data)
 static void dialpad_bar_cb (GtkToggleAction *togglemenuitem, gpointer user_data)
 {
 	gboolean toggled = gtk_toggle_action_get_active (togglemenuitem);
-	main_window_dialpad(toggled);
+	if (toggled == SHOW_DIALPAD)
+		return;
+	main_window_dialpad (toggled);
+	g_print ("dialpad_bar_cb - state: %i", toggled);
 	if (toggled || SHOW_DIALPAD)
 		dbus_set_dialpad(toggled);
 }
diff --git a/sflphone-common/src/dbus/configurationmanager-introspec.xml b/sflphone-common/src/dbus/configurationmanager-introspec.xml
index 7f5eac2ad6bf9104978f3ca794f002dc35d1f5c5..14ab67581a91ef703868f05f6b977c3d13c96f5e 100644
--- a/sflphone-common/src/dbus/configurationmanager-introspec.xml
+++ b/sflphone-common/src/dbus/configurationmanager-introspec.xml
@@ -243,6 +243,7 @@
     </method>
 
     <method name="setDialpad">
+      <arg type="b" name="display" direction="in"/>
     </method>
 
     <method name="getSearchbar">
diff --git a/sflphone-common/src/dbus/configurationmanager.cpp b/sflphone-common/src/dbus/configurationmanager.cpp
index d9f284cb9d00ae5c49c2bcfb9e507648648d4892..280b9b4c1645d8a5a49fa7ab04c013cf150d4149 100644
--- a/sflphone-common/src/dbus/configurationmanager.cpp
+++ b/sflphone-common/src/dbus/configurationmanager.cpp
@@ -590,9 +590,9 @@ ConfigurationManager::getDialpad (void)
 }
 
 void
-ConfigurationManager::setDialpad (void)
+ConfigurationManager::setDialpad (const bool& display)
 {
-    Manager::instance().setDialpad();
+    Manager::instance().setDialpad (display);
 }
 
 int32_t
diff --git a/sflphone-common/src/dbus/configurationmanager.h b/sflphone-common/src/dbus/configurationmanager.h
index 1592709cb14e0ec552f4f844b74944a72964c9a5..ba4371fd9038236a829f37d85f884d3167852b03 100644
--- a/sflphone-common/src/dbus/configurationmanager.h
+++ b/sflphone-common/src/dbus/configurationmanager.h
@@ -92,7 +92,7 @@ public:
     std::string getRecordPath( void );
     void setRecordPath(const std::string& recPath );
     int32_t getDialpad( void );
-    void setDialpad( void );
+    void setDialpad (const bool& display);
     int32_t getSearchbar( void );
     
     void setSearchbar( void );
diff --git a/sflphone-common/src/managerimpl.cpp b/sflphone-common/src/managerimpl.cpp
index e7f04c586a94f61c4ec3a61689dbe2b9176d222e..d816cf69cbb92eddf7080b5cfb02eb627d77208d 100644
--- a/sflphone-common/src/managerimpl.cpp
+++ b/sflphone-common/src/managerimpl.cpp
@@ -2809,9 +2809,16 @@ ManagerImpl::getDialpad (void)
 }
 
 void
-ManagerImpl::setDialpad (void)
+ManagerImpl::setDialpad (bool display)
 {
-    (getConfigString (PREFERENCES, CONFIG_DIALPAD) == TRUE_STR) ? setConfig (PREFERENCES, CONFIG_DIALPAD, FALSE_STR) : setConfig (PREFERENCES, CONFIG_DIALPAD, TRUE_STR);
+	std::string set;
+
+	display ? set = TRUE_STR : set = FALSE_STR;
+	// If the value we received is different from the one saved in the config file, save the new value
+	// Else do nothing
+	if ((display && (getConfigString (PREFERENCES, CONFIG_DIALPAD) != TRUE_STR)) || 
+		(!display && (getConfigString (PREFERENCES, CONFIG_DIALPAD) != FALSE_STR)))
+			setConfig (PREFERENCES, CONFIG_DIALPAD, set);
 }
 
 int
diff --git a/sflphone-common/src/managerimpl.h b/sflphone-common/src/managerimpl.h
index 40ed90c089274127008245428af036a545b4b586..23db39ed14f88a4ad2b20f00e031d3780eee8a9f 100644
--- a/sflphone-common/src/managerimpl.h
+++ b/sflphone-common/src/managerimpl.h
@@ -661,7 +661,7 @@ class ManagerImpl {
     /**
      * Set the dialpad visible or not
      */
-    void setDialpad( void );
+    void setDialpad (bool display);
 
     /**
      * Tells if the user wants to display the volume controls or not