diff --git a/daemon/src/fileutils.cpp b/daemon/src/fileutils.cpp
index 4f9bfa2ea8a52b1d267df01b740ae45678e93ab9..7a011388279571d5d13d8b2d1601bd04f684ba3a 100644
--- a/daemon/src/fileutils.cpp
+++ b/daemon/src/fileutils.cpp
@@ -84,10 +84,10 @@ const char *get_program_dir()
 }
 
 // FIXME: This should use our real DATADIR
-const char *get_data_dir()
+std::string
+get_data_dir()
 {
-    std::string path = std::string(get_program_dir()) + "/../../share/sflphone/ringtones/";
-    return path.c_str();
+    return std::string(get_program_dir()) + "/../../share/sflphone/ringtones/";
 }
 
 namespace {
diff --git a/daemon/src/fileutils.h b/daemon/src/fileutils.h
index 6f5bda13fbb652862b62ca12bd2993a1d98f3361..6a569e2bdcf084c222b442eee019c1ef41678e9a 100644
--- a/daemon/src/fileutils.h
+++ b/daemon/src/fileutils.h
@@ -31,6 +31,8 @@
 #ifndef FILEUTILS_H_
 #define FILEUTILS_H_
 
+#include <string>
+
 #define PROTECTED_GETENV(str) ({char *envvar_ = getenv((str)); \
                                                    envvar_ ? envvar_ : "";})
 
@@ -49,7 +51,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();
+    std::string get_data_dir();
     bool isDirectoryWritable(const std::string &directory);
     struct FileHandle {
         int fd;