diff --git a/CallsViewModel.cpp b/CallsViewModel.cpp
index 41dd4af1ab3375ada25267de45f83c797e51fd21..af9f832f1bed13a64d19609f1f62e41d8f77cc86 100644
--- a/CallsViewModel.cpp
+++ b/CallsViewModel.cpp
@@ -45,6 +45,7 @@ CallsViewModel::CallsViewModel()
                     delete call;
                     call->stateChange("", code);
                     callStatusUpdated(call); // used ?
+                    RingD::instance->hangUpCall(call);
                     return;
                 }
                 call->stateChange(state, code);
diff --git a/RingD.cpp b/RingD.cpp
index fdf734723aa53ca946bfdb39a97e584387bdca6d..d2a2929e1d528c00a445233544be82d13d399c69 100644
--- a/RingD.cpp
+++ b/RingD.cpp
@@ -160,6 +160,12 @@ RingClientUWP::RingD::cancelOutGoingCall(Call^ call)
     tasksList_.push(ref new RingD::Task(Request::CancelOutGoingCall, call));
 }
 
+void
+RingClientUWP::RingD::hangUpCall(Call^ call)
+{
+    tasksList_.push(ref new RingD::Task(Request::HangUpCall, call));
+}
+
 void
 RingClientUWP::RingD::startDaemon()
 {
@@ -355,6 +361,7 @@ RingD::dequeueTasks()
         }
         break;
         case Request::CancelOutGoingCall:
+        case Request::HangUpCall:
         {
             auto callId = task->_call->callId;
             auto callId2 = Utils::toString(callId);
diff --git a/RingD.h b/RingD.h
index 6305151f3b31dc1a4607eec9268e4340b257ce6d..0bcfbdb8d5e0ade899e0b9f9d24b292c7c81e05d 100644
--- a/RingD.h
+++ b/RingD.h
@@ -63,6 +63,7 @@ internal:
     void acceptIncommingCall(Call^ call);
     void placeCall(Contact^ contact);
     void cancelOutGoingCall(Call^ call);
+    void hangUpCall(Call^ call);
 
     /* TODO : move members */
     bool hasConfig;
@@ -82,7 +83,8 @@ private:
         AddSIPAccount,
         RefuseIncommingCall,
         AcceptIncommingCall,
-        CancelOutGoingCall
+        CancelOutGoingCall,
+        HangUpCall
     };
     ref class Task
     {