diff --git a/daemon/src/dbus/configurationmanager-introspec.xml b/daemon/src/dbus/configurationmanager-introspec.xml
index a3de1b205306e61f2023c81ee2d42365d0f62485..5a891dca252843d942c46c5e729f649b6e039bc7 100644
--- a/daemon/src/dbus/configurationmanager-introspec.xml
+++ b/daemon/src/dbus/configurationmanager-introspec.xml
@@ -334,6 +334,15 @@
            </arg>
        </method>
 
+       <method name="getRingtoneList" tp:name-for-bindings="getRingtoneList">
+           <tp:added version="1.1.1"/>
+           <tp:docstring>
+                Get a map [Path,Filename] of available ringtone. Note, set the ringtone with the complete path
+           </tp:docstring>
+           <arg type="a{ss}" name="state" direction="out">
+           </arg>
+       </method>
+
        <method name="setEchoCancelState" tp:name-for-bindings="setEchoCancelState">
                <arg type="s" name="state" direction="in">
                </arg>
diff --git a/daemon/src/dbus/configurationmanager.cpp b/daemon/src/dbus/configurationmanager.cpp
index 126d3fadb82c294574b91ba6635cb135f594e9d2..dbc9753f1eaf2ae5361417ae1d1086af54ee3e0b 100644
--- a/daemon/src/dbus/configurationmanager.cpp
+++ b/daemon/src/dbus/configurationmanager.cpp
@@ -41,6 +41,7 @@
 #include "sip/siptransport.h"
 #include "account.h"
 #include "logger.h"
+#include "fileutils.h"
 #include "sip/sipaccount.h"
 
 namespace {
@@ -283,6 +284,29 @@ std::string ConfigurationManager::getEchoCancelState()
     return Manager::instance().getEchoCancelState() ? "enabled" : "disabled";
 }
 
+std::map<std::string, std::string> ConfigurationManager::getRingtoneList()
+{
+    std::map<std::string, std::string> ringToneList;
+    std::string r_path = fileutils::get_data_dir();
+    struct dirent **namelist;
+    int n = scandir(r_path.c_str(), &namelist, 0, alphasort);
+    while(n--) {
+        if (strcmp(namelist[n]->d_name,".") && strcmp(namelist[n]->d_name,"..")) {
+           std::string file(namelist[n]->d_name);
+        
+           if (file.find(".wav") != std::string::npos)
+              file.replace(file.find(".wav"),4,"");
+           else
+              file.replace(file.size()-3,3,"");
+           if (file[0] <= 0x7A && file[0] >= 0x61) file[0] = file[0]-32;
+           ringToneList[r_path+namelist[n]->d_name] = file;
+        }
+        free(namelist[n]);
+    }
+    free(namelist);
+    return ringToneList;
+}
+
 void ConfigurationManager::setEchoCancelState(const std::string& state)
 {
     Manager::instance().setEchoCancelState(state);
diff --git a/daemon/src/dbus/configurationmanager.h b/daemon/src/dbus/configurationmanager.h
index e1262836c64543dbc95e686cf00a2f6e742b4560..d99c6fd3b31ae7370ed2208bf2824e13abd9548f 100644
--- a/daemon/src/dbus/configurationmanager.h
+++ b/daemon/src/dbus/configurationmanager.h
@@ -95,6 +95,8 @@ class ConfigurationManager
         void setEchoCancelDelay(const int32_t& length);
         int getEchoCancelDelay();
 
+        std::map<std::string, std::string> getRingtoneList();
+
         std::string getAudioManager();
         void setAudioManager(const std::string& api);
 
diff --git a/daemon/src/fileutils.cpp b/daemon/src/fileutils.cpp
index ca03a4a2668a0fb9c602ec599c264e7e73be547c..35bea50e82bcbdd7fa46d36d13587d7522e3978c 100644
--- a/daemon/src/fileutils.cpp
+++ b/daemon/src/fileutils.cpp
@@ -69,6 +69,13 @@ const char *get_program_dir()
     return program_dir;
 }
 
+//TODO it is faking this, implement proper system 
+const char *get_data_dir()
+{
+    std::string path = std::string(get_program_dir()) + "/../../share/sflphone/ringtones/";
+    return path.c_str();
+}
+
 bool create_pidfile()
 {
     const char * const xdg_env = XDG_CACHE_HOME;
diff --git a/daemon/src/fileutils.h b/daemon/src/fileutils.h
index c513daed12d902efc88f53e81fa67ad865fe7c63..ece20c45b5b420e6b72d966a5e7c35dfe7560d8e 100644
--- a/daemon/src/fileutils.h
+++ b/daemon/src/fileutils.h
@@ -45,6 +45,7 @@ namespace fileutils {
     bool check_dir(const char *path);
     void set_program_dir(char *program_path);
     const char *get_program_dir();
+    const char *get_data_dir();
     bool create_pidfile();
 }