diff --git a/src/useractionmodel.cpp b/src/useractionmodel.cpp
index e1fa7d46bd2470830e10aa2bd165f493f8198e5d..6dab5a9c727ef7be562b7bebc6955078e24fe4c5 100644
--- a/src/useractionmodel.cpp
+++ b/src/useractionmodel.cpp
@@ -76,7 +76,7 @@ public:
    SelectionState                                                    m_SelectionState     ;
    TypedStateMachine< bool, UserActionModel::Action>                 m_CurrentActions     ;
    TypedStateMachine< Qt::CheckState, UserActionModel::Action>       m_CurrentActionsState;
-   static const TypedStateMachine< QString, UserActionModel::Action> m_ActionNames        ;
+   TypedStateMachine< QString, UserActionModel::Action>              m_ActionNames        ;
    ActiveUserActionModel*                                            m_pActiveModel       ;
 
    //The mute per call, per media is not merged upstream yet, faking it for now
@@ -213,23 +213,23 @@ const TypedStateMachine< TypedStateMachine< UserActionModel::ActionStatfulnessLe
 }};
 #undef ST
 
-const TypedStateMachine< QString, UserActionModel::Action> UserActionModelPrivate::m_ActionNames = {{
-   /* ACCEPT          */ QObject::tr("ACCEPT"          ), //TODO use better (and stateful) names
-   /* HOLD            */ QObject::tr("HOLD"            ),
-   /* MUTE_AUDIO      */ QObject::tr("MUTE_AUDIO"      ),
-   /* MUTE_VIDEO      */ QObject::tr("MUTE_VIDEO"      ),
-   /* SERVER_TRANSFER */ QObject::tr("SERVER_TRANSFER" ),
-   /* RECORD          */ QObject::tr("RECORD"          ),
-   /* HANGUP          */ QObject::tr("HANGUP"          ),
-
-   /* JOIN            */ QObject::tr("JOIN"            ),
-
-   /* JOIN            */ QObject::tr("ADD_NEW"         ),
-}};
-
 UserActionModelPrivate::UserActionModelPrivate(UserActionModel* parent) : QObject(parent),q_ptr(parent),
 m_pCall(nullptr), m_pActiveModel(nullptr)
 {
+   //Init the default names
+   m_ActionNames = {{
+      /* ACCEPT          */ QObject::tr("Accept"          ),
+      /* HOLD            */ QObject::tr("Hold"            ),
+      /* MUTE_AUDIO      */ QObject::tr("Mute audio"      ),
+      /* MUTE_VIDEO      */ QObject::tr("Mute video"      ),
+      /* SERVER_TRANSFER */ QObject::tr("Server transfer" ),
+      /* RECORD          */ QObject::tr("Record"          ),
+      /* HANGUP          */ QObject::tr("Hangup"          ),
+
+      /* JOIN            */ QObject::tr("Join"            ),
+
+      /* JOIN            */ QObject::tr("Add new"         ),
+   }};
 }
 
 /**
@@ -289,7 +289,7 @@ QVariant UserActionModel::data(const QModelIndex& idx, int role ) const
 
    switch(role) {
       case Qt::DisplayRole:
-         return UserActionModelPrivate::m_ActionNames[action];
+         return d_ptr->m_ActionNames[action];
       case Qt::CheckStateRole:
          if (d_ptr->actionStatefulness[action][d_ptr->m_SelectionState] != UserActionModel::ActionStatfulnessLevel::UNISTATE)
             return d_ptr->m_CurrentActionsState[action];
@@ -378,6 +378,61 @@ void UserActionModelPrivate::updateCheckMask(int& ret, UserActionModel::Action a
       case UserActionModel::Action::COUNT__:
          break;
    };
+
+   //Avoid the noise
+   #pragma GCC diagnostic push
+   #pragma GCC diagnostic ignored "-Wswitch-enum"
+   //Update the labels
+   switch (action) {
+      case UserActionModel::Action::ACCEPT          :
+         switch(c->state()) {
+            case Call::State::DIALING        :
+               m_ActionNames[UserActionModel::Action::ACCEPT] = QObject::tr("Call");
+               break;
+            default:
+               m_ActionNames[UserActionModel::Action::ACCEPT] = QObject::tr("Accept");
+               break;
+         }
+         break;
+      case UserActionModel::Action::HOLD            :
+         switch(c->state()) {
+            case Call::State::HOLD           :
+            case Call::State::CONFERENCE_HOLD:
+            case Call::State::TRANSF_HOLD    :
+               m_ActionNames[UserActionModel::Action::HOLD] = QObject::tr("Unhold");
+               break;
+            default:
+               m_ActionNames[UserActionModel::Action::HOLD] = QObject::tr("Hold");
+               break;
+         }
+         break;
+      case UserActionModel::Action::HANGUP          :
+         switch(c->state()) {
+            case Call::State::DIALING        :
+               m_ActionNames[UserActionModel::Action::HANGUP] = QObject::tr("Cancel");
+               break;
+            case Call::State::FAILURE        :
+            case Call::State::ERROR          :
+            case Call::State::COUNT__        :
+            case Call::State::INITIALIZATION :
+            case Call::State::BUSY           :
+               m_ActionNames[UserActionModel::Action::HANGUP] = QObject::tr("Remove");
+               break;
+            default:
+               m_ActionNames[UserActionModel::Action::HANGUP] = QObject::tr("Hangup");
+               break;
+         }
+         break;
+      case UserActionModel::Action::JOIN            :
+      case UserActionModel::Action::ADD_NEW         :
+      case UserActionModel::Action::COUNT__         :
+      case UserActionModel::Action::MUTE_AUDIO      :
+      case UserActionModel::Action::MUTE_VIDEO      :
+      case UserActionModel::Action::SERVER_TRANSFER :
+      case UserActionModel::Action::RECORD          :
+         break;
+   }
+   #pragma GCC diagnostic pop
 }
 
 bool UserActionModelPrivate::updateByCall(UserActionModel::Action action, const Call* c)