diff --git a/src/accountlistmodel.cpp b/src/accountlistmodel.cpp
index adee7bcff75d8f811fe6fd794e908c937d86a82d..9158e1c40b06664baaae7a92e6839052ae5c29dc 100644
--- a/src/accountlistmodel.cpp
+++ b/src/accountlistmodel.cpp
@@ -60,9 +60,9 @@ QVariant AccountListModel::data(const QModelIndex &index, int role) const
     switch (role) {
     case Role::Alias:
     case Qt::DisplayRole:
-        return QVariant(QString::fromStdString(Utils::bestNameForAccount(accountInfo)));
+        return QVariant(Utils::bestNameForAccount(accountInfo));
     case Role::Username:
-        return QVariant(QString::fromStdString(Utils::secondBestNameForAccount(accountInfo)));
+        return QVariant(Utils::secondBestNameForAccount(accountInfo));
     case Role::Type:
         return QVariant(Utils::toUnderlyingValue<lrc::api::profile::Type>(accountInfo.profileInfo.type));
     case Role::Status:
@@ -71,7 +71,7 @@ QVariant AccountListModel::data(const QModelIndex &index, int role) const
     case Qt::DecorationRole:
         return Utils::accountPhoto(accountInfo);
     case Role::ID:
-        return QVariant(QString::fromStdString(accountInfo.id));
+        return QVariant(accountInfo.id);
     }
     return QVariant();
 }
diff --git a/src/accountmigrationdialog.cpp b/src/accountmigrationdialog.cpp
index 0eab0aa4f53b513facfe8c2427b65ffbb813bbb4..347d38c4680ef5e98e4fefd2245d54ef94907d1d 100644
--- a/src/accountmigrationdialog.cpp
+++ b/src/accountmigrationdialog.cpp
@@ -22,7 +22,7 @@
 #include <QTimer>
 #include <QtConcurrent/QtConcurrent>
 
-AccountMigrationDialog::AccountMigrationDialog(QWidget *parent, const std::string& accountId) :
+AccountMigrationDialog::AccountMigrationDialog(QWidget *parent, const QString& accountId) :
     QDialog(parent),
     ui(new Ui::AccountMigrationDialog),
     accountId_(accountId)
@@ -32,10 +32,10 @@ AccountMigrationDialog::AccountMigrationDialog(QWidget *parent, const std::strin
 
     auto& avatarInfo = LRCInstance::accountModel().getAccountInfo(accountId_);
 
-    auto managerUsername = QString::fromStdString(avatarInfo.confProperties.managerUsername);
-    auto managerUri = QString::fromStdString(avatarInfo.confProperties.managerUri);
-    auto username = QString::fromStdString(avatarInfo.confProperties.username);
-    auto alias = QString::fromStdString(LRCInstance::accountModel().getAccountInfo(accountId_).profileInfo.alias);
+    auto managerUsername = avatarInfo.confProperties.managerUsername;
+    auto managerUri = avatarInfo.confProperties.managerUri;
+    auto username = avatarInfo.confProperties.username;
+    auto alias = LRCInstance::accountModel().getAccountInfo(accountId_).profileInfo.alias;
 
     // manager uri
     if (!managerUri.isEmpty()) {
@@ -51,7 +51,7 @@ AccountMigrationDialog::AccountMigrationDialog(QWidget *parent, const std::strin
     if (!username.isEmpty()) {
         ui->usernameInputLabel->setText(username);
     } else {
-        if (avatarInfo.confProperties.managerUsername.empty()) {
+        if (avatarInfo.confProperties.managerUsername.isEmpty()) {
             ui->usernameLabel->hide();
             ui->usernameInputLabel->hide();
             ui->gridLayout->removeWidget(ui->usernameInputLabel);
@@ -85,7 +85,7 @@ AccountMigrationDialog::AccountMigrationDialog(QWidget *parent, const std::strin
             } else {
                 ui->migrationPushButton->setDisabled(false);
             }
-            password_ = text.toStdString();
+            password_ = text;
         });
 
     ui->migrationPushButton->setDisabled(true);
@@ -104,7 +104,7 @@ AccountMigrationDialog::~AccountMigrationDialog()
 void
 AccountMigrationDialog::slotPasswordEditingFinished()
 {
-    password_ = ui->passwordInputLineEdit->text().toStdString();
+    password_ = ui->passwordInputLineEdit->text();
 }
 
 void
@@ -121,7 +121,7 @@ AccountMigrationDialog::slotMigrationButtonClicked()
     migrationSpinnerMovie_->start();
 
     connect(&LRCInstance::accountModel(), &lrc::api::NewAccountModel::migrationEnded,
-        [this](const std::string& accountId, bool ok) {
+        [this](const QString& accountId, bool ok) {
             if (accountId_ != accountId) {
                 return;
             }
diff --git a/src/accountmigrationdialog.h b/src/accountmigrationdialog.h
index 04ffea4047f3f96217cfecb1823631c3867c57e6..922a7327fa923b5de69962b78db0d2fa34e6f8c8 100644
--- a/src/accountmigrationdialog.h
+++ b/src/accountmigrationdialog.h
@@ -34,14 +34,14 @@ class AccountMigrationDialog : public QDialog
 
 public:
 
-    explicit AccountMigrationDialog(QWidget *parent = 0, const std::string& accountId = {});
+    explicit AccountMigrationDialog(QWidget *parent = 0, const QString& accountId = {});
     ~AccountMigrationDialog();
 
 private:
     Ui::AccountMigrationDialog *ui;
 
-    std::string accountId_;
-    std::string password_;
+    QString accountId_;
+    QString password_;
     QMovie* migrationSpinnerMovie_;
 
 private slots:
diff --git a/src/advancedsettingswidget.cpp b/src/advancedsettingswidget.cpp
index 69445c4a87297286fd4d94497852fb12491c88dc..300a7edafdadc15f18e1f4c030545d7766373328 100644
--- a/src/advancedsettingswidget.cpp
+++ b/src/advancedsettingswidget.cpp
@@ -113,26 +113,26 @@ AdvancedSettingsWidget::updateAdvancedSettings()
     ui->checkBoxCustomRingtone->setChecked(config.Ringtone.ringtoneEnabled);
 
     // Name Server
-    ui->lineEditNameServer->setText(QString::fromStdString(config.RingNS.uri));
+    ui->lineEditNameServer->setText(config.RingNS.uri);
 
     //OpenDHT Config
     ui->checkBoxEnableProxy->setChecked(config.proxyEnabled);
-    ui->lineEditProxy->setText(QString::fromStdString(config.proxyServer));
-    ui->lineEditBootstrap->setText(QString::fromStdString(config.hostname));
+    ui->lineEditProxy->setText(config.proxyServer);
+    ui->lineEditBootstrap->setText(config.hostname);
 
     // Security
-    ui->btnCACert->setText(QFileInfo(QString::fromStdString(LRCInstance::getCurrAccConfig().TLS.certificateListFile)).fileName());
-    ui->btnUserCert->setText(QFileInfo(QString::fromStdString(LRCInstance::getCurrAccConfig().TLS.certificateFile)).fileName());
-    ui->btnPrivateKey->setText(QFileInfo(QString::fromStdString(LRCInstance::getCurrAccConfig().TLS.privateKeyFile)).fileName());
+    ui->btnCACert->setText(QFileInfo(LRCInstance::getCurrAccConfig().TLS.certificateListFile).fileName());
+    ui->btnUserCert->setText(QFileInfo(LRCInstance::getCurrAccConfig().TLS.certificateFile).fileName());
+    ui->btnPrivateKey->setText(QFileInfo(LRCInstance::getCurrAccConfig().TLS.privateKeyFile).fileName());
 
     // Connectivity
     ui->checkBoxUPnP->setChecked(config.upnpEnabled);
     ui->checkBoxTurnEnable->setChecked(config.TURN.enable);
-    ui->lineEditTurnAddress->setText(QString::fromStdString(config.TURN.server));
-    ui->lineEditTurnUsername->setText(QString::fromStdString(config.TURN.username));
-    ui->lineEditTurnPassword->setText(QString::fromStdString(config.TURN.password));
+    ui->lineEditTurnAddress->setText(config.TURN.server);
+    ui->lineEditTurnUsername->setText(config.TURN.username);
+    ui->lineEditTurnPassword->setText(config.TURN.password);
     ui->checkBoxSTUNEnable->setChecked(config.STUN.enable);
-    ui->lineEditSTUNAddress->setText(QString::fromStdString(config.STUN.server));
+    ui->lineEditSTUNAddress->setText(config.STUN.server);
 
     // codecs
     ui->videoCheckBox->setChecked(config.Video.videoEnabled);
@@ -144,7 +144,7 @@ AdvancedSettingsWidget::updateAdvancedSettings()
     connect(ui->videoListWidget, &QListWidget::itemChanged, this, &AdvancedSettingsWidget::videoCodecsStateChange);
 
     ui->btnRingtone->setEnabled(LRCInstance::getCurrAccConfig().Ringtone.ringtoneEnabled);
-    ui->btnRingtone->setText(QFileInfo(QString::fromStdString(LRCInstance::getCurrAccConfig().Ringtone.ringtonePath)).fileName());
+    ui->btnRingtone->setText(QFileInfo(LRCInstance::getCurrAccConfig().Ringtone.ringtonePath).fileName());
     ui->lineEditProxy->setEnabled(LRCInstance::getCurrAccConfig().proxyEnabled);
     ui->lineEditSTUNAddress->setEnabled(LRCInstance::getCurrAccConfig().STUN.enable);
 }
@@ -176,12 +176,12 @@ void
 AdvancedSettingsWidget::openFileCustomRingtone()
 {
     QString fileUrl;
-    auto oldPath = QString::fromStdString(LRCInstance::getCurrAccConfig().Ringtone.ringtonePath);
+    auto oldPath = LRCInstance::getCurrAccConfig().Ringtone.ringtonePath;
     auto openPath = oldPath.isEmpty() ? QDir::currentPath() + QString("/ringtones/") : QFileInfo(oldPath).absolutePath();
     fileUrl = QFileDialog::getOpenFileName(this, QString("Select a new ringtone"), openPath, tr("Audio Files") + " (*.wav *.ogg *.opus *.mp3 *.aiff *.wma)");
     if (!fileUrl.isEmpty()) {
         auto confProps = LRCInstance::accountModel().getAccountConfig(LRCInstance::getCurrAccId());
-        confProps.Ringtone.ringtonePath = fileUrl.toStdString();
+        confProps.Ringtone.ringtonePath = fileUrl;
         LRCInstance::accountModel().setAccountConfig(LRCInstance::getCurrAccId(), confProps);
         ui->btnRingtone->setText(QFileInfo(fileUrl).fileName());
     } else if (oldPath.isEmpty()) {
@@ -195,7 +195,7 @@ AdvancedSettingsWidget::setNameServer()
 {
     auto text = ui->lineEditNameServer->text();
     auto confProps = LRCInstance::accountModel().getAccountConfig(LRCInstance::getCurrAccId());
-    confProps.RingNS.uri = text.toStdString();
+    confProps.RingNS.uri = text;
     LRCInstance::accountModel().setAccountConfig(LRCInstance::getCurrAccId(), confProps);
 }
 
@@ -214,7 +214,7 @@ AdvancedSettingsWidget::setProxyAddress()
 {
     auto text = ui->lineEditProxy->text();
     auto confProps = LRCInstance::accountModel().getAccountConfig(LRCInstance::getCurrAccId());
-    confProps.proxyServer = text.toStdString();
+    confProps.proxyServer = text;
     LRCInstance::accountModel().setAccountConfig(LRCInstance::getCurrAccId(), confProps);
 }
 void
@@ -222,7 +222,7 @@ AdvancedSettingsWidget::setBootstrapAddress()
 {
     auto text = ui->lineEditBootstrap->text();
     auto confProps = LRCInstance::accountModel().getAccountConfig(LRCInstance::getCurrAccId());
-    confProps.hostname = text.toStdString();
+    confProps.hostname = text;
     LRCInstance::accountModel().setAccountConfig(LRCInstance::getCurrAccId(), confProps);
 }
 
@@ -258,7 +258,7 @@ AdvancedSettingsWidget::setTURNAddress()
 {
     auto text = ui->lineEditTurnAddress->text();
     auto confProps = LRCInstance::accountModel().getAccountConfig(LRCInstance::getCurrAccId());
-    confProps.TURN.server = text.toStdString();
+    confProps.TURN.server = text;
     LRCInstance::accountModel().setAccountConfig(LRCInstance::getCurrAccId(), confProps);
 }
 void
@@ -266,7 +266,7 @@ AdvancedSettingsWidget::setTURNUsername()
 {
     auto text = ui->lineEditTurnUsername->text();
     auto confProps = LRCInstance::accountModel().getAccountConfig(LRCInstance::getCurrAccId());
-    confProps.TURN.username = text.toStdString();
+    confProps.TURN.username = text;
     LRCInstance::accountModel().setAccountConfig(LRCInstance::getCurrAccId(), confProps);
 }
 void
@@ -274,7 +274,7 @@ AdvancedSettingsWidget::setTURNPassword()
 {
     auto text = ui->lineEditTurnPassword->text();
     auto confProps = LRCInstance::accountModel().getAccountConfig(LRCInstance::getCurrAccId());
-    confProps.TURN.password = text.toStdString();
+    confProps.TURN.password = text;
     LRCInstance::accountModel().setAccountConfig(LRCInstance::getCurrAccId(), confProps);
 }
 void
@@ -282,7 +282,7 @@ AdvancedSettingsWidget::setSTUNAddress()
 {
     auto text = ui->lineEditSTUNAddress->text();
     auto confProps = LRCInstance::accountModel().getAccountConfig(LRCInstance::getCurrAccId());
-    confProps.STUN.server = text.toStdString();
+    confProps.STUN.server = text;
     LRCInstance::accountModel().setAccountConfig(LRCInstance::getCurrAccId(), confProps);
 }
 
@@ -291,13 +291,13 @@ AdvancedSettingsWidget::openFileCACert()
 {
     QString fileUrl;
     fileUrl = QFileDialog::getOpenFileName(this, QString("Select a CA certificate"), QDir::homePath()
-        + QString("/.local/share/ring/") + QString::fromStdString(LRCInstance::getCurrentAccountInfo().id));
+        + QString("/.local/share/ring/") + LRCInstance::getCurrentAccountInfo().id);
     if (!fileUrl.isEmpty()) {
         auto confProps = LRCInstance::accountModel().getAccountConfig(LRCInstance::getCurrAccId());
-        confProps.TLS.certificateListFile = fileUrl.toStdString();
+        confProps.TLS.certificateListFile = fileUrl;
         LRCInstance::accountModel().setAccountConfig(LRCInstance::getCurrAccId(), confProps);
     }
-    ui->btnCACert->setText(QFileInfo(QString::fromStdString(LRCInstance::getCurrAccConfig().TLS.certificateListFile)).fileName());
+    ui->btnCACert->setText(QFileInfo(LRCInstance::getCurrAccConfig().TLS.certificateListFile).fileName());
 }
 
 void
@@ -305,13 +305,13 @@ AdvancedSettingsWidget::openFileUserCert()
 {
     QString fileUrl;
     fileUrl = QFileDialog::getOpenFileName(this, QString("Select a user certificate"), QDir::homePath()
-        + QString("/.local/share/ring/") + QString::fromStdString(LRCInstance::getCurrentAccountInfo().id));
+        + QString("/.local/share/ring/") + LRCInstance::getCurrentAccountInfo().id);
     if (!fileUrl.isEmpty()) {
         auto confProps = LRCInstance::accountModel().getAccountConfig(LRCInstance::getCurrAccId());
-        confProps.TLS.certificateFile = fileUrl.toStdString();
+        confProps.TLS.certificateFile = fileUrl;
         LRCInstance::accountModel().setAccountConfig(LRCInstance::getCurrAccId(), confProps);
     }
-    ui->btnUserCert->setText(QFileInfo(QString::fromStdString(LRCInstance::getCurrAccConfig().TLS.certificateFile)).fileName());
+    ui->btnUserCert->setText(QFileInfo(LRCInstance::getCurrAccConfig().TLS.certificateFile).fileName());
 }
 
 void
@@ -319,13 +319,13 @@ AdvancedSettingsWidget::openFilePrivateKey()
 {
     QString fileUrl;
     fileUrl = QFileDialog::getOpenFileName(this, QString("Select a private key"), QDir::homePath()
-        + QString("/.local/share/ring/") + QString::fromStdString(LRCInstance::getCurrentAccountInfo().id));
+        + QString("/.local/share/ring/") + LRCInstance::getCurrentAccountInfo().id);
     if (!fileUrl.isEmpty()) {
         auto confProps = LRCInstance::accountModel().getAccountConfig(LRCInstance::getCurrAccId());
-        confProps.TLS.privateKeyFile = fileUrl.toStdString();
+        confProps.TLS.privateKeyFile = fileUrl;
         LRCInstance::accountModel().setAccountConfig(LRCInstance::getCurrAccId(), confProps);
     }
-    ui->btnPrivateKey->setText(QFileInfo(QString::fromStdString(LRCInstance::getCurrAccConfig().TLS.privateKeyFile)).fileName());
+    ui->btnPrivateKey->setText(QFileInfo(LRCInstance::getCurrAccConfig().TLS.privateKeyFile).fileName());
 }
 
 void
@@ -339,7 +339,7 @@ AdvancedSettingsWidget::updateAudioCodecs()
         QListWidgetItem* audioItem = new QListWidgetItem(ui->audioListWidget);
         audioItem->setFlags(Qt::ItemIsUserCheckable | Qt::ItemIsEnabled | Qt::ItemIsSelectable);
         audioItem->setCheckState(it->enabled ? Qt::Checked : Qt::Unchecked);
-        audioItem->setData(Qt::DisplayRole, QString::fromStdString(it->name) + " " + QString::fromStdString(it->samplerate) + " Hz");
+        audioItem->setData(Qt::DisplayRole, it->name + " " + it->samplerate + " Hz");
 
         ui->audioListWidget->addItem(audioItem);
     }
@@ -356,7 +356,7 @@ AdvancedSettingsWidget::updateVideoCodecs()
         QListWidgetItem* videoItem = new QListWidgetItem(ui->videoListWidget);
         videoItem->setFlags(Qt::ItemIsUserCheckable | Qt::ItemIsEnabled | Qt::ItemIsSelectable);
         videoItem->setCheckState(it->enabled ? Qt::Checked : Qt::Unchecked);
-        videoItem->setData(Qt::DisplayRole, QString::fromStdString(it->name));
+        videoItem->setData(Qt::DisplayRole, it->name);
         ui->audioListWidget->addItem(videoItem);
     }
 }
@@ -390,7 +390,7 @@ AdvancedSettingsWidget::decreaseAudioCodecPriority()
     auto audioCodecList = LRCInstance::getCurrentAccountInfo().codecModel->getAudioCodecs();
     auto it = audioCodecList.begin();
 
-    advance(it, selectedRow);
+    std::advance(it, selectedRow);
     LRCInstance::getCurrentAccountInfo().codecModel->decreasePriority(it->id, false);
 
     // swap current item down
@@ -404,7 +404,7 @@ AdvancedSettingsWidget::increaseAudioCodecPriority()
     auto audioCodecList = LRCInstance::getCurrentAccountInfo().codecModel->getAudioCodecs();
     auto it = audioCodecList.begin();
 
-    advance(it, selectedRow);
+    std::advance(it, selectedRow);
     LRCInstance::getCurrentAccountInfo().codecModel->increasePriority(it->id, false);
 
     // swap current item up
@@ -418,7 +418,7 @@ AdvancedSettingsWidget::decreaseVideoCodecPriority()
     auto videoCodecList = LRCInstance::getCurrentAccountInfo().codecModel->getVideoCodecs();
     auto it = videoCodecList.begin();
 
-    advance(it, selectedRow);
+    std::advance(it, selectedRow);
     LRCInstance::getCurrentAccountInfo().codecModel->decreasePriority(it->id, true);
 
     // swap current item down
@@ -432,7 +432,7 @@ AdvancedSettingsWidget::increaseVideoCodecPriority()
     auto videoCodecList = LRCInstance::getCurrentAccountInfo().codecModel->getVideoCodecs();
     auto it = videoCodecList.begin();
 
-    advance(it, selectedRow);
+    std::advance(it, selectedRow);
     LRCInstance::getCurrentAccountInfo().codecModel->increasePriority(it->id, true);
 
     // swap current item up
diff --git a/src/advancedsipsettingwidget.cpp b/src/advancedsipsettingwidget.cpp
index b97ff0712bde9e5be7b62480c69e8d295571a4ee..6ac20e79160395384ad4cc9e68ffc624218240de 100644
--- a/src/advancedsipsettingwidget.cpp
+++ b/src/advancedsipsettingwidget.cpp
@@ -173,10 +173,10 @@ void AdvancedSIPSettingsWidget::updateAdvancedSIPSettings()
     ui->enableSDESToggle->setEnabled(config.SRTP.enable);
     ui->fallbackRTPToggle->setEnabled(config.SRTP.enable);
 
-    ui->btnSIPCACert->setText(QFileInfo(QString::fromStdString(config.TLS.certificateListFile)).fileName());
-    ui->btnSIPUserCert->setText(QFileInfo(QString::fromStdString(config.TLS.certificateFile)).fileName());
-    ui->btnSIPPrivateKey->setText(QFileInfo(QString::fromStdString(config.TLS.privateKeyFile)).fileName());
-    ui->lineEditSIPCertPassword->setText(QString::fromStdString(config.TLS.password));
+    ui->btnSIPCACert->setText(QFileInfo(config.TLS.certificateListFile).fileName());
+    ui->btnSIPUserCert->setText(QFileInfo(config.TLS.certificateFile).fileName());
+    ui->btnSIPPrivateKey->setText(QFileInfo(config.TLS.privateKeyFile).fileName());
+    ui->lineEditSIPCertPassword->setText(config.TLS.password);
 
     ui->encryptMediaStreamsToggle->setChecked(config.SRTP.enable);
     ui->enableSDESToggle->setChecked(config.SRTP.keyExchange == lrc::api::account::KeyExchangeProtocol::SDES);
@@ -190,7 +190,7 @@ void AdvancedSIPSettingsWidget::updateAdvancedSIPSettings()
     ui->tlsProtocolComboBox->setCurrentIndex(static_cast<int>(method));
     connect(ui->tlsProtocolComboBox, QOverload<int>::of(&QComboBox::currentIndexChanged), this, &AdvancedSIPSettingsWidget::tlsProtocolComboBoxIndexChanged);
 
-    ui->outgoingTLSServerNameLineEdit->setText(QString::fromStdString(config.TLS.serverName));
+    ui->outgoingTLSServerNameLineEdit->setText(config.TLS.serverName);
 
     ui->negotiationTimeoutSpinBox->setValue(config.TLS.negotiationTimeoutSec);
     connect(ui->negotiationTimeoutSpinBox, &QSpinBox::editingFinished, this, &AdvancedSIPSettingsWidget::negotiationTimeoutSpinBoxValueChanged);
@@ -198,17 +198,17 @@ void AdvancedSIPSettingsWidget::updateAdvancedSIPSettings()
     // Connectivity
     ui->checkBoxUPnPSIP->setChecked(config.upnpEnabled);
     ui->checkBoxTurnEnableSIP->setChecked(config.TURN.enable);
-    ui->lineEditTurnAddressSIP->setText(QString::fromStdString(config.TURN.server));
-    ui->lineEditTurnUsernameSIP->setText(QString::fromStdString(config.TURN.username));
-    ui->lineEditTurnPsswdSIP->setText(QString::fromStdString(config.TURN.password));
-    ui->lineEditTurnRealmSIP->setText(QString::fromStdString(config.TURN.realm));
+    ui->lineEditTurnAddressSIP->setText(config.TURN.server);
+    ui->lineEditTurnUsernameSIP->setText(config.TURN.username);
+    ui->lineEditTurnPsswdSIP->setText(config.TURN.password);
+    ui->lineEditTurnRealmSIP->setText(config.TURN.realm);
     ui->lineEditTurnAddressSIP->setEnabled(config.TURN.enable);
     ui->lineEditTurnUsernameSIP->setEnabled(config.TURN.enable);
     ui->lineEditTurnPsswdSIP->setEnabled(config.TURN.enable);
     ui->lineEditTurnRealmSIP->setEnabled(config.TURN.enable);
 
     ui->checkBoxSTUNEnableSIP->setChecked(config.STUN.enable);
-    ui->lineEditSTUNAddressSIP->setText(QString::fromStdString(config.STUN.server));
+    ui->lineEditSTUNAddressSIP->setText(config.STUN.server);
     ui->lineEditSTUNAddressSIP->setEnabled(config.STUN.enable);
 
     ui->registrationExpireTimeoutSpinBox->setValue(config.Registration.expire);
@@ -218,7 +218,7 @@ void AdvancedSIPSettingsWidget::updateAdvancedSIPSettings()
 
     // published address
     ui->checkBoxCustomAddressPort->setChecked(config.publishedSameAsLocal);
-    ui->lineEditSIPCustomAddress->setText(QString::fromStdString(config.publishedAddress));
+    ui->lineEditSIPCustomAddress->setText(config.publishedAddress);
     ui->customPortSIPSpinBox->setValue(config.publishedPort);
 
     connect(ui->customPortSIPSpinBox, &QSpinBox::editingFinished, this, &AdvancedSIPSettingsWidget::customPortSIPSpinBoxValueChanged);
@@ -233,7 +233,7 @@ void AdvancedSIPSettingsWidget::updateAdvancedSIPSettings()
     connect(ui->videoListWidgetSIP, &QListWidget::itemChanged, this, &AdvancedSIPSettingsWidget::videoCodecsStateChange);
 
     ui->btnRingtoneSIP->setEnabled(config.Ringtone.ringtoneEnabled);
-    ui->btnRingtoneSIP->setText(QFileInfo(QString::fromStdString(config.Ringtone.ringtonePath)).fileName());
+    ui->btnRingtoneSIP->setText(QFileInfo(config.Ringtone.ringtonePath).fileName());
     ui->lineEditSTUNAddressSIP->setEnabled(config.STUN.enable);
 
     // SDP session negotiation ports
@@ -248,7 +248,7 @@ void AdvancedSIPSettingsWidget::updateAdvancedSIPSettings()
     connect(ui->videoRTPMaxPortSpinBox, &QSpinBox::editingFinished, this, &AdvancedSIPSettingsWidget::videoRTPMaxPortSpinBoxEditFinished);
 
     // voicemail
-    ui->lineEditVoiceMailDialCode->setText(QString::fromStdString(config.mailbox));
+    ui->lineEditVoiceMailDialCode->setText(config.mailbox);
 }
 
 // call settings
@@ -268,13 +268,13 @@ void AdvancedSIPSettingsWidget::setEnableRingtone(bool state)
 void AdvancedSIPSettingsWidget::openFileCustomRingtone()
 {
     QString fileUrl;
-    auto oldPath = QString::fromStdString(LRCInstance::getCurrAccConfig().Ringtone.ringtonePath);
+    auto oldPath = LRCInstance::getCurrAccConfig().Ringtone.ringtonePath;
     auto openPath = oldPath.isEmpty() ? QDir::currentPath() + QString("/ringtones/") : QFileInfo(oldPath).absolutePath();
     fileUrl = QFileDialog::getOpenFileName(this, tr("Select a new ringtone"), openPath, tr("Audio Files") + " (*.wav *.ogg *.opus *.mp3 *.aiff *.wma)");
 
     if (!fileUrl.isEmpty()) {
         auto confProps = LRCInstance::accountModel().getAccountConfig(LRCInstance::getCurrAccId());
-        confProps.Ringtone.ringtonePath = fileUrl.toStdString();
+        confProps.Ringtone.ringtonePath = fileUrl;
         LRCInstance::accountModel().setAccountConfig(LRCInstance::getCurrAccId(), confProps);
         ui->btnRingtoneSIP->setText(QFileInfo(fileUrl).fileName());
 
@@ -308,21 +308,21 @@ void AdvancedSIPSettingsWidget::setUseSTUN(bool state)
 void AdvancedSIPSettingsWidget::setTURNAddress()
 {
     auto confProps = LRCInstance::accountModel().getAccountConfig(LRCInstance::getCurrAccId());
-    confProps.TURN.server = ui->lineEditTurnAddressSIP->text().toStdString();
+    confProps.TURN.server = ui->lineEditTurnAddressSIP->text();
     LRCInstance::accountModel().setAccountConfig(LRCInstance::getCurrAccId(), confProps);
 }
 
 void AdvancedSIPSettingsWidget::setTURNUsername()
 {
     auto confProps = LRCInstance::accountModel().getAccountConfig(LRCInstance::getCurrAccId());
-    confProps.TURN.username = ui->lineEditTurnUsernameSIP->text().toStdString();
+    confProps.TURN.username = ui->lineEditTurnUsernameSIP->text();
     LRCInstance::accountModel().setAccountConfig(LRCInstance::getCurrAccId(), confProps);
 }
 
 void AdvancedSIPSettingsWidget::setTURNPassword()
 {
     auto confProps = LRCInstance::accountModel().getAccountConfig(LRCInstance::getCurrAccId());
-    confProps.TURN.password = ui->lineEditTurnPsswdSIP->text().toStdString();
+    confProps.TURN.password = ui->lineEditTurnPsswdSIP->text();
     LRCInstance::accountModel().setAccountConfig(LRCInstance::getCurrAccId(), confProps);
 }
 
@@ -330,14 +330,14 @@ void
 AdvancedSIPSettingsWidget::setTURNRealm()
 {
     auto confProps = LRCInstance::accountModel().getAccountConfig(LRCInstance::getCurrAccId());
-    confProps.TURN.realm = ui->lineEditTurnRealmSIP->text().toStdString();
+    confProps.TURN.realm = ui->lineEditTurnRealmSIP->text();
     LRCInstance::accountModel().setAccountConfig(LRCInstance::getCurrAccId(), confProps);
 }
 
 void AdvancedSIPSettingsWidget::setSTUNAddress()
 {
     auto confProps = LRCInstance::accountModel().getAccountConfig(LRCInstance::getCurrAccId());
-    confProps.STUN.server = ui->lineEditSTUNAddressSIP->text().toStdString();
+    confProps.STUN.server = ui->lineEditSTUNAddressSIP->text();
     LRCInstance::accountModel().setAccountConfig(LRCInstance::getCurrAccId(), confProps);
 }
 
@@ -352,7 +352,7 @@ void AdvancedSIPSettingsWidget::updateAudioCodecs()
         QListWidgetItem* audioItem = new QListWidgetItem(ui->audioListWidgetSIP);
         audioItem->setFlags(Qt::ItemIsUserCheckable | Qt::ItemIsEnabled | Qt::ItemIsSelectable);
         audioItem->setCheckState(it->enabled ? Qt::Checked : Qt::Unchecked);
-        audioItem->setData(Qt::DisplayRole, QString::fromStdString(it->name) + " " + QString::fromStdString(it->samplerate) + " Hz");
+        audioItem->setData(Qt::DisplayRole, it->name + " " + it->samplerate + " Hz");
 
         ui->audioListWidgetSIP->addItem(audioItem);
     }
@@ -370,7 +370,7 @@ void AdvancedSIPSettingsWidget::updateVideoCodecs()
         QListWidgetItem* videoItem = new QListWidgetItem(ui->videoListWidgetSIP);
         videoItem->setFlags(Qt::ItemIsUserCheckable | Qt::ItemIsEnabled | Qt::ItemIsSelectable);
         videoItem->setCheckState(it->enabled ? Qt::Checked : Qt::Unchecked);
-        videoItem->setData(Qt::DisplayRole, QString::fromStdString(it->name) + "\n");
+        videoItem->setData(Qt::DisplayRole, it->name + "\n");
         ui->audioListWidgetSIP->addItem(videoItem);
     }
 }
