diff --git a/RingD.cpp b/RingD.cpp
index 2cdf027b8e2f72ddf6e5f784efa868980d7bd87c..5922548101be32deb5f27d07714f85377a8d98a1 100644
--- a/RingD.cpp
+++ b/RingD.cpp
@@ -233,9 +233,28 @@ void RingClientUWP::RingD::askToExportOnRing(String ^ accountId, String ^ passwo
     tasksList_.push(task);
 }
 
+void RingClientUWP::RingD::eraseCacheFolder()
+{
+    StorageFolder^ localFolder = ApplicationData::Current->LocalFolder;
+    String^ folderName = ".cache";
+
+    task<IStorageItem^>(localFolder->TryGetItemAsync(folderName)).then([this](IStorageItem^ folder)
+    {
+        if (folder) {
+            MSG_("erasing cache folder.");
+            folder->DeleteAsync();
+        }
+        else {
+            WNG_("cache folder not found.");
+        }
+    });
+}
+
 void
 RingClientUWP::RingD::startDaemon()
 {
+    eraseCacheFolder();
+
     create_task([&]()
     {
         using SharedCallback = std::shared_ptr<DRing::CallbackWrapperBase>;
diff --git a/RingD.h b/RingD.h
index f78355bae9e9eba585d34f45a7b51505949d0bcc..b776f076411320eaba0319ebda35454e4e42b817 100644
--- a/RingD.h
+++ b/RingD.h
@@ -94,6 +94,7 @@ internal:
     void unPauseCall(String ^ callId);
     void askToRefreshKnownDevices(String^ accountId);
     void askToExportOnRing(String^ accountId, String^ password);
+    void eraseCacheFolder();
 
     /* TODO : move members */
     ///bool hasConfig; // replaced by startingStatus