diff --git a/src/manager.cpp b/src/manager.cpp
index d3f2f914af9e56d6a2cd8255ed60c7ff7816bf66..0e976aa7556474e945b9a24ee45696db88060cab 100644
--- a/src/manager.cpp
+++ b/src/manager.cpp
@@ -1257,13 +1257,17 @@ bool
 Manager::unHoldConference(const std::string& id)
 {
     if (auto conf = getConferenceFromID(id)) {
-        for (const auto &item : conf->getParticipantList())
-            offHoldCall(item);
-        
-        pimpl_->switchCall(id);
-        conf->setState(Conference::State::ACTIVE_ATTACHED);
-        emitSignal<DRing::CallSignal::ConferenceChanged>(conf->getConfID(), conf->getStateStr());
-        return true;
+        // Unhold conf only if it was in hold state otherwise...
+        // all participants are restarted
+        if (conf->getState() == Conference::State::HOLD) {
+            for (const auto &item : conf->getParticipantList())
+                offHoldCall(item);
+
+            pimpl_->switchCall(id);
+            conf->setState(Conference::State::ACTIVE_ATTACHED);
+            emitSignal<DRing::CallSignal::ConferenceChanged>(conf->getConfID(), conf->getStateStr());
+            return true;
+        }
     }
     return false;
 }