diff --git a/sflphone-gtk/src/configurationmanager-glue.h b/sflphone-gtk/src/configurationmanager-glue.h
index e3458cd04a7d6bb2d0eb53afedf187bffde9b28b..b637a86310fb28b8f8115ebc4a964b0f070442ea 100644
--- a/sflphone-gtk/src/configurationmanager-glue.h
+++ b/sflphone-gtk/src/configurationmanager-glue.h
@@ -466,6 +466,81 @@ static
 inline
 #endif
 gboolean
+org_sflphone_SFLphone_ConfigurationManager_is_ringtone_enabled (DBusGProxy *proxy, gint* OUT_bool, GError **error)
+
+{
+  return dbus_g_proxy_call (proxy, "isRingtoneEnabled", error, G_TYPE_INVALID, G_TYPE_INT, OUT_bool, G_TYPE_INVALID);
+}
+
+typedef void (*org_sflphone_SFLphone_ConfigurationManager_is_ringtone_enabled_reply) (DBusGProxy *proxy, gint OUT_bool, GError *error, gpointer userdata);
+
+static void
+org_sflphone_SFLphone_ConfigurationManager_is_ringtone_enabled_async_callback (DBusGProxy *proxy, DBusGProxyCall *call, void *user_data)
+{
+  DBusGAsyncData *data = (DBusGAsyncData*) user_data;
+  GError *error = NULL;
+  gint OUT_bool;
+  dbus_g_proxy_end_call (proxy, call, &error, G_TYPE_INT, &OUT_bool, G_TYPE_INVALID);
+  (*(org_sflphone_SFLphone_ConfigurationManager_is_ringtone_enabled_reply)data->cb) (proxy, OUT_bool, error, data->userdata);
+  return;
+}
+
+static
+#ifdef G_HAVE_INLINE
+inline
+#endif
+DBusGProxyCall*
+org_sflphone_SFLphone_ConfigurationManager_is_ringtone_enabled_async (DBusGProxy *proxy, org_sflphone_SFLphone_ConfigurationManager_is_ringtone_enabled_reply callback, gpointer userdata)
+
+{
+  DBusGAsyncData *stuff;
+  stuff = g_new (DBusGAsyncData, 1);
+  stuff->cb = G_CALLBACK (callback);
+  stuff->userdata = userdata;
+  return dbus_g_proxy_begin_call (proxy, "isRingtoneEnabled", org_sflphone_SFLphone_ConfigurationManager_is_ringtone_enabled_async_callback, stuff, g_free, G_TYPE_INVALID);
+}
+static
+#ifdef G_HAVE_INLINE
+inline
+#endif
+gboolean
+org_sflphone_SFLphone_ConfigurationManager_ringtone_enabled (DBusGProxy *proxy, GError **error)
+
+{
+  return dbus_g_proxy_call (proxy, "ringtoneEnabled", error, G_TYPE_INVALID, G_TYPE_INVALID);
+}
+
+typedef void (*org_sflphone_SFLphone_ConfigurationManager_ringtone_enabled_reply) (DBusGProxy *proxy, GError *error, gpointer userdata);
+
+static void
+org_sflphone_SFLphone_ConfigurationManager_ringtone_enabled_async_callback (DBusGProxy *proxy, DBusGProxyCall *call, void *user_data)
+{
+  DBusGAsyncData *data = (DBusGAsyncData*) user_data;
+  GError *error = NULL;
+  dbus_g_proxy_end_call (proxy, call, &error, G_TYPE_INVALID);
+  (*(org_sflphone_SFLphone_ConfigurationManager_ringtone_enabled_reply)data->cb) (proxy, error, data->userdata);
+  return;
+}
+
+static
+#ifdef G_HAVE_INLINE
+inline
+#endif
+DBusGProxyCall*
+org_sflphone_SFLphone_ConfigurationManager_ringtone_enabled_async (DBusGProxy *proxy, org_sflphone_SFLphone_ConfigurationManager_ringtone_enabled_reply callback, gpointer userdata)
+
+{
+  DBusGAsyncData *stuff;
+  stuff = g_new (DBusGAsyncData, 1);
+  stuff->cb = G_CALLBACK (callback);
+  stuff->userdata = userdata;
+  return dbus_g_proxy_begin_call (proxy, "ringtoneEnabled", org_sflphone_SFLphone_ConfigurationManager_ringtone_enabled_async_callback, stuff, g_free, G_TYPE_INVALID);
+}
+static
+#ifdef G_HAVE_INLINE
+inline
+#endif
+gboolean
 org_sflphone_SFLphone_ConfigurationManager_get_codec_list (DBusGProxy *proxy, char *** OUT_list, GError **error)
 
 {
diff --git a/sflphone-gtk/src/configwindow.c b/sflphone-gtk/src/configwindow.c
index 698a347e8bd8d51b197c3ca1dd082a0857f8b983..f59e61f171880d4c1bfea7ceb8d6160090e4c4ac 100644
--- a/sflphone-gtk/src/configwindow.c
+++ b/sflphone-gtk/src/configwindow.c
@@ -35,6 +35,7 @@
  * Local variables
  */
 gboolean dialogOpen = FALSE;
+gboolean ringtoneEnabled = TRUE;
 
 GtkListStore *accountStore;
 GtkWidget *codecTreeView;		// View used instead of store to get access to selection
@@ -482,6 +483,18 @@ default_account(GtkWidget *widget, gpointer data)
 	}
 }
 
