diff --git a/src/call.cpp b/src/call.cpp
index 5d2191e797ef38f2d9c65d1c3bbabbcf55aac4ce..0bc7e84012ffad51b065c73bbf77494165bfcb40 100644
--- a/src/call.cpp
+++ b/src/call.cpp
@@ -746,7 +746,7 @@ ContactMethod* Call::peerContactMethod() const
         return d_ptr->m_pPeerContactMethod;
 
     if (d_ptr->m_pDialNumber)
-        return d_ptr->m_pDialNumber.get();
+        return d_ptr->m_pDialNumber;
 
     return const_cast<ContactMethod*>(ContactMethod::BLANK());
 }
@@ -1045,7 +1045,7 @@ Media::Media* MediaTypeInference::safeMediaCreator(Call* c, Media::Media::Type t
 void Call::setTransferNumber(const QString& number)
 {
     if (!d_ptr->m_pTransferNumber)
-        d_ptr->m_pTransferNumber.reset(new TemporaryContactMethod());
+        d_ptr->m_pTransferNumber = new TemporaryContactMethod();
     d_ptr->m_pTransferNumber->setUri(number);
 }
 
@@ -1225,8 +1225,9 @@ Call::State CallPrivate::stateChanged(const QString& newStateName)
    }
    if (q_ptr->lifeCycleState() != Call::LifeCycleState::CREATION && m_pDialNumber) {
       if (!m_pPeerContactMethod)
-          m_pPeerContactMethod = PhoneDirectoryModel::instance()->fromTemporary(m_pDialNumber.get());
-      m_pDialNumber.reset();
+          m_pPeerContactMethod = PhoneDirectoryModel::instance()->fromTemporary(m_pDialNumber);
+      m_pDialNumber->deleteLater();
+      m_pDialNumber = nullptr;
    }
    emit q_ptr->changed();
    qDebug() << "Calling stateChanged " << newStateName << " -> " << toDaemonCallState(newStateName) << " on call with state " << previousState << ". Become " << m_CurrentState;
@@ -1602,8 +1603,10 @@ void CallPrivate::call()
         changeCurrentState(Call::State::ABORTED);
         if (!m_pDialNumber)
             emit q_ptr->dialNumberChanged(QString());
-        else
-            m_pDialNumber.reset();
+        else {
+           m_pDialNumber->deleteLater();
+           m_pDialNumber = nullptr;
+        }
         q_ptr->setPeerName(tr("Aborted"));
         emit q_ptr->changed();
         return;
@@ -1641,7 +1644,8 @@ void CallPrivate::call()
         m_pPeerContactMethod = PhoneDirectoryModel::instance()->getNumber(uri, q_ptr->account());
 
     // m_pDialNumber is now discarded
-    m_pDialNumber.reset();
+    m_pDialNumber->deleteLater();
+    m_pDialNumber = nullptr;
 
     //Refresh peerCM
     peerCM = q_ptr->peerContactMethod();
@@ -1757,8 +1761,9 @@ void CallPrivate::start()
    emit q_ptr->changed();
    if (m_pDialNumber) {
       if (!m_pPeerContactMethod)
-          m_pPeerContactMethod = PhoneDirectoryModel::instance()->fromTemporary(m_pDialNumber.get());
-      m_pDialNumber.reset();
+          m_pPeerContactMethod = PhoneDirectoryModel::instance()->fromTemporary(m_pDialNumber);
+      m_pDialNumber->deleteLater();
+      m_pDialNumber = nullptr;
    }
    setStartTimeStamp();
    initTimer();
@@ -1839,12 +1844,12 @@ void Call::appendText(const QString& str)
    switch (d_ptr->m_CurrentState) {
    case Call::State::TRANSFERRED :
    case Call::State::TRANSF_HOLD :
-       editNumber = d_ptr->m_pTransferNumber.get();
+       editNumber = d_ptr->m_pTransferNumber;
        break;
    case Call::State::DIALING     :
    case Call::State::NEW         : {
       const bool wasEmpty = (!editNumber) ||editNumber->uri().isEmpty();
-      editNumber = d_ptr->m_pDialNumber.get();
+      editNumber = d_ptr->m_pDialNumber;
       const bool isEmpty  = str.isEmpty();
 
       if (wasEmpty != isEmpty)
@@ -1889,12 +1894,12 @@ void Call::backspaceItemText()
    switch (d_ptr->m_CurrentState) {
       case Call::State::TRANSFERRED      :
       case Call::State::TRANSF_HOLD      :
-          editNumber = d_ptr->m_pTransferNumber.get();
+          editNumber = d_ptr->m_pTransferNumber;
           break;
       case Call::State::NEW:
       case Call::State::DIALING          : {
          const bool wasEmpty = (!editNumber) ||editNumber->uri().isEmpty();
-         editNumber = d_ptr->m_pDialNumber.get();
+         editNumber = d_ptr->m_pDialNumber;
          const bool isEmpty  = editNumber->uri().isEmpty();
 
          if (wasEmpty != isEmpty)
@@ -1942,11 +1947,11 @@ void Call::reset()
    switch (d_ptr->m_CurrentState) {
       case Call::State::TRANSFERRED      :
       case Call::State::TRANSF_HOLD      :
-          editNumber = d_ptr->m_pTransferNumber.get();
+          editNumber = d_ptr->m_pTransferNumber;
           break;
       case Call::State::DIALING          :
       case Call::State::NEW              :
-          editNumber = d_ptr->m_pDialNumber.get();
+          editNumber = d_ptr->m_pDialNumber;
           d_ptr->changeCurrentState( Call::State::NEW );
           break;
       case Call::State::INITIALIZATION   :
diff --git a/src/private/call_p.h b/src/private/call_p.h
index 9a818c1cbb0683186c496ae1d1152e7a2ea1a6be..fb9afd238c1cee4c4d28afa3cd5d062d68f3549b 100644
--- a/src/private/call_p.h
+++ b/src/private/call_p.h
@@ -48,11 +48,6 @@ namespace Media {
    class Recording;
 }
 
-// Smart pointer deleter helper
-struct DeleteLaterDeleter {
-    void operator ()(QObject* p) { p->deleteLater(); }
-};
-
 class CallPrivate final : public QObject
 {
    Q_OBJECT
@@ -274,10 +269,12 @@ private:
     //Destructor helper (~Call is private, CallPrivate is a friend class)
     static void deleteCall(Call* call);
 
-    //!< Used as contact until m_pPeerContactMethod is created
-    std::unique_ptr<TemporaryContactMethod, DeleteLaterDeleter> m_pDialNumber;
+    // Used as contact until m_pPeerContactMethod is created
+    // Owner is PhoneDirectoryModel instance
+    TemporaryContactMethod* m_pDialNumber;
 
-    std::unique_ptr<TemporaryContactMethod> m_pTransferNumber;
+    // Owner is PhoneDirectoryModel instance
+    TemporaryContactMethod* m_pTransferNumber;
 
 private Q_SLOTS:
    void updated();