@@ -401,7 +401,7 @@ void AdvancedSIPSettingsWidget::decreaseAudioCodecPriority()
     auto audioCodecList = LRCInstance::getCurrentAccountInfo().codecModel->getAudioCodecs();
     auto it = audioCodecList.begin();
 
-    advance(it, selectedRow);
+    std::advance(it, selectedRow);
     LRCInstance::getCurrentAccountInfo().codecModel->decreasePriority(it->id, false);
 
     // swap current item down
@@ -414,7 +414,7 @@ void AdvancedSIPSettingsWidget::increaseAudioCodecPriority()
     auto audioCodecList = LRCInstance::getCurrentAccountInfo().codecModel->getAudioCodecs();
     auto it = audioCodecList.begin();
 
-    advance(it, selectedRow);
+    std::advance(it, selectedRow);
     LRCInstance::getCurrentAccountInfo().codecModel->increasePriority(it->id, false);
     updateAudioCodecs();
 
@@ -428,7 +428,7 @@ void AdvancedSIPSettingsWidget::decreaseVideoCodecPriority()
     auto videoCodecList = LRCInstance::getCurrentAccountInfo().codecModel->getVideoCodecs();
     auto it = videoCodecList.begin();
 
-    advance(it, selectedRow);
+    std::advance(it, selectedRow);
     LRCInstance::getCurrentAccountInfo().codecModel->decreasePriority(it->id, true);
 
     // swap current item down
@@ -441,7 +441,7 @@ void AdvancedSIPSettingsWidget::increaseVideoCodecPriority()
     auto videoCodecList = LRCInstance::getCurrentAccountInfo().codecModel->getVideoCodecs();
     auto it = videoCodecList.begin();
 
-    advance(it, selectedRow);
+    std::advance(it, selectedRow);
     LRCInstance::getCurrentAccountInfo().codecModel->increasePriority(it->id, true);
 
     // swap current item up
@@ -515,7 +515,7 @@ void
 AdvancedSIPSettingsWidget::outgoingTLSServerNameLineEditTextChanged()
 {
     auto confProps = LRCInstance::accountModel().getAccountConfig(LRCInstance::getCurrAccId());
-    confProps.TLS.serverName = ui->outgoingTLSServerNameLineEdit->text().toStdString();
+    confProps.TLS.serverName = ui->outgoingTLSServerNameLineEdit->text();
     LRCInstance::accountModel().setAccountConfig(LRCInstance::getCurrAccId(), confProps);
 }
 
@@ -583,19 +583,19 @@ void
 AdvancedSIPSettingsWidget::lineEditSIPCertPasswordLineEditTextChanged()
 {
     auto confProps = LRCInstance::accountModel().getAccountConfig(LRCInstance::getCurrAccId());
-    confProps.TLS.password = ui->lineEditSIPCertPassword->text().toStdString();
+    confProps.TLS.password = ui->lineEditSIPCertPassword->text();
     LRCInstance::accountModel().setAccountConfig(LRCInstance::getCurrAccId(), confProps);
 }
 
