diff --git a/src/call.cpp b/src/call.cpp
index d235c1abfcd983dbfe64bcf7686eecc9232519bd..4f38d1e2fcc8258103c2b59f36c5a71c228f8f3a 100644
--- a/src/call.cpp
+++ b/src/call.cpp
@@ -93,33 +93,47 @@ Call::getState() const
 bool
 Call::validStateTransition(CallState newState)
 {
+    // Notice to developper:
+    // - list only permitted transition (return true)
+    // - let non permitted ones as default case (return false)
     switch (callState_) {
         case CallState::INACTIVE:
             switch (newState) {
-                case CallState::INACTIVE:
-                case CallState::HOLD:
-                    return false;
-                default:
+                case CallState::ACTIVE:
+                case CallState::BUSY:
+                case CallState::MERROR:
                     return true;
+                default: // INACTIVE, HOLD
+                    return false;
             }
 
         case CallState::ACTIVE:
             switch (newState) {
                 case CallState::HOLD:
+                case CallState::MERROR:
                     return true;
-                default:
+                default: // INACTIVE, ACTIVE, BUSY
                     return false;
             }
 
         case CallState::HOLD:
             switch (newState) {
                 case CallState::ACTIVE:
+                case CallState::MERROR:
                     return true;
-                default:
+                default: // INACTIVE, HOLD, BUSY, MERROR
                     return false;
             }
 
-        default:
+        case CallState::BUSY:
+            switch (newState) {
+                case CallState::MERROR:
+                    return true;
+                default: // INACTIVE, ACTIVE, HOLD, BUSY
+                    return false;
+            }
+
+        default: // MERROR
             return false;
     }
 }
diff --git a/src/call.h b/src/call.h
index 1def90ff74aea44008f651e7cd82eb6e9d118133..a9d2af1c01bb9a13f89e4d688f4ea4ccc092eec3 100644
--- a/src/call.h
+++ b/src/call.h
@@ -77,6 +77,8 @@ class Call : public Recordable, public std::enable_shared_from_this<Call> {
          *
          * Audio should be transmitted when ConnectionState = Connected AND
          * CallState = Active.
+         *
+         * \note modify validStateTransition/getStateStr if this enum changes
          */
         enum class ConnectionState : unsigned {
             DISCONNECTED, TRYING, PROGRESSING, RINGING, CONNECTED, COUNT__
@@ -84,6 +86,8 @@ class Call : public Recordable, public std::enable_shared_from_this<Call> {
 
         /**
          * The Call State.
+         *
+         * \note modify validStateTransition/getStateStr if this enum changes
          */
         enum class CallState : unsigned {
             INACTIVE, ACTIVE, HOLD, BUSY, MERROR, COUNT__