+int 
+is_ringtone_enabled( void )
+{
+  int res =  dbus_is_ringtone_enabled();
+  return res;  
+}
+
+void 
+ringtone_enabled( void )
+{
+  dbus_ringtone_enabled();  
+}
 /**
  * Call back when the user click on an account in the list
  */
@@ -938,6 +951,7 @@ create_audio_tab ()
 	GtkWidget *deviceTable;
 	GtkWidget *codecLabel;
 	GtkWidget *codecBox;
+	GtkWidget *enableTone;
 	
 	GtkWidget *titleLabel;
 	GtkWidget *comboBox;
@@ -1081,6 +1095,14 @@ create_audio_tab ()
 	gtk_box_pack_start(GTK_BOX(codecBox), codecTable, TRUE, TRUE, 0);
 	gtk_widget_show(codecTable);
 
+    // check button to enable ringtones
+	GtkWidget* box = gtk_hbox_new( TRUE , 1);
+	gtk_box_pack_start( GTK_BOX(ret) , box , TRUE , TRUE , 1);
+	enableTone = gtk_check_button_new_with_mnemonic( "_Enable ringtones");
+	gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON(enableTone), dbus_is_ringtone_enabled() );
+	gtk_box_pack_start( GTK_BOX(box) , enableTone , TRUE , TRUE , 1);
+	g_signal_connect(G_OBJECT( enableTone) , "clicked" , G_CALLBACK( ringtone_enabled ) , NULL);
+
 	// Show all
 	gtk_widget_show_all(ret);
 
diff --git a/sflphone-gtk/src/dbus.c b/sflphone-gtk/src/dbus.c
index d29209f5d737e55f7ae0824b6cb21d17435ad0d9..6f4389b9811a3577307df909a8f99f7d85a4d501 100644
--- a/sflphone-gtk/src/dbus.c
+++ b/sflphone-gtk/src/dbus.c
@@ -1027,6 +1027,41 @@ dbus_get_current_audio_output_plugin()
 	return plugin;
 }
 
+int
+dbus_is_ringtone_enabled()
+{
+	int res;
+	GError* error = NULL;
+	org_sflphone_SFLphone_ConfigurationManager_is_ringtone_enabled(
+			configurationManagerProxy,
+			&res,
+			&error);
+	g_print("After");
+	if(error)
+	{
+		g_error_free(error);
+	}
+	else
+		g_print("DBus called is_ringtone_enabled() on ConfigurationManager\n");
+	return res;
+}
+
+void
+dbus_ringtone_enabled()
+{
+	GError* error = NULL;
+	org_sflphone_SFLphone_ConfigurationManager_ringtone_enabled(
+			configurationManagerProxy,
+			&error);
+	g_print("After");
+	if(error)
+	{
+		g_error_free(error);
+	}
+	else
+		g_print("DBus called ringtone_enabled() on ConfigurationManager\n");
+}
+
 int
 dbus_is_iax2_enabled()
 {
diff --git a/sflphone-gtk/src/dbus.h b/sflphone-gtk/src/dbus.h
index 1cba5951a498150de2634c9010cb640634984c10..03a5c2f8cb69dde0c7a074fa14cfff4cb6b70c4d 100644
--- a/sflphone-gtk/src/dbus.h
+++ b/sflphone-gtk/src/dbus.h
@@ -74,6 +74,7 @@ gchar** dbus_get_current_audio_devices_index();
 int dbus_get_audio_device_index(const gchar* name);
 gchar* dbus_get_current_audio_output_plugin();
 int dbus_is_iax2_enabled( void );
+int dbus_is_ringtone_enabled( void );
 
 /* Instance */
 void dbus_register( int pid, gchar * name);
diff --git a/src/dbus/configurationmanager-glue.h b/src/dbus/configurationmanager-glue.h
index 5795299bb945a6567883222ae5746c87497ecd50..59e12b3505f03f31ad21c60aded86ebf556be9b9 100644
--- a/src/dbus/configurationmanager-glue.h
+++ b/src/dbus/configurationmanager-glue.h
@@ -32,6 +32,8 @@ public:
         register_method(ConfigurationManager, getRingtoneList, _getRingtoneList_stub);
         register_method(ConfigurationManager, getPlaybackDeviceList, _getPlaybackDeviceList_stub);
         register_method(ConfigurationManager, getRecordDeviceList, _getRecordDeviceList_stub);
+        register_method(ConfigurationManager, isRingtoneEnabled, _isRingtoneEnabled_stub);
+        register_method(ConfigurationManager, ringtoneEnabled, _ringtoneEnabled_stub);
         register_method(ConfigurationManager, getCodecList, _getCodecList_stub);
         register_method(ConfigurationManager, getCodecDetails, _getCodecDetails_stub);
         register_method(ConfigurationManager, getActiveCodecList, _getActiveCodecList_stub);
@@ -114,6 +116,15 @@ public:
             { "list", "as", false },
             { 0, 0, 0 }
         };