-std::string
-AdvancedSIPSettingsWidget::openButtonFilePath(const std::string& accConfigFilePath,
+QString
+AdvancedSIPSettingsWidget::openButtonFilePath(const QString& accConfigFilePath,
                                               const char* windowTitle,
                                               const char* fileTypeDesp,
                                               const QString& fileTypeFilter,
                                               QPushButton* button)
 {
     QString fileUrl;
-    auto oldPath = QString::fromStdString(accConfigFilePath);
+    auto oldPath = accConfigFilePath;
     auto openPath = oldPath.isEmpty() ? QDir::currentPath() : QFileInfo(oldPath).absolutePath();
     fileUrl = QFileDialog::getOpenFileName(this, tr(windowTitle), openPath, tr(fileTypeDesp) + fileTypeFilter);
     if (!fileUrl.isEmpty()) {
@@ -603,7 +603,7 @@ AdvancedSIPSettingsWidget::openButtonFilePath(const std::string& accConfigFilePa
     } else {
         button->setText("");
     }
-    return fileUrl.toStdString();
+    return fileUrl;
 }
 
 void
@@ -634,7 +634,7 @@ void
 AdvancedSIPSettingsWidget::lineEditSIPCustomAddressLineEditTextChanged()
 {
     auto confProps = LRCInstance::accountModel().getAccountConfig(LRCInstance::getCurrAccId());
-    confProps.publishedAddress = ui->lineEditSIPCustomAddress->text().toStdString();
+    confProps.publishedAddress = ui->lineEditSIPCustomAddress->text();
     LRCInstance::accountModel().setAccountConfig(LRCInstance::getCurrAccId(), confProps);
 }
 
@@ -698,7 +698,7 @@ void
 AdvancedSIPSettingsWidget::lineEditVoiceMailDialCodeEditFinished()
 {
     auto confProps = LRCInstance::accountModel().getAccountConfig(LRCInstance::getCurrAccId());
-    confProps.mailbox = ui->lineEditVoiceMailDialCode->text().toStdString();
+    confProps.mailbox = ui->lineEditVoiceMailDialCode->text();
     LRCInstance::accountModel().setAccountConfig(LRCInstance::getCurrAccId(), confProps);
 }
 
diff --git a/src/advancedsipsettingwidget.h b/src/advancedsipsettingwidget.h
index bdd721e8ff697cab1ecb58bc7c7d3be2a11dacea..c7f914962a513f3082d8d1fc20c93a7b9fd8ba29 100644
--- a/src/advancedsipsettingwidget.h
+++ b/src/advancedsipsettingwidget.h
@@ -37,7 +37,7 @@ public:
     ~AdvancedSIPSettingsWidget();
 
     void updateAdvancedSIPSettings();
-    std::string openButtonFilePath(const std::string& accConfigFilePath,
+    QString openButtonFilePath(const QString& accConfigFilePath,
                                    const char* windowTitle,
                                    const char* fileTypeDesp,
                                    const QString& fileTypeFilter,
diff --git a/src/callaudioonlyavataroverlay.cpp b/src/callaudioonlyavataroverlay.cpp
index daf3e772397eec3bb4bcdbfcbc97a16b3360498e..2beee6b7445ee2a2bd872797e50731303c882c5f 100644
--- a/src/callaudioonlyavataroverlay.cpp
+++ b/src/callaudioonlyavataroverlay.cpp
@@ -47,11 +47,11 @@ CallAudioOnlyAvatarOverlay::writeAvatarOverlay(const lrc::api::conversation::Inf
     ui->avatarLabel->setPixmap(QPixmap::fromImage(Utils::conversationPhoto(convInfo.uid, LRCInstance::getCurrentAccountInfo())));
 
     if (contact.profileInfo.type == lrc::api::profile::Type::SIP) {
-        ui->nameLabel->setText(QString::fromStdString(contact.profileInfo.uri));
+        ui->nameLabel->setText(contact.profileInfo.uri);
     } else {
-        std::string name = contact.profileInfo.alias;
-        std::string id = contact.registeredName;
-        ui->nameLabel->setText(QString::fromStdString(name + "\n" + id));
+        QString name = contact.profileInfo.alias;
+        QString id = contact.registeredName;
+        ui->nameLabel->setText(name + "\n" + id);
     }
 }
 
diff --git a/src/callwidget.cpp b/src/callwidget.cpp
index 56a70036f0daea843771fb3a0e5f2b2be94fa0af..5ba95d2bb24c3878c4f2c3dd0294278361441c62 100644
--- a/src/callwidget.cpp
+++ b/src/callwidget.cpp
@@ -80,13 +80,12 @@ CallWidget::CallWidget(QWidget* parent) :
     // select last used account if stored in registry
     auto accountList = LRCInstance::accountModel().getAccountList();
     if (!accountList.empty()) {
-        std::string accountIdToStartWith;
+        QString accountIdToStartWith;
         if (settings.contains(SettingsKey::selectedAccount)) {
             accountIdToStartWith = settings
                 .value(SettingsKey::selectedAccount, true)
-                .value<QString>()
-                .toStdString();
-            if (Utils::indexInVector(accountList, accountIdToStartWith) == -1) {
+                .value<QString>();
+            if (!accountList.contains(accountIdToStartWith)) {
                 accountIdToStartWith = accountList.at(0);
             }
         }
@@ -95,7 +94,7 @@ CallWidget::CallWidget(QWidget* parent) :
         }
         setSelectedAccount(accountIdToStartWith);
         // get account index and set the currentAccountComboBox
-        auto index = Utils::indexInVector(accountList, accountIdToStartWith);
+        auto index = accountList.indexOf(accountIdToStartWith);
         if (index != -1) {
             ui->currentAccountComboBox->setCurrentIndex(index);
         }
@@ -215,7 +214,7 @@ CallWidget::CallWidget(QWidget* parent) :
             this, &CallWidget::slotNewTrustRequest);
 
     connect(&LRCInstance::behaviorController(), &BehaviorController::newUnreadInteraction,
-        [this](const std::string& accountId, const std::string& conversation,
+        [this](const QString& accountId, const QString& conversation,
                uint64_t interactionId, const interaction::Info& interaction) {
             if (LRCInstance::getCurrAccId() != accountId) {
                 onNewInteraction(accountId, conversation, interactionId, interaction);
@@ -262,7 +261,7 @@ CallWidget::navigated(bool to)
         try {
             auto accountList = LRCInstance::accountModel().getAccountList();
             if (accountList.size() == 1) {
-                auto index = Utils::indexInVector(accountList, LRCInstance::getCurrAccId());
+                auto index = accountList.indexOf(LRCInstance::getCurrAccId());
                 if (index != -1) {
                     slotAccountChanged(index);
                 }
@@ -270,7 +269,7 @@ CallWidget::navigated(bool to)
         } catch (...) {}
         ui->currentAccountComboBox->updateComboBoxDisplay();
         auto& conversation = LRCInstance::getCurrentConversation();
-        if (!conversation.uid.empty()) {
+        if (!conversation.uid.isEmpty()) {
             selectSmartlistItem(conversation.uid);
             ui->stackedWidget->setCurrentWidget(ui->mainActivityWidget);
         } else {
@@ -311,23 +310,21 @@ CallWidget::getLeftPanelWidth()
 }
 
 void
-CallWidget::onNewInteraction(const std::string& accountId, const std::string& convUid,
-                              uint64_t interactionId, const interaction::Info& interaction)
+CallWidget::onNewInteraction(const QString& accountId, const QString& convUid,
+                             uint64_t interactionId, const interaction::Info& interaction)
 {
     Q_UNUSED(interactionId);
     try {
         auto& accountInfo = LRCInstance::getAccountInfo(accountId);
         auto& convModel = accountInfo.conversationModel;
         auto& conversation = LRCInstance::getConversationFromConvUid(convUid, accountId);
-        if (conversation.uid.empty()) {
+        if (conversation.uid.isEmpty()) {
             return;
         }
-        if (!interaction.authorUri.empty() &&
+        if (!interaction.authorUri.isEmpty() &&
             (!QApplication::focusWidget() || LRCInstance::getCurrAccId() != accountId)) {
             auto bestName = Utils::bestNameForConversation(conversation, *convModel);
-            Utils::showSystemNotification(this,
-                QString::fromStdString(bestName),
-                QString::fromStdString(interaction.body));
+            Utils::showSystemNotification(this, bestName,interaction.body);
         }
         updateConversationsFilterWidget();
         if (convUid != LRCInstance::getCurrentConvUid()) {
@@ -351,11 +348,9 @@ CallWidget::setupSmartListContextMenu(const QPoint& pos)
     }
 
     auto convModel = LRCInstance::getCurrentConversationModel();
-    auto convUid = index.data(static_cast<int>(SmartListModel::Role::UID))
-        .value<QString>()
-        .toStdString();
+    auto convUid = index.data(static_cast<int>(SmartListModel::Role::UID)).value<QString>();
     auto& conversation = LRCInstance::getConversationFromConvUid(convUid);
-    if (conversation.uid.empty()) return;
+    if (conversation.uid.isEmpty()) return;
     auto contactUid = conversation.participants.at(0);
     auto contact = LRCInstance::getCurrentAccountInfo().contactModel.get()->getContact(contactUid);
 
@@ -441,7 +436,7 @@ void
 CallWidget::on_acceptButton_clicked()
 {
     auto convInfo = LRCInstance::getCurrentConversation();
-    if (!convInfo.uid.empty()) {
+    if (!convInfo.uid.isEmpty()) {
         LRCInstance::getCurrentCallModel()->accept(convInfo.callId);
     }
 }
@@ -450,7 +445,7 @@ void
 CallWidget::on_refuseButton_clicked()
 {
     auto convInfo = LRCInstance::getCurrentConversation();
-    if (!convInfo.uid.empty()) {
+    if (!convInfo.uid.isEmpty()) {
         LRCInstance::getCurrentCallModel()->refuse(convInfo.callId);
         showConversationView();
     }
@@ -460,7 +455,7 @@ void
 CallWidget::on_cancelButton_clicked()
 {
     auto convInfo = LRCInstance::getCurrentConversation();
-    if (!convInfo.uid.empty()) {
+    if (!convInfo.uid.isEmpty()) {
         LRCInstance::getCurrentCallModel()->hangUp(convInfo.callId);
         showConversationView();
     }
@@ -469,7 +464,7 @@ CallWidget::on_cancelButton_clicked()
 void
 CallWidget::showConversationView()
 {
-    if (LRCInstance::getCurrentConvUid().empty()) {
+    if (LRCInstance::getCurrentConvUid().isEmpty()) {
         backToWelcomePage();
         return;
     }
@@ -482,19 +477,19 @@ CallWidget::showConversationView()
 }
 
 bool
-CallWidget::selectSmartlistItem(const std::string& convUid)
+CallWidget::selectSmartlistItem(const QString& convUid)
 {
-    if (convUid.empty() || !ui->smartList->selectionModel())
+    if (convUid.isEmpty() || !ui->smartList->selectionModel())
         return false;
     ui->smartList->selectionModel()->setCurrentIndex(QModelIndex(), QItemSelectionModel::Deselect);
     auto convModel = LRCInstance::getCurrentConversationModel();
     auto& conversation = LRCInstance::getConversationFromConvUid(convUid);
-    if (conversation.uid.empty()) {
+    if (conversation.uid.isEmpty()) {
         return false;
     }
-    auto contactURI = QString::fromStdString(conversation.participants[0]);
+    auto contactURI = conversation.participants[0];
     if (contactURI.isEmpty() ||
-        convModel->owner.contactModel->getContact(contactURI.toStdString()).profileInfo.type == lrc::api::profile::Type::TEMPORARY) {
+        convModel->owner.contactModel->getContact(contactURI).profileInfo.type == lrc::api::profile::Type::TEMPORARY) {
         return false;
     }
     for (int row = 0; row < smartListModel_->rowCount(); row++) {
@@ -522,7 +517,7 @@ CallWidget::on_smartList_doubleClicked(const QModelIndex& index)
 }
 
 QImage
-CallWidget::imageForConv(const std::string& convUid)
+CallWidget::imageForConv(const QString& convUid)
 {
     return Utils::conversationPhoto(convUid, LRCInstance::getCurrentAccountInfo());
 }
@@ -605,7 +600,7 @@ CallWidget::on_ringContactLineEdit_returnPressed()
 void
 CallWidget::slotAcceptInviteClicked(const QModelIndex & index)
 {
-    auto convUid = index.data(static_cast<int>(SmartListModel::Role::UID)).value<QString>().toStdString();
+    auto convUid = index.data(static_cast<int>(SmartListModel::Role::UID)).value<QString>();
     LRCInstance::getCurrentConversationModel()->makePermanent(convUid);
     ui->messageView->setInvitation(false);
     ui->sendContactRequestButton->hide();
@@ -614,8 +609,8 @@ CallWidget::slotAcceptInviteClicked(const QModelIndex & index)
 void
 CallWidget::slotBlockInviteClicked(const QModelIndex & index)
 {
-    auto convUid = index.data(static_cast<int>(SmartListModel::Role::UID)).value<QString>().toStdString();
-    if (!convUid.empty() && convUid == LRCInstance::getCurrentConvUid()) {
+    auto convUid = index.data(static_cast<int>(SmartListModel::Role::UID)).value<QString>();
+    if (!convUid.isEmpty() && convUid == LRCInstance::getCurrentConvUid()) {
         backToWelcomePage();
     }
     LRCInstance::getCurrentConversationModel()->removeConversation(convUid, true);
@@ -624,8 +619,8 @@ CallWidget::slotBlockInviteClicked(const QModelIndex & index)
 void
 CallWidget::slotIgnoreInviteClicked(const QModelIndex & index)
 {
-    auto convUid = index.data(static_cast<int>(SmartListModel::Role::UID)).value<QString>().toStdString();
-    if (!convUid.empty() && convUid == LRCInstance::getCurrentConvUid()) {
+    auto convUid = index.data(static_cast<int>(SmartListModel::Role::UID)).value<QString>();
+    if (!convUid.isEmpty() && convUid == LRCInstance::getCurrentConvUid()) {
         backToWelcomePage();
     }
     LRCInstance::getCurrentConversationModel()->removeConversation(convUid, false);
@@ -640,16 +635,13 @@ CallWidget::slotCustomContextMenuRequested(const QPoint& pos)
 void
 CallWidget::slotAccountChanged(int index)
 {
-    try {
-        auto accountList = LRCInstance::accountModel().getAccountList();
+    auto accountList = LRCInstance::accountModel().getAccountList();
+    if(accountList.size() > index)
         setSelectedAccount(accountList.at(index));
-    } catch (...) {
-        qWarning() << "CallWidget::slotAccountChanged exception";
-    }
 }
 
 void
-CallWidget::slotShowCallView(const std::string& accountId,
+CallWidget::slotShowCallView(const QString& accountId,
                              const lrc::api::conversation::Info& convInfo)
 {
     Q_UNUSED(accountId);
@@ -667,7 +659,7 @@ CallWidget::slotShowCallView(const std::string& accountId,
 }
 
 void
-CallWidget::slotShowIncomingCallView(const std::string& accountId,
+CallWidget::slotShowIncomingCallView(const QString& accountId,
                                      const conversation::Info& convInfo)
 {
     Q_UNUSED(accountId);
@@ -681,13 +673,13 @@ CallWidget::slotShowIncomingCallView(const std::string& accountId,
 
     auto convModel = LRCInstance::getCurrentConversationModel();
     ui->callerPhoto->setPixmap(QPixmap::fromImage(imageForConv(convInfo.uid)));
-    auto bestName = QString::fromStdString(Utils::bestNameForConversation(convInfo, *convModel));
-    auto bestId = QString::fromStdString(Utils::bestIdForConversation(convInfo, *convModel));
+    auto bestName = Utils::bestNameForConversation(convInfo, *convModel);
+    auto bestId = Utils::bestIdForConversation(convInfo, *convModel);
     auto finalBestId = (bestName != bestId) ? bestId : "";
 
     auto call = callModel->getCall(convInfo.callId);
     auto isCallSelected = LRCInstance::getCurrentConvUid() == convInfo.uid;
-    ui->callingStatusLabel->setText(QString::fromStdString(lrc::api::call::to_string(call.status)));
+    ui->callingStatusLabel->setText(lrc::api::call::to_string(call.status));
 
     auto itemInCurrentFilter = false;
     if (call.isOutgoing) {
@@ -700,8 +692,7 @@ CallWidget::slotShowIncomingCallView(const std::string& accountId,
     } else {
         if (!QApplication::focusWidget()) {
             auto formattedName = Utils::bestNameForConversation(convInfo, *convModel);
-            Utils::showSystemNotification(this,
-                QString(tr("Call incoming from %1")).arg(QString::fromStdString(formattedName)));
+            Utils::showSystemNotification(this, QString(tr("Call incoming from %1")).arg(formattedName));
         }
         auto selectedAccountId = LRCInstance::getCurrentAccountInfo().id;
         auto accountProperties = LRCInstance::accountModel().getAccountConfig(selectedAccountId);
@@ -746,7 +737,7 @@ CallWidget::slotShowIncomingCallView(const std::string& accountId,
 }
 
 void
-CallWidget::slotShowChatView(const std::string& accountId,
+CallWidget::slotShowChatView(const QString& accountId,
                       const lrc::api::conversation::Info& convInfo)
 {
     Q_UNUSED(accountId);
@@ -757,7 +748,7 @@ CallWidget::slotShowChatView(const std::string& accountId,
 }
 
 void
-CallWidget::slotNewTrustRequest(const std::string& accountId, const std::string& contactUri)
+CallWidget::slotNewTrustRequest(const QString& accountId, const QString& contactUri)
 {
     try {
         auto& accountInfo = LRCInstance::getAccountInfo(accountId);
@@ -766,16 +757,14 @@ CallWidget::slotNewTrustRequest(const std::string& accountId, const std::string&
             try {
                 auto contactInfo = contactModel->getContact(contactUri);
                 auto bestName = Utils::bestNameForContact(contactInfo);
-                Utils::showSystemNotification(this,
-                    QString::fromStdString(bestName),
-                    QObject::tr("Contact request"));
+                Utils::showSystemNotification(this, bestName, QObject::tr("Contact request"));
             } catch (...) {
-                qDebug() << "Can't get contact: ", contactUri.c_str();
+                qDebug() << "Can't get contact: ", contactUri;
                 return;
             }
         }
     } catch (...) {
-        qDebug() << "Can't get account:" << accountId.c_str();
+        qDebug() << "Can't get account:" << accountId;
     }
 }
 
@@ -798,10 +787,10 @@ CallWidget::slotToggleFullScreenClicked()
 }
 
 void
-CallWidget::callTerminating(const std::string& id)
+CallWidget::callTerminating(const QString& id)
 {
     auto conversation = LRCInstance::getCurrentConversation();
-    if ( conversation.uid.empty() &&
+    if ( conversation.uid.isEmpty() &&
          conversation.callId != id &&
          conversation.confId != id) {
         return;
@@ -816,7 +805,7 @@ CallWidget::callTerminating(const std::string& id)
 }
 
 void
-CallWidget::setSelectedAccount(const std::string& accountId)
+CallWidget::setSelectedAccount(const QString& accountId)
 {
     LRCInstance::setSelectedAccountId(accountId);
 
@@ -828,11 +817,11 @@ CallWidget::setSelectedAccount(const std::string& accountId)
 
     // We setup the ringIdLabel and the QRCode
     auto& accountInfo = LRCInstance::accountModel().getAccountInfo(accountId);
-    auto id = accountInfo.registeredName.empty() ? accountInfo.profileInfo.uri : accountInfo.registeredName;
+    auto id = accountInfo.registeredName.isEmpty() ? accountInfo.profileInfo.uri : accountInfo.registeredName;
     auto isRingAccount = accountInfo.profileInfo.type == lrc::api::profile::Type::RING;
     if (isRingAccount) {
-        ui->ringIdLabel->setText(QString::fromStdString(id));
-        ui->qrLabel->setPixmap(QPixmap::fromImage(Utils::setupQRCode(QString::fromStdString(accountInfo.profileInfo.uri), 5).scaled(QSize(qrSize_, qrSize_),
+        ui->ringIdLabel->setText(id);
+        ui->qrLabel->setPixmap(QPixmap::fromImage(Utils::setupQRCode(accountInfo.profileInfo.uri, 5).scaled(QSize(qrSize_, qrSize_),
                                Qt::KeepAspectRatio)));
     }
 
@@ -873,21 +862,21 @@ void CallWidget::updateConversationsFilterWidget()
 
 void CallWidget::setConversationFilter(const QString & filter)
 {
-    LRCInstance::getCurrentConversationModel()->setFilter(filter.toStdString());
+    LRCInstance::getCurrentConversationModel()->setFilter(filter);
 }
 
 void
 CallWidget::showChatView(const QModelIndex& nodeIdx)
 {
-    auto convUid = nodeIdx.data(static_cast<int>(SmartListModel::Role::UID)).toString().toStdString();
+    auto convUid = nodeIdx.data(static_cast<int>(SmartListModel::Role::UID)).toString();
     auto& conversation = LRCInstance::getConversationFromConvUid(convUid);
-    if (!conversation.uid.empty()) {
+    if (!conversation.uid.isEmpty()) {
         setupChatView(conversation);
     }
 }
 
 void
-CallWidget::showChatView(const std::string& accountId, const lrc::api::conversation::Info& convInfo)
+CallWidget::showChatView(const QString& accountId, const lrc::api::conversation::Info& convInfo)
 {
     Q_UNUSED(accountId);
     setupChatView(convInfo);
@@ -899,7 +888,7 @@ CallWidget::setConversationProfileData(const lrc::api::conversation::Info& convI
     auto convModel = LRCInstance::getCurrentConversationModel();
     auto accInfo = &LRCInstance::getCurrentAccountInfo();
     auto contactUri = convInfo.participants.front();
-    if (contactUri.empty()) {
+    if (contactUri.isEmpty()) {
         return;
     }
     try {
@@ -910,15 +899,14 @@ CallWidget::setConversationProfileData(const lrc::api::conversation::Info& convI
             bestName,
             contactUri
         );
-        if (!contact.profileInfo.avatar.empty()) {
+        if (!contact.profileInfo.avatar.isEmpty()) {
             ui->messageView->setSenderImage(contactUri, contact.profileInfo.avatar);
         } else {
             auto avatar = Utils::conversationPhoto(convInfo.uid, *accInfo);
             QByteArray ba;
             QBuffer bu(&ba);
             avatar.save(&bu, "PNG");
-            std::string avatarString = ba.toBase64().toStdString();
-            ui->messageView->setSenderImage(contactUri, avatarString);
+            ui->messageView->setSenderImage(contactUri, QString::fromLocal8Bit(ba.toBase64()));
         }
     } catch (...) {}
 }
@@ -928,9 +916,9 @@ CallWidget::setupChatView(const lrc::api::conversation::Info& convInfo)
 {
     auto& accInfo = LRCInstance::getCurrentAccountInfo();
     auto& contact = accInfo.contactModel->getContact(convInfo.participants.at(0));
-    QString displayName = QString::fromStdString(Utils::bestNameForContact(contact));
-    QString displayId = QString::fromStdString(Utils::bestIdForContact(contact));
-    QString contactURI = QString::fromStdString(convInfo.participants.at(0));
+    QString displayName = Utils::bestNameForContact(contact);
+    QString displayId = Utils::bestIdForContact(contact);
+    QString contactURI = convInfo.participants.at(0);
 
     bool isContact = false;
     auto selectedAccountId = LRCInstance::getCurrAccId();
@@ -939,7 +927,7 @@ CallWidget::setupChatView(const lrc::api::conversation::Info& convInfo)
 
     lrc::api::profile::Type contactType;
     try {
-        auto contactInfo = accountInfo.contactModel->getContact(contactURI.toStdString());
+        auto contactInfo = accountInfo.contactModel->getContact(contactURI);
         if (contactInfo.isTrusted) {
             isContact = true;
         }
@@ -956,9 +944,8 @@ CallWidget::setupChatView(const lrc::api::conversation::Info& convInfo)
     ui->messageView->setMessagesVisibility(false);
     Utils::oneShotConnect(ui->messageView, &MessageWebView::sendMessageContentSaved,
         [this, convInfo, accountId = accountInfo.id, lastConvUid = lastConvUid_](const QString& content) {
-            if (!lastConvUid.empty()) {
-                LRCInstance::setContentDraft(
-                    lastConvUid.c_str(), accountId.c_str(), content);
+            if (!lastConvUid.isEmpty()) {
+                LRCInstance::setContentDraft(lastConvUid, accountId, content);
             }
             Utils::oneShotConnect(ui->messageView, &MessageWebView::messagesCleared,
                 [this, convInfo] {
@@ -972,8 +959,7 @@ CallWidget::setupChatView(const lrc::api::conversation::Info& convInfo)
                 });
             ui->messageView->setInvitation(false);
             ui->messageView->clear();
-            auto restoredContent = LRCInstance::getContentDraft(
-                convInfo.uid.c_str(), accountId.c_str());
+            auto restoredContent = LRCInstance::getContentDraft(convInfo.uid, accountId);
             ui->messageView->setSendMessageContent(restoredContent);
             ui->smartList->update();
         });
@@ -1029,7 +1015,7 @@ void
 CallWidget::on_sendContactRequestButton_clicked()
 {
     auto convInfo = LRCInstance::getCurrentConversation();
-    if (!convInfo.uid.empty()) {
+    if (!convInfo.uid.isEmpty()) {
         LRCInstance::getCurrentConversationModel()->makePermanent(convInfo.uid);
         ui->sendContactRequestButton->hide();
     }
@@ -1039,7 +1025,7 @@ void
 CallWidget::on_btnAudioCall_clicked()
 {
     auto convInfo = LRCInstance::getCurrentConversation();
-    if (!convInfo.uid.empty()) {
+    if (!convInfo.uid.isEmpty()) {
         LRCInstance::getCurrentConversationModel()->placeAudioOnlyCall(convInfo.uid);
         ui->callingPhoto->setPixmap(QPixmap::fromImage(imageForConv(convInfo.uid)));
     }
@@ -1049,7 +1035,7 @@ void
 CallWidget::on_btnVideoCall_clicked()
 {
     auto convInfo = LRCInstance::getCurrentConversation();
-    if (!convInfo.uid.empty()) {
+    if (!convInfo.uid.isEmpty()) {
         LRCInstance::getCurrentConversationModel()->placeCall(convInfo.uid);
         ui->callingPhoto->setPixmap(QPixmap::fromImage(imageForConv(convInfo.uid)));
     }
@@ -1084,7 +1070,7 @@ CallWidget::connectConversationModel()
     );
     modelUpdatedConnection_ = QObject::connect(
         currentConversationModel, &lrc::api::ConversationModel::conversationUpdated,
-        [this](const std::string& convUid) {
+        [this](const QString& convUid) {
             Q_UNUSED(convUid);
             ui->smartList->update();
         }
@@ -1099,7 +1085,7 @@ CallWidget::connectConversationModel()
     );
     newConversationConnection_ = QObject::connect(
         currentConversationModel, &lrc::api::ConversationModel::newConversation,
-        [this](const std::string& convUid) {
+        [this](const QString& convUid) {
             updateSmartList();
             updateConversationForNewContact(convUid);
             ui->conversationsFilterWidget->update();
@@ -1114,7 +1100,7 @@ CallWidget::connectConversationModel()
     );
     conversationClearedConnection = QObject::connect(
         currentConversationModel, &lrc::api::ConversationModel::conversationCleared,
-        [this](const std::string& convUid) {
+        [this](const QString& convUid) {
             ui->messageView->clear();
             // if currently selected,
             // switch to welcome screen (deselecting current smartlist item )
@@ -1126,7 +1112,7 @@ CallWidget::connectConversationModel()
     );
     interactionStatusUpdatedConnection_ = QObject::connect(
         currentConversationModel, &lrc::api::ConversationModel::interactionStatusUpdated,
-        [this](const std::string& convUid, uint64_t interactionId, const lrc::api::interaction::Info& interaction) {
+        [this](const QString& convUid, uint64_t interactionId, const lrc::api::interaction::Info& interaction) {
             if (convUid != LRCInstance::getCurrentConvUid()) {
                 return;
             }
@@ -1139,7 +1125,7 @@ CallWidget::connectConversationModel()
     );
     newInteractionConnection_ = QObject::connect(
         currentConversationModel, &lrc::api::ConversationModel::newInteraction,
-        [this](const std::string& convUid, uint64_t interactionId,
+        [this](const QString& convUid, uint64_t interactionId,
                const lrc::api::interaction::Info& interaction) {
             auto accountId = LRCInstance::getCurrAccId();
             onNewInteraction(accountId, convUid, interactionId, interaction);
@@ -1147,7 +1133,7 @@ CallWidget::connectConversationModel()
     );
     interactionRemovedConnection_ = QObject::connect(
         currentConversationModel, &lrc::api::ConversationModel::interactionRemoved,
-        [this](const std::string& convUid, uint64_t interactionId) {
+        [this](const QString& convUid, uint64_t interactionId) {
             Q_UNUSED(convUid);
             ui->messageView->removeInteraction(interactionId);
         }
@@ -1159,7 +1145,7 @@ CallWidget::connectConversationModel()
 }
 
 void
-CallWidget::updateConversationView(const std::string& convUid)
+CallWidget::updateConversationView(const QString& convUid)
 {
     if (convUid != LRCInstance::getCurrentConvUid()) {
         return;
@@ -1183,11 +1169,11 @@ CallWidget::selectConversation(const QModelIndex& index)
         if (!lastConvUid_.compare(convUid)) {
             return;
         }
-        lastConvUid_.assign(convUid);
+        lastConvUid_ = convUid;
 
         auto callModel = LRCInstance::getCurrentCallModel();
         auto& conversation = LRCInstance::getConversationFromConvUid(convUid);
-        if (!conversation.uid.empty()) {
+        if (!conversation.uid.isEmpty()) {
             if (callModel->hasCall(conversation.callId) && item.callId == conversation.callId) {
                 setCallPanelVisibility(true);
                 return;
@@ -1207,7 +1193,7 @@ CallWidget::selectConversation(const lrc::api::conversation::Info& item)
         LRCInstance::setSelectedConvId(item.uid);
         accInfo.conversationModel->selectConversation(item.uid);
         accInfo.conversationModel->clearUnreadInteractions(item.uid);
-        if (!item.callId.empty()) {
+        if (!item.callId.isEmpty()) {
             QtConcurrent::run(
                 [convUid=item.uid, accId=item.accountId] {
                     auto item = LRCInstance::getConversationFromConvUid(convUid);
@@ -1223,7 +1209,7 @@ CallWidget::selectConversation(const lrc::api::conversation::Info& item)
 void
 CallWidget::deselectConversation()
 {
-    if (LRCInstance::getCurrentConvUid().empty()) {
+    if (LRCInstance::getCurrentConvUid().isEmpty()) {
         return;
     }
 
@@ -1244,7 +1230,7 @@ CallWidget::deselectConversation()
 }
 
 void
-CallWidget::updateConversationForNewContact(const std::string& convUid)
+CallWidget::updateConversationForNewContact(const QString& convUid)
 {
     auto convModel = LRCInstance::getCurrentConversationModel();
     if (convModel == nullptr) {
@@ -1253,10 +1239,10 @@ CallWidget::updateConversationForNewContact(const std::string& convUid)
     ui->ringContactLineEdit->setText("");
     auto selectedUid = LRCInstance::getCurrentConvUid();
     auto& conversation = LRCInstance::getConversationFromConvUid(convUid, {}, true);
-    if (!conversation.uid.empty()) {
+    if (!conversation.uid.isEmpty()) {
         try {
             auto contact = convModel->owner.contactModel->getContact(conversation.participants[0]);
-            if (!contact.profileInfo.uri.empty() && contact.profileInfo.uri == selectedUid) {
+            if (!contact.profileInfo.uri.isEmpty() && contact.profileInfo.uri == selectedUid) {
                 LRCInstance::setSelectedConvId(convUid);
                 convModel->selectConversation(convUid);
             }
@@ -1307,7 +1293,7 @@ CallWidget::update()
 }
 
 void
-CallWidget::connectAccount(const std::string& accountId)
+CallWidget::connectAccount(const QString& accountId)
 {
     try {
         auto& accInfo = LRCInstance::accountModel().getAccountInfo(accountId);
@@ -1315,13 +1301,13 @@ CallWidget::connectAccount(const std::string& accountId)
         callStatusChangedConnection_ = QObject::connect(
             accInfo.callModel.get(),
             &lrc::api::NewCallModel::callStatusChanged,
-            [this, accountId](const std::string& callId) {
+            [this, accountId](const QString& callId) {
                 auto& accInfo = LRCInstance::accountModel().getAccountInfo(accountId);
                 auto& callModel = accInfo.callModel;
                 auto call = callModel->getCall(callId);
 
                 // change status label text
-                ui->callingStatusLabel->setText(QString::fromStdString(lrc::api::call::to_string(call.status)));
+                ui->callingStatusLabel->setText(lrc::api::call::to_string(call.status));
 
                 switch (call.status) {
                 case lrc::api::call::Status::INVALID:
@@ -1332,17 +1318,17 @@ CallWidget::connectAccount(const std::string& accountId)
                 case lrc::api::call::Status::TERMINATING: {
                     LRCInstance::renderer()->removeDistantRenderer(callId);
                     auto convInfo = LRCInstance::getConversationFromCallId(callId);
-                    if (convInfo.uid.empty()) {
+                    if (convInfo.uid.isEmpty()) {
                         break;
                     }
                     // If it's a conference, change the smartlist index
                     // to the next remaining participant.
                     bool forceCallOnly{ false };
-                    if (!convInfo.confId.empty()) {
+                    if (!convInfo.confId.isEmpty()) {
                         auto callList = LRCInstance::getAPI().getConferenceSubcalls(convInfo.confId);
                         if (callList.empty()) {
                             auto lastConferencee = LRCInstance::instance().popLastConferencee(convInfo.confId);
-                            callList.emplace_back(lastConferencee);
+                            callList.append(lastConferencee);
                             forceCallOnly = true;
                         }
                         for (const auto& callId : callList) {
@@ -1350,7 +1336,7 @@ CallWidget::connectAccount(const std::string& accountId)
                                 continue;
                             }
                             auto otherConv = LRCInstance::getConversationFromCallId(callId);
-                            if (!otherConv.uid.empty() && otherConv.uid != convInfo.uid) {
+                            if (!otherConv.uid.isEmpty() && otherConv.uid != convInfo.uid) {
                                 LRCInstance::setSelectedConvId(otherConv.uid);
                                 selectSmartlistItem(otherConv.uid);
                                 ui->videoView->updateCall(otherConv.uid, otherConv.accountId, forceCallOnly);
@@ -1368,7 +1354,7 @@ CallWidget::connectAccount(const std::string& accountId)
                 case lrc::api::call::Status::CONNECTED:
                 case lrc::api::call::Status::IN_PROGRESS: {
                     auto convInfo = LRCInstance::getConversationFromCallId(callId, accountId);
-                    if (!convInfo.uid.empty() && convInfo.uid == LRCInstance::getCurrentConvUid()) {
+                    if (!convInfo.uid.isEmpty() && convInfo.uid == LRCInstance::getCurrentConvUid()) {
                         accInfo.conversationModel->selectConversation(convInfo.uid);
                     }
                     LRCInstance::renderer()->addDistantRenderer(callId);
@@ -1388,11 +1374,11 @@ CallWidget::connectAccount(const std::string& accountId)
         contactAddedConnection_ = QObject::connect(
             accInfo.contactModel.get(),
             &lrc::api::ContactModel::contactAdded,
-            [this, accountId](const std::string& contactUri) {
+            [this, accountId](const QString& contactUri) {
                 auto& accInfo = LRCInstance::accountModel().getAccountInfo(accountId);
                 auto convModel = LRCInstance::getCurrentConversationModel();
                 auto conversation = LRCInstance::getCurrentConversation();
-                if (conversation.uid.empty()) {
+                if (conversation.uid.isEmpty()) {
                     return;
                 }
                 if (contactUri == accInfo.contactModel->getContact(conversation.participants.at(0)).profileInfo.uri) {
@@ -1410,13 +1396,13 @@ CallWidget::connectAccount(const std::string& accountId)
         addedToConferenceConnection_ = QObject::connect(
             accInfo.callModel.get(),
             &NewCallModel::callAddedToConference,
-            [this](const std::string& callId, const std::string& confId) {
+            [this](const QString& callId, const QString& confId) {
                 Q_UNUSED(callId);
                 LRCInstance::renderer()->addDistantRenderer(confId);
                 ui->videoView->updateCall();
             });
     } catch (...) {
-        qWarning() << "Couldn't get account: " << accountId.c_str();
+        qWarning() << "Couldn't get account: " << accountId;
     }
 }
 
@@ -1443,7 +1429,7 @@ CallWidget::updateChatviewFrame()
 
     auto& accInfo = LRCInstance::getCurrentAccountInfo();
     auto& convInfo = LRCInstance::getCurrentConversation();
-    if (convInfo.uid.empty()) {
+    if (convInfo.uid.isEmpty()) {
         return;
     }
     auto contactUri = convInfo.participants.front();
@@ -1459,8 +1445,8 @@ CallWidget::updateChatviewFrame()
     bool temp = contactInfo.profileInfo.type == lrc::api::profile::Type::TEMPORARY ||
                 contactInfo.profileInfo.type == lrc::api::profile::Type::PENDING;
 
-    auto bestName = QString::fromStdString(Utils::bestNameForContact(contactInfo));
-    auto bestId = QString::fromStdString(Utils::bestIdForContact(contactInfo));
+    auto bestName = Utils::bestNameForContact(contactInfo);
+    auto bestId = Utils::bestIdForContact(contactInfo);
 
     ui->messageView->updateChatviewFrame(accInfo.enabled, contactInfo.isBanned, temp, bestName, bestId);
 }
@@ -1494,7 +1480,7 @@ CallWidget::registerShortCuts()
             auto convModel = LRCInstance::getCurrentConversationModel();
             auto convUid = LRCInstance::getCurrentConvUid();
 
-            if (convModel && !convUid.empty())
+            if (convModel && !convUid.isEmpty())
                 convModel->placeAudioOnlyCall(convUid);
         });
 
@@ -1503,7 +1489,7 @@ CallWidget::registerShortCuts()
             auto convModel = LRCInstance::getCurrentConversationModel();
             auto convUid = LRCInstance::getCurrentConvUid();
 
-            if (convModel && !convUid.empty())
+            if (convModel && !convUid.isEmpty())
                 convModel->placeCall(convUid);
         });
 
@@ -1512,7 +1498,7 @@ CallWidget::registerShortCuts()
             auto convModel = LRCInstance::getCurrentConversationModel();
             auto convUid = LRCInstance::getCurrentConvUid();
 
-            if (convModel && !convUid.empty()) {
+            if (convModel && !convUid.isEmpty()) {
                 auto reply = Utils::getReplyMessageBox(this,
                     QString("Clear Conversation History"),
                     QString("Do you really want to clear the conversation history with this contact ?"));
@@ -1526,7 +1512,7 @@ CallWidget::registerShortCuts()
             auto convModel = LRCInstance::getCurrentConversationModel();
             auto convUid = LRCInstance::getCurrentConvUid();
 
-            if (convModel && !convUid.empty()) {
+            if (convModel && !convUid.isEmpty()) {
                 auto reply = Utils::getReplyMessageBox(this,
                     QString("Block Contact"),
                     QString("Do you really want to block this contact ?"));
@@ -1538,8 +1524,8 @@ CallWidget::registerShortCuts()
     connect(copyContactNameSC, &QShortcut::activated,
         [this] {
             QPointer<QClipboard> clipboard = QApplication::clipboard();
-            clipboard->setText(QString::fromStdString(
-                Utils::bestIdForContact(LRCInstance::getCurrentAccountInfo().contactModel->getContact(LRCInstance::getCurrentConversation().participants.front()))
+            clipboard->setText(
+                Utils::bestIdForContact(LRCInstance::getCurrentAccountInfo().contactModel->getContact(LRCInstance::getCurrentConversation().participants.front())
             ));
         });
 
@@ -1579,7 +1565,7 @@ CallWidget::registerShortCuts()
     connect(answerCallSC, &QShortcut::activated,
         [this] {
             auto& convInfo = LRCInstance::getCurrentConversation();
-            if (!convInfo.callId.empty())
+            if (!convInfo.callId.isEmpty())
                 LRCInstance::getCurrentCallModel()->accept(convInfo.callId);
         });
 
@@ -1587,7 +1573,7 @@ CallWidget::registerShortCuts()
         [this] {
             auto& convInfo = LRCInstance::getCurrentConversation();
             auto status = LRCInstance::getCallInfoForConversation(convInfo)->status;
-            if (!convInfo.callId.empty()) {
+            if (!convInfo.callId.isEmpty()) {
                 if (status == lrc::api::call::Status::IN_PROGRESS || status == lrc::api::call::Status::OUTGOING_RINGING) {
                     LRCInstance::getCurrentCallModel()->hangUp(convInfo.callId);
                 } else if (status == lrc::api::call::Status::INCOMING_RINGING) {
@@ -1676,7 +1662,7 @@ CallWidget::Paste()
         QBuffer bu(&ba);
         bu.open(QIODevice::WriteOnly);
         pixmap.save(&bu, "PNG");
-        auto str = QString::fromStdString(ba.toBase64().toStdString());
+        auto str = QString::fromLocal8Bit(ba.toBase64());
 
         ui->messageView->setMessagesImageContent(str, true);
     }
diff --git a/src/callwidget.h b/src/callwidget.h
index ff018ed5c1e07e796fcff47531088f62a6a9e9af..d87a52ba7c7920c5a6e990296098a1e8f92b37ba 100644
--- a/src/callwidget.h
+++ b/src/callwidget.h
@@ -69,7 +69,7 @@ private slots:
     void on_ringContactLineEdit_returnPressed();
     void settingsButtonClicked();
     void showChatView(const QModelIndex& nodeIdx);
-    void showChatView(const std::string & accountId, const lrc::api::conversation::Info & convInfo);
+    void showChatView(const QString& accountId, const lrc::api::conversation::Info & convInfo);
     void setConversationProfileData(const lrc::api::conversation::Info & convInfo);
     void setupChatView(const lrc::api::conversation::Info& convInfo);
     void slotAcceptInviteClicked(const QModelIndex& index);
@@ -77,10 +77,10 @@ private slots:
     void slotIgnoreInviteClicked(const QModelIndex& index);
     void slotCustomContextMenuRequested(const QPoint & pos);
     void slotAccountChanged(int index);
-    void slotShowCallView(const std::string & accountId, const lrc::api::conversation::Info & convInfo);
-    void slotShowIncomingCallView(const std::string & accountId, const lrc::api::conversation::Info & convInfo);
-    void slotShowChatView(const std::string & accountId, const lrc::api::conversation::Info & convInfo);
-    void slotNewTrustRequest(const std::string& accountId, const std::string& contactUri);
+    void slotShowCallView(const QString & accountId, const lrc::api::conversation::Info & convInfo);
+    void slotShowIncomingCallView(const QString & accountId, const lrc::api::conversation::Info & convInfo);
+    void slotShowChatView(const QString & accountId, const lrc::api::conversation::Info & convInfo);
+    void slotNewTrustRequest(const QString& accountId, const QString& contactUri);
     void slotToggleFullScreenClicked();
     void update();
     void ShowContextMenu(const QPoint& pos);
@@ -104,8 +104,8 @@ private slots:
     void slotVideoDeviceListChanged();
 
 private:
-    void callTerminating(const std::string& callid);
-    void onNewInteraction(const std::string& accountId, const std::string& convUid,
+    void callTerminating(const QString& callid);
+    void onNewInteraction(const QString& accountId, const QString& convUid,
                            uint64_t interactionId, const lrc::api::interaction::Info& interaction);
     void conversationsButtonClicked();
     void invitationsButtonClicked();
@@ -116,20 +116,20 @@ private:
     bool selectConversation(const lrc::api::conversation::Info& item);
     void deselectConversation();
     bool connectConversationModel();
-    void updateConversationView(const std::string& convUid);
+    void updateConversationView(const QString& convUid);
     void showConversationView();
-    bool selectSmartlistItem(const std::string& convUid);
-    QImage imageForConv(const std::string & convUid);
+    bool selectSmartlistItem(const QString& convUid);
+    QImage imageForConv(const QString & convUid);
     void processContactLineEdit();
     void hideMiniSpinner();
-    void updateConversationForNewContact(const std::string& convUid);
+    void updateConversationForNewContact(const QString& convUid);
     void updateSmartList();
-    void setSelectedAccount(const std::string & accountId);
+    void setSelectedAccount(const QString & accountId);
     void setConversationFilter(const QString& filter);
     void setConversationFilter(lrc::api::profile::Type filter);
     void updateConversationsFilterWidget();
     void updateComboBox();
-    void connectAccount(const std::string& accId);
+    void connectAccount(const QString& accId);
     void setCallPanelVisibility(bool visible);
     void updateChatviewFrame();
     void registerShortCuts();
@@ -142,7 +142,7 @@ private:
 
     constexpr static int qrSize_ = 200;
 
-    std::string lastConvUid_ {};
+    QString lastConvUid_ {};
     lrc::api::profile::Type currentTypeFilter_{};
     std::unique_ptr<SmartListModel> smartListModel_;
 
diff --git a/src/contactpicker.cpp b/src/contactpicker.cpp
index df3919444dbae75cd451d6b531d3515c7165e951..31f49b7cacc583576e2ac88096d781d17f80ab7c 100644
--- a/src/contactpicker.cpp
+++ b/src/contactpicker.cpp
@@ -66,20 +66,20 @@ ContactPicker::accept()
                 smartListModel_->toggleSection(sectionName);
                 return;
             }
-            auto convUid = index.data(SmartListModel::Role::UID).value<QString>().toStdString();
-            auto accId = index.data(SmartListModel::Role::AccountId).value<QString>().toStdString();
+            auto convUid = index.data(SmartListModel::Role::UID).value<QString>();
+            auto accId = index.data(SmartListModel::Role::AccountId).value<QString>();
             auto callId = LRCInstance::getCallIdForConversationUid(convUid, accId);
-            if (!callId.empty()) {
+            if (!callId.isEmpty()) {
                 emit callWillJoinConference(callId);
             } else {
-                auto contactUri = index.data(SmartListModel::Role::URI).value<QString>().toStdString();
+                auto contactUri = index.data(SmartListModel::Role::URI).value<QString>();
                 emit contactWillJoinConference(contactUri);
             }
         }
             break;
         case SmartListModel::Type::TRANSFER:
         {
-            auto contactUri = index.data(SmartListModel::Role::URI).value<QString>().toStdString();
+            auto contactUri = index.data(SmartListModel::Role::URI).value<QString>();
             emit contactWillDoTransfer(contactUri);
         }
             break;
@@ -95,7 +95,7 @@ void
 ContactPicker::on_ringContactLineEdit_textChanged(const QString &arg1)
 {
     if (listModeltype_ == SmartListModel::Type::CONFERENCE) {
-        smartListModel_->setConferenceableFilter(arg1.toStdString());
+        smartListModel_->setConferenceableFilter(arg1);
     }
     selectableProxyModel_->setFilterRegExp(QRegExp(arg1, Qt::CaseInsensitive, QRegExp::FixedString));
 }
diff --git a/src/contactpicker.h b/src/contactpicker.h
index 81e712eecf4cddae06d1e1b3ce63c6c1195acc43..f9c52912780484c300f7e22d1196d74184eb5934 100644
--- a/src/contactpicker.h
+++ b/src/contactpicker.h
@@ -70,9 +70,9 @@ public:
     void setCurrentCalleeDisplayName(const QString& CalleeDisplayName);
 
 signals:
-    void contactWillJoinConference(const std::string& contactUri);
-    void callWillJoinConference(const std::string& callId);
-    void contactWillDoTransfer(const std::string& contactUri);
+    void contactWillJoinConference(const QString& contactUri);
+    void callWillJoinConference(const QString& callId);
+    void contactWillDoTransfer(const QString& contactUri);
 
 protected slots:
     void accept();
diff --git a/src/conversationitemdelegate.cpp b/src/conversationitemdelegate.cpp
index eba90003ee88ff5985fd99a4da5fd5c6182d88a8..19f953ca725b2f57c53ea7ad3bfda14ce7d267e0 100644
--- a/src/conversationitemdelegate.cpp
+++ b/src/conversationitemdelegate.cpp
@@ -80,9 +80,9 @@ ConversationItemDelegate::paint(QPainter* painter
         } else if (rowHighlight != highlightMap_.end() && (*rowHighlight).second) {
             painter->fillRect(option.rect, RingTheme::smartlistHighlight_);
         }
-        auto convUid = index.data(static_cast<int>(SmartListModel::Role::UID)).value<QString>().toStdString();
+        auto convUid = index.data(static_cast<int>(SmartListModel::Role::UID)).value<QString>();
         auto conversation = LRCInstance::getConversationFromConvUid(convUid);
-        if (conversation.uid.empty()) return;
+        if (conversation.uid.isEmpty()) return;
         if (LRCInstance::getCurrentCallModel()->hasCall(conversation.callId)) {
             auto color = QColor(RingTheme::blue_.lighter(180));
             color.setAlpha(128);
diff --git a/src/currentaccountcombobox.cpp b/src/currentaccountcombobox.cpp
index f9e90fc9ea02099ca421541cc81103c9bd1890a8..e66026341c3a21d4414d27355fc2d29d0ad32b01 100644
--- a/src/currentaccountcombobox.cpp
+++ b/src/currentaccountcombobox.cpp
@@ -55,7 +55,7 @@ CurrentAccountComboBox::CurrentAccountComboBox(QWidget* parent)
     // account added to combobox
     connect(&LRCInstance::accountModel(),
             &lrc::api::NewAccountModel::accountAdded,
-            [this](const std::string& accountId) {
+            [this](const QString& accountId) {
                 auto accountList = LRCInstance::accountModel().getAccountList();
                 auto it = std::find(accountList.begin(), accountList.end(), accountId);
                 if (it != accountList.end()) {
@@ -81,8 +81,8 @@ CurrentAccountComboBox::CurrentAccountComboBox(QWidget* parent)
                 auto confProps = LRCInstance::accountModel().getAccountConfig(currentAccountId);
 
                 auto possibleConv = LRCInstance::getConversationFromPeerUri(confProps.mailbox);
-                if (possibleConv.uid.empty()) {
-                    if (confProps.mailbox.empty()) {
+                if (possibleConv.uid.isEmpty()) {
+                    if (confProps.mailbox.isEmpty()) {
                         QMessageBox::information(0, "Voicemail", "Voicemail dial code is empty");
                     }
                     // construct new contact
@@ -90,7 +90,7 @@ CurrentAccountComboBox::CurrentAccountComboBox(QWidget* parent)
                     lrc::api::contact::Info contactInfo{ {{confProps.mailbox}, {} , {"Voicemail"}, type }, {} };
 
                     Utils::oneShotConnect(this, &CurrentAccountComboBox::placeAudioOnlyCall,
-                        [this, conversationModel] (const std::string& convUid) {
+                        [this, conversationModel] (const QString& convUid) {
                             conversationModel->placeAudioOnlyCall(convUid);
                         });
                     accInfo.contactModel->addContact(contactInfo);
@@ -165,14 +165,14 @@ CurrentAccountComboBox::paintEvent(QPaintEvent* e)
         avatarSize_ - 10); // [screen awareness]
 
     // write primary and secondary account identifiers to combobox label
-    QString primaryAccountID = QString::fromStdString(Utils::bestNameForAccount(accInfo));
+    QString primaryAccountID = Utils::bestNameForAccount(accInfo);
     painter.setFont(fontPrimary);
     painter.setPen(RingTheme::lightBlack_);
     primaryAccountID = fontMetricPrimary.elidedText(primaryAccountID, Qt::ElideRight,
         comboBoxRect.width() - elidConst - (popupPresent ? 0 : 2 * gearSize_ + 2 * voicemailSize_));
     painter.drawText(comboBoxRect, Qt::AlignLeft, primaryAccountID);
 
-    QString secondaryAccountID = QString::fromStdString(Utils::secondBestNameForAccount(accInfo));
+    QString secondaryAccountID = Utils::secondBestNameForAccount(accInfo);
     secondaryAccountID = fontMetricSecondary.elidedText(secondaryAccountID, Qt::ElideRight,
                                                         comboBoxRect.width() - elidConst - 2 - (popupPresent ? 0 : 2 * gearSize_ + 2 * voicemailSize_)); // [screen awareness]
 
@@ -221,7 +221,7 @@ void
 CurrentAccountComboBox::connectVoiceMail()
 {
     connect(LRCInstance::getCurrentCallModel(), &lrc::api::NewCallModel::voiceMailNotify,
-        [this](const std::string& accountId, int newCount, int oldCount, int urgentCount) {
+        [this](const QString& accountId, int newCount, int oldCount, int urgentCount) {
             Q_UNUSED(urgentCount);
             voicemailMap_[accountId] = std::make_pair(newCount, oldCount);
             if (LRCInstance::accountModel().getAccountList()[currentIndex()] == accountId) {
diff --git a/src/currentaccountcombobox.h b/src/currentaccountcombobox.h
index b0272803d5a80bf9f4d7510f7322b9052a3f4fd7..0bd7cb1770a221099ed57dad1684b593f5a940cb 100644
--- a/src/currentaccountcombobox.h
+++ b/src/currentaccountcombobox.h
@@ -42,14 +42,14 @@ public:
     void accountListUpdate();
     void setCurrentIndex(int index);
     void updateComboBoxDisplay();
-    void canPlaceAudioOnlyCall(const std::string& convUid) { emit placeAudioOnlyCall(convUid); }
+    void canPlaceAudioOnlyCall(const QString& convUid) { emit placeAudioOnlyCall(convUid); }
     void activateComboBox() { showPopup(); }
     void deactivateComboBox() { hidePopup(); }
 
 signals:
     void settingsButtonClicked();
     void newAccountClicked();
-    void placeAudioOnlyCall(const std::string& convUid);
+    void placeAudioOnlyCall(const QString& convUid);
 
 protected:
     void paintEvent(QPaintEvent* e);
@@ -85,5 +85,5 @@ private:
     const int voicemailBorder_ = 4;
     const int voicemailSize_ = 24;
 
-    std::map<std::string,std::pair<int,int>> voicemailMap_;
+    std::map<QString, std::pair<int,int>> voicemailMap_;
 };
diff --git a/src/deleteaccountdialog.cpp b/src/deleteaccountdialog.cpp
index 99b9358a77725eb4dae85090d582508d26ee18a9..24a438cf998fa557c0b840a86ab4255bd6d786ca 100644
--- a/src/deleteaccountdialog.cpp
+++ b/src/deleteaccountdialog.cpp
@@ -29,8 +29,8 @@ DeleteAccountDialog::DeleteAccountDialog(QWidget *parent) :
 {
     ui->setupUi(this);
     if (LRCInstance::getCurrentAccountInfo().profileInfo.type == lrc::api::profile::Type::RING){
-        ui->labelBestId->setText(QString::fromStdString(Utils::bestNameForAccount(LRCInstance::getCurrentAccountInfo())));
-        ui->labelAccountHash->setText(QString::fromStdString(LRCInstance::getCurrentAccountInfo().profileInfo.uri));
+        ui->labelBestId->setText(Utils::bestNameForAccount(LRCInstance::getCurrentAccountInfo()));
+        ui->labelAccountHash->setText(LRCInstance::getCurrentAccountInfo().profileInfo.uri);
     } else {
         ui->labelWarning->hide();
     }
diff --git a/src/deviceitemwidget.cpp b/src/deviceitemwidget.cpp
index c85d9e50dc3248c1979d1538cbac2f94fd6b2448..35126b4cf01ba34b32d10ffb81b0d6cbddf5f268 100644
--- a/src/deviceitemwidget.cpp
+++ b/src/deviceitemwidget.cpp
@@ -84,7 +84,7 @@ DeviceItemWidget::toggleEditable()
         ui->btnEditDevice->setIcon(QIcon(":/images/icons/round-edit-24px.svg"));
         ui->btnEditDevice->setToolTip(QObject::tr("Edit Device Name"));
         auto confProps = LRCInstance::accountModel().getAccountConfig(LRCInstance::getCurrAccId());
-        confProps.deviceName = ui->editDeviceName->text().toStdString();
+        confProps.deviceName = ui->editDeviceName->text();
         LRCInstance::accountModel().setAccountConfig(LRCInstance::getCurrAccId(), confProps);
     }
     editable_ = !editable_;
diff --git a/src/distantwidget.cpp b/src/distantwidget.cpp
index 4e04d031c081832581ae30e445c886ae890e7164..3474efc4f97bd0605cedced90c3dd1062895db25 100644
--- a/src/distantwidget.cpp
+++ b/src/distantwidget.cpp
@@ -25,11 +25,11 @@ DistantWidget::DistantWidget(QWidget* parent)
     : VideoWidgetBase(Qt::black, parent)
 {
     connect(LRCInstance::renderer(), &RenderManager::distantFrameUpdated,
-        [this](const std::string& id) {
+        [this](const QString& id) {
             if (id_ == id) repaint();
         });
     connect(LRCInstance::renderer(), &RenderManager::distantRenderingStopped,
-        [this](const std::string& id) {
+        [this](const QString& id) {
             if (id_ == id) repaint();
         });
 }
@@ -68,7 +68,7 @@ DistantWidget::paintBackground(QPainter* painter)
 }
 
 void
-DistantWidget::setRendererId(const std::string& id)
+DistantWidget::setRendererId(const QString& id)
 {
     id_ = id;
     update();
diff --git a/src/distantwidget.h b/src/distantwidget.h
index 8b3379a648dd6c308457b9afd54145b0338f35ed..d3ca0b5b91168d1ab27baff3452965999f8c7673 100644
--- a/src/distantwidget.h
+++ b/src/distantwidget.h
@@ -30,7 +30,7 @@ public:
     explicit DistantWidget(QWidget* parent = 0);
     ~DistantWidget();
 
-    void setRendererId(const std::string& id);
+    void setRendererId(const QString& id);
 
 protected:
     void paintEvent(QPaintEvent* e);
@@ -38,6 +38,5 @@ protected:
     void paintBackground(QPainter* painter) override;
 
 private:
-    std::string id_;
-
+    QString id_;
 };
diff --git a/src/linkdevicedialog.cpp b/src/linkdevicedialog.cpp
index 746d73241f1e413e23296b441c52066c6a84cd61..c04a401df6f30b5f9789312b83f8382c76bc27b3 100644
--- a/src/linkdevicedialog.cpp
+++ b/src/linkdevicedialog.cpp
@@ -57,9 +57,9 @@ void
 LinkDeviceDialog::setGeneratingPage()
 {
     if (ui->passwordEdit->text().isEmpty() && LRCInstance::getCurrAccConfig().archiveHasPassword) {
-        setExportPage(std::string(),
+        setExportPage(QString(),
                       lrc::api::account::ExportOnRingStatus::WRONG_PASSWORD,
-                      std::string());
+                      QString());
         return;
     }
 
@@ -75,17 +75,17 @@ LinkDeviceDialog::setGeneratingPage()
     timeout_->setSingleShot(true);
     connect(timeout_, &QTimer::timeout, this,
         [this]() {
-            setExportPage(std::string(),
+            setExportPage(QString(),
                           lrc::api::account::ExportOnRingStatus::NETWORK_ERROR,
-                          std::string());
+                          QString());
         });
     timeout_->start();
 
-    LRCInstance::accountModel().exportOnRing(LRCInstance::getCurrAccId(), ui->passwordEdit->text().toStdString());
+    LRCInstance::accountModel().exportOnRing(LRCInstance::getCurrAccId(), ui->passwordEdit->text());
 }
 
 void
-LinkDeviceDialog::setExportPage(const std::string& accountId, lrc::api::account::ExportOnRingStatus status, const std::string& pin)
+LinkDeviceDialog::setExportPage(const QString& accountId, lrc::api::account::ExportOnRingStatus status, const QString& pin)
 {
     Q_UNUSED(accountId);
     timeout_->stop();
@@ -100,7 +100,7 @@ LinkDeviceDialog::setExportPage(const std::string& accountId, lrc::api::account:
 
     case lrc::api::account::ExportOnRingStatus::SUCCESS:
         ui->infoLabel->setStyleSheet("color: #2b5084;border: 1px solid lightgray;background-color: whitesmoke;padding: 8px;border-radius: 15px;");
-        ui->exportedPIN->setText(QString::fromStdString(pin));
+        ui->exportedPIN->setText(pin);
         break;
 
     case lrc::api::account::ExportOnRingStatus::NETWORK_ERROR:
diff --git a/src/linkdevicedialog.h b/src/linkdevicedialog.h
index 2ec52f4e41bba0431189877b0613aa8b1c228307..c3e7b88939e5bf939139aadde8a2acbce6791d9f 100644
--- a/src/linkdevicedialog.h
+++ b/src/linkdevicedialog.h
@@ -41,7 +41,7 @@ private:
 
 private slots:
     void setGeneratingPage();
-    void setExportPage(const std::string& accountId,
+    void setExportPage(const QString& accountId,
                        lrc::api::account::ExportOnRingStatus status,
-                       const std::string& pin);
+                       const QString& pin);
 };
diff --git a/src/lrcinstance.h b/src/lrcinstance.h
index e4759d9ecc23c52897fbcfbf5297cc05111b8b4f..c8c3667bbf2dd18c0cb2150e3ca51747e357d8a5 100644
--- a/src/lrcinstance.h
+++ b/src/lrcinstance.h
@@ -97,11 +97,11 @@ public:
     static bool isConnected() {
         return instance().lrc_->isConnected();
     };
-    static std::vector<std::string> getActiveCalls() {
+    static VectorString getActiveCalls() {
         return instance().lrc_->activeCalls();
     };
     static const account::Info&
-    getAccountInfo(const std::string& accountId) {
+    getAccountInfo(const QString& accountId) {
         return accountModel().getAccountInfo(accountId);
     };
     static const account::Info&
@@ -123,17 +123,17 @@ public:
         }
         return result;
     };
-    static std::string
-    getCallIdForConversationUid(const std::string& convUid, const std::string& accountId)
+    static QString
+    getCallIdForConversationUid(const QString& convUid, const QString& accountId)
     {
         auto convInfo = LRCInstance::getConversationFromConvUid(convUid, accountId);
-        if (convInfo.uid.empty()) {
+        if (convInfo.uid.isEmpty()) {
             return {};
         }
-        return convInfo.confId.empty() ? convInfo.callId : convInfo.confId;
+        return convInfo.confId.isEmpty() ? convInfo.callId : convInfo.confId;
     }
     static const call::Info*
-    getCallInfo(const std::string& callId, const std::string& accountId) {
+    getCallInfo(const QString& callId, const QString& accountId) {
         try {
             auto& accInfo = LRCInstance::accountModel().getAccountInfo(accountId);
             if (!accInfo.callModel->hasCall(callId)) {
@@ -152,7 +152,7 @@ public:
             auto& accInfo = LRCInstance::accountModel().getAccountInfo(accountId);
             auto callId = forceCallOnly ?
                 convInfo.callId :
-                (convInfo.confId.empty() ? convInfo.callId : convInfo.confId);
+                (convInfo.confId.isEmpty() ? convInfo.callId : convInfo.confId);
             if (!accInfo.callModel->hasCall(callId)) {
                 return nullptr;
             }
@@ -162,7 +162,7 @@ public:
         }
     }
     static const conversation::Info&
-    getConversation(const std::string& accountId,
+    getConversation(const QString& accountId,
                     getConvPredicate pred = {},
                     bool filtered=false) {
         using namespace lrc::api;
@@ -192,28 +192,28 @@ public:
         return invalid;
     }
     static const conversation::Info&
-    getConversationFromCallId(const std::string& callId,
-                              const std::string& accountId = {},
+    getConversationFromCallId(const QString& callId,
+                              const QString& accountId = {},
                               bool filtered = false) {
-        return getConversation(!accountId.empty() ? accountId : getCurrAccId(),
+        return getConversation(!accountId.isEmpty() ? accountId : getCurrAccId(),
             [&](const conversation::Info& conv) -> bool {
                 return callId == conv.callId;
             }, filtered);
     }
     static const conversation::Info&
-    getConversationFromConvUid(const std::string& convUid,
-                               const std::string& accountId = {},
+    getConversationFromConvUid(const QString& convUid,
+                               const QString& accountId = {},
                                bool filtered = false) {
-        return getConversation(!accountId.empty() ? accountId : getCurrAccId(),
+        return getConversation(!accountId.isEmpty() ? accountId : getCurrAccId(),
             [&](const conversation::Info& conv) -> bool {
                 return convUid == conv.uid;
             }, filtered);
     }
     static const conversation::Info&
-    getConversationFromPeerUri(const std::string& peerUri,
-                               const std::string& accountId = {},
+    getConversationFromPeerUri(const QString& peerUri,
+                               const QString& accountId = {},
                                bool filtered = false) {
-        return getConversation(!accountId.empty() ? accountId : getCurrAccId(),
+        return getConversation(!accountId.isEmpty() ? accountId : getCurrAccId(),
             [&](const conversation::Info& conv) -> bool {
                 return peerUri == conv.participants[0];
             }, filtered);
@@ -233,25 +233,25 @@ public:
         return getCurrentAccountInfo().callModel.get();
     };
 
-    static const std::string& getCurrAccId() {
+    static const QString& getCurrAccId() {
         auto accountList = accountModel().getAccountList();
-        if (instance().selectedAccountId_.empty() && accountList.size()) {
+        if (instance().selectedAccountId_.isEmpty() && accountList.size()) {
             instance().selectedAccountId_ = accountList.at(0);
         }
         return instance().selectedAccountId_;
     };
 
-    static void setSelectedAccountId(const std::string& accountId = {}) {
+    static void setSelectedAccountId(const QString& accountId = {}) {
         instance().selectedAccountId_ = accountId;
         QSettings settings("jami.net", "Jami");
-        settings.setValue(SettingsKey::selectedAccount, QString::fromStdString(accountId));
+        settings.setValue(SettingsKey::selectedAccount, accountId);
     };
 
-    static const std::string& getCurrentConvUid() {
+    static const QString& getCurrentConvUid() {
         return instance().selectedConvUid_;
     };
 
-    static void setSelectedConvId(const std::string& convUid = {}) {
+    static void setSelectedConvId(const QString& convUid = {}) {
         instance().selectedConvUid_ = convUid;
     };
 
@@ -284,15 +284,15 @@ public:
         QBuffer bu(&ba);
         bu.open(QIODevice::WriteOnly);
         avatarPixmap.save(&bu, "PNG");
-        auto str = ba.toBase64().toStdString();
+        auto str = QString::fromLocal8Bit(ba.toBase64());
         accountModel().setAvatar(getCurrAccId(), str);
     };
 
-    static void setCurrAccAvatar(const std::string& avatar) {
+    static void setCurrAccAvatar(const QString& avatar) {
         accountModel().setAvatar(getCurrAccId(), avatar);
     };
 
-    static void setCurrAccDisplayName(const std::string& displayName) {
+    static void setCurrAccDisplayName(const QString& displayName) {
         auto accountId = LRCInstance::getCurrAccId();
         accountModel().setAlias(accountId, displayName);
         // force save to .yml
@@ -357,18 +357,18 @@ public:
         instance().contentDrafts_[draftKey] = content;
     }
 
-    static void pushLastConferencee(const std::string& confId,
-                                     const std::string& callId)
+    static void pushLastConferencee(const QString& confId,
+                                     const QString& callId)
     {
         instance().lastConferencees_[confId] = callId;
     }
 
-    static std::string popLastConferencee(const std::string& confId)
+    static QString popLastConferencee(const QString& confId)
     {
-        std::string callId = {};
+        QString callId = {};
         auto iter = instance().lastConferencees_.find(confId);
         if (iter != instance().lastConferencees_.end()) {
-            callId = iter->second;
+            callId = iter.value();
             instance().lastConferencees_.erase(iter);
         }
         return callId;
@@ -389,8 +389,8 @@ private:
     std::unique_ptr<RenderManager> renderer_;
     std::unique_ptr<NetWorkManager> netWorkManager_;
     AccountListModel accountListModel_;
-    std::string selectedAccountId_;
-    std::string selectedConvUid_;
+    QString selectedAccountId_;
+    QString selectedConvUid_;
     MapStringString contentDrafts_;
-    std::map<std::string, std::string> lastConferencees_;
+    MapStringString lastConferencees_;
 };
diff --git a/src/mainapplication.cpp b/src/mainapplication.cpp
index b9a31ba22ec801c0fe0024b00aee10b5c23bdd62..3162fb0b0b1a121c0bd39c1d0ae7febf90a9d8d3 100644
--- a/src/mainapplication.cpp
+++ b/src/mainapplication.cpp
@@ -80,8 +80,8 @@ MainApplication::vsConsoleDebug()
     QObject::connect(
         &LRCInstance::behaviorController(),
         &lrc::api::BehaviorController::debugMessageReceived,
-        [](const std::string& message) {
-            OutputDebugStringA((message + "\n").c_str());
+        [](const QString& message) {
+            OutputDebugStringA((message + "\n").toStdString().c_str());
         });
 #endif
 }
@@ -92,9 +92,9 @@ MainApplication::fileDebug(QFile* debugFile)
     QObject::connect(
         &LRCInstance::behaviorController(),
         &lrc::api::BehaviorController::debugMessageReceived,
-        [debugFile](const std::string& message) {
+        [debugFile](const QString& message) {
             if (debugFile->open(QIODevice::WriteOnly | QIODevice::Append)) {
-                auto msg = (message + "\n").c_str();
+                auto msg = (message + "\n").toStdString().c_str();
                 debugFile->write(msg, qstrlen(msg));
                 debugFile->close();
             }
@@ -253,7 +253,7 @@ MainApplication::startAccountMigration()
 {
     auto accountList = LRCInstance::accountModel().getAccountList();
 
-    for (const std::string& i : accountList) {
+    for (const QString& i : accountList) {
         auto accountStatus = LRCInstance::accountModel().getAccountInfo(i).status;
         if (accountStatus == lrc::api::account::Status::ERROR_NEED_MIGRATION) {
             std::unique_ptr<AccountMigrationDialog> dialog = std::make_unique<AccountMigrationDialog>(nullptr, i);
diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp
index f599ac863eb3b2ce871c32af3bdb4c6fb663ea0f..aca3b70e54a6ed14a902688c36e1325bd7b88a2f 100644
--- a/src/mainwindow.cpp
+++ b/src/mainwindow.cpp
@@ -200,7 +200,7 @@ MainWindow::MainWindow(QWidget* parent)
 #endif
 
     connect(&LRCInstance::accountModel(), &lrc::api::NewAccountModel::accountRemoved,
-        [this](const std::string& accountId) {
+        [this](const QString& accountId) {
             Q_UNUSED(accountId);
             emit LRCInstance::instance().accountListChanged();
         });
@@ -345,7 +345,6 @@ void MainWindow::readSettingsFromRegistry()
     LRCInstance::dataTransferModel().downloadDirectory = settings.value(SettingsKey::downloadPath,
                                                                               QStandardPaths::writableLocation(QStandardPaths::DownloadLocation))
                                                                       .toString()
-                                                                      .toStdString()
         + "/";
 
     if (not settings.contains(SettingsKey::enableNotifications)) {
diff --git a/src/messagewebpage.cpp b/src/messagewebpage.cpp
index 28cf038977c98f7a800d8f6b05b6e16dc2de7674..4fde78de2a6e09606cce9f74e9486ffdc748c6e3 100644
--- a/src/messagewebpage.cpp
+++ b/src/messagewebpage.cpp
@@ -30,8 +30,7 @@ MessageWebPage::~MessageWebPage()
 bool
 MessageWebPage::acceptNavigationRequest(const QUrl & url, QWebEnginePage::NavigationType type, bool isMainFrame)
 {
-    qDebug() << "acceptNavigationRequest(" << url << "," << type << "," << isMainFrame << ")";
-
+    Q_UNUSED(isMainFrame)
     if (type == QWebEnginePage::NavigationTypeLinkClicked) {
         QDesktopServices::openUrl(url);
         return false;
diff --git a/src/messagewebview.cpp b/src/messagewebview.cpp
index ec4ffa0810b2847d9305f8f8877ab32ec5fc3e3f..96b4ac61e4a651aff5e65000035255aac4f0cec7 100644
--- a/src/messagewebview.cpp
+++ b/src/messagewebview.cpp
@@ -438,12 +438,12 @@ MessageWebView::printHistory(lrc::api::ConversationModel& conversationModel,
 }
 
 void
-MessageWebView::setSenderImage(const std::string& sender,
-                               const std::string& senderImage)
+MessageWebView::setSenderImage(const QString& sender,
+                               const QString& senderImage)
 {
     QJsonObject setSenderImageObject = QJsonObject();
-    setSenderImageObject.insert("sender_contact_method", QJsonValue(QString(sender.c_str())));
-    setSenderImageObject.insert("sender_image", QJsonValue(QString(senderImage.c_str())));
+    setSenderImageObject.insert("sender_contact_method", QJsonValue(sender));
+    setSenderImageObject.insert("sender_image", QJsonValue(senderImage));
 
     auto setSenderImageObjectString = QString(QJsonDocument(setSenderImageObject).toJson(QJsonDocument::Compact));
     QString s = QString::fromLatin1("setSenderImage(%1);")
@@ -452,11 +452,11 @@ MessageWebView::setSenderImage(const std::string& sender,
 }
 
 void
-MessageWebView::setInvitation(bool show, const std::string& contactUri, const std::string& contactId)
+MessageWebView::setInvitation(bool show, const QString& contactUri, const QString& contactId)
 {
     QString s = show ? QString::fromLatin1("showInvitation(\"%1\", \"%2\")")
-        .arg(QString(contactUri.c_str()))
-        .arg(QString(contactId.c_str())) : QString::fromLatin1("showInvitation()");
+        .arg(contactUri)
+        .arg(contactId) : QString::fromLatin1("showInvitation()");
 
     page()->runJavaScript(s, QWebEngineScript::MainWorld);
 }
@@ -578,25 +578,25 @@ Q_INVOKABLE int
 PrivateBridging::acceptFile(const QString& arg)
 {
     try {
-        auto interactionUid = std::stoull(arg.toStdString());
+        auto interactionUid = arg.toLongLong();
 
         lrc::api::datatransfer::Info info = {};
         auto convUid = LRCInstance::getCurrentConvUid();
         LRCInstance::getCurrentConversationModel()->getTransferInfo(interactionUid, info);
 
         // get full path
-        std::string filename = LRCInstance::dataTransferModel().downloadDirectory.c_str();
-        if (!filename.empty() && filename.back() != '/')
+        QString filename = LRCInstance::dataTransferModel().downloadDirectory;
+        if (!filename.isEmpty() && filename.right(1) != '/')
             filename += "/";
         auto wantedFilename = filename + info.displayName;
         auto duplicate = 0;
-        while (std::ifstream(wantedFilename).good()) {
+        while (QFile(wantedFilename).exists()) {
             ++duplicate;
-            auto extensionIdx = info.displayName.find_last_of(".");
-            if (extensionIdx == std::string::npos)
-                wantedFilename = filename + info.displayName + " (" + std::to_string(duplicate) + ")";
+            auto splittedList = info.displayName.split(".");
+            if (splittedList.size() == 1)
+                wantedFilename = filename + info.displayName + " (" + QString::number(duplicate) + ")";
             else
-                wantedFilename = filename + info.displayName.substr(0, extensionIdx) + " (" + std::to_string(duplicate) + ")" + info.displayName.substr(extensionIdx);
+                wantedFilename = filename + splittedList[0] + " (" + QString::number(duplicate) + ")" + "." +splittedList[1];
         }
         LRCInstance::getCurrentConversationModel()->acceptTransfer(convUid, interactionUid, wantedFilename);
     } catch (...) {
@@ -609,7 +609,7 @@ Q_INVOKABLE int
 PrivateBridging::refuseFile(const QString& arg)
 {
     try {
-        auto interactionUid = std::stoull(arg.toStdString());
+        auto interactionUid = arg.toLongLong();
         auto convUid = LRCInstance::getCurrentConvUid();
         LRCInstance::getCurrentConversationModel()->cancelTransfer(convUid, interactionUid);
     } catch (...) {
@@ -623,7 +623,7 @@ PrivateBridging::sendMessage(const QString& arg)
 {
     try {
         auto convUid = LRCInstance::getCurrentConvUid();
-        LRCInstance::getCurrentConversationModel()->sendMessage(convUid, arg.toStdString());
+        LRCInstance::getCurrentConversationModel()->sendMessage(convUid, arg);
     } catch (...) {
         qDebug() << "JS bridging - exception during sendMessage:" << arg;
         return -1;
@@ -654,7 +654,7 @@ PrivateBridging::sendImage(const QString& arg)
 
        try {
             auto convUid = LRCInstance::getCurrentConvUid();
-            LRCInstance::getCurrentConversationModel()->sendFile(convUid, path.toStdString(), fileName.toStdString());
+            LRCInstance::getCurrentConversationModel()->sendFile(convUid, path, fileName);
         } catch (...) {
             qDebug().noquote() << "JS bridging - exception during sendFile - base64 img" << "\n";
             return -1;
@@ -666,7 +666,7 @@ PrivateBridging::sendImage(const QString& arg)
         QString fileName = fi.fileName();
         try {
             auto convUid = LRCInstance::getCurrentConvUid();
-            LRCInstance::getCurrentConversationModel()->sendFile(convUid, arg.toStdString(), fileName.toStdString());
+            LRCInstance::getCurrentConversationModel()->sendFile(convUid, arg, fileName);
         } catch (...) {
             qDebug().noquote() << "JS bridging - exception during sendFile - image from path" << "\n";
             return -1;
@@ -683,7 +683,7 @@ PrivateBridging::sendFile(const QString& path)
     QString fileName = fi.fileName();
     try {
         auto convUid = LRCInstance::getCurrentConvUid();
-        LRCInstance::getCurrentConversationModel()->sendFile(convUid, path.toStdString(), fileName.toStdString());
+        LRCInstance::getCurrentConversationModel()->sendFile(convUid, path, fileName);
     } catch (...) {
         qDebug() << "JS bridging - exception during sendFile";
     }
diff --git a/src/messagewebview.h b/src/messagewebview.h
index d54ee087b3c970b273b80b0a21e3d4d7ab782368..77c387fc913d48c6ef3ddfb93cbf31175ffdd825 100644
--- a/src/messagewebview.h
+++ b/src/messagewebview.h
@@ -89,11 +89,11 @@ public:
     void printHistory(lrc::api::ConversationModel& conversationModel,
                       const std::map<uint64_t,
                       lrc::api::interaction::Info> interactions);
-    void setSenderImage(const std::string& sender,
-                        const std::string& senderImage);
+    void setSenderImage(const QString& sender,
+                        const QString& senderImage);
     void setInvitation(bool show,
-                       const std::string& contactUri = "",
-                       const std::string& contactId = "");
+                       const QString& contactUri = "",
+                       const QString& contactId = "");
     void setMessagesVisibility(bool visible);
     void setMessagesContent(const QString& text);
     void copySelectedText(QClipboard* clipboard);
diff --git a/src/nameregistrationdialog.cpp b/src/nameregistrationdialog.cpp
index 8c54ea0fcce56cdf4d95e0ab6d5980bb93298e43..b9775af0f54328265cfe8a0f7affce726a934006 100644
--- a/src/nameregistrationdialog.cpp
+++ b/src/nameregistrationdialog.cpp
@@ -59,15 +59,15 @@ NameRegistrationDialog::~NameRegistrationDialog()
 void
 NameRegistrationDialog::slotStartNameRegistration()
 {
-    auto password = ui->passwordEdit->text().toStdString();
-    LRCInstance::accountModel().registerName(LRCInstance::getCurrAccId(),
-        password, nameToRegister_.toStdString());
+    auto password = ui->passwordEdit->text();
+    LRCInstance::accountModel().registerName(LRCInstance::getCurrAccId(), password, nameToRegister_);
     startSpinner();
 }
 
 void
-NameRegistrationDialog::slotNameRegistrationResult(const std::string& accountId,
-    lrc::api::account::RegisterNameStatus status, const std::string& registerdName)
+NameRegistrationDialog::slotNameRegistrationResult(const QString& accountId,
+                                                   lrc::api::account::RegisterNameStatus status,
+                                                   const QString& registerdName)
 {
     Q_UNUSED(accountId);
     Q_UNUSED(registerdName);
diff --git a/src/nameregistrationdialog.h b/src/nameregistrationdialog.h
index 4f01940d83b5e2870dac7d85aed4081527f62983..13f58438ecb1e2164150c5f6364c9564553e9ed6 100644
--- a/src/nameregistrationdialog.h
+++ b/src/nameregistrationdialog.h
@@ -39,9 +39,9 @@ public:
     ~NameRegistrationDialog();
 
 private slots:
-    void slotNameRegistrationResult(const std::string& accountId,
-        RegisterNameStatus status,
-        const std::string& registerdName);
+    void slotNameRegistrationResult(const QString& accountId,
+                                    RegisterNameStatus status,
+                                    const QString& registerdName);
     void slotStartNameRegistration();
 
 private:
diff --git a/src/newwizardwidget.cpp b/src/newwizardwidget.cpp
index 729db0510b4f88e91a75f4115c10ca2733ba0cb6..6ae983b2b922160bffdeec07a433f90f4e14492a 100644
--- a/src/newwizardwidget.cpp
+++ b/src/newwizardwidget.cpp
@@ -362,7 +362,7 @@ NewWizardWidget::on_exportBtn_clicked()
         QDir::homePath() + "/Desktop", QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks);
 
     if (!dir.isEmpty()) {
-        LRCInstance::accountModel().exportToFile(LRCInstance::getCurrAccId(), (dir + "/export.gz").toStdString());
+        LRCInstance::accountModel().exportToFile(LRCInstance::getCurrAccId(), dir + "/export.gz");
     }
     emit NavigationRequested(ScreenEnum::CallScreen);
     emit LRCInstance::instance().accountListChanged();
@@ -395,10 +395,10 @@ NewWizardWidget::timeoutNameLookupTimer()
 }
 
 void
-NewWizardWidget::slotRegisteredNameFound(const std::string& accountId,
+NewWizardWidget::slotRegisteredNameFound(const QString& accountId,
                                          LookupStatus status,
-                                         const std::string& address,
-                                         const std::string& name)
+                                         const QString& address,
+                                         const QString& name)
 {
     Q_UNUSED(accountId);
     Q_UNUSED(address);
@@ -407,7 +407,7 @@ NewWizardWidget::slotRegisteredNameFound(const std::string& accountId,
     if (name.length() < 3) {
         registrationStateOk_ = false;
         updateNameRegistrationUi(NameRegistrationUIState::INVALID);
-    } else if (registeredName_.toStdString() == name) {
+    } else if (registeredName_ == name) {
         switch (status) {
         case LookupStatus::NOT_FOUND:
         case LookupStatus::ERROR:
@@ -547,28 +547,28 @@ NewWizardWidget::createAccount()
     bool isCreating = wizardMode_ == WizardMode::CREATE;
     if (isConnectingToManager) {
         Utils::oneShotConnect(&LRCInstance::accountModel(), &lrc::api::NewAccountModel::accountAdded,
-            [this](const std::string& accountId) {
+            [this](const QString& accountId) {
                 if (!LRCInstance::accountModel().getAccountList().size())
                     return;
                 //set default ringtone
                 auto confProps = LRCInstance::accountModel().getAccountConfig(accountId);
-                confProps.Ringtone.ringtonePath = Utils::GetRingtonePath().toStdString();
+                confProps.Ringtone.ringtonePath = Utils::GetRingtonePath();
                 LRCInstance::accountModel().setAccountConfig(accountId, confProps);
                 emit NavigationRequested(ScreenEnum::CallScreen);
                 emit LRCInstance::instance().accountListChanged();
         });
     } else {
         Utils::oneShotConnect(&LRCInstance::accountModel(), &lrc::api::NewAccountModel::accountAdded,
-            [this, isRing, isCreating](const std::string& accountId) {
+            [this, isRing, isCreating](const QString& accountId) {
                 //set default ringtone
                 auto confProps = LRCInstance::accountModel().getAccountConfig(accountId);
-                confProps.Ringtone.ringtonePath = Utils::GetRingtonePath().toStdString();
+                confProps.Ringtone.ringtonePath = Utils::GetRingtonePath();
                 if (!isRing) {
                     // set SIP details
-                    confProps.hostname = inputPara_["hostname"].toStdString();
-                    confProps.username = inputPara_["username"].toStdString();
-                    confProps.password = inputPara_["password"].toStdString();
-                    confProps.proxyServer = inputPara_["proxy"].toStdString();
+                    confProps.hostname = inputPara_["hostname"];
+                    confProps.username = inputPara_["username"];
+                    confProps.password = inputPara_["password"];
+                    confProps.proxyServer = inputPara_["proxy"];
                 }
                 LRCInstance::accountModel().setAccountConfig(accountId, confProps);
                 if (isRing) {
@@ -578,7 +578,7 @@ NewWizardWidget::createAccount()
                     }
                     auto showBackup = isCreating && !settings.value(SettingsKey::neverShowMeAgain).toBool();
 
-                    if (!confProps.username.empty()) {
+                    if (!confProps.username.isEmpty()) {
                         Utils::oneShotConnect(&LRCInstance::accountModel(),
                             &lrc::api::NewAccountModel::nameRegistrationEnded,
                             [this, showBackup] {
@@ -595,7 +595,7 @@ NewWizardWidget::createAccount()
                         LRCInstance::accountModel().registerName(
                             LRCInstance::getCurrAccId(),
                             "",
-                            registeredName_.toStdString()
+                            registeredName_
                         );
                     } else {
                         if (showBackup) {
@@ -613,13 +613,13 @@ NewWizardWidget::createAccount()
         });
     }
     Utils::oneShotConnect(&LRCInstance::accountModel(), &lrc::api::NewAccountModel::accountRemoved,
-        [this](const std::string& accountId) {
+        [this](const QString& accountId) {
             Q_UNUSED(accountId);
             qWarning() << Q_FUNC_INFO << ": " << "accountRemoved";
             reportFailure();
         });
     Utils::oneShotConnect(&LRCInstance::accountModel(), &lrc::api::NewAccountModel::invalidAccountDetected,
-        [this](const std::string& accountId) {
+        [this](const QString& accountId) {
             Q_UNUSED(accountId);
             qWarning() << Q_FUNC_INFO << ": " << "invalidAccountDetected";
             reportFailure();
@@ -628,26 +628,26 @@ NewWizardWidget::createAccount()
         [this, isRing, isConnectingToManager] {
             if (isConnectingToManager) {
                 LRCInstance::accountModel().connectToAccountManager(
-                    inputPara_["username"].toStdString(),
-                    inputPara_["password"].toStdString(),
-                    inputPara_["manager"].toStdString()
+                    inputPara_["username"],
+                    inputPara_["password"],
+                    inputPara_["manager"]
                 );
             } else if (isRing) {
                 LRCInstance::accountModel().createNewAccount(
                     lrc::api::profile::Type::RING,
-                    inputPara_["alias"].toStdString(),
-                    inputPara_["archivePath"].toStdString(),
-                    inputPara_["password"].toStdString(),
-                    inputPara_["archivePin"].toStdString()
+                    inputPara_["alias"],
+                    inputPara_["archivePath"],
+                    inputPara_["password"],
+                    inputPara_["archivePin"]
                 );
             } else {
                 LRCInstance::accountModel().createNewAccount(
                     lrc::api::profile::Type::SIP,
-                    inputPara_["alias"].toStdString(),
-                    inputPara_["archivePath"].toStdString(),
+                    inputPara_["alias"],
+                    inputPara_["archivePath"],
                     "",
                     "",
-                    inputPara_["username"].toStdString()
+                    inputPara_["username"]
                 );
                 QThread::sleep(2);
                 emit NavigationRequested(ScreenEnum::CallScreen);
diff --git a/src/newwizardwidget.h b/src/newwizardwidget.h
index 22fd7dc7ec418ec7073048328fb1db1279c5de5f..14278184de8212bf748fd44ef67276155e2526f9 100644
--- a/src/newwizardwidget.h
+++ b/src/newwizardwidget.h
@@ -76,10 +76,10 @@ private slots:
 
 private slots:
     void on_usernameEdit_textChanged(const QString& arg1);
-    void slotRegisteredNameFound(const std::string& accountId,
+    void slotRegisteredNameFound(const QString& accountId,
                                  LookupStatus status,
-                                 const std::string& address,
-                                 const std::string& name);
+                                 const QString& address,
+                                 const QString& name);
     void handle_nameRegistrationEnded(NameDirectory::RegisterNameStatus status, const QString& name);
     void timeoutNameLookupTimer();
     void on_signUpCheckbox_toggled(bool checked);
@@ -101,7 +101,7 @@ private:
     bool registrationStateOk_;
     QMetaObject::Connection registeredNameFoundConnection_;
     QString fileToImport_;
-    std::map<std::string, QString> inputPara_;
+    std::map<QString, QString> inputPara_;
 
     CollapsiblePasswordWidget* collapsiblePasswordWidget_;
 
diff --git a/src/passworddialog.cpp b/src/passworddialog.cpp
index ac175f27cec803d0b4f0e1b33b335502b5d2a3a1..561b3666df0391fb880e2a0c05b0f37b4861fb71 100644
--- a/src/passworddialog.cpp
+++ b/src/passworddialog.cpp
@@ -100,7 +100,7 @@ PasswordDialog::exportAccount()
 {
     bool success = LRCInstance::accountModel().exportToFile(LRCInstance::getCurrAccId(),
                                                               path_,
-                                                              ui->currentPasswordEdit->text().toStdString());
+                                                              ui->currentPasswordEdit->text());
     ui->spinnerLabel->hide();
     spinnerMovie_->stop();
     if(success) {
@@ -132,7 +132,7 @@ void
 PasswordDialog::savePassword()
 {
     bool success = LRCInstance::accountModel().changeAccountPassword(LRCInstance::getCurrAccId(),
-                   ui->currentPasswordEdit->text().toStdString(), ui->passwordEdit->text().toStdString());
+                   ui->currentPasswordEdit->text(), ui->passwordEdit->text());
 
     ui->spinnerLabel->hide();
     spinnerMovie_->stop();
diff --git a/src/passworddialog.h b/src/passworddialog.h
index 2b78290cba7389e26c7fa763b2b31f1a2d9ca347..67410936efeafc1220aa8a36776fbc5bfdf7f10a 100644
--- a/src/passworddialog.h
+++ b/src/passworddialog.h
@@ -38,7 +38,7 @@ public:
 
     static const int SuccessCode = 200;
 
-    void setExportPath(const std::string& path) { path_ = path; }
+    void setExportPath(const QString& path) { path_ = path; }
 
 private slots:
     void validatePassword();
@@ -48,7 +48,7 @@ private:
     Ui::PasswordDialog* ui;
 
     PasswordEnteringPurpose purpose_ { PasswordEnteringPurpose::ChangePassword };
-    std::string path_;
+    QString path_;
     QMovie* spinnerMovie_;
 
     void savePassword();
diff --git a/src/pixbufmanipulator.cpp b/src/pixbufmanipulator.cpp
index 19eb0d60c60b21156d493fea710f053f4b963b89..6cd1f775a1f81900354e22f96b46494a8e61325a 100644
--- a/src/pixbufmanipulator.cpp
+++ b/src/pixbufmanipulator.cpp
@@ -102,25 +102,21 @@ PixbufManipulator::decorationRole(const lrc::api::conversation::Info & conversat
         if (accountInfo.profileInfo.type == lrc::api::profile::Type::SIP &&
             contactInfo.profileInfo.type == lrc::api::profile::Type::TEMPORARY) {
             photo = Utils::fallbackAvatar(IMAGE_SIZE, QString(), QString());
-        } else if (contactInfo.profileInfo.type == lrc::api::profile::Type::TEMPORARY && contactInfo.profileInfo.uri.empty()) {
+        } else if (contactInfo.profileInfo.type == lrc::api::profile::Type::TEMPORARY && contactInfo.profileInfo.uri.isEmpty()) {
             photo = Utils::fallbackAvatar(IMAGE_SIZE, QString(), QString());
-        } else if (!contactPhoto.empty()) {
-            QByteArray byteArray(contactPhoto.c_str(), contactPhoto.length());
+        } else if (!contactPhoto.isEmpty()) {
+            QByteArray byteArray = contactPhoto.toLocal8Bit();
             photo = personPhoto(byteArray, nullptr).value<QImage>();
             if (photo.isNull()) {
-                auto avatarName = contactInfo.profileInfo.uri == bestName ?
-                                  QString() :
-                                  QString::fromStdString(bestName);
+                auto avatarName = contactInfo.profileInfo.uri == bestName ? QString() : bestName;
                 photo = Utils::fallbackAvatar(IMAGE_SIZE,
-                                              QString::fromStdString("ring:" + contactInfo.profileInfo.uri),
+                                              "ring:" + contactInfo.profileInfo.uri,
                                               avatarName);
             }
         } else {
-            auto avatarName = contactInfo.profileInfo.uri == bestName ?
-                              QString() :
-                              QString::fromStdString(bestName);
+            auto avatarName = contactInfo.profileInfo.uri == bestName ? QString() : bestName;
             photo = Utils::fallbackAvatar(IMAGE_SIZE,
-                                          QString::fromStdString("ring:" + contactInfo.profileInfo.uri),
+                                          "ring:" + contactInfo.profileInfo.uri,
                                           avatarName);
         }
     }
diff --git a/src/recordoverlay.cpp b/src/recordoverlay.cpp
index 591a2f963b76051b816225965918b9d72310cf20..64fe145edf33f39d59e8077aaa4ad9b22942a3ef 100644
--- a/src/recordoverlay.cpp
+++ b/src/recordoverlay.cpp
@@ -43,7 +43,7 @@ RecordOverlay::RecordOverlay(RecordWidget* recordWidget) :
 
     connect(&LRCInstance::avModel(), &lrc::api::AVModel::audioMeter,
         ui->levelMeter,
-        [this](const std::string& /*id*/, float level) {
+        [this](const QString& /*id*/, float level) {
             ui->levelMeter->setLevel(level);
         });
 
diff --git a/src/recordwidget.cpp b/src/recordwidget.cpp
index 77585292154c5f1ce1556a5ca7fd97018a132364..72cf7772d2b792edd7060ece7852d8542eb18a7c 100644
--- a/src/recordwidget.cpp
+++ b/src/recordwidget.cpp
@@ -38,7 +38,7 @@ RecordWidget::RecordWidget(QWidget *parent) :
 
 RecordWidget::~RecordWidget()
 {
-    LRCInstance::avModel().stopLocalRecorder(recordedFilePath_.toStdString());
+    LRCInstance::avModel().stopLocalRecorder(recordedFilePath_);
     Utils::forceDeleteAsync(recordedFilePath_);
     if (!isAudio_) {
         LRCInstance::avModel().stopPreview();
@@ -51,7 +51,7 @@ RecordWidget::startRecording()
     bool isSuccessful = false;
     if(!isAudio_ && !LRCInstance::renderer()->isPreviewing()){return isSuccessful;}
     try {
-        recordedFilePath_ = QString::fromStdString(LRCInstance::avModel().startLocalRecorder(isAudio_));
+        recordedFilePath_ = LRCInstance::avModel().startLocalRecorder(isAudio_);
         isSuccessful = true;
     } catch (...) {
         qDebug() << "The start of record fails";
@@ -64,7 +64,7 @@ RecordWidget::finishRecording()
 {
     bool isSuccessful = false;
     try {
-        LRCInstance::avModel().stopLocalRecorder(recordedFilePath_.toStdString());
+        LRCInstance::avModel().stopLocalRecorder(recordedFilePath_);
         if (!isAudio_) {
             previewWidget_->toPaintingBackground(false);
             previewWidget_->toDrawLastFrame(true);
@@ -85,9 +85,9 @@ RecordWidget::recordAgain()
             Utils::oneShotConnect(&LRCInstance::avModel(), &lrc::api::AVModel::recordPlaybackStopped,
                 [this] {
                     Utils::forceDeleteAsync(recordedFilePath_);
-                   recordedFilePath_ = QString::fromStdString(LRCInstance::avModel().startLocalRecorder(isAudio_));
+                   recordedFilePath_ = LRCInstance::avModel().startLocalRecorder(isAudio_);
                 });
-            LRCInstance::avModel().stopLocalRecorder(recordedFilePath_.toStdString());
+            LRCInstance::avModel().stopLocalRecorder(recordedFilePath_);
         });
 }
 
@@ -108,7 +108,7 @@ RecordWidget::sendRecording()
     QString fileName = fi.fileName();
     try {
         auto convUid = LRCInstance::getCurrentConvUid();
-        LRCInstance::getCurrentConversationModel()->sendFile(convUid, recordedFilePath_.toStdString(), fileName.toStdString());
+        LRCInstance::getCurrentConversationModel()->sendFile(convUid, recordedFilePath_, fileName);
         // reset file path, make sure that the file that is needed to sent will not be deleted
         recordedFilePath_.clear();
         isSuccessful = true;
diff --git a/src/rendermanager.cpp b/src/rendermanager.cpp
index 50951bd0e8e56bf87fef946d21399cb1bb25cc9f..e0a68d2fd0b7cdaa182ba5611a7148ea8d9e28fc 100644
--- a/src/rendermanager.cpp
+++ b/src/rendermanager.cpp
@@ -24,7 +24,7 @@
 using namespace lrc::api;
 
 FrameWrapper::FrameWrapper(AVModel& avModel,
-                           const std::string& id)
+                           const QString& id)
     : avModel_(avModel)
     , id_(id)
     , isRendering_(false)
@@ -89,14 +89,14 @@ FrameWrapper::isRendering()
 }
 
 void
-FrameWrapper::slotRenderingStarted(const std::string& id)
+FrameWrapper::slotRenderingStarted(const QString& id)
 {
     if (id != id_) {
         return;
     }
 
     if (!startRendering()) {
-        qWarning() << "Couldn't start rendering for id: " << id_.c_str();
+        qWarning() << "Couldn't start rendering for id: " << id_;
         return;
     }
 
@@ -106,7 +106,7 @@ FrameWrapper::slotRenderingStarted(const std::string& id)
 }
 
 void
-FrameWrapper::slotFrameUpdated(const std::string& id)
+FrameWrapper::slotFrameUpdated(const QString& id)
 {
     if (id != id_) {
         return;
@@ -149,7 +149,7 @@ FrameWrapper::slotFrameUpdated(const std::string& id)
 }
 
 void
-FrameWrapper::slotRenderingStopped(const std::string& id)
+FrameWrapper::slotRenderingStopped(const QString& id)
 {
     if (id != id_) {
         return;
@@ -182,19 +182,19 @@ RenderManager::RenderManager(AVModel& avModel)
 
     QObject::connect(previewFrameWrapper_.get(),
         &FrameWrapper::renderingStarted,
-        [this](const std::string& id) {
+        [this](const QString& id) {
             Q_UNUSED(id);
             emit previewRenderingStarted();
         });
     QObject::connect(previewFrameWrapper_.get(),
         &FrameWrapper::frameUpdated,
-        [this](const std::string& id) {
+        [this](const QString& id) {
             Q_UNUSED(id);
             emit previewFrameUpdated();
         });
     QObject::connect(previewFrameWrapper_.get(),
         &FrameWrapper::renderingStopped,
-        [this](const std::string& id) {
+        [this](const QString& id) {
             Q_UNUSED(id);
             emit previewRenderingStopped();
         });
@@ -256,7 +256,7 @@ void RenderManager::startPreviewing(bool force, bool async)
 }
 
 QImage*
-RenderManager::getFrame(const std::string& id)
+RenderManager::getFrame(const QString& id)
 {
     auto dfwIt = distantFrameWrapperMap_.find(id);
     if (dfwIt != distantFrameWrapperMap_.end()) {
@@ -266,13 +266,13 @@ RenderManager::getFrame(const std::string& id)
 }
 
 void
-RenderManager::addDistantRenderer(const std::string& id)
+RenderManager::addDistantRenderer(const QString& id)
 {
     // check if a FrameWrapper with this id exists
     auto dfwIt = distantFrameWrapperMap_.find(id);
     if ( dfwIt != distantFrameWrapperMap_.end()) {
         if (!dfwIt->second->startRendering()) {
-            qWarning() << "Couldn't start rendering for id: " << id.c_str();
+            qWarning() << "Couldn't start rendering for id: " << id;
         }
     } else {
         auto dfw = std::make_unique<FrameWrapper>(avModel_, id);
@@ -280,17 +280,17 @@ RenderManager::addDistantRenderer(const std::string& id)
         // connect this to the FrameWrapper
         distantConnectionMap_[id].started = QObject::connect(
             dfw.get(), &FrameWrapper::renderingStarted,
-            [this](const std::string& id) {
+            [this](const QString& id) {
                 emit distantRenderingStarted(id);
             });
         distantConnectionMap_[id].updated = QObject::connect(
             dfw.get(), &FrameWrapper::frameUpdated,
-            [this](const std::string& id) {
+            [this](const QString& id) {
                 emit distantFrameUpdated(id);
             });
         distantConnectionMap_[id].stopped = QObject::connect(
             dfw.get(), &FrameWrapper::renderingStopped,
-            [this](const std::string& id) {
+            [this](const QString& id) {
                 emit distantRenderingStopped(id);
             });
 
@@ -303,7 +303,7 @@ RenderManager::addDistantRenderer(const std::string& id)
 }
 
 void
-RenderManager::removeDistantRenderer(const std::string& id)
+RenderManager::removeDistantRenderer(const QString& id)
 {
     auto dfwIt = distantFrameWrapperMap_.find(id);
     if (dfwIt != distantFrameWrapperMap_.end()) {
diff --git a/src/rendermanager.h b/src/rendermanager.h
index f62d0d9d137f1a8fca65cd2187ecd6a95fafe443..5ee581235a553ef69e594ae373b5a4a1fd397de1 100644
--- a/src/rendermanager.h
+++ b/src/rendermanager.h
@@ -45,7 +45,7 @@ class FrameWrapper final : public QObject
     Q_OBJECT;
 public:
     FrameWrapper(AVModel& avModel,
-                 const std::string& id = video::PREVIEW_RENDERER_ID);
+                 const QString& id = video::PREVIEW_RENDERER_ID);
     ~FrameWrapper();
 
     /**
@@ -76,38 +76,38 @@ signals:
      * Emitted once in slotRenderingStarted.
      * @param id of the renderer
      */
-    void renderingStarted(const std::string& id);
+    void renderingStarted(const QString& id);
     /**
      * Emitted each time a frame is ready to be displayed.
      * @param id of the renderer
      */
-    void frameUpdated(const std::string& id);
+    void frameUpdated(const QString& id);
     /**
      * Emitted once in slotRenderingStopped.
      * @param id of the renderer
      */
-    void renderingStopped(const std::string& id);
+    void renderingStopped(const QString& id);
 
 private slots:
     /**
      * Used to listen to AVModel::rendererStarted.
      * @param id of the renderer
      */
-    void slotRenderingStarted(const std::string& id = video::PREVIEW_RENDERER_ID);
+    void slotRenderingStarted(const QString& id = video::PREVIEW_RENDERER_ID);
     /**
      * Used to listen to AVModel::frameUpdated.
      * @param id of the renderer
      */
-    void slotFrameUpdated(const std::string& id = video::PREVIEW_RENDERER_ID);
+    void slotFrameUpdated(const QString& id = video::PREVIEW_RENDERER_ID);
     /**
      * Used to listen to AVModel::renderingStopped.
      * @param id of the renderer
      */
-    void slotRenderingStopped(const std::string& id = video::PREVIEW_RENDERER_ID);
+    void slotRenderingStopped(const QString& id = video::PREVIEW_RENDERER_ID);
 
 private:
     /* the id of the renderer */
-    std::string id_;
+    QString id_;
 
     /* a pointer to the lrc renderer object */
     video::Renderer* renderer_;
@@ -175,19 +175,19 @@ public:
      * as a QImage.
      * @return the rendered preview image
      */
-    QImage* getFrame(const std::string& id);
+    QImage* getFrame(const QString& id);
     /**
      * Add and connect a distant renderer for a given id
      * to a FrameWrapper object
      * @param id
      */
-    void addDistantRenderer(const std::string& id);
+    void addDistantRenderer(const QString& id);
     /**
      * Disconnect and remove a FrameWrapper object connected to a
      * distant renderer for a given id
      * @param id
      */
-    void removeDistantRenderer(const std::string& id);
+    void removeDistantRenderer(const QString& id);
 
 signals:
     /* Emitted when the size of the video capture device list changes. */
@@ -203,13 +203,13 @@ signals:
     void previewRenderingStopped();
 
     /* Emitted when a distant renderer is started for a given id. */
-    void distantRenderingStarted(const std::string& id);
+    void distantRenderingStarted(const QString& id);
 
     /* Emitted when a distant renderer has a new frame ready for a given id. */
-    void distantFrameUpdated(const std::string& id);
+    void distantFrameUpdated(const QString& id);
 
     /* Emitted when a distant renderer is stopped for a given id. */
-    void distantRenderingStopped(const std::string& id);
+    void distantRenderingStopped(const QString& id);
 
 private slots:
     /**
@@ -228,8 +228,8 @@ private:
     std::unique_ptr<FrameWrapper> previewFrameWrapper_;
 
     /* distant for each call/conf/conversation */
-    std::map<std::string, std::unique_ptr<FrameWrapper>> distantFrameWrapperMap_;
-    std::map<std::string, RenderConnections> distantConnectionMap_;
+    std::map<QString, std::unique_ptr<FrameWrapper>> distantFrameWrapperMap_;
+    std::map<QString, RenderConnections> distantConnectionMap_;
 
     /* convenience ref to avmodel */
     AVModel& avModel_;
diff --git a/src/settingswidget.cpp b/src/settingswidget.cpp
index bfba770725c30933ebdb3ae483c6eec3c55b9f4a..06ee0001303e7f3baf958d125736e12f7595f624 100644
--- a/src/settingswidget.cpp
+++ b/src/settingswidget.cpp
@@ -143,20 +143,20 @@ SettingsWidget::SettingsWidget(QWidget* parent)
 
     connect(ui->displaySIPNameLineEdit, &QLineEdit::editingFinished,
         [this] {
-            LRCInstance::setCurrAccDisplayName(ui->displaySIPNameLineEdit->text().toStdString());
+            LRCInstance::setCurrAccDisplayName(ui->displaySIPNameLineEdit->text());
         });
 
     connect(ui->passSIPlineEdit, &QLineEdit::editingFinished,
         [this] {
             confProps_ = LRCInstance::accountModel().getAccountConfig(LRCInstance::getCurrAccId());
-            confProps_.password = ui->passSIPlineEdit->text().toStdString();
+            confProps_.password = ui->passSIPlineEdit->text();
             LRCInstance::accountModel().setAccountConfig(LRCInstance::getCurrAccId(), confProps_);
         });
 
     connect(ui->ProxySIP, &QLineEdit::editingFinished,
         [this] {
             confProps_ = LRCInstance::accountModel().getAccountConfig(LRCInstance::getCurrAccId());
-            confProps_.proxyServer = ui->ProxySIP->text().toStdString();
+            confProps_.proxyServer = ui->ProxySIP->text();
             LRCInstance::accountModel().setAccountConfig(LRCInstance::getCurrAccId(), confProps_);
         });
 
@@ -211,20 +211,20 @@ SettingsWidget::SettingsWidget(QWidget* parent)
 
     connect(ui->displayNameLineEdit, &QLineEdit::editingFinished,
         [this] {
-            LRCInstance::setCurrAccDisplayName(ui->displayNameLineEdit->text().toStdString());
+            LRCInstance::setCurrAccDisplayName(ui->displayNameLineEdit->text());
         });
 
     connect(ui->usernameSIP, &QLineEdit::editingFinished,
         [this] {
             confProps_ = LRCInstance::accountModel().getAccountConfig(LRCInstance::getCurrAccId());
-            confProps_.username = ui->usernameSIP->text().toStdString();
+            confProps_.username = ui->usernameSIP->text();
             LRCInstance::accountModel().setAccountConfig(LRCInstance::getCurrAccId(), confProps_);
         });
 
     connect(ui->hostnameSIP, &QLineEdit::editingFinished,
         [this] {
             confProps_ = LRCInstance::accountModel().getAccountConfig(LRCInstance::getCurrAccId());
-            confProps_.hostname = ui->hostnameSIP->text().toStdString();
+            confProps_.hostname = ui->hostnameSIP->text();
             LRCInstance::accountModel().setAccountConfig(LRCInstance::getCurrAccId(), confProps_);
         });
 
@@ -283,7 +283,7 @@ SettingsWidget::slotAccountListChanged()
         disconnectAccountConnections();
     }
     auto device = LRCInstance::avModel().getDefaultDevice();
-    if (LRCInstance::avModel().getCurrentVideoCaptureDevice().empty()) {
+    if (LRCInstance::avModel().getCurrentVideoCaptureDevice().isEmpty()) {
         LRCInstance::avModel().setCurrentVideoCaptureDevice(device);
     }
 }
@@ -409,21 +409,21 @@ SettingsWidget::updateAccountInfoDisplayed()
     auto& accInfo = LRCInstance::getCurrentAccountInfo();
     auto accConfig = LRCInstance::accountModel().getAccountConfig(LRCInstance::getCurrAccId());
 
-    bool showLocalAccountConfig = accConfig.managerUri.empty();
+    bool showLocalAccountConfig = accConfig.managerUri.isEmpty();
     ui->passwdPushButton->setVisible(showLocalAccountConfig);
     ui->btnExportAccount->setVisible(showLocalAccountConfig);
     ui->linkDevPushButton->setVisible(showLocalAccountConfig);
 
-    ui->usernameSIP->setText(QString::fromStdString(accConfig.username));
-    ui->hostnameSIP->setText(QString::fromStdString(accConfig.hostname));
-    ui->passSIPlineEdit->setText(QString::fromStdString(accConfig.password));
-    ui->ProxySIP->setText(QString::fromStdString(accConfig.proxyServer));
+    ui->usernameSIP->setText(accConfig.username);
+    ui->hostnameSIP->setText(accConfig.hostname);
+    ui->passSIPlineEdit->setText(accConfig.password);
+    ui->ProxySIP->setText(accConfig.proxyServer);
 
-    ui->currentRegisteredID->setText(QString::fromStdString(accInfo.registeredName));
-    ui->currentRingID->setText(QString::fromStdString(accInfo.profileInfo.uri));
+    ui->currentRegisteredID->setText(accInfo.registeredName);
+    ui->currentRingID->setText(accInfo.profileInfo.uri);
 
     // if no registered name is found for account
-    if (accInfo.registeredName.empty()) {
+    if (accInfo.registeredName.isEmpty()) {
         ui->btnRegisterName->show();
         ui->btnRegisterName->setVisible(false);
         ui->currentRegisteredID->setStyleSheet("font-weight: normal; background-color: rgb(240, 240, 240);border: 2px;");
@@ -446,8 +446,8 @@ SettingsWidget::updateAccountInfoDisplayed()
     ui->accountEnableCheckBox->setChecked(accInfo.enabled);
     ui->accountSIPEnableCheckBox->setChecked(accInfo.enabled);
 
-    ui->displayNameLineEdit->setText(QString::fromStdString(accInfo.profileInfo.alias));
-    ui->displaySIPNameLineEdit->setText(QString::fromStdString(accInfo.profileInfo.alias));
+    ui->displayNameLineEdit->setText(accInfo.profileInfo.alias);
+    ui->displaySIPNameLineEdit->setText(accInfo.profileInfo.alias);
 
     updateAndShowDevicesSlot();
 
@@ -460,7 +460,7 @@ void
 SettingsWidget::setAvatar(PhotoboothWidget* avatarWidget)
 {
     auto& accountInfo = LRCInstance::getCurrentAccountInfo();
-    auto defaultAvatar = accountInfo.profileInfo.avatar.empty();
+    auto defaultAvatar = accountInfo.profileInfo.avatar.isEmpty();
     auto avatar = Utils::accountPhoto(accountInfo, {avatarSize_, avatarSize_});
     avatarWidget->setAvatarPixmap(QPixmap::fromImage(avatar), defaultAvatar);
 }
@@ -540,7 +540,7 @@ SettingsWidget::resizeEvent(QResizeEvent* event)
 void
 SettingsWidget::verifyRegisteredNameSlot()
 {
-    if (!LRCInstance::getCurrentAccountInfo().registeredName.empty()) {
+    if (!LRCInstance::getCurrentAccountInfo().registeredName.isEmpty()) {
         setRegNameUi(RegName::BLANK);
 
     } else {
@@ -576,8 +576,8 @@ SettingsWidget::validateRegNameForm(const QString& regName)
 }
 
 void
-SettingsWidget::receiveRegNameSlot(const std::string& accountID,
-    lrc::api::account::LookupStatus status, const std::string& address, const std::string& name)
+SettingsWidget::receiveRegNameSlot(const QString& accountID,
+    lrc::api::account::LookupStatus status, const QString& address, const QString& name)
 {
     Q_UNUSED(accountID);
     Q_UNUSED(address);
@@ -591,9 +591,9 @@ SettingsWidget::beforeNameLookup()
 }
 
 void
-SettingsWidget::afterNameLookup(lrc::api::account::LookupStatus status, const std::string& regName)
+SettingsWidget::afterNameLookup(lrc::api::account::LookupStatus status, const QString& regName)
 {
-    if (registeredName_.toStdString() == regName && regName.length() > 2) {
+    if (registeredName_ == regName && regName.length() > 2) {
         if (status == lrc::api::account::LookupStatus::NOT_FOUND) {
             setRegNameUi(RegName::FREE);
 
@@ -727,7 +727,7 @@ SettingsWidget::removeDeviceSlot(int index)
 
     if (ok) {
 delete_:
-        LRCInstance::getCurrentAccountInfo().deviceModel->revokeDevice(it->id, password.toStdString());
+        LRCInstance::getCurrentAccountInfo().deviceModel->revokeDevice(it->id, password);
     }
 }
 
@@ -754,18 +754,18 @@ SettingsWidget::exportAccountSlot()
 
     if (!fileUri.isEmpty()) {
         // remove prefix from QUri encoded data
-        std::string filePrefix { "file:///" };
-        auto filePathStd = fileUri.toEncoded().toStdString();
-        filePathStd = filePathStd.substr(filePathStd.find(filePrefix) + static_cast<int>(filePrefix.size()));
+        QString filePrefix { "file:///" };
+        auto filePath = QString::fromLocal8Bit(fileUri.toEncoded());
+        filePath = filePath.remove(filePrefix);
 
         if (LRCInstance::getCurrAccConfig().archiveHasPassword) {
             PasswordDialog dialog (this, PasswordEnteringPurpose::ExportAccount);
-            dialog.setExportPath(filePathStd);
+            dialog.setExportPath(filePath);
             int doneCode = dialog.exec();
             if (doneCode == PasswordDialog::SuccessCode)
                 QMessageBox::information(0, tr("Success"), tr("Export Successful"));
         } else {
-            bool success = LRCInstance::accountModel().exportToFile(LRCInstance::getCurrAccId(), filePathStd);
+            bool success = LRCInstance::accountModel().exportToFile(LRCInstance::getCurrAccId(), filePath);
             if (success) {
                 QMessageBox::information(0, tr("Success"), tr("Export Successful"));
             } else {
@@ -781,7 +781,7 @@ SettingsWidget::updateAndShowDevicesSlot()
 {
     ui->settingsListWidget->clear();
 
-    if (LRCInstance::getCurrAccConfig().managerUri.empty()) {
+    if (LRCInstance::getCurrAccConfig().managerUri.isEmpty()) {
         ui->linkDevPushButton->show();
     }
 
@@ -791,10 +791,10 @@ SettingsWidget::updateAndShowDevicesSlot()
     for (auto it = deviceList.begin(); it != deviceList.end(); ++it, ++i) {
         auto item = new QListWidgetItem(ui->settingsListWidget);
         ui->settingsListWidget->addItem(item);
-        auto row = new DeviceItemWidget(QString::fromStdString(it->name),
-            QString::fromStdString(it->id),
-            it->isCurrent,
-            this);
+        auto row = new DeviceItemWidget(it->name,
+                                        it->id,
+                                        it->isCurrent,
+                                        this);
         item->setSizeHint(QSize(ui->settingsListWidget->width(),
             row->minimumSizeHint().height()));
         ui->settingsListWidget->setItemWidget(item, row);
@@ -828,8 +828,8 @@ SettingsWidget::updateAndShowBannedContactsSlot()
     int i = 0;
     for (auto it = bannedContactList.begin(); it != bannedContactList.end(); ++it, ++i) {
         auto contactInfo = LRCInstance::getCurrentAccountInfo().contactModel->getContact(*it);
-        auto contactName = QString::fromStdString(contactInfo.registeredName);
-        auto contactId = QString::fromStdString(contactInfo.profileInfo.uri);
+        auto contactName = contactInfo.registeredName;
+        auto contactId = contactInfo.profileInfo.uri;
         auto item = new QListWidgetItem(ui->bannedListWidget);
         ui->bannedListWidget->addItem(item);
         auto row = new BannedItemWidget(contactName,
@@ -901,7 +901,7 @@ SettingsWidget::populateGeneralSettings()
     QSettings settings("jami.net", "Jami");
 
     // settings
-    QString downloadPath = QDir::toNativeSeparators(QString::fromStdString(LRCInstance::dataTransferModel().downloadDirectory));
+    QString downloadPath = QDir::toNativeSeparators(LRCInstance::dataTransferModel().downloadDirectory);
     int pos = downloadPath.lastIndexOf(QChar('\\'));
     if (pos == downloadPath.length() - 1) {
         downloadPath.truncate(pos);
@@ -924,14 +924,13 @@ SettingsWidget::populateGeneralSettings()
     ui->recordQualityValueLabel->setText(recordQualityStr);
     ui->recordQualitySlider->setValue(recordQuality);
 
-    if (LRCInstance::avModel().getRecordPath().empty()) {
+    if (LRCInstance::avModel().getRecordPath().isEmpty()) {
         QString recordPath = QDir::toNativeSeparators(
             QStandardPaths::writableLocation(QStandardPaths::DocumentsLocation));
-        LRCInstance::avModel().setRecordPath(recordPath.toStdString());
+        LRCInstance::avModel().setRecordPath(recordPath);
     }
 
-    Utils::setElidedText(ui->recordPathButton,
-        QString::fromStdString(LRCInstance::avModel().getRecordPath()));
+    Utils::setElidedText(ui->recordPathButton, LRCInstance::avModel().getRecordPath());
 
     // updates
 #ifdef Q_OS_WIN
@@ -980,7 +979,7 @@ SettingsWidget::openDownloadFolderSlot()
     if (!dir.isEmpty()) {
         Utils::setElidedText(ui->downloadButton, dir);
         settings.setValue(SettingsKey::downloadPath, dir);
-        LRCInstance::dataTransferModel().downloadDirectory = dir.toStdString() + "/";
+        LRCInstance::dataTransferModel().downloadDirectory = dir + "/";
     }
 }
 
@@ -990,15 +989,13 @@ SettingsWidget::openRecordFolderSlot()
     QString dir = QFileDialog::getExistingDirectory(
         this,
         tr("Select A Folder For Your Recordings"),
-        QString::fromStdString(LRCInstance::avModel().getRecordPath()),
+        LRCInstance::avModel().getRecordPath(),
         QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks
     );
 
     if (!dir.isEmpty()) {
-        LRCInstance::avModel().setRecordPath(dir.toStdString());
-        Utils::setElidedText(ui->recordPathButton,
-            QString::fromStdString(LRCInstance::avModel().getRecordPath())
-        );
+        LRCInstance::avModel().setRecordPath(dir);
+        Utils::setElidedText(ui->recordPathButton, LRCInstance::avModel().getRecordPath());
     }
 }
 
@@ -1039,9 +1036,9 @@ SettingsWidget::populateAVSettings()
     ui->inputComboBox->clear();
     auto inputDevices = LRCInstance::avModel().getAudioInputDevices();
     auto inputDevice = LRCInstance::avModel().getInputDevice();
-    auto inputIndex = Utils::indexInVector(inputDevices, inputDevice);
+    auto inputIndex = inputDevices.lastIndexOf(inputDevice);
     for (auto id : inputDevices) {
-        ui->inputComboBox->addItem(QString::fromStdString(id).toUtf8());
+        ui->inputComboBox->addItem(id.toUtf8());
     }
     ui->inputComboBox->setCurrentIndex(inputIndex != -1 ? inputIndex : 0);
     connect(ui->inputComboBox, QOverload<int>::of(&QComboBox::currentIndexChanged),
@@ -1056,9 +1053,9 @@ SettingsWidget::populateAVSettings()
     ui->outputComboBox->clear();
     auto outputDevices = LRCInstance::avModel().getAudioOutputDevices();
     auto outputDevice = LRCInstance::avModel().getOutputDevice();
-    auto outputIndex = Utils::indexInVector(outputDevices, outputDevice);
+    auto outputIndex = outputDevices.lastIndexOf(outputDevice);
     for (auto od : outputDevices) {
-        ui->outputComboBox->addItem(QString::fromStdString(od).toUtf8());
+        ui->outputComboBox->addItem(od.toUtf8());
     }
     ui->outputComboBox->setCurrentIndex(outputIndex != -1 ? outputIndex : 0);
     connect(ui->outputComboBox, QOverload<int>::of(&QComboBox::currentIndexChanged),
@@ -1075,8 +1072,7 @@ void
 SettingsWidget::slotAudioOutputIndexChanged(int index)
 {
     stopAudioMeter(false);
-    auto selectedOutputDeviceName = ui->outputComboBox->itemData(index, Qt::DisplayRole)
-        .toString().toStdString();
+    auto selectedOutputDeviceName = ui->outputComboBox->itemData(index, Qt::DisplayRole).toString();
     LRCInstance::avModel().setOutputDevice(selectedOutputDeviceName);
     startAudioMeter(false);
 }
@@ -1085,8 +1081,7 @@ void
 SettingsWidget::slotAudioInputIndexChanged(int index)
 {
     stopAudioMeter(false);
-    auto selectedInputDeviceName = ui->inputComboBox->itemData(index, Qt::DisplayRole)
-        .toString().toStdString();
+    auto selectedInputDeviceName = ui->inputComboBox->itemData(index, Qt::DisplayRole).toString();
     LRCInstance::avModel().setInputDevice(selectedInputDeviceName);
     startAudioMeter(false);
 }
@@ -1094,14 +1089,12 @@ SettingsWidget::slotAudioInputIndexChanged(int index)
 void
 SettingsWidget::slotDeviceBoxCurrentIndexChanged(int index)
 {
-    std::string deviceName = ui->deviceBox->itemData(index, Qt::DisplayRole)
-        .toString()
-        .toStdString();
+    QString deviceName = ui->deviceBox->itemData(index, Qt::DisplayRole).toString();
     auto devices = LRCInstance::avModel().getDevices();
     try {
         auto deviceId = LRCInstance::avModel().getDeviceIdFromName(deviceName);
-        if (deviceId.empty()) {
-            qWarning() << "Couldn't find device: " << deviceName.c_str();
+        if (deviceId.isEmpty()) {
+            qWarning() << "Couldn't find device: " << deviceName;
             return;
         }
         LRCInstance::avModel().setCurrentVideoCaptureDevice(deviceId);
@@ -1142,7 +1135,7 @@ SettingsWidget::stopPreviewing()
 }
 
 void
-SettingsWidget::setFormatListForDevice(const std::string& device)
+SettingsWidget::setFormatListForDevice(const QString& device)
 {
     auto deviceCapabilities = LRCInstance::avModel().getDeviceCapabilities(device);
     if (deviceCapabilities.size() == 0) {
@@ -1151,8 +1144,8 @@ SettingsWidget::setFormatListForDevice(const std::string& device)
     try {
         auto currentSettings = LRCInstance::avModel().getDeviceSettings(device);
         auto currentChannel = currentSettings.channel;
-        currentChannel = currentChannel.empty() ? "default" : currentChannel;
-        auto channelCaps = deviceCapabilities.at(currentChannel);
+        currentChannel = currentChannel.isEmpty() ? "default" : currentChannel;
+        auto channelCaps = deviceCapabilities[currentChannel];
 
         ui->formatBox->blockSignals(true);
         ui->formatBox->clear();
@@ -1160,9 +1153,9 @@ SettingsWidget::setFormatListForDevice(const std::string& device)
 
         for (auto[resolution, frameRateList] : channelCaps) {
             for (auto rate : frameRateList) {
-                formatIndexList_.append(QPair<std::string, float>(resolution, rate));
+                formatIndexList_.append(QPair<QString, float>(resolution, rate));
                 auto sizeRateString = QString("%1 [%2 fps]")
-                    .arg(QString::fromStdString(resolution))
+                    .arg(resolution)
                     .arg(round(rate));
                 ui->formatBox->addItem(sizeRateString.toUtf8());
                 if (resolution == currentSettings.size && rate == currentSettings.rate) {
@@ -1190,7 +1183,7 @@ SettingsWidget::slotVideoDeviceListChanged()
 }
 
 void
-SettingsWidget::slotAudioMeter(const std::string& id, float level)
+SettingsWidget::slotAudioMeter(const QString& id, float level)
 {
     if (id == "audiolayer_id") {
         ui->audioInputMeter->setLevel(level);
@@ -1275,11 +1268,11 @@ SettingsWidget::populateVideoSettings()
         ui->formatBox->setCurrentIndex(0);
     } else {
         auto currentCaptureDevice = LRCInstance::avModel().getCurrentVideoCaptureDevice();
-        auto deviceIndex = Utils::indexInVector(devices, currentCaptureDevice);
+        auto deviceIndex = devices.lastIndexOf(currentCaptureDevice);
         for (auto d : devices) {
             try {
                 auto settings = LRCInstance::avModel().getDeviceSettings(d);
-                ui->deviceBox->addItem(QString::fromStdString(settings.name).toUtf8());
+                ui->deviceBox->addItem(settings.name.toUtf8());
             } catch (...) {}
         }
         ui->deviceBox->setCurrentIndex(deviceIndex);
diff --git a/src/settingswidget.h b/src/settingswidget.h
index 80d1eae28bf2d7e2ce76f7924ace52a1c1ac7deb..2e3b5b1e8298406256802a0079ffd3a66d0cf1e6 100644
--- a/src/settingswidget.h
+++ b/src/settingswidget.h
@@ -71,7 +71,7 @@ private:
     void resizeEvent(QResizeEvent* event);
     bool sipPasswordHidden_ {false};
     void passwordClicked();
-    void afterNameLookup(lrc::api::account::LookupStatus status, const std::string& regName);
+    void afterNameLookup(lrc::api::account::LookupStatus status, const QString& regName);
     bool validateRegNameForm(const QString& regName);
     void setRegNameUi(RegName stat);
     void removeDeviceSlot(int index);
@@ -81,7 +81,7 @@ private:
     void populateGeneralSettings();
     void populateAVSettings();
     void populateVideoSettings();
-    void setFormatListForDevice(const std::string& device);
+    void setFormatListForDevice(const QString& device);
     void startPreviewing(bool force = false);
     void stopPreviewing();
     void startAudioMeter(bool async = true);
@@ -96,7 +96,7 @@ private:
     SettingsMenu selectedMenu_ = SettingsMenu::General;
     lrc::api::profile::Type pastAccount_ = lrc::api::profile::Type::INVALID;
     bool advancedSettingsDropped_ = false;
-    QList<QPair<std::string, float>> formatIndexList_;
+    QList<QPair<QString, float>> formatIndexList_;
     AdvancedSIPSettingsWidget* advancedSIPSettingsWidget_;
     QScrollArea* scrollSIPArea_;
     bool advancedSIPSettingsDropped_ = false;
@@ -117,8 +117,8 @@ private slots:
     void leaveSettingsSlot();
     void verifyRegisteredNameSlot();
     void beforeNameLookup();
-    void receiveRegNameSlot(const std::string& accountID, lrc::api::account::LookupStatus status,
-        const std::string& address, const std::string& name);
+    void receiveRegNameSlot(const QString& accountID, lrc::api::account::LookupStatus status,
+                            const QString& address, const QString& name);
     void slotRegisterName();
     void setAccEnableSlot(int state);
     void delAccountSlot();
@@ -145,6 +145,6 @@ private slots:
     void slotFormatBoxCurrentIndexChanged(int index);
     void slotSetHardwareAccel(bool state);
     void slotVideoDeviceListChanged();
-    void slotAudioMeter(const std::string& id, float level);
+    void slotAudioMeter(const QString& id, float level);
 
 };
diff --git a/src/smartlistmodel.cpp b/src/smartlistmodel.cpp
index 0c326d03313e73ae08c00418d95198bab87ae674..7d646df6aef30b7deae4a2b733a9cd84bcc5bb58 100644
--- a/src/smartlistmodel.cpp
+++ b/src/smartlistmodel.cpp
@@ -28,10 +28,10 @@
 
 #include <QDateTime>
 
-SmartListModel::SmartListModel(const std::string& accId,
+SmartListModel::SmartListModel(const QString& accId,
                                QObject *parent,
                                SmartListModel::Type listModelType,
-                               const std::string& convUid)
+                               const QString& convUid)
     : QAbstractItemModel(parent)
     , accountId_(accId)
     , listModelType_(listModelType)
@@ -51,8 +51,8 @@ int SmartListModel::rowCount(const QModelIndex &parent) const
             auto filterType = accInfo.profileInfo.type;
             return convModel->getFilteredConversations(filterType).size();
         } else if (listModelType_ == Type::CONFERENCE) {
-            auto calls = conferenceables_.at(ConferenceableItem::CALL);
-            auto contacts = conferenceables_.at(ConferenceableItem::CONTACT);
+            auto calls = conferenceables_[ConferenceableItem::CALL];
+            auto contacts = conferenceables_[ConferenceableItem::CONTACT];
             auto rowCount = contacts.size();
             if (calls.size()) {
                 rowCount = 2;
@@ -87,9 +87,9 @@ QVariant SmartListModel::data(const QModelIndex &index, int role) const
             item = convModel->getFilteredConversations(filterType).at(index.row());
             return getConversationItemData(item, accountInfo, role);
         } else if (listModelType_ == Type::CONFERENCE) {
-            auto calls = conferenceables_.at(ConferenceableItem::CALL);
-            auto contacts = conferenceables_.at(ConferenceableItem::CONTACT);
-            std::string itemConvUid{}, itemAccId{};
+            auto calls = conferenceables_[ConferenceableItem::CALL];
+            auto contacts = conferenceables_[ConferenceableItem::CONTACT];
+            QString itemConvUid{}, itemAccId{};
             if (calls.size() == 0) {
                 itemConvUid = contacts.at(index.row()).at(0).convId;
                 itemAccId = contacts.at(index.row()).at(0).accountId;
@@ -123,7 +123,7 @@ QVariant SmartListModel::data(const QModelIndex &index, int role) const
                 }
             }
             if (role == Role::AccountId) {
-                return QVariant(QString::fromStdString(itemAccId));
+                return QVariant(itemAccId);
             }
             item = LRCInstance::getConversationFromConvUid(itemConvUid, itemAccId);
             auto& itemAccountInfo = LRCInstance::accountModel().getAccountInfo(itemAccId);
@@ -139,7 +139,7 @@ QVariant SmartListModel::data(const QModelIndex &index, int role) const
 }
 
 void
-SmartListModel::setConferenceableFilter(const std::string& filter)
+SmartListModel::setConferenceableFilter(const QString& filter)
 {
     beginResetModel();
     auto& accountInfo = LRCInstance::accountModel().getAccountInfo(accountId_);
@@ -179,12 +179,12 @@ SmartListModel::getConversationItemData(const conversation::Info& item,
     case Qt::DisplayRole:
     {
         auto& contact = contactModel->getContact(item.participants[0]);
-        return QVariant(QString::fromStdString(Utils::bestNameForContact(contact)));
+        return QVariant(Utils::bestNameForContact(contact));
     }
     case Role::DisplayID:
     {
         auto& contact = contactModel->getContact(item.participants[0]);
-        return QVariant(QString::fromStdString(Utils::bestIdForContact(contact)));
+        return QVariant(Utils::bestIdForContact(contact));
     }
     case Role::Presence:
     {
@@ -194,7 +194,7 @@ SmartListModel::getConversationItemData(const conversation::Info& item,
     case Role::URI:
     {
         auto& contact = contactModel->getContact(item.participants[0]);
-        return QVariant(QString::fromStdString(contact.profileInfo.uri));
+        return QVariant(contact.profileInfo.uri);
     }
     case Role::UnreadMessagesCount:
         return QVariant(item.unreadMessages);
@@ -204,7 +204,7 @@ SmartListModel::getConversationItemData(const conversation::Info& item,
         return QVariant(QString::fromStdString(Utils::formatTimeString(date)));
     }
     case Role::LastInteraction:
-        return QVariant(QString::fromStdString(item.interactions.at(item.lastMessageUid).body));
+        return QVariant(item.interactions.at(item.lastMessageUid).body);
     case Role::LastInteractionType:
         return QVariant(Utils::toUnderlyingValue(item.interactions.at(item.lastMessageUid).type));
     case Role::ContactType:
@@ -213,13 +213,13 @@ SmartListModel::getConversationItemData(const conversation::Info& item,
         return QVariant(Utils::toUnderlyingValue(contact.profileInfo.type));
     }
     case Role::UID:
-        return QVariant(QString::fromStdString(item.uid));
+        return QVariant(item.uid);
     case Role::ContextMenuOpen:
         return QVariant(isContextMenuOpen);
     case Role::InCall:
     {
         auto& convInfo = LRCInstance::getConversationFromConvUid(item.uid);
-        if (!convInfo.uid.empty()) {
+        if (!convInfo.uid.isEmpty()) {
             auto callModel = LRCInstance::getCurrentCallModel();
             return QVariant(callModel->hasCall(convInfo.callId));
         }
@@ -228,11 +228,11 @@ SmartListModel::getConversationItemData(const conversation::Info& item,
     case Role::CallStateStr:
     {
         auto& convInfo = LRCInstance::getConversationFromConvUid(item.uid);
-        if (!convInfo.uid.empty()) {
+        if (!convInfo.uid.isEmpty()) {
             auto call = LRCInstance::getCallInfoForConversation(convInfo);
             if (call) {
                 auto statusString = call::to_string(call->status);
-                return QVariant(QString::fromStdString(statusString));
+                return QVariant(statusString);
             }
         }
         return QVariant();
@@ -240,7 +240,7 @@ SmartListModel::getConversationItemData(const conversation::Info& item,
     case Role::SectionName:
         return QVariant(QString());
     case Role::Draft:
-        return LRCInstance::getContentDraft(item.uid.c_str(), accountInfo.id.c_str());
+        return LRCInstance::getContentDraft(item.uid, accountInfo.id);
     }
     return QVariant();
 }
@@ -279,7 +279,7 @@ Qt::ItemFlags SmartListModel::flags(const QModelIndex &index) const
 }
 
 void
-SmartListModel::setAccount(const std::string& accountId)
+SmartListModel::setAccount(const QString& accountId)
 {
     beginResetModel();
     accountId_ = accountId;
diff --git a/src/smartlistmodel.h b/src/smartlistmodel.h
index 108e08b1c57b442bf1f64caa1ccf68af221fefa7..8fe8fbbf31983ef625dcb5dc5126cd26a0c8af93 100644
--- a/src/smartlistmodel.h
+++ b/src/smartlistmodel.h
@@ -62,10 +62,10 @@ public:
         Draft
     };
 
-    explicit SmartListModel(const std::string& accId,
+    explicit SmartListModel(const QString& accId,
                             QObject *parent = 0,
                             SmartListModel::Type listModelType = Type::CONVERSATION,
-                            const std::string& convUid = {});
+                            const QString& convUid = {});
 
     // QAbstractItemModel
     int rowCount(const QModelIndex &parent = QModelIndex()) const override;
@@ -75,23 +75,23 @@ public:
     QModelIndex parent(const QModelIndex &child) const;
     Qt::ItemFlags flags(const QModelIndex &index) const;
 
-    void setAccount(const std::string& accId);
-    void setConferenceableFilter(const std::string& filter = {});
+    void setAccount(const QString& accId);
+    void setConferenceableFilter(const QString& filter = {});
     void toggleSection(const QString& section);
 
     // hack for context menu highlight retention
     bool isContextMenuOpen{ false };
 
 private:
-    std::string accountId_;
+    QString accountId_;
 
     QVariant getConversationItemData(const ConversationInfo& item,
                                      const AccountInfo& accountInfo,
                                      int role) const;
     // list sectioning
-    std::string convUid_;
+    QString convUid_;
     Type listModelType_;
     QMap<QString, bool> sectionState_;
-    std::map<ConferenceableItem, ConferenceableValue> conferenceables_;
+    QMap<ConferenceableItem, ConferenceableValue> conferenceables_;
 
 };
\ No newline at end of file
diff --git a/src/userprofile.cpp b/src/userprofile.cpp
index 003508763ba6b7dbf719f18d4d724e4b784f528f..b5c1e6685dceb96e212a8c74069b46ac3a937d14 100644
--- a/src/userprofile.cpp
+++ b/src/userprofile.cpp
@@ -26,9 +26,9 @@ UserProfile::UserProfile(lrc::api::conversation::Info convInfo, QWidget* parent)
     setSource(QUrl(QStringLiteral("qrc:/src/UserProfileCard.qml")));
 
     auto contact = LRCInstance::getCurrentAccountInfo().contactModel->getContact(convInfo.participants.at(0));
-    QString name = QString::fromStdString(contact.profileInfo.alias);
-    QString registeredName = QString::fromStdString(contact.registeredName);
-    QString uri = QString::fromStdString(contact.profileInfo.uri);
+    QString name = contact.profileInfo.alias;
+    QString registeredName = contact.registeredName;
+    QString uri = contact.profileInfo.uri;
 
     // force updating source, since image provide will only be requested once with the same source
     QString userImageSource = "image://userProfileImage/user_";
diff --git a/src/userprofile.h b/src/userprofile.h
index e120a845aa3128aa899190c2ef1125fbdd4abbed..353871d884afbd0a3df650a16e4699a497acc71c 100644
--- a/src/userprofile.h
+++ b/src/userprofile.h
@@ -58,7 +58,7 @@ public:
             int height = 200;
             scaleSize = QSize(width, height);
             auto contact = LRCInstance::getCurrentAccountInfo().contactModel->getContact(convInfo_.participants.at(0));
-            image = Utils::setupQRCode(QString::fromStdString(contact.profileInfo.uri), 0);
+            image = Utils::setupQRCode(contact.profileInfo.uri, 0);
         } else {
             return Utils::conversationPhoto(convInfo_.uid, LRCInstance::getCurrentAccountInfo());
         }
diff --git a/src/utils.cpp b/src/utils.cpp
index 33101a97f077fcfd57745e717fbae70fb901b6b8..92c556b117b99861dd3043e2fca82db6a7d81e47 100644
--- a/src/utils.cpp
+++ b/src/utils.cpp
@@ -444,53 +444,53 @@ Utils::applyUpdates(bool updateToBeta, QWidget* parent)
 
 // new lrc helpers
 
-inline std::string
-removeEndlines(const std::string& str)
+inline QString
+removeEndlines(const QString& str)
 {
-    std::string trimmed(str);
-    trimmed.erase(std::remove(trimmed.begin(), trimmed.end(), '\n'), trimmed.end());
-    trimmed.erase(std::remove(trimmed.begin(), trimmed.end(), '\r'), trimmed.end());
+    QString trimmed(str);
+    trimmed.remove(QChar('\n'));
+    trimmed.remove(QChar('\r'));
     return trimmed;
 }
 
-std::string
+QString
 Utils::bestIdForConversation(const lrc::api::conversation::Info& conv, const lrc::api::ConversationModel& model)
 {
     auto contact = model.owner.contactModel->getContact(conv.participants[0]);
-    if (!contact.registeredName.empty()) {
+    if (!contact.registeredName.isEmpty()) {
         return removeEndlines(contact.registeredName);
     }
     return removeEndlines(contact.profileInfo.uri);
 }
 
-std::string
+QString
 Utils::bestIdForAccount(const lrc::api::account::Info& account)
 {
-    if (!account.registeredName.empty()) {
+    if (!account.registeredName.isEmpty()) {
         return removeEndlines(account.registeredName);
     }
     return removeEndlines(account.profileInfo.uri);
 }
 
-std::string
+QString
 Utils::bestNameForAccount(const lrc::api::account::Info& account)
 {
-    if (account.profileInfo.alias.empty()) {
+    if (account.profileInfo.alias.isEmpty()) {
         return bestIdForAccount(account);
     }
     return account.profileInfo.alias;
 }
 
-std::string
+QString
 Utils::bestIdForContact(const lrc::api::contact::Info& contact)
 {
-    if (!contact.registeredName.empty()) {
+    if (!contact.registeredName.isEmpty()) {
         return removeEndlines(contact.registeredName);
     }
     return removeEndlines(contact.profileInfo.uri);
 }
 
-std::string
+QString
 Utils::bestNameForContact(const lrc::api::contact::Info& contact)
 {
     auto alias = removeEndlines(contact.profileInfo.alias);
@@ -500,7 +500,7 @@ Utils::bestNameForContact(const lrc::api::contact::Info& contact)
     return alias;
 }
 
-std::string
+QString
 Utils::bestNameForConversation(const lrc::api::conversation::Info& conv, const lrc::api::ConversationModel& model)
 {
     try {
@@ -515,7 +515,7 @@ Utils::bestNameForConversation(const lrc::api::conversation::Info& conv, const l
 }
 
 // returns empty string if only infoHash is available, second best identifier otherwise
-std::string
+QString
 Utils::secondBestNameForAccount(const lrc::api::account::Info& account)
 {
     auto alias = removeEndlines(account.profileInfo.alias);
@@ -578,14 +578,14 @@ Utils::isInteractionGenerated(const lrc::api::interaction::Type& type)
 }
 
 bool
-Utils::isContactValid(const std::string& contactUid, const lrc::api::ConversationModel& model)
+Utils::isContactValid(const QString& contactUid, const lrc::api::ConversationModel& model)
 {
     auto contact = model.owner.contactModel->getContact(contactUid);
     return  (contact.profileInfo.type == lrc::api::profile::Type::PENDING ||
             contact.profileInfo.type == lrc::api::profile::Type::TEMPORARY ||
             contact.profileInfo.type == lrc::api::profile::Type::RING ||
             contact.profileInfo.type == lrc::api::profile::Type::SIP) &&
-            !contact.profileInfo.uri.empty();
+            !contact.profileInfo.uri.isEmpty();
 }
 
 bool Utils::getReplyMessageBox(QWidget* widget, const QString& title, const QString& text)
@@ -596,10 +596,10 @@ bool Utils::getReplyMessageBox(QWidget* widget, const QString& title, const QStr
 }
 
 QImage
-Utils::conversationPhoto(const std::string & convUid, const lrc::api::account::Info& accountInfo)
+Utils::conversationPhoto(const QString& convUid, const lrc::api::account::Info& accountInfo)
 {
     auto convInfo = LRCInstance::getConversationFromConvUid(convUid, accountInfo.id, false);
-    if (!convInfo.uid.empty()) {
+    if (!convInfo.uid.isEmpty()) {
         return GlobalInstances::pixmapManipulator()
             .decorationRole(convInfo, accountInfo)
             .value<QImage>();
@@ -826,16 +826,16 @@ QImage
 Utils::accountPhoto(const lrc::api::account::Info& accountInfo, const QSize& size)
 {
     QImage photo;
-    if (!accountInfo.profileInfo.avatar.empty()) {
-        QByteArray ba = QByteArray::fromStdString(accountInfo.profileInfo.avatar);
+    if (!accountInfo.profileInfo.avatar.isEmpty()) {
+        QByteArray ba = accountInfo.profileInfo.avatar.toLocal8Bit();
         photo = GlobalInstances::pixmapManipulator().personPhoto(ba, nullptr).value<QImage>();
     } else {
         auto bestId = bestIdForAccount(accountInfo);
         auto bestName = bestNameForAccount(accountInfo);
-        QString letterStr = bestId == bestName ? QString() : QString::fromStdString(bestName);
+        QString letterStr = bestId == bestName ? QString() : bestName;
         QString prefix = accountInfo.profileInfo.type == lrc::api::profile::Type::RING ? "ring:" : "sip:";
         photo = fallbackAvatar(size,
-            prefix + QString::fromStdString(accountInfo.profileInfo.uri),
+            prefix + accountInfo.profileInfo.uri,
             letterStr);
     }
     return scaleAndFrame(photo, size);
diff --git a/src/utils.h b/src/utils.h
index de6fc3753bea4d7c0f47a7c0c698bfb9d1ae5e91..8d638987f44db5b412699c4594ec7b91990750b8 100644
--- a/src/utils.h
+++ b/src/utils.h
@@ -82,24 +82,24 @@ void checkForUpdates(bool withUI, QWidget* parent = nullptr);
 void applyUpdates(bool updateToBeta, QWidget* parent = nullptr);
 
 // names
-std::string bestIdForConversation(const lrc::api::conversation::Info& conv, const lrc::api::ConversationModel& model);
-std::string bestIdForAccount(const lrc::api::account::Info & account);
-std::string bestNameForAccount(const lrc::api::account::Info & account);
-std::string bestIdForContact(const lrc::api::contact::Info & contact);
-std::string bestNameForContact(const lrc::api::contact::Info & contact);
-std::string bestNameForConversation(const lrc::api::conversation::Info & conv, const lrc::api::ConversationModel & model);
-std::string secondBestNameForAccount(const lrc::api::account::Info& account); // returns empty string if only infoHash is available
+QString bestIdForConversation(const lrc::api::conversation::Info& conv, const lrc::api::ConversationModel& model);
+QString bestIdForAccount(const lrc::api::account::Info & account);
+QString bestNameForAccount(const lrc::api::account::Info & account);
+QString bestIdForContact(const lrc::api::contact::Info & contact);
+QString bestNameForContact(const lrc::api::contact::Info & contact);
+QString bestNameForConversation(const lrc::api::conversation::Info & conv, const lrc::api::ConversationModel & model);
+QString secondBestNameForAccount(const lrc::api::account::Info& account); // returns empty string if only infoHash is available
 lrc::api::profile::Type profileType(const lrc::api::conversation::Info & conv, const lrc::api::ConversationModel & model);
 
 // interactions
 std::string formatTimeString(const std::time_t& timestamp);
 bool isInteractionGenerated(const lrc::api::interaction::Type& interaction);
-bool isContactValid(const std::string& contactUid, const lrc::api::ConversationModel& model);
+bool isContactValid(const QString& contactUid, const lrc::api::ConversationModel& model);
 bool getReplyMessageBox(QWidget* widget, const QString& title, const QString& text);
 
 // image
 QImage getCirclePhoto(const QImage original, int sizePhoto);
-QImage conversationPhoto(const std::string& convUid, const lrc::api::account::Info& accountInfo);
+QImage conversationPhoto(const QString& convUid, const lrc::api::account::Info& accountInfo);
 QColor getAvatarColor(const QString& canonicalUri);
 QImage fallbackAvatar(const QSize size, const QString& canonicalUriStr, const QString& letterStr = QString());
 QImage fallbackAvatar(const QSize size, const std::string& alias, const std::string& uri);
@@ -227,15 +227,4 @@ toEnum(T value) noexcept
 {
     return static_cast<E>(value);
 }
-
-template<typename T>
-ptrdiff_t
-indexInVector(const std::vector<T>& vec, const T& item)
-{
-    auto it = std::find(vec.begin(), vec.end(), item);
-    if (it == vec.end()) {
-        return -1;
-    }
-    return std::distance(vec.begin(), it);
-}
 }
diff --git a/src/videooverlay.cpp b/src/videooverlay.cpp
index 10c100956cb8cd7ebb5e5dbf869b04a4cd0c9a32..57d79841049cede7fae0a8c434dcb9de83554952 100644
--- a/src/videooverlay.cpp
+++ b/src/videooverlay.cpp
@@ -82,8 +82,7 @@ VideoOverlay::updateCall(const conversation::Info& convInfo)
         return;
     }
 
-    auto bestName = QString::fromStdString(
-        Utils::bestNameForConversation(convInfo, *convModel));
+    auto bestName = Utils::bestNameForConversation(convInfo, *convModel);
     currentBestCalleeDisplayName_ = bestName;
     ui->nameLabel->setText(bestName);
 
@@ -109,21 +108,21 @@ VideoOverlay::updateCall(const conversation::Info& convInfo)
     ui->sipInputPanelButton->setVisible(isSIP);
 
     // only show the hold/pause button for non-conference calls
-    ui->holdButton->setVisible(convInfo.confId.empty());
+    ui->holdButton->setVisible(convInfo.confId.isEmpty());
 }
 
 void
 VideoOverlay::setTime()
 {
     auto callId = LRCInstance::getCallIdForConversationUid(convUid_, accountId_);
-    if (callId.empty() || !LRCInstance::getCurrentCallModel()->hasCall(callId)) {
+    if (callId.isEmpty() || !LRCInstance::getCurrentCallModel()->hasCall(callId)) {
         return;
     }
     auto callInfo = LRCInstance::getCurrentCallModel()->getCall(callId);
     if (callInfo.status == lrc::api::call::Status::IN_PROGRESS ||
         callInfo.status == lrc::api::call::Status::PAUSED) {
         auto timeString = LRCInstance::getCurrentCallModel()->getFormattedCallDuration(callId);
-        ui->timerLabel->setText(QString::fromStdString(timeString));
+        ui->timerLabel->setText(timeString);
     }
 }
 
@@ -131,7 +130,7 @@ bool
 VideoOverlay::shouldFadeOut()
 {
     auto callId = LRCInstance::getCallIdForConversationUid(convUid_, accountId_);
-    if (callId.empty() || !LRCInstance::getCurrentCallModel()->hasCall(callId)) {
+    if (callId.isEmpty() || !LRCInstance::getCurrentCallModel()->hasCall(callId)) {
         return false;
     }
     auto callInfo = LRCInstance::getCurrentCallModel()->getCall(callId);
@@ -162,12 +161,12 @@ void
 VideoOverlay::on_hangupButton_clicked()
 {
     auto convInfo = LRCInstance::getCurrentConversation();
-    if (!convInfo.uid.empty()) {
+    if (!convInfo.uid.isEmpty()) {
         auto callModel = LRCInstance::getCurrentCallModel();
         if (callModel->hasCall(convInfo.callId)) {
             // Store the last remaining participant of the conference
             // so we can switch the smartlist index after termination.
-            if (!convInfo.confId.empty()) {
+            if (!convInfo.confId.isEmpty()) {
                 auto callList = LRCInstance::getAPI().getConferenceSubcalls(convInfo.confId);
                 if (callList.size() == 2) {
                     for (const auto& cId : callList) {
@@ -195,7 +194,7 @@ VideoOverlay::on_holdButton_toggled(bool checked)
     // why is 'checked' unused?
     Q_UNUSED(checked);
     auto callId = LRCInstance::getCallIdForConversationUid(convUid_, accountId_);
-    if (callId.empty() || !LRCInstance::getCurrentCallModel()->hasCall(callId)) {
+    if (callId.isEmpty() || !LRCInstance::getCurrentCallModel()->hasCall(callId)) {
         return;
     }
     auto callModel = LRCInstance::getCurrentCallModel();
@@ -212,7 +211,7 @@ VideoOverlay::on_noMicButton_toggled(bool checked)
 {
     Q_UNUSED(checked);
     auto callId = LRCInstance::getCallIdForConversationUid(convUid_, accountId_);
-    if (callId.empty() || !LRCInstance::getCurrentCallModel()->hasCall(callId)) {
+    if (callId.isEmpty() || !LRCInstance::getCurrentCallModel()->hasCall(callId)) {
         return;
     }
     auto callModel = LRCInstance::getCurrentCallModel();
@@ -226,7 +225,7 @@ VideoOverlay::on_noVideoButton_toggled(bool checked)
 {
     Q_UNUSED(checked);
     auto callId = LRCInstance::getCallIdForConversationUid(convUid_, accountId_);
-    if (callId.empty() || !LRCInstance::getCurrentCallModel()->hasCall(callId)) {
+    if (callId.isEmpty() || !LRCInstance::getCurrentCallModel()->hasCall(callId)) {
         return;
     }
     auto callModel = LRCInstance::getCurrentCallModel();
@@ -240,7 +239,7 @@ void
 VideoOverlay::on_recButton_clicked()
 {
     auto callId = LRCInstance::getCallIdForConversationUid(convUid_, accountId_);
-    if (callId.empty() || !LRCInstance::getCurrentCallModel()->hasCall(callId)) {
+    if (callId.isEmpty() || !LRCInstance::getCurrentCallModel()->hasCall(callId)) {
         return;
     }
     auto callModel = LRCInstance::getCurrentCallModel();
@@ -253,7 +252,7 @@ void
 VideoOverlay::on_addToConferenceButton_toggled(bool checked)
 {
     auto callId = LRCInstance::getCallIdForConversationUid(convUid_, accountId_);
-    if ( callId.empty() ||
+    if ( callId.isEmpty() ||
          !LRCInstance::getCurrentCallModel()->hasCall(callId) ||
          !checked) {
         return;
@@ -266,7 +265,7 @@ void
 VideoOverlay::on_transferCallButton_toggled(bool checked)
 {
     auto callId = LRCInstance::getCallIdForConversationUid(convUid_, accountId_);
-    if (callId.empty() ||
+    if (callId.isEmpty() ||
         !LRCInstance::getCurrentCallModel()->hasCall(callId) ||
         !checked) {
         return;
@@ -276,7 +275,7 @@ VideoOverlay::on_transferCallButton_toggled(bool checked)
 }
 
 void
-VideoOverlay::slotWillDoTransfer(const std::string& contactUri)
+VideoOverlay::slotWillDoTransfer(const QString& contactUri)
 {
     auto callModel = LRCInstance::getCurrentCallModel();
 
@@ -284,12 +283,12 @@ VideoOverlay::slotWillDoTransfer(const std::string& contactUri)
     ui->transferCallButton->resetToOriginal();
 
     auto conversation = LRCInstance::getCurrentConversation();
-    if (conversation.uid.empty()) {
+    if (conversation.uid.isEmpty()) {
         return;
     }
-    auto callId = conversation.confId.empty() ? conversation.callId : conversation.confId;
+    auto callId = conversation.confId.isEmpty() ? conversation.callId : conversation.confId;
 
-    std::string destCallId;
+    QString destCallId;
 
     try {
         //check if the call exist - (check non-finished calls)
@@ -312,7 +311,7 @@ VideoOverlay::slotWillDoTransfer(const std::string& contactUri)
 }
 
 void
-VideoOverlay::slotContactWillJoinConference(const std::string& contactUri)
+VideoOverlay::slotContactWillJoinConference(const QString& contactUri)
 {
     auto callModel = LRCInstance::getCurrentCallModel();
 
@@ -328,7 +327,7 @@ VideoOverlay::slotContactWillJoinConference(const std::string& contactUri)
 }
 
 void
-VideoOverlay::slotCallWillJoinConference(const std::string& callId)
+VideoOverlay::slotCallWillJoinConference(const QString& callId)
 {
     auto callModel = LRCInstance::getCurrentCallModel();
 
@@ -336,10 +335,10 @@ VideoOverlay::slotCallWillJoinConference(const std::string& callId)
     ui->addToConferenceButton->resetToOriginal();
 
     auto conversation = LRCInstance::getCurrentConversation();
-    if (conversation.uid.empty()) {
+    if (conversation.uid.isEmpty()) {
         return;
     }
-    auto thisCallId = conversation.confId.empty() ? conversation.callId : conversation.confId;
+    auto thisCallId = conversation.confId.isEmpty() ? conversation.callId : conversation.confId;
 
     callModel->joinCalls(thisCallId, callId);
 }
@@ -348,7 +347,7 @@ void
 VideoOverlay::on_sipInputPanelButton_toggled(bool checked)
 {
     auto callId = LRCInstance::getCallIdForConversationUid(convUid_, accountId_);
-    if (callId.empty() ||
+    if (callId.isEmpty() ||
         !LRCInstance::getCurrentCallModel()->hasCall(callId) ||
         !checked) {
         return;
@@ -396,7 +395,7 @@ void
 VideoOverlay::slotSIPInputPanelClicked(const int& id)
 {
     auto callId = LRCInstance::getCallIdForConversationUid(convUid_, accountId_);
-    if ( callId.empty() ||
+    if ( callId.isEmpty() ||
          !LRCInstance::getCurrentCallModel()->hasCall(callId)) {
         return;
     }
@@ -413,9 +412,9 @@ VideoOverlay::slotSIPInputPanelClicked(const int& id)
         // id from 12 to 15 are A,B,C,D
         if (id >= 12) {
             //ASCII Key_A = 65
-            LRCInstance::getCurrentCallModel()->playDTMF(callId, std::string(1, char(id - 12 + 65)));
+            LRCInstance::getCurrentCallModel()->playDTMF(callId, QString(char(id - 12 + 65)));
         } else {
-            LRCInstance::getCurrentCallModel()->playDTMF(callId, std::to_string(id));
+            LRCInstance::getCurrentCallModel()->playDTMF(callId, QString::number(id));
         }
         break;
     }
diff --git a/src/videooverlay.h b/src/videooverlay.h
index c42f5cadb1b4d664b475013a889fbfde3d63d030..7e4c65201654b063e42ebfc86da4a315e3d1f3b6 100644
--- a/src/videooverlay.h
+++ b/src/videooverlay.h
@@ -72,17 +72,17 @@ private slots:
     void on_transferCallButton_toggled(bool checked);
     void on_addToConferenceButton_toggled(bool checked);
     void on_sipInputPanelButton_toggled(bool checked);
-    void slotWillDoTransfer(const std::string& contactUri);
-    void slotContactWillJoinConference(const std::string& contactUri);
-    void slotCallWillJoinConference(const std::string& callId);
+    void slotWillDoTransfer(const QString& contactUri);
+    void slotContactWillJoinConference(const QString& contactUri);
+    void slotCallWillJoinConference(const QString& callId);
     void slotSIPInputPanelClicked(const int& id);
 
 private:
     Ui::VideoOverlay* ui;
 
     // for current conf/call info
-    std::string accountId_;
-    std::string convUid_;
+    QString accountId_;
+    QString convUid_;
 
     QTimer* oneSecondTimer_;
     QString currentBestCalleeDisplayName_ { "" };
diff --git a/src/videoview.cpp b/src/videoview.cpp
index 7fc9aece6dbc16daf65999acefd79d399d838f52..6df2f6aaeb3ed322f0f4d6520682664b28be055b 100644
--- a/src/videoview.cpp
+++ b/src/videoview.cpp
@@ -156,11 +156,11 @@ VideoView::dropEvent(QDropEvent* event)
     // take only the first file
     QString urlString = event->mimeData()->urls().at(0).toString();
     auto conversation = LRCInstance::getCurrentConversation();
-    if (conversation.uid.empty()) return;
+    if (conversation.uid.isEmpty()) return;
     auto callIdList = LRCInstance::getActiveCalls();
     for (auto callId : callIdList) {
         if (callId == conversation.callId) {
-            LRCInstance::avModel().setInputFile(urlString.toStdString());
+            LRCInstance::avModel().setInputFile(urlString);
             break;
         }
     }
@@ -193,7 +193,7 @@ VideoView::showContextMenu(const QPoint& position)
     for (auto d : devices) {
         try {
             auto settings = LRCInstance::avModel().getDeviceSettings(d);
-            QString deviceName = QString::fromStdString(settings.name).toUtf8();
+            QString deviceName =settings.name;
             auto deviceAction = new QAction(deviceName, this);
             menu.addAction(deviceAction);
             deviceAction->setCheckable(true);
@@ -202,8 +202,8 @@ VideoView::showContextMenu(const QPoint& position)
             }
             connect(deviceAction, &QAction::triggered,
                 [this, deviceName]() {
-                    auto deviceId = LRCInstance::avModel().getDeviceIdFromName(deviceName.toStdString());
-                    if (deviceId.empty()) {
+                    auto deviceId = LRCInstance::avModel().getDeviceIdFromName(deviceName);
+                    if (deviceId.isEmpty()) {
                         qWarning() << "Couldn't find device: " << deviceName;
                         return;
                     }
@@ -265,7 +265,7 @@ VideoView::showContextMenu(const QPoint& position)
                 return;
             fileNames = fileDialog.selectedFiles();
             auto resource = QUrl::fromLocalFile(fileNames.at(0)).toString();
-            LRCInstance::avModel().setInputFile(resource.toStdString());
+            LRCInstance::avModel().setInputFile(resource);
             resetPreview();
         });
 
@@ -286,15 +286,15 @@ VideoView::showContextMenu(const QPoint& position)
 }
 
 void
-VideoView::updateCall(const std::string& convUid,
-                      const std::string& accountId,
+VideoView::updateCall(const QString& convUid,
+                      const QString& accountId,
                       bool forceCallOnly)
 {
-    accountId_ = accountId.empty() ? accountId_ : accountId;
-    convUid_ = convUid.empty() ? convUid_ : convUid;
+    accountId_ = accountId.isEmpty() ? accountId_ : accountId;
+    convUid_ = convUid.isEmpty() ? convUid_ : convUid;
 
     auto convInfo = LRCInstance::getConversationFromConvUid(convUid_, accountId_);
-    if (convInfo.uid.empty()) {
+    if (convInfo.uid.isEmpty()) {
         return;
     }
 
@@ -407,7 +407,7 @@ VideoView::shouldShowPreview(bool force)
 {
     bool shouldShowPreview{ false };
     auto convInfo = LRCInstance::getConversationFromConvUid(convUid_, accountId_);
-    if (convInfo.uid.empty()) {
+    if (convInfo.uid.isEmpty()) {
         return shouldShowPreview;
     }
     auto call = LRCInstance::getCallInfoForConversation(convInfo, force);
@@ -439,17 +439,17 @@ VideoView::resetPreview()
         height = previewImage->height();
     } else {
         auto device = LRCInstance::avModel().getCurrentVideoCaptureDevice();
-        if (device.empty()) {
+        if (device.isEmpty()) {
             device = LRCInstance::avModel().getDefaultDevice();
         }
-        if (device.empty()) {
+        if (device.isEmpty()) {
             previewWidget_->setVisible(false);
             return;
         }
         try {
             auto settings = LRCInstance::avModel().getDeviceSettings(device);
-            width = QString::fromStdString(settings.size).split("x")[0].toInt();
-            height = QString::fromStdString(settings.size).split("x")[1].toInt();
+            width = settings.size.split("x")[0].toInt();
+            height = settings.size.split("x")[1].toInt();
         } catch (...) {}
     }
     auto newSize = previewWidget_->getScaledSize(width, height);
@@ -472,7 +472,7 @@ void
 VideoView::keyReleaseEvent(QKeyEvent* event)
 {
     auto convInfo = LRCInstance::getCurrentConversation();
-    if (convInfo.uid.empty()
+    if (convInfo.uid.isEmpty()
         || LRCInstance::getCurrentAccountInfo().profileInfo.type != lrc::api::profile::Type::SIP)
         return;
 
@@ -482,11 +482,10 @@ VideoView::keyReleaseEvent(QKeyEvent* event)
         LRCInstance::getCurrentCallModel()->playDTMF(convInfo.callId, "*");
     } else if (keyPressed_ >= 65 && keyPressed_ <= 68) {
         //enum Qt::Key_A = 65, QT::Key_D = 68
-        // string::string(size_type count, charT ch)
-        LRCInstance::getCurrentCallModel()->playDTMF(convInfo.callId, std::string(1, char(keyPressed_)));
+        LRCInstance::getCurrentCallModel()->playDTMF(convInfo.callId, QString(char(keyPressed_)));
     } else if (keyPressed_ >= 48 && keyPressed_ <= 57) {
         //enum Qt::Key_0 = 48, QT::Key_9 = 57
-        LRCInstance::getCurrentCallModel()->playDTMF(convInfo.callId, std::to_string(keyPressed_ - 48));
+        LRCInstance::getCurrentCallModel()->playDTMF(convInfo.callId, QString::number(keyPressed_ - 48));
     }
     keyPressed_ = -1;
     QWidget::keyReleaseEvent(event);
diff --git a/src/videoview.h b/src/videoview.h
index 7e8049ab1aa12335fa99a50eb986f64b4d24316a..8e63a1f281d94aeebcd749e8abb3f4da3e976c16 100644
--- a/src/videoview.h
+++ b/src/videoview.h
@@ -44,8 +44,8 @@ public:
     explicit VideoView(QWidget* parent = 0);
     ~VideoView();
 
-    void updateCall(const std::string& convUid = {},
-                    const std::string& accountId = {},
+    void updateCall(const QString& convUid = {},
+                    const QString& accountId = {},
                     bool forceCallOnly = false);
     void simulateShowChatview(bool checked);
     void resetPreview();
@@ -71,8 +71,8 @@ private:
     Ui::VideoView* ui;
 
     // for current conf/call info
-    std::string accountId_;
-    std::string convUid_;
+    QString accountId_;
+    QString convUid_;
 
     // vignette
     VignetteWidget* vignette_;
@@ -100,5 +100,5 @@ private:
 signals:
     void setChatVisibility(bool visible);
     void toggleFullScreenClicked();
-    void terminating(const std::string& id);
+    void terminating(const QString& id);
 };
diff --git a/src/webchathelpers.cpp b/src/webchathelpers.cpp
index b6b6308198b27ad4d98ce7f01885f8fb0e92cae8..214dc3555517ea834afbb978088451e3e745c112 100644
--- a/src/webchathelpers.cpp
+++ b/src/webchathelpers.cpp
@@ -27,12 +27,12 @@ buildInteractionJson(lrc::api::ConversationModel& conversationModel,
     const uint64_t msgId,
     const lrc::api::interaction::Info& interaction)
 {
-    auto sender = QString(interaction.authorUri.c_str());
+    auto sender = interaction.authorUri;
     auto timestamp = QString::number(interaction.timestamp);
     auto direction = lrc::api::interaction::isOutgoing(interaction) ? QString("out") : QString("in");
 
     QJsonObject interactionObject = QJsonObject();
-    interactionObject.insert("text", QJsonValue(QString(interaction.body.c_str())));
+    interactionObject.insert("text", QJsonValue(interaction.body));
     interactionObject.insert("id", QJsonValue(QString::number(msgId)));
     interactionObject.insert("sender", QJsonValue(sender));
     interactionObject.insert("sender_contact_method", QJsonValue(sender));