diff --git a/src/AppDelegate.mm b/src/AppDelegate.mm
index 6bbee35..be650e3 100644
--- a/src/AppDelegate.mm
+++ b/src/AppDelegate.mm
@@ -215,7 +215,7 @@
         auto convModel = lrc->getAccountModel().getAccountInfo(accountId).conversationModel.get();
         auto conversationOpt = getConversationFromUid(convUid, *convModel);
         if (!conversationOpt.has_value()) { return; }
-        lrc::api::conversation::Info& conversation = conversationOpt.value();
+        lrc::api::conversation::Info& conversation = *conversationOpt;
         bool isIncoming = false;
         auto callModel = lrc->getAccountModel().getAccountInfo(accountId).callModel.get();
         if(callModel->hasCall(conversation.callId)) {
@@ -271,7 +271,7 @@
                                              .getAccountInfo(accountId)
                                              .conversationModel.get());
         if (convOpt.has_value()) {
-            lrc::api::conversation::Info& conversation = convOpt.value();
+            lrc::api::conversation::Info& conversation = *convOpt;
             name = bestIDForConversation(conversation, *lrc->getAccountModel().getAccountInfo(accountId).conversationModel.get());
         }
         NSString* localizedTitle = [NSString stringWithFormat:
diff --git a/src/ChooseContactVC.mm b/src/ChooseContactVC.mm
index 3da7df3..d61cfc0 100644
--- a/src/ChooseContactVC.mm
+++ b/src/ChooseContactVC.mm
@@ -155,7 +155,7 @@
     if (!conversationInfo.has_value()) {
         return;
     }
-    lrc::api::conversation::Info& conv = conversationInfo.value();
+    lrc::api::conversation::Info& conv = *conversationInfo;
     if (table == callsView) {
         auto callID = conv.confId.isEmpty() ? conv.callId : conv.confId;
         [self.delegate joinCall: callID];
@@ -218,7 +218,7 @@
             if (displayNameString.length > 0) {
                 displayNameString = [displayNameString stringByAppendingString:@", "];
             }
-            lrc::api::conversation::Info& conv = conversationOpt.value();
+            lrc::api::conversation::Info& conv = *conversationOpt;
             displayNameString = [displayNameString stringByAppendingString: bestNameForConversation(conv, *convMod)];
         }
         [displayName setStringValue:displayNameString];
@@ -239,7 +239,7 @@
     if (!convOpt.has_value()) {
         return nil;
     }
-    lrc::api::conversation::Info& conversationInfo = convOpt.value();
+    lrc::api::conversation::Info& conversationInfo = *convOpt;
     NSString* displayNameString = bestNameForConversation(conversationInfo, *convMod);
     NSString* displayIDString = bestIDForConversation(conversationInfo, *convMod);
     if(displayNameString.length == 0 || [displayNameString isEqualToString:displayIDString]) {
diff --git a/src/ConversationVC.mm b/src/ConversationVC.mm
index 6860c07..6b01470 100644
--- a/src/ConversationVC.mm
+++ b/src/ConversationVC.mm
@@ -115,7 +115,7 @@
 
     auto convOpt = getConversationFromUid(convUid_, *convModel_);
     if (convOpt.has_value()) {
-        lrc::api::conversation::Info& conversation = convOpt.value();
+        lrc::api::conversation::Info& conversation = *convOpt;
         cachedConv_ = &conversation;
     }
     return cachedConv_;
diff --git a/src/CurrentCallVC.mm b/src/CurrentCallVC.mm
index 6d214fd..71297e6 100644
--- a/src/CurrentCallVC.mm
+++ b/src/CurrentCallVC.mm
@@ -166,7 +166,7 @@
     if (!convOpt.has_value()) {
         return;
     }
-    lrc::api::conversation::Info& conv = convOpt.value();
+    lrc::api::conversation::Info& conv = *convOpt;
     confUid_ = conv.confId;
     [self.chatVC setConversationUid:convUid model: account->conversationModel.get()];
     [self connectSignals];
@@ -223,7 +223,7 @@
     if (!convOpt.has_value()) {
         return;
     }
-    lrc::api::conversation::Info& conversation = convOpt.value();
+    lrc::api::conversation::Info& conversation = *convOpt;
     [self.delegate chooseConversation: conversation model:accountInfo_->conversationModel.get()];
 }
 
@@ -276,7 +276,7 @@
         if (!convOpt.has_value()) {
             return;
         }
-        lrc::api::conversation::Info& conv = convOpt.value();
+        lrc::api::conversation::Info& conv = *convOpt;
         auto& contact = accountInfo_->contactModel->getContact(conv.participants[0]);
         if (contact.profileInfo.type == lrc::api::profile::Type::RING && contact.profileInfo.uri == contactUri)
             accountInfo_->conversationModel->makePermanent(convUid_);
@@ -450,7 +450,7 @@
     if (!convOpt.has_value()) {
         return;
     }
-    lrc::api::conversation::Info& conversation = convOpt.value();
+    lrc::api::conversation::Info& conversation = *convOpt;
     NSString* bestName = bestNameForConversation(conversation, *accountInfo_->conversationModel);
     [contactNameLabel setStringValue:bestName];
     NSString* ringID = bestIDForConversation(conversation, *accountInfo_->conversationModel);
@@ -628,7 +628,7 @@
         if (!convOpt.has_value()) {
             return nil;
         }
-        lrc::api::conversation::Info& conv = convOpt.value();
+        lrc::api::conversation::Info& conv = *convOpt;
         if (conv.uid.isEmpty() || conv.participants.empty()) {
             return nil;
         }
@@ -969,7 +969,7 @@
     if (!convOpt.has_value()) {
         return;
     }
-    lrc::api::conversation::Info& conv = convOpt.value();
+    lrc::api::conversation::Info& conv = *convOpt;
     if (conv.uid.isEmpty() || conv.participants.empty()) {
         return;
     }
@@ -1297,7 +1297,7 @@
     if (!convOpt.has_value()) {
         return;
     }
-    lrc::api::conversation::Info& conversation = convOpt.value();
+    lrc::api::conversation::Info& conversation = *convOpt;
     auto callId = conversation.callId;
     if (not callModel->hasCall(callId)){
         return;
@@ -1341,7 +1341,7 @@
     auto convOpt = getConversationFromUid(convUid_, *accountInfo_->conversationModel.get());
     if (!convOpt.has_value())
         return false;
-    lrc::api::conversation::Info& conv = convOpt.value();
+    lrc::api::conversation::Info& conv = *convOpt;
     auto* callModel = accountInfo_->callModel.get();
     try {
         auto call = callModel->getCall(conv.callId);
diff --git a/src/LeaveMessageVC.mm b/src/LeaveMessageVC.mm
index de25c1d..ad696d1 100644
--- a/src/LeaveMessageVC.mm
+++ b/src/LeaveMessageVC.mm
@@ -194,7 +194,7 @@
         [self show];
         return;
     }
-    lrc::api::conversation::Info& conversation = convOpt.value();
+    lrc::api::conversation::Info& conversation = *convOpt;
     @autoreleasepool {
         auto& imgManip = reinterpret_cast<Interfaces::ImageManipulationDelegate&>(GlobalInstances::pixmapManipulator());
         QVariant photo = imgManip.conversationPhoto(conversation, conversationModel->owner, QSize(120, 120), NO);
diff --git a/src/MessagesVC.mm b/src/MessagesVC.mm
index 9a57e76..4e57319 100644
--- a/src/MessagesVC.mm
+++ b/src/MessagesVC.mm
@@ -179,7 +179,7 @@
         return cachedConv_;
     auto convOpt = getConversationFromUid(convUid_, *convModel_);
     if (convOpt.has_value()) {
-        lrc::api::conversation::Info& conversation = convOpt.value();
+        lrc::api::conversation::Info& conversation = *convOpt;
         cachedConv_ = &conversation;
     }
     return cachedConv_;
diff --git a/src/RingWindowController.mm b/src/RingWindowController.mm
index 949d26a..7b1d5de 100644
--- a/src/RingWindowController.mm
+++ b/src/RingWindowController.mm
@@ -251,7 +251,7 @@
         auto convModel = accInfo->conversationModel.get();
         auto convOpt = getConversationFromUid(convUid, *convModel);
         if (!convOpt.has_value()) { return; }
-        lrc::api::conversation::Info& convInfo = convOpt.value();
+        lrc::api::conversation::Info& convInfo = *convOpt;
         try {
             if (accInfo->contactModel->getContact(convInfo.participants[0]).profileInfo.type == lrc::api::profile::Type::PENDING)
                 [smartViewVC selectPendingList];
@@ -279,7 +279,7 @@
         auto convModel = accInfo->conversationModel.get();
         auto convOpt = getConversationFromUid(convUid, *convModel);
         if (!convOpt.has_value()) { return; }
-        lrc::api::conversation::Info& convInfo = convOpt.value();
+        lrc::api::conversation::Info& convInfo = *convOpt;
         auto callModel = accInfo->callModel.get();
         lrc::api::account::ConfProperties_t accountProperties = accInfo->accountModel->getAccountConfig(accInfo->id);
         if (accountProperties.isRendezVous && (!callModel->hasCall(convInfo.callId) || !callModel->getCall(convInfo.callId).isOutgoing)) {
@@ -315,7 +315,7 @@
                          auto convModel = accInfo.conversationModel.get();
                          auto convOpt = getConversationFromUid(convUid, *convModel);
                          if (!convOpt.has_value()) { return; }
-                         lrc::api::conversation::Info& convInfo = convOpt.value();
+                         lrc::api::conversation::Info& convInfo = *convOpt;
                          [conversationVC setConversationUid:convInfo.uid model:accInfo.conversationModel.get()];
                          [smartViewVC selectConversation: convInfo model:accInfo.conversationModel.get()];
                          [self changeViewTo:SHOW_CONVERSATION_SCREEN];
@@ -328,7 +328,7 @@
                          auto convModel = accInfo.conversationModel.get();
                          auto convOpt = getConversationFromUid(convUid, *convModel);
                          if (!convOpt.has_value()) { return; }
-                         lrc::api::conversation::Info& convInfo = convOpt.value();
+                         lrc::api::conversation::Info& convInfo = *convOpt;
                          [conversationVC setConversationUid:convInfo.uid model:accInfo.conversationModel.get()];
                          [smartViewVC selectConversation: convInfo model:accInfo.conversationModel.get()];
                          [self changeViewTo:LEAVE_MESSAGE];
@@ -662,7 +662,7 @@
     if (!convOpt.has_value()) {
         return;
     }
-    lrc::api::conversation::Info& convInfo = convOpt.value();
+    lrc::api::conversation::Info& convInfo = *convOpt;
     [conversationVC setConversationUid:convInfo.uid model:accInfo.conversationModel.get()];
     [smartViewVC selectConversation: convInfo model:accInfo.conversationModel.get()];
     accInfo.conversationModel.get()->clearUnreadInteractions(QString::fromNSString(conversationId));
@@ -679,7 +679,7 @@
     if (!convOpt.has_value()) {
         return;
     }
-    lrc::api::conversation::Info& convInfo = convOpt.value();
+    lrc::api::conversation::Info& convInfo = *convOpt;
     if (accInfo.contactModel->getContact(convInfo.participants[0]).profileInfo.type == lrc::api::profile::Type::PENDING) {
         [smartViewVC selectPendingList];
     }
@@ -703,7 +703,7 @@
     [smartViewVC selectPendingList];
     auto convOpt = getConversationFromURI(QString::fromNSString(uri), *accInfo.conversationModel.get());
     if (convOpt.has_value()) {
-        lrc::api::conversation::Info& conversation = convOpt.value();
+        lrc::api::conversation::Info& conversation = *convOpt;
         [conversationVC setConversationUid:conversation.uid model:accInfo.conversationModel.get()];
         [smartViewVC selectConversation: conversation model:accInfo.conversationModel.get()];
     }
diff --git a/src/SmartViewVC.mm b/src/SmartViewVC.mm
index f46c4c7..2999778 100755
--- a/src/SmartViewVC.mm
+++ b/src/SmartViewVC.mm
@@ -144,7 +144,6 @@
     auto convOpt = sender == searchResultsView ? convModel_->searchResultForRow(row) : convModel_->filteredConversation(row);
     if (!convOpt.has_value())
         return;
-   // lrc::api::conversation::Info& conversation = convOpt.value();
     convModel_->placeCall(convOpt->get().uid);
 }
 
@@ -466,7 +465,7 @@
     auto convOpt = notification.object == smartView ? convModel_->filteredConversation(row) : convModel_->searchResultForRow(row);
     if (!convOpt.has_value())
         return;
-    lrc::api::conversation::Info& conversation = convOpt.value();
+    lrc::api::conversation::Info& conversation = *convOpt;
     if (selectedUid_ != conversation.uid && !conversation.uid.isEmpty()) {
         selectedUid_ = conversation.uid;
         convModel_->selectConversation(selectedUid_);
@@ -490,7 +489,7 @@
     auto convOpt = isSearching ? convModel_->searchResultForRow(row) : convModel_->filteredConversation(row);
     if (!convOpt.has_value())
         return nil;
-    lrc::api::conversation::Info& conversation = convOpt.value();
+    lrc::api::conversation::Info& conversation = *convOpt;
     NSTableCellView* result;
 
     result = [tableView makeViewWithIdentifier:@"MainCell" owner:tableView];
@@ -694,7 +693,7 @@
     auto convOpt = getConversationFromUid(uid, *convModel_);
     if (!convOpt.has_value())
         return;
-    lrc::api::conversation::Info& conversation = convOpt.value();
+    lrc::api::conversation::Info& conversation = *convOpt;
     @try {
         auto contact = convModel_->owner.contactModel->getContact(conversation.participants[0]);
         if (!contact.profileInfo.uri.isEmpty() && contact.profileInfo.uri.compare(selectedUid_) == 0) {
@@ -736,7 +735,7 @@
     auto convOpt = hasSearchResult ? convModel_->searchResultForRow(0) : convModel_->filteredConversation(0);
     if (!convOpt.has_value())
         return NO;
-    lrc::api::conversation::Info& conversation = convOpt.value();
+    lrc::api::conversation::Info& conversation = *convOpt;
     auto uid = conversation.uid;
 
     if (selectedUid_ == uid) {
@@ -805,7 +804,7 @@
     convModel_->searchResultForRow(NSInteger(index));
     if (!convOpt.has_value())
         return nil;
-    lrc::api::conversation::Info& conversation = convOpt.value();
+    lrc::api::conversation::Info& conversation = *convOpt;
 
     @try {
         auto contact = convModel_->owner.contactModel->getContact(conversation.participants[0]);
@@ -972,7 +971,7 @@
     auto convRef = convModel_->filteredConversation(row);
     if (!convRef.has_value())
         return "";
-    lrc::api::conversation::Info& conversation = convRef.value();
+    lrc::api::conversation::Info& conversation = *convRef;
     auto& convID = conversation.Info::uid;
     return convID;
 }
