diff --git a/src/call.cpp b/src/call.cpp
index 177d03899dea5edbc9eac1ee8a2f866b5afaf9b1..364e84229b574b2eb8489b0543ea97fafabac08d 100644
--- a/src/call.cpp
+++ b/src/call.cpp
@@ -56,8 +56,10 @@ Call::~Call()
 void
 Call::removeCall()
 {
+    auto this_ = shared_from_this();
     Manager::instance().callFactory.removeCall(*this);
     iceTransport_.reset();
+    setState(CallState::OVER);
 }
 
 const std::string&
@@ -86,6 +88,11 @@ Call::validStateTransition(CallState newState)
     // Notice to developper:
     // - list only permitted transition (return true)
     // - let non permitted ones as default case (return false)
+
+    // always permited
+    if (newState == CallState::OVER)
+        return true;
+
     switch (callState_) {
         case CallState::INACTIVE:
             switch (newState) {
@@ -219,6 +226,9 @@ Call::getStateStr() const
                     return StateEvent::INACTIVE;
             }
 
+        case CallState::OVER:
+            return StateEvent::OVER;
+
         case CallState::MERROR:
         default:
             return StateEvent::FAILURE;
diff --git a/src/call.h b/src/call.h
index 29c8f005f0896770a4a70fff000c0e5acd39d922..245451174b6d18fda011b035896c2597582f827b 100644
--- a/src/call.h
+++ b/src/call.h
@@ -84,7 +84,7 @@ class Call : public Recordable, public std::enable_shared_from_this<Call> {
          * \note modify validStateTransition/getStateStr if this enum changes
          */
         enum class CallState : unsigned {
-            INACTIVE, ACTIVE, HOLD, BUSY, MERROR, COUNT__
+            INACTIVE, ACTIVE, HOLD, BUSY, MERROR, OVER, COUNT__
         };
 
         virtual ~Call();
diff --git a/src/dring/call_const.h b/src/dring/call_const.h
index 67b0290f48d0276599b78b3c3a330260b8847123..b0fed89a07c96b19cfcf9acc1374d2c1bd52447b 100644
--- a/src/dring/call_const.h
+++ b/src/dring/call_const.h
@@ -36,6 +36,7 @@ constexpr static char FAILURE                  [] = "FAILURE"            ;
 constexpr static char HOLD                     [] = "HOLD"               ;
 constexpr static char UNHOLD                   [] = "UNHOLD"             ;
 constexpr static char INACTIVE                 [] = "INACTIVE"           ;
+constexpr static char OVER                     [] = "OVER"               ;
 
 }