+        static ::DBus::IntrospectedArgument isRingtoneEnabled_args[] = 
+        {
+            { "bool", "i", false },
+            { 0, 0, 0 }
+        };
+        static ::DBus::IntrospectedArgument ringtoneEnabled_args[] = 
+        {
+            { 0, 0, 0 }
+        };
         static ::DBus::IntrospectedArgument getCodecList_args[] = 
         {
             { "list", "as", false },
@@ -219,6 +230,8 @@ public:
             { "getRingtoneList", getRingtoneList_args },
             { "getPlaybackDeviceList", getPlaybackDeviceList_args },
             { "getRecordDeviceList", getRecordDeviceList_args },
+            { "isRingtoneEnabled", isRingtoneEnabled_args },
+            { "ringtoneEnabled", ringtoneEnabled_args },
             { "getCodecList", getCodecList_args },
             { "getCodecDetails", getCodecDetails_args },
             { "getActiveCodecList", getActiveCodecList_args },
@@ -280,6 +293,8 @@ public:
     virtual std::vector< ::DBus::String > getRingtoneList(  ) = 0;
     virtual std::vector< ::DBus::String > getPlaybackDeviceList(  ) = 0;
     virtual std::vector< ::DBus::String > getRecordDeviceList(  ) = 0;
+    virtual ::DBus::Int32 isRingtoneEnabled(  ) = 0;
+    virtual void ringtoneEnabled(  ) = 0;
     virtual std::vector< ::DBus::String > getCodecList(  ) = 0;
     virtual std::vector< ::DBus::String > getCodecDetails( const ::DBus::Int32& payload ) = 0;
     virtual std::vector< ::DBus::String > getActiveCodecList(  ) = 0;
@@ -436,6 +451,24 @@ private:
         wi << argout1;
         return reply;
     }
+    ::DBus::Message _isRingtoneEnabled_stub( const ::DBus::CallMessage& call )
+    {
+        ::DBus::MessageIter ri = call.reader();
+
+        ::DBus::Int32 argout1 = isRingtoneEnabled();
+        ::DBus::ReturnMessage reply(call);
+        ::DBus::MessageIter wi = reply.writer();
+        wi << argout1;
+        return reply;
+    }
+    ::DBus::Message _ringtoneEnabled_stub( const ::DBus::CallMessage& call )
+    {
+        ::DBus::MessageIter ri = call.reader();
+
+        ringtoneEnabled();
+        ::DBus::ReturnMessage reply(call);
+        return reply;
+    }
     ::DBus::Message _getCodecList_stub( const ::DBus::CallMessage& call )
     {
         ::DBus::MessageIter ri = call.reader();
diff --git a/src/dbus/configurationmanager-introspec.xml b/src/dbus/configurationmanager-introspec.xml
index 1dfca069b2b89b7702a51a245eba545de006c57d..581b48d2196c190f1abce93a36ac314d2251e2f3 100644
--- a/src/dbus/configurationmanager-introspec.xml
+++ b/src/dbus/configurationmanager-introspec.xml
@@ -57,6 +57,12 @@
       <arg type="as" name="list" direction="out"/>
     </method>
     
+    <method name="isRingtoneEnabled">
+      <arg type="i" name="bool" direction="out"/>
+    </method>
+
+    <method name="ringtoneEnabled">
+    </method>
    <!--      ///////////////////////               -->
    
    <!-- Codecs-related methods -->
diff --git a/src/dbus/configurationmanager.cpp b/src/dbus/configurationmanager.cpp
index 566ce7cc6d2c4b7d210de04f5a1d6fd97f1d497b..e97ec0e41a09cea845a9d7f00ddc31bcaf40fa3f 100644
--- a/src/dbus/configurationmanager.cpp
+++ b/src/dbus/configurationmanager.cpp
@@ -236,3 +236,15 @@ ConfigurationManager::isIax2Enabled( void )
 {
   return Manager::instance().isIax2Enabled(  ); 
 }
+
+void
+ConfigurationManager::ringtoneEnabled( void )
+{
+  Manager::instance().ringtoneEnabled(  ); 
+}
+
+::DBus::Int32
+ConfigurationManager::isRingtoneEnabled( void )
+{
+  return Manager::instance().isRingtoneEnabled(  ); 
+}
diff --git a/src/dbus/configurationmanager.h b/src/dbus/configurationmanager.h
index 7fae39433f0a0813d733b71576819c541b2603b3..5089e6e0a50d688350d733a874175263f23ce170 100644
--- a/src/dbus/configurationmanager.h
+++ b/src/dbus/configurationmanager.h
@@ -72,6 +72,8 @@ public:
     std::vector< ::DBus::String > getRingtoneList(  );
 
     ::DBus::Int32 isIax2Enabled( void );
+    ::DBus::Int32 isRingtoneEnabled( void );
+    void ringtoneEnabled( void );
 };
 
 
diff --git a/src/global.h b/src/global.h
index de9c78b195abfd3d33411e239db7cc6cc6cba679..d6d485943e13ace918df69d4ee16eaf9c42828ed 100644
--- a/src/global.h
+++ b/src/global.h
@@ -102,5 +102,6 @@ typedef short int16;
 
 #define GSM_STRING_DESCRIPTION	  "gsm"
 #define SPEEX_STRING_DESCRIPTION  "speex"
+#define RINGTONE_ENABLED	  "1"
 
 #endif	// __GLOBAL_H__
diff --git a/src/managerimpl.cpp b/src/managerimpl.cpp
index bc488f1acee67a19ddc8daa2eb41a0bb23f2cbdb..1697d142938c7f10022c10fec9c26282f8c284eb 100644
--- a/src/managerimpl.cpp
+++ b/src/managerimpl.cpp
@@ -1082,6 +1082,7 @@ ManagerImpl::initConfigFile (void)
   fill_config_int(CHECKED_TRAY, NO_STR);
   fill_config_str(VOICEMAIL_NUM, DFT_VOICEMAIL);
   fill_config_int(CONFIG_ZEROCONF, CONFIG_ZEROCONF_DEFAULT_STR);
+  fill_config_int(CONFIG_RINGTONE, CONFIG_RINGTONE_DEFAULT);
 
   // Loads config from ~/.sflphone/sflphonedrc or so..
   if (createSettingsPath() == 1) {
@@ -1360,6 +1361,18 @@ ManagerImpl::isIax2Enabled( void )
 #endif
 }
 
+int
+ManagerImpl::isRingtoneEnabled( void )
+{
+  return std::atoi( getConfigString( PREFERENCES , CONFIG_RINGTONE ).c_str());
+}
+
+void
+ManagerImpl::ringtoneEnabled( void )
+{
+  ( getConfigString( PREFERENCES , CONFIG_RINGTONE ) == RINGTONE_ENABLED )? setConfig(PREFERENCES , CONFIG_RINGTONE , "0") : setConfig( PREFERENCES , CONFIG_RINGTONE , "1");
+}
+
   int
 ManagerImpl::getAudioDeviceIndex(const std::string name)
 {
diff --git a/src/managerimpl.h b/src/managerimpl.h
index 1c38a07d56e82d4f50e2b0c20cd6c1524e46d723..7a983bbe032f3a2e956872b8b9e9c34ab3c5d0f4 100644
--- a/src/managerimpl.h
+++ b/src/managerimpl.h
@@ -342,6 +342,8 @@ public:
   std::string serialize(std::vector<std::string> v);
 
   int isIax2Enabled( void ); 
+  int isRingtoneEnabled( void ); 
+  void ringtoneEnabled( void ); 
   /**
    * Inverse of serialize
    */
diff --git a/src/user_cfg.h b/src/user_cfg.h
index fd27e1c931222cba775c6e5c334f243db31c68d0..79eeabaaed20df13b0762a4735618caddd71771d 100644
--- a/src/user_cfg.h
+++ b/src/user_cfg.h
@@ -77,12 +77,13 @@
 #define CHECKED_TRAY	"Options.checkedTray"
 #define VOICEMAIL_NUM	"Options.voicemailNumber"
 // zeroconfig module
-#define CONFIG_ZEROCONF "Zeroconf.enable"
+#define CONFIG_ZEROCONF	  "Zeroconf.enable"
+#define CONFIG_RINGTONE	  "Ringtones.enable"
 
 // Default values
 #define EMPTY_FIELD			""
 #define DFT_STUN_SERVER 	"stun.fwdnet.net:3478"
-
+#define CONFIG_RINGTONE_DEFAULT	"1"
 #define	YES_STR              "1"
 #define	NO_STR               "0"
 #define DFT_PULSE_LENGTH_STR "250"