From d191f86b9c347da81d43c34b51612eef6be6bcdd Mon Sep 17 00:00:00 2001
From: agsantos <aline.gondimsantos@savoirfairelinux.com>
Date: Tue, 8 Sep 2020 12:59:34 -0400
Subject: [PATCH] settings: optimize code

Change-Id: Ib12382a9292852f404b1a588a7b5a6e29cb06cf9
---
 jami-qt.pro                                   |    6 +-
 qml.qrc                                       |   36 +-
 src/audiocodeclistmodel.cpp                   |  108 --
 src/commoncomponents/PhotoboothView.qml       |   16 +-
 src/constant/JamiTheme.qml                    |    2 +-
 src/mediacodeclistmodel.cpp                   |  146 ++
 ...codeclistmodel.h => mediacodeclistmodel.h} |   20 +-
 src/messagesadapter.cpp                       |    1 +
 src/messagesadapter.h                         |    1 +
 src/qmlregister.cpp                           |    6 +-
 src/settingsview/SettingsView.qml             |  127 +-
 .../components/AccountProfile.qml             |  108 ++
 .../components/AdvancedCallSettings.qml       |  146 ++
 .../AdvancedConnectivitySettings.qml          |  203 +++
 .../AdvancedJamiSecuritySettings.qml          |  178 ++
 .../components/AdvancedMediaSettings.qml      |   89 +
 .../components/AdvancedNameServerSettings.qml |   65 +
 .../components/AdvancedOpenDHTSettings.qml    |   95 ++
 .../AdvancedPublicAddressSettings.qml         |   96 ++
 .../components/AdvancedSDPSettings.qml        |  149 ++
 .../AdvancedSIPSecuritySettings.qml           |  329 ++++
 .../components/AdvancedSIPSettingsView.qml    | 1510 -----------------
 .../components/AdvancedSettings.qml           |  180 ++
 .../components/AdvancedSettingsView.qml       | 1024 -----------
 .../components/AdvancedVoiceMailSettings.qml  |   61 +
 src/settingsview/components/AudioSettings.qml |  205 +++
 src/settingsview/components/AvSettingPage.qml |  570 +------
 .../components/BannedContacts.qml             |  153 ++
 .../components/CurrentAccountSettings.qml     |  332 ++++
 .../CurrentAccountSettingsScrollPage.qml      |  899 ----------
 .../CurrentSIPAccountSettingScrollPage.qml    |  456 -----
 .../components/GeneralSettingsPage.qml        |  435 +----
 .../components/JamiUserIdentity.qml           |  173 ++
 src/settingsview/components/LevelMeter.qml    |   10 +-
 src/settingsview/components/LinkedDevices.qml |  163 ++
 ...decDelegate.qml => MediaCodecDelegate.qml} |   20 +-
 src/settingsview/components/MediaSettings.qml |  158 ++
 .../components/NameRegistrationDialog.qml     |    4 +-
 .../components/PluginSettingsPage.qml         |   39 +-
 .../components/RecordingSettings.qml          |  188 ++
 .../components/SIPUserIdentity.qml            |   86 +
 .../components/SettingMaterialButton.qml      |   80 +
 .../components/SettingSpinBox.qml             |   86 +
 .../components/SettingsComboBox.qml           |   82 +
 .../components/SettingsHeader.qml             |   65 +
 .../components/SettingsMaterialLineEdit.qml   |   85 +
 .../components/SystemSettings.qml             |  144 ++
 src/settingsview/components/ToggleSwitch.qml  |    2 +-
 .../components/UpdateSettings.qml             |   98 ++
 src/settingsview/components/UserIdentity.qml  |   71 +
 .../components/VideoCodecDelegate.qml         |   96 --
 src/settingsview/components/VideoSettings.qml |  258 +++
 src/videocodeclistmodel.cpp                   |  130 --
 src/videocodeclistmodel.h                     |   53 -
 src/wizardview/components/ProfilePage.qml     |    4 +-
 55 files changed, 4433 insertions(+), 5414 deletions(-)
 delete mode 100644 src/audiocodeclistmodel.cpp
 create mode 100644 src/mediacodeclistmodel.cpp
 rename src/{audiocodeclistmodel.h => mediacodeclistmodel.h} (73%)
 create mode 100644 src/settingsview/components/AccountProfile.qml
 create mode 100644 src/settingsview/components/AdvancedCallSettings.qml
 create mode 100644 src/settingsview/components/AdvancedConnectivitySettings.qml
 create mode 100644 src/settingsview/components/AdvancedJamiSecuritySettings.qml
 create mode 100644 src/settingsview/components/AdvancedMediaSettings.qml
 create mode 100644 src/settingsview/components/AdvancedNameServerSettings.qml
 create mode 100644 src/settingsview/components/AdvancedOpenDHTSettings.qml
 create mode 100644 src/settingsview/components/AdvancedPublicAddressSettings.qml
 create mode 100644 src/settingsview/components/AdvancedSDPSettings.qml
 create mode 100644 src/settingsview/components/AdvancedSIPSecuritySettings.qml
 delete mode 100644 src/settingsview/components/AdvancedSIPSettingsView.qml
 create mode 100644 src/settingsview/components/AdvancedSettings.qml
 delete mode 100644 src/settingsview/components/AdvancedSettingsView.qml
 create mode 100644 src/settingsview/components/AdvancedVoiceMailSettings.qml
 create mode 100644 src/settingsview/components/AudioSettings.qml
 create mode 100644 src/settingsview/components/BannedContacts.qml
 create mode 100644 src/settingsview/components/CurrentAccountSettings.qml
 delete mode 100644 src/settingsview/components/CurrentAccountSettingsScrollPage.qml
 delete mode 100644 src/settingsview/components/CurrentSIPAccountSettingScrollPage.qml
 create mode 100644 src/settingsview/components/JamiUserIdentity.qml
 create mode 100644 src/settingsview/components/LinkedDevices.qml
 rename src/settingsview/components/{AudioCodecDelegate.qml => MediaCodecDelegate.qml} (81%)
 create mode 100644 src/settingsview/components/MediaSettings.qml
 create mode 100644 src/settingsview/components/RecordingSettings.qml
 create mode 100644 src/settingsview/components/SIPUserIdentity.qml
 create mode 100644 src/settingsview/components/SettingMaterialButton.qml
 create mode 100644 src/settingsview/components/SettingSpinBox.qml
 create mode 100644 src/settingsview/components/SettingsComboBox.qml
 create mode 100644 src/settingsview/components/SettingsHeader.qml
 create mode 100644 src/settingsview/components/SettingsMaterialLineEdit.qml
 create mode 100644 src/settingsview/components/SystemSettings.qml
 create mode 100644 src/settingsview/components/UpdateSettings.qml
 create mode 100644 src/settingsview/components/UserIdentity.qml
 delete mode 100644 src/settingsview/components/VideoCodecDelegate.qml
 create mode 100644 src/settingsview/components/VideoSettings.qml
 delete mode 100644 src/videocodeclistmodel.cpp
 delete mode 100644 src/videocodeclistmodel.h

diff --git a/jami-qt.pro b/jami-qt.pro
index 14bbf37d8..afc1348fc 100644
--- a/jami-qt.pro
+++ b/jami-qt.pro
@@ -143,8 +143,7 @@ HEADERS += \
         src/pluginitemlistmodel.h \
         src/mediahandleritemlistmodel.h \
         src/preferenceitemlistmodel.h \
-        src/audiocodeclistmodel.h \
-        src/videocodeclistmodel.h \
+        src/mediacodeclistmodel.h \
         src/accountstomigratelistmodel.h \
         src/audioinputdevicemodel.h \
         src/videoinputdevicemodel.h \
@@ -184,8 +183,7 @@ SOURCES += \
         src/pluginitemlistmodel.cpp \
         src/mediahandleritemlistmodel.cpp \
         src/preferenceitemlistmodel.cpp \
-        src/audiocodeclistmodel.cpp \
-        src/videocodeclistmodel.cpp \
+        src/mediacodeclistmodel.cpp \
         src/accountstomigratelistmodel.cpp \
         src/audioinputdevicemodel.cpp \
         src/videoinputdevicemodel.cpp \
diff --git a/qml.qrc b/qml.qrc
index ffd949492..a7e07048d 100644
--- a/qml.qrc
+++ b/qml.qrc
@@ -3,18 +3,43 @@
         <file>src/settingsview/SettingsView.qml</file>
         <file>src/settingsview/components/IconButton.qml</file>
         <file>src/settingsview/components/LeftPanelView.qml</file>
+        <file>src/settingsview/components/SettingsHeader.qml</file>
+        <file>src/settingsview/components/SystemSettings.qml</file>
+        <file>src/settingsview/components/RecordingSettings.qml</file>
+        <file>src/settingsview/components/UpdateSettings.qml</file>
         <file>src/settingsview/components/AvSettingPage.qml</file>
+        <file>src/settingsview/components/AudioSettings.qml</file>
+        <file>src/settingsview/components/VideoSettings.qml</file>
         <file>src/settingsview/components/GeneralSettingsPage.qml</file>
         <file>src/settingsview/components/KeyBoardShortcutTable.qml</file>
         <file>src/settingsview/components/KeyBoardShortcutKey.qml</file>
         <file>src/settingsview/components/PluginSettingsPage.qml</file>
         <file>src/settingsview/components/PluginListSettingsView.qml</file>
         <file>src/settingsview/components/PluginListPreferencesView.qml</file>
-        <file>src/settingsview/components/CurrentAccountSettingsScrollPage.qml</file>
-        <file>src/settingsview/components/CurrentSIPAccountSettingScrollPage.qml</file>
+        <file>src/settingsview/components/CurrentAccountSettings.qml</file>
+        <file>src/settingsview/components/UserIdentity.qml</file>
+        <file>src/settingsview/components/JamiUserIdentity.qml</file>
+        <file>src/settingsview/components/SIPUserIdentity.qml</file>
+        <file>src/settingsview/components/AccountProfile.qml</file>
+        <file>src/settingsview/components/LinkedDevices.qml</file>
+        <file>src/settingsview/components/BannedContacts.qml</file>
+        <file>src/settingsview/components/AdvancedSettings.qml</file>
+        <file>src/settingsview/components/AdvancedJamiSecuritySettings.qml</file>
+        <file>src/settingsview/components/AdvancedSIPSecuritySettings.qml</file>
+        <file>src/settingsview/components/AdvancedMediaSettings.qml</file>
+        <file>src/settingsview/components/MediaSettings.qml</file>
+        <file>src/settingsview/components/AdvancedSDPSettings.qml</file>
+        <file>src/settingsview/components/AdvancedNameServerSettings.qml</file>
+        <file>src/settingsview/components/AdvancedVoiceMailSettings.qml</file>
+        <file>src/settingsview/components/AdvancedOpenDHTSettings.qml</file>
+        <file>src/settingsview/components/AdvancedPublicAddressSettings.qml</file>
+        <file>src/settingsview/components/AdvancedConnectivitySettings.qml</file>
+        <file>src/settingsview/components/AdvancedCallSettings.qml</file>
+        <file>src/settingsview/components/SettingMaterialButton.qml</file>
         <file>src/settingsview/components/ToggleSwitch.qml</file>
-        <file>src/settingsview/components/AdvancedSettingsView.qml</file>
-        <file>src/settingsview/components/AdvancedSIPSettingsView.qml</file>
+        <file>src/settingsview/components/SettingSpinBox.qml</file>
+        <file>src/settingsview/components/SettingsComboBox.qml</file>
+        <file>src/settingsview/components/SettingsMaterialLineEdit.qml</file>
         <file>src/settingsview/components/LevelMeter.qml</file>
         <file>src/commoncomponents/SettingParaCombobox.qml</file>
         <file>src/settingsview/components/DeviceItemDelegate.qml</file>
@@ -22,8 +47,7 @@
         <file>src/mainview/components/MediaHandlerItemDelegate.qml</file>
         <file>src/commoncomponents/PreferenceItemDelegate.qml</file>
         <file>src/settingsview/components/BannedItemDelegate.qml</file>
-        <file>src/settingsview/components/VideoCodecDelegate.qml</file>
-        <file>src/settingsview/components/AudioCodecDelegate.qml</file>
+        <file>src/settingsview/components/MediaCodecDelegate.qml</file>
         <file>src/settingsview/components/NameRegistrationDialog.qml</file>
         <file>src/settingsview/components/LinkDeviceDialog.qml</file>
         <file>src/settingsview/components/RevokeDevicePasswordDialog.qml</file>
diff --git a/src/audiocodeclistmodel.cpp b/src/audiocodeclistmodel.cpp
deleted file mode 100644
index 1943bb136..000000000
--- a/src/audiocodeclistmodel.cpp
+++ /dev/null
@@ -1,108 +0,0 @@
-/*
- * Copyright (C) 2019-2020 by Savoir-faire Linux
- * Author: Yang Wang   <yang.wang@savoirfairelinux.com>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include "audiocodeclistmodel.h"
-
-AudioCodecListModel::AudioCodecListModel(QObject* parent)
-    : QAbstractListModel(parent)
-{}
-
-AudioCodecListModel::~AudioCodecListModel() {}
-
-int
-AudioCodecListModel::rowCount(const QModelIndex& parent) const
-{
-    if (!parent.isValid()) {
-        return LRCInstance::getCurrentAccountInfo().codecModel->getAudioCodecs().size();
-    }
-    return 0;
-}
-
-int
-AudioCodecListModel::columnCount(const QModelIndex& parent) const
-{
-    Q_UNUSED(parent);
-    /*
-     * Only need one column.
-     */
-    return 1;
-}
-
-QVariant
-AudioCodecListModel::data(const QModelIndex& index, int role) const
-{
-    auto audioCodecList = LRCInstance::getCurrentAccountInfo().codecModel->getAudioCodecs();
-    if (!index.isValid() || audioCodecList.size() <= index.row()) {
-        return QVariant();
-    }
-
-    switch (role) {
-    case Role::AudioCodecName:
-        return QVariant(audioCodecList.at(index.row()).name);
-    case Role::IsEnabled:
-        return QVariant(audioCodecList.at(index.row()).enabled);
-    case Role::AudioCodecID:
-        return QVariant(audioCodecList.at(index.row()).id);
-    case Role::Samplerate:
-        return QVariant(audioCodecList.at(index.row()).samplerate);
-    }
-    return QVariant();
-}
-
-QHash<int, QByteArray>
-AudioCodecListModel::roleNames() const
-{
-    QHash<int, QByteArray> roles;
-    roles[AudioCodecName] = "AudioCodecName";
-    roles[IsEnabled] = "IsEnabled";
-    roles[AudioCodecID] = "AudioCodecID";
-    roles[Samplerate] = "Samplerate";
-    return roles;
-}
-
-QModelIndex
-AudioCodecListModel::index(int row, int column, const QModelIndex& parent) const
-{
-    Q_UNUSED(parent);
-    if (column != 0) {
-        return QModelIndex();
-    }
-
-    if (row >= 0 && row < rowCount()) {
-        return createIndex(row, column);
-    }
-    return QModelIndex();
-}
-
-QModelIndex
-AudioCodecListModel::parent(const QModelIndex& child) const
-{
-    Q_UNUSED(child);
-    return QModelIndex();
-}
-
-Qt::ItemFlags
-AudioCodecListModel::flags(const QModelIndex& index) const
-{
-    auto flags = QAbstractItemModel::flags(index) | Qt::ItemNeverHasChildren | Qt::ItemIsSelectable
-                 | Qt::ItemIsUserCheckable | Qt::ItemIsEnabled;
-    if (!index.isValid()) {
-        return QAbstractItemModel::flags(index);
-    }
-    return flags;
-}
diff --git a/src/commoncomponents/PhotoboothView.qml b/src/commoncomponents/PhotoboothView.qml
index c5783e7bd..cac949588 100644
--- a/src/commoncomponents/PhotoboothView.qml
+++ b/src/commoncomponents/PhotoboothView.qml
@@ -14,7 +14,6 @@ ColumnLayout {
     property string imgBase64: ""
     property string fileName: ""
 
-    readonly property int preferredWidth: boothWidth + buttonsRowLayout.height
     property int boothWidth: 224
 
     signal imageAcquired
@@ -79,7 +78,8 @@ ColumnLayout {
 
         visible: !takePhotoState
 
-        Layout.preferredWidth: boothWidth
+        Layout.fillWidth: true
+        Layout.maximumWidth: boothWidth
         Layout.preferredHeight: boothWidth
         Layout.alignment: Qt.AlignHCenter
 
@@ -150,7 +150,7 @@ ColumnLayout {
             visible: false
             color: "#fff"
 
-            OpacityAnimator on opacity{
+            OpacityAnimator on opacity {
                 id: flashAnimation
 
                 from: 1
@@ -165,7 +165,7 @@ ColumnLayout {
 
         Layout.fillWidth: true
         Layout.alignment: Qt.AlignHCenter
-        Layout.preferredHeight: 30
+        Layout.preferredHeight: JamiTheme.preferredFieldHeight
         Layout.topMargin: JamiTheme.preferredMarginSize / 2
 
         HoverableButton {
@@ -175,8 +175,8 @@ ColumnLayout {
             property string addPhotoIconUrl: "qrc:/images/icons/round-add_a_photo-24px.svg"
             property string refreshIconUrl: "qrc:/images/icons/baseline-refresh-24px.svg"
 
-            Layout.preferredWidth: 30
-            Layout.preferredHeight: 30
+            Layout.preferredWidth: JamiTheme.preferredFieldHeight
+            Layout.preferredHeight: JamiTheme.preferredFieldHeight
             Layout.alignment: Qt.AlignHCenter
 
             text: ""
@@ -223,8 +223,8 @@ ColumnLayout {
         HoverableButton {
             id: importButton
 
-            Layout.preferredWidth: 30
-            Layout.preferredHeight: 30
+            Layout.preferredWidth: JamiTheme.preferredFieldHeight
+            Layout.preferredHeight: JamiTheme.preferredFieldHeight
             Layout.alignment: Qt.AlignHCenter
 
             text: ""
diff --git a/src/constant/JamiTheme.qml b/src/constant/JamiTheme.qml
index f2ca80a0d..07b27e1ac 100644
--- a/src/constant/JamiTheme.qml
+++ b/src/constant/JamiTheme.qml
@@ -90,7 +90,7 @@ Item {
     property int menuFontSize: 12
 
     property int maximumWidthSettingsView: 800
-    property int preferredFieldWidth: 236
+    property int preferredFieldWidth: 256
     property int preferredFieldHeight: 32
     property int preferredMarginSize: 16
 
diff --git a/src/mediacodeclistmodel.cpp b/src/mediacodeclistmodel.cpp
new file mode 100644
index 000000000..1763477b9
--- /dev/null
+++ b/src/mediacodeclistmodel.cpp
@@ -0,0 +1,146 @@
+/*
+ * Copyright (C) 2020 by Savoir-faire Linux
+ * Author: Aline Gondim Santos <aline.gonsimsantos@savoirfairelinux.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "mediacodeclistmodel.h"
+
+MediaCodecListModel::MediaCodecListModel(QObject* parent)
+    : QAbstractListModel(parent)
+{}
+
+MediaCodecListModel::~MediaCodecListModel() {}
+
+int
+MediaCodecListModel::rowCount(const QModelIndex& parent) const
+{
+    if (!parent.isValid()) {
+        if (mediaType_ == MediaCodecListModel::MediaType::AUDIO)
+            return LRCInstance::getCurrentAccountInfo().codecModel->getAudioCodecs().size();
+        if (mediaType_ == MediaCodecListModel::MediaType::VIDEO) {
+            QList<lrc::api::Codec> realCodecList;
+            auto videoCodecListOld = LRCInstance::getCurrentAccountInfo()
+                                         .codecModel->getVideoCodecs();
+
+            for (auto codec : videoCodecListOld) {
+                if (codec.name.length()) {
+                    realCodecList.append(codec);
+                }
+            }
+
+            return realCodecList.size();
+        }
+    }
+    return 0;
+}
+
+int
+MediaCodecListModel::columnCount(const QModelIndex& parent) const
+{
+    Q_UNUSED(parent);
+    /*
+     * Only need one column.
+     */
+    return 1;
+}
+
+QVariant
+MediaCodecListModel::data(const QModelIndex& index, int role) const
+{
+    QList<lrc::api::Codec> mediaCodecList;
+    if (mediaType_ == MediaCodecListModel::MediaType::AUDIO)
+        mediaCodecList = LRCInstance::getCurrentAccountInfo().codecModel->getAudioCodecs();
+    else if (mediaType_ == MediaCodecListModel::MediaType::VIDEO) {
+        QList<lrc::api::Codec> videoCodecList = LRCInstance::getCurrentAccountInfo()
+                                                    .codecModel->getVideoCodecs();
+
+        for (auto codec : videoCodecList) {
+            if (codec.name.length()) {
+                mediaCodecList.append(codec);
+            }
+        }
+    }
+    if (!index.isValid() || mediaCodecList.size() <= index.row()) {
+        return QVariant();
+    }
+
+    switch (role) {
+    case Role::MediaCodecName:
+        return QVariant(mediaCodecList.at(index.row()).name);
+    case Role::IsEnabled:
+        return QVariant(mediaCodecList.at(index.row()).enabled);
+    case Role::MediaCodecID:
+        return QVariant(mediaCodecList.at(index.row()).id);
+    case Role::Samplerate:
+        return QVariant(mediaCodecList.at(index.row()).samplerate);
+    }
+    return QVariant();
+}
+
+QHash<int, QByteArray>
+MediaCodecListModel::roleNames() const
+{
+    QHash<int, QByteArray> roles;
+    roles[MediaCodecName] = "MediaCodecName";
+    roles[IsEnabled] = "IsEnabled";
+    roles[MediaCodecID] = "MediaCodecID";
+    roles[Samplerate] = "Samplerate";
+    return roles;
+}
+
+QModelIndex
+MediaCodecListModel::index(int row, int column, const QModelIndex& parent) const
+{
+    Q_UNUSED(parent);
+    if (column != 0) {
+        return QModelIndex();
+    }
+
+    if (row >= 0 && row < rowCount()) {
+        return createIndex(row, column);
+    }
+    return QModelIndex();
+}
+
+QModelIndex
+MediaCodecListModel::parent(const QModelIndex& child) const
+{
+    Q_UNUSED(child);
+    return QModelIndex();
+}
+
+Qt::ItemFlags
+MediaCodecListModel::flags(const QModelIndex& index) const
+{
+    auto flags = QAbstractItemModel::flags(index) | Qt::ItemNeverHasChildren | Qt::ItemIsSelectable
+                 | Qt::ItemIsUserCheckable | Qt::ItemIsEnabled;
+    if (!index.isValid()) {
+        return QAbstractItemModel::flags(index);
+    }
+    return flags;
+}
+
+int
+MediaCodecListModel::mediaType()
+{
+    return mediaType_;
+}
+
+void
+MediaCodecListModel::setMediaType(int mediaType)
+{
+    mediaType_ = mediaType;
+}
diff --git a/src/audiocodeclistmodel.h b/src/mediacodeclistmodel.h
similarity index 73%
rename from src/audiocodeclistmodel.h
rename to src/mediacodeclistmodel.h
index f0a529267..6addfef0d 100644
--- a/src/audiocodeclistmodel.h
+++ b/src/mediacodeclistmodel.h
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2019-2020 by Savoir-faire Linux
- * Author: Yang Wang   <yang.wang@savoirfairelinux.com>
+ * Copyright (C) 2020 by Savoir-faire Linux
+ * Author: Aline Gondim Santos <aline.gondimsantos@savoirfairelinux.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -27,15 +27,17 @@
 
 #include "lrcinstance.h"
 
-class AudioCodecListModel : public QAbstractListModel
+class MediaCodecListModel : public QAbstractListModel
 {
     Q_OBJECT
+    Q_PROPERTY(int mediaType READ mediaType WRITE setMediaType)
 public:
-    enum Role { AudioCodecName = Qt::UserRole + 1, IsEnabled, AudioCodecID, Samplerate };
+    enum MediaType { VIDEO, AUDIO };
+    enum Role { MediaCodecName = Qt::UserRole + 1, IsEnabled, MediaCodecID, Samplerate };
     Q_ENUM(Role)
 
-    explicit AudioCodecListModel(QObject* parent = 0);
-    ~AudioCodecListModel();
+    explicit MediaCodecListModel(QObject* parent = 0);
+    ~MediaCodecListModel();
 
     /*
      * QAbstractListModel override.
@@ -50,4 +52,10 @@ public:
     QModelIndex index(int row, int column = 0, const QModelIndex& parent = QModelIndex()) const;
     QModelIndex parent(const QModelIndex& child) const;
     Qt::ItemFlags flags(const QModelIndex& index) const;
+
+    int mediaType();
+    void setMediaType(int mediaType);
+
+private:
+    int mediaType_;
 };
diff --git a/src/messagesadapter.cpp b/src/messagesadapter.cpp
index 5f97f084c..539d9c19a 100644
--- a/src/messagesadapter.cpp
+++ b/src/messagesadapter.cpp
@@ -662,4 +662,5 @@ MessagesAdapter::blockConversation(const QString& convUid)
     const auto currentConvUid = convUid.isEmpty() ? LRCInstance::getCurrentConvUid() : convUid;
     LRCInstance::getCurrentConversationModel()->removeConversation(currentConvUid, true);
     setInvitation(false);
+    emit contactBanned();
 }
diff --git a/src/messagesadapter.h b/src/messagesadapter.h
index 4e60710a5..9a73c4b6e 100644
--- a/src/messagesadapter.h
+++ b/src/messagesadapter.h
@@ -87,6 +87,7 @@ protected:
 
 signals:
     void needToUpdateSmartList();
+    void contactBanned();
 
 public slots:
     void slotSendMessageContentSaved(const QString& content);
diff --git a/src/qmlregister.cpp b/src/qmlregister.cpp
index 8b5196419..cfc437453 100644
--- a/src/qmlregister.cpp
+++ b/src/qmlregister.cpp
@@ -20,7 +20,7 @@
 
 #include "accountadapter.h"
 #include "accountstomigratelistmodel.h"
-#include "audiocodeclistmodel.h"
+#include "mediacodeclistmodel.h"
 #include "audioinputdevicemodel.h"
 #include "audiomanagerlistmodel.h"
 #include "audiooutputdevicemodel.h"
@@ -42,7 +42,6 @@
 #include "settingsadapter.h"
 #include "utilsadapter.h"
 #include "version.h"
-#include "videocodeclistmodel.h"
 #include "videoformatfpsmodel.h"
 #include "videoformatresolutionmodel.h"
 #include "videoinputdevicemodel.h"
@@ -103,8 +102,7 @@ registerTypes()
     QML_REGISTERTYPE("net.jami.Models", MediaHandlerItemListModel, 1, 0);
     QML_REGISTERTYPE("net.jami.Models", PreferenceItemListModel, 1, 0);
     QML_REGISTERTYPE("net.jami.Models", BannedListModel, 1, 0);
-    QML_REGISTERTYPE("net.jami.Models", VideoCodecListModel, 1, 0);
-    QML_REGISTERTYPE("net.jami.Models", AudioCodecListModel, 1, 0);
+    QML_REGISTERTYPE("net.jami.Models", MediaCodecListModel, 1, 0);
     QML_REGISTERTYPE("net.jami.Models", AccountsToMigrateListModel, 1, 0);
     QML_REGISTERTYPE("net.jami.Models", AudioInputDeviceModel, 1, 0);
     QML_REGISTERTYPE("net.jami.Models", AudioOutputDeviceModel, 1, 0);
diff --git a/src/settingsview/SettingsView.qml b/src/settingsview/SettingsView.qml
index f4b785928..9e840faaa 100644
--- a/src/settingsview/SettingsView.qml
+++ b/src/settingsview/SettingsView.qml
@@ -1,6 +1,7 @@
 /*
  * Copyright (C) 2019-2020 by Savoir-faire Linux
- * Author: Yang Wang   <yang.wang@savoirfairelinux.com>
+ * Author: Yang Wang <yang.wang@savoirfairelinux.com>
+ * Author: Aline Gondim Santos <aline.gondimsantos@savoirfairelinux.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -43,53 +44,45 @@ Rectangle {
         }
     }
 
-    function setSelected(sel, recovery = false){
+    function setSelected(sel, recovery = false) {
         profileType = SettingsAdapter.getCurrentAccount_Profile_Info_Type()
 
-        if(selectedMenu === sel && (!recovery)){return}
+        if(selectedMenu === sel && (!recovery)) { return }
         switch(sel) {
             case SettingsView.Account:
-                currentAccountSettingsScrollWidget.connectCurrentAccount()
+                pageIdCurrentAccountSettings.connectCurrentAccount()
 
-                avSettings.stopAudioMeter()
-                avSettings.stopPreviewing()
+                settingsViewRect.stopAudioMeter()
+                settingsViewRect.stopPreviewing()
 
                 selectedMenu = sel
 
-                if(!settingsViewRect.isSIP) {
-                    if(currentAccountSettingsScrollWidget.isPhotoBoothOpened())
-                    {
-                        currentAccountSettingsScrollWidget.setAvatar()
-                    }
-
-                    currentAccountSettingsScrollWidget.updateAccountInfoDisplayed()
-                } else {
-                    if(currentSIPAccountSettingsScrollWidget.isPhotoBoothOpened()) {
-                        currentSIPAccountSettingsScrollWidget.setAvatar()
-                    }
-                    currentSIPAccountSettingsScrollWidget.updateAccountInfoDisplayed()
+                if(pageIdCurrentAccountSettings.isPhotoBoothOpened())
+                {
+                    settingsViewRect.setAvatar()
                 }
+
+                pageIdCurrentAccountSettings.updateAccountInfoDisplayed()
                 break
             case SettingsView.General:
                 try{
-                    avSettings.stopAudioMeter()
-                    avSettings.stopPreviewing()
+                    settingsViewRect.stopAudioMeter()
+                    settingsViewRect.stopPreviewing()
                 } catch(erro) {}
 
                 selectedMenu = sel
-                generalSettings.populateGeneralSettings()
                 break
             case SettingsView.Media:
                 selectedMenu = sel
 
-                avSettings.stopPreviewing()
+                settingsViewRect.stopPreviewing()
                 avSettings.populateAVSettings()
-                avSettings.startAudioMeter()
+                settingsViewRect.startAudioMeter()
                 break
             case SettingsView.Plugin:
                 try{
-                    avSettings.stopAudioMeter()
-                    avSettings.stopPreviewing()
+                    settingsViewRect.stopAudioMeter()
+                    settingsViewRect.stopPreviewing()
                 } catch(erro) {}
 
                 selectedMenu = sel
@@ -102,39 +95,34 @@ Rectangle {
         id: accountListChangedConnection
         target: LRCInstance
 
-        function onAccountListChanged(){
+        function onAccountListChanged() {
             slotAccountListChanged()
         }
     }
 
     // slots
-    function leaveSettingsSlot(showMainView){
-        avSettings.stopAudioMeter()
-        avSettings.stopPreviewing()
-        if(!settingsViewRect.isSIP){
-            currentAccountSettingsScrollWidget.stopBooth()
-        } else {
-            currentSIPAccountSettingsScrollWidget.stopBooth()
-        }
+    function leaveSettingsSlot(showMainView) {
+        settingsViewRect.stopAudioMeter()
+        settingsViewRect.stopPreviewing()
+        settingsViewRect.stopBooth()
         if (showMainView)
             settingsViewWindowNeedToShowMainViewWindow()
         else
             settingsViewWindowNeedToShowNewWizardWindow()
     }
 
-    function slotAccountListChanged(){
+    function slotAccountListChanged() {
         var accountList = AccountAdapter.model.getAccountList()
         if(accountList.length === 0)
-                    return
-        currentAccountSettingsScrollWidget.disconnectAccountConnections()
+            return
+        pageIdCurrentAccountSettings.disconnectAccountConnections()
         var device = AVModel.getDefaultDevice()
-        if(device.length === 0){
+        if(device.length === 0) {
             AVModel.setCurrentVideoCaptureDevice(device)
         }
     }
-    property int profileType: SettingsAdapter.getCurrentAccount_Profile_Info_Type()
-
 
+    property int profileType: SettingsAdapter.getCurrentAccount_Profile_Info_Type()
     property int selectedMenu: SettingsView.Account
     // signal to redirect the page to main view
     signal settingsViewWindowNeedToShowMainViewWindow()
@@ -148,12 +136,18 @@ Rectangle {
         id: settingsViewRect
         anchors.fill: root
 
+        signal stopAudioMeter
+        signal startAudioMeter
+        signal stopPreviewing
+        signal stopBooth
+        signal setAvatar
+
         property bool isSIP: {
             switch (profileType) {
-            case Profile.Type.SIP:
-                return true;
-            default:
-                return false;
+                case Profile.Type.SIP:
+                    return true;
+                default:
+                    return false;
             }
         }
 
@@ -162,20 +156,15 @@ Rectangle {
 
             anchors.fill: parent
 
-            property int pageIdCurrentAccountSettingsScrollPage: 0
-            property int pageIdCurrentSIPAccountSettingScrollPage: 1
-            property int pageIdGeneralSettingsPage: 2
-            property int pageIdAvSettingPage: 3
-            property int pageIdPluginSettingsPage: 4
+            property int pageIdCurrentAccountSettingsPage: 0
+            property int pageIdGeneralSettingsPage: 1
+            property int pageIdAvSettingPage: 2
+            property int pageIdPluginSettingsPage: 3
 
             currentIndex: {
                 switch(selectedMenu){
                     case SettingsView.Account:
-                        if(settingsViewRect.isSIP){
-                            return pageIdCurrentSIPAccountSettingScrollPage
-                        } else {
-                            return pageIdCurrentAccountSettingsScrollPage
-                        }
+                        return pageIdCurrentAccountSettingsPage
                     case SettingsView.General:
                         return pageIdGeneralSettingsPage
                     case SettingsView.Media:
@@ -186,29 +175,14 @@ Rectangle {
             }
 
             // current account setting scroll page, index 0
-            CurrentAccountSettingsScrollPage {
-                id: currentAccountSettingsScrollWidget
+            CurrentAccountSettings {
+                id: pageIdCurrentAccountSettings
 
                 Layout.fillHeight: true
                 Layout.maximumWidth: JamiTheme.maximumWidthSettingsView
                 anchors.centerIn: parent
 
-                onNavigateToMainView: {
-                    leaveSettingsSlot(true)
-                }
-
-                onNavigateToNewWizardView: {
-                    leaveSettingsSlot(false)
-                }
-            }
-
-            // current SIP account setting scroll page, index 1
-            CurrentSIPAccountSettingScrollPage {
-                id: currentSIPAccountSettingsScrollWidget
-
-                Layout.fillHeight: true
-                Layout.maximumWidth: JamiTheme.maximumWidthSettingsView
-                anchors.centerIn: parent
+                isSIP: settingsViewRect.isSIP
 
                 onNavigateToMainView: {
                     leaveSettingsSlot(true)
@@ -219,7 +193,7 @@ Rectangle {
                 }
             }
 
-            // general setting page, index 2
+            // general setting page, index 1
             GeneralSettingsPage {
                 id: generalSettings
 
@@ -228,7 +202,7 @@ Rectangle {
                 anchors.centerIn: parent
             }
 
-            // av setting page, index 3
+            // av setting page, index 2
             AvSettingPage {
                 id: avSettings
 
@@ -237,7 +211,7 @@ Rectangle {
                 anchors.centerIn: parent
             }
 
-            // plugin setting page, index 4
+            // plugin setting page, index 3
             PluginSettingsPage {
                 id: pluginSettings
                 Layout.fillHeight: true
@@ -250,8 +224,7 @@ Rectangle {
 
     // Back button signal redirection
     Component.onCompleted: {
-        currentAccountSettingsScrollWidget.backArrowClicked.connect(settingsBackArrowClicked)
-        currentSIPAccountSettingsScrollWidget.backArrowClicked.connect(settingsBackArrowClicked)
+        pageIdCurrentAccountSettings.backArrowClicked.connect(settingsBackArrowClicked)
         generalSettings.backArrowClicked.connect(settingsBackArrowClicked)
         avSettings.backArrowClicked.connect(settingsBackArrowClicked)
         pluginSettings.backArrowClicked.connect(settingsBackArrowClicked)
diff --git a/src/settingsview/components/AccountProfile.qml b/src/settingsview/components/AccountProfile.qml
new file mode 100644
index 000000000..1935aff7a
--- /dev/null
+++ b/src/settingsview/components/AccountProfile.qml
@@ -0,0 +1,108 @@
+/*
+ * Copyright (C) 2020 by Savoir-faire Linux
+ * Author: Aline Gondim Santos <aline.gondimsantos@savoirfairelinux.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+import QtQuick 2.15
+import QtQuick.Layouts 1.15
+import QtQuick.Window 2.14
+import QtQuick.Controls 2.15
+import QtQuick.Controls.Universal 2.12
+import QtGraphicalEffects 1.14
+import QtQuick.Controls.Styles 1.4
+import net.jami.Models 1.0
+import net.jami.Adapters 1.0
+import Qt.labs.platform 1.1
+import "../../commoncomponents"
+
+ColumnLayout {
+    id: root
+
+    Connections {
+        target: settingsViewRect
+
+        function onStopBooth() {
+            stopBooth()
+        }
+
+        function onSetAvatar() {
+            setAvatar()
+        }
+    }
+
+    function updateAccountInfo() {
+        displayNameLineEdit.text = SettingsAdapter.getCurrentAccount_Profile_Info_Alias()
+    }
+
+    function isPhotoBoothOpened() {
+        return currentAccountAvatar.takePhotoState
+    }
+
+    function setAvatar() {
+        currentAccountAvatar.setAvatarPixmap(SettingsAdapter.getAvatarImage_Base64(currentAccountAvatar.boothWidth), SettingsAdapter.getIsDefaultAvatar())
+    }
+
+    function stopBooth() {
+        currentAccountAvatar.stopBooth()
+    }
+
+    Text {
+        Layout.fillWidth: true
+        Layout.preferredHeight: JamiTheme.preferredFieldHeight
+
+        text: qsTr("Profile")
+        elide: Text.ElideRight
+
+        font.pointSize: JamiTheme.headerFontSize
+        font.kerning: true
+
+        horizontalAlignment: Text.AlignLeft
+        verticalAlignment: Text.AlignVCenter
+    }
+
+    PhotoboothView {
+        id: currentAccountAvatar
+
+        Layout.fillWidth: true
+        Layout.alignment: Qt.AlignCenter
+
+        boothWidth: Math.min(224, root.width - 100) + 50
+
+        onImageAcquired: SettingsAdapter.setCurrAccAvatar(imgBase64)
+
+        onImageCleared: {
+            SettingsAdapter.clearCurrentAvatar()
+            setAvatar()
+        }
+    }
+
+    MaterialLineEdit {
+        id: displayNameLineEdit
+
+        Layout.alignment: Qt.AlignCenter
+        Layout.preferredHeight: JamiTheme.preferredFieldHeight
+        Layout.preferredWidth: JamiTheme.preferredFieldWidth
+
+        font.pointSize: JamiTheme.textFontSize
+        font.kerning: true
+
+        horizontalAlignment: Text.AlignHCenter
+        verticalAlignment: Text.AlignVCenter
+        padding: 8
+
+        onEditingFinished: AccountAdapter.setCurrAccDisplayName(text)
+    }
+}
\ No newline at end of file
diff --git a/src/settingsview/components/AdvancedCallSettings.qml b/src/settingsview/components/AdvancedCallSettings.qml
new file mode 100644
index 000000000..0deccedf4
--- /dev/null
+++ b/src/settingsview/components/AdvancedCallSettings.qml
@@ -0,0 +1,146 @@
+/*
+ * Copyright (C) 2020 by Savoir-faire Linux
+ * Author: Aline Gondim Santos <aline.gondimsantos@savoirfairelinux.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+import QtQuick 2.15
+import QtQuick.Layouts 1.15
+import QtQuick.Window 2.14
+import QtQuick.Controls 2.15
+import QtQuick.Controls.Universal 2.12
+import QtGraphicalEffects 1.14
+import QtQuick.Controls.Styles 1.4
+import net.jami.Models 1.0
+import net.jami.Adapters 1.0
+import Qt.labs.platform 1.1
+import "../../commoncomponents"
+import "../../constant"
+
+ColumnLayout {
+    id: root
+
+    property bool isSIP
+    property int itemWidth
+
+    function updateCallSettingsInfos() {
+        checkBoxUntrusted.checked = SettingsAdapter.getAccountConfig_DHT_PublicInCalls()
+        checkBoxRdv.checked = SettingsAdapter.getAccountConfig_RendezVous()
+        checkBoxAutoAnswer.checked = SettingsAdapter.getAccountConfig_AutoAnswer()
+        checkBoxCustomRingtone.checked = SettingsAdapter.getAccountConfig_Ringtone_RingtoneEnabled()
+
+        btnRingtone.setEnabled(SettingsAdapter.getAccountConfig_Ringtone_RingtoneEnabled())
+        btnRingtone.setText(UtilsAdapter.toFileInfoName(SettingsAdapter.getAccountConfig_Ringtone_RingtonePath()))
+    }
+
+    function changeRingtonePath(url) {
+        if(url.length !== 0) {
+           SettingsAdapter.set_RingtonePath(url)
+            btnRingtone.setText(UtilsAdapter.toFileInfoName(url))
+        } else if (SettingsAdapter.getAccountConfig_Ringtone_RingtonePath().length === 0){
+            btnRingtone.setText(qsTr("Add a custom ringtone"))
+        }
+    }
+
+    JamiFileDialog {
+        id: ringtonePath_Dialog
+
+        property string oldPath : SettingsAdapter.getAccountConfig_Ringtone_RingtonePath()
+        property string openPath : oldPath === "" ? (UtilsAdapter.getCurrentPath() + "/ringtones/") : (UtilsAdapter.toFileAbsolutepath(oldPath))
+
+        mode: JamiFileDialog.OpenFile
+        title: qsTr("Select a new ringtone")
+        folder: openPath
+
+        nameFilters: [qsTr("Audio Files") + " (*.wav *.ogg *.opus *.mp3 *.aiff *.wma)", qsTr(
+                "All files") + " (*)"]
+
+        onAccepted: {
+            var url = UtilsAdapter.getAbsPath(file.toString())
+            changeRingtonePath(url)
+        }
+    }
+
+    ElidedTextLabel {
+        Layout.fillWidth: true
+
+        eText: qsTr("Call Settings")
+        fontSize: JamiTheme.headerFontSize
+        maxWidth: width
+    }
+
+    ColumnLayout {
+        Layout.fillWidth: true
+        Layout.leftMargin: JamiTheme.preferredMarginSize
+
+        ToggleSwitch {
+            id: checkBoxUntrusted
+            visible: !root.isSIP
+
+            labelText: qsTr("Allow incoming calls from unknown contacts")
+            fontPointSize: JamiTheme.settingsFontSize
+
+            onSwitchToggled: {
+                SettingsAdapter.setCallsUntrusted(checked)
+            }
+        }
+
+        ToggleSwitch {
+            id: checkBoxAutoAnswer
+
+            labelText: qsTr("Auto Answer Calls")
+            fontPointSize: JamiTheme.settingsFontSize
+
+            onSwitchToggled: {
+                SettingsAdapter.setAutoAnswerCalls(checked)
+            }
+        }
+
+        ToggleSwitch {
+            id: checkBoxCustomRingtone
+
+            labelText: qsTr("Enable Custom Ringtone")
+            fontPointSize: JamiTheme.settingsFontSize
+
+            onSwitchToggled: {
+                SettingsAdapter.setEnableRingtone(checked)
+                btnRingtone.setEnabled(checked)
+            }
+        }
+
+        SettingMaterialButton {
+            id: btnRingtone
+            Layout.fillWidth: true
+            Layout.preferredHeight: JamiTheme.preferredFieldHeight
+
+            titleField: qsTr("Select Custom Ringtone")
+            source: "qrc:/images/icons/round-folder-24px.svg"
+            itemWidth: root.itemWidth
+            onClick: ringtonePath_Dialog.open()
+        }
+
+        ToggleSwitch {
+            id: checkBoxRdv
+            visible: !isSIP
+
+            labelText: qsTr("(Experimental) Rendez-vous: turn your account into a conference room")
+            fontPointSize: JamiTheme.settingsFontSize
+
+            onSwitchToggled: {
+                SettingsAdapter.setIsRendezVous(checked)
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/settingsview/components/AdvancedConnectivitySettings.qml b/src/settingsview/components/AdvancedConnectivitySettings.qml
new file mode 100644
index 000000000..e4ea705bc
--- /dev/null
+++ b/src/settingsview/components/AdvancedConnectivitySettings.qml
@@ -0,0 +1,203 @@
+/*
+ * Copyright (C) 2020 by Savoir-faire Linux
+ * Author: Aline Gondim Santos <aline.gondimsantos@savoirfairelinux.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+import QtQuick 2.15
+import QtQuick.Layouts 1.15
+import QtQuick.Window 2.14
+import QtQuick.Controls 2.15
+import QtQuick.Controls.Universal 2.12
+import QtGraphicalEffects 1.14
+import QtQuick.Controls.Styles 1.4
+import net.jami.Models 1.0
+import net.jami.Adapters 1.0
+import Qt.labs.platform 1.1
+import "../../commoncomponents"
+import "../../constant"
+
+ColumnLayout {
+    id: root
+
+    property int itemWidth
+    property bool isSIP
+
+    function updateConnectivityAccountInfos() {
+        checkAutoConnectOnLocalNetwork.checked = SettingsAdapter.getAccountConfig_PeerDiscovery()
+        registrationExpireTimeoutSpinBox.setValue(SettingsAdapter.getAccountConfig_Registration_Expire())
+        networkInterfaceSpinBox.setValue(SettingsAdapter.getAccountConfig_Localport())
+        checkBoxUPnP.checked = SettingsAdapter.getAccountConfig_UpnpEnabled()
+        checkBoxTurnEnable.checked = SettingsAdapter.getAccountConfig_TURN_Enabled()
+        lineEditTurnAddress.setText(SettingsAdapter.getAccountConfig_TURN_Server())
+        lineEditTurnUsername.setText(SettingsAdapter.getAccountConfig_TURN_Username())
+        lineEditTurnPassword.setText(SettingsAdapter.getAccountConfig_TURN_Password())
+        checkBoxSTUNEnable.checked = SettingsAdapter.getAccountConfig_STUN_Enabled()
+        lineEditSTUNAddress.setText(SettingsAdapter.getAccountConfig_STUN_Server())
+        lineEditTurnRealmSIP.setText(SettingsAdapter.getAccountConfig_TURN_Realm())
+        lineEditTurnRealmSIP.setEnabled(SettingsAdapter.getAccountConfig_TURN_Enabled())
+        lineEditSTUNAddress.setEnabled(SettingsAdapter.getAccountConfig_STUN_Enabled())
+
+    }
+
+    ElidedTextLabel {
+        Layout.fillWidth: true
+        Layout.preferredHeight: JamiTheme.preferredFieldHeight
+
+        eText: qsTr("Connectivity")
+        fontSize: JamiTheme.headerFontSize
+        maxWidth: width
+    }
+
+    ColumnLayout {
+        Layout.fillWidth: true
+        Layout.leftMargin: JamiTheme.preferredMarginSize
+
+        ToggleSwitch {
+            id: checkAutoConnectOnLocalNetwork
+            visible: !root.isSIP
+
+            Layout.fillWidth: true
+
+            labelText: qsTr("Auto Connect On Local Network")
+            fontPointSize: JamiTheme.settingsFontSize
+
+            onSwitchToggled: {
+                SettingsAdapter.setAutoConnectOnLocalNetwork(checked)
+            }
+        }
+
+        SettingSpinBox {
+            id: registrationExpireTimeoutSpinBox
+            visible: isSIP
+
+            title: qsTr("Registration Expire Timeout (seconds)")
+            itemWidth: root.itemWidth
+            bottomValue: 0
+            topValue: 3000
+            step: 1
+
+            onNewValue: SettingsAdapter.registrationTimeoutSpinBoxValueChanged(valueField)
+        }
+
+        SettingSpinBox {
+            id: networkInterfaceSpinBox
+            visible: isSIP
+
+            title: qsTr("Newtwork interface")
+            itemWidth: root.itemWidth
+            bottomValue: 0
+            topValue: 65536
+            step: 1
+
+            onNewValue: SettingsAdapter.networkInterfaceSpinBoxValueChanged(valueField)
+        }
+
+        ToggleSwitch {
+            id: checkBoxUPnP
+
+            Layout.fillWidth: true
+
+            labelText: qsTr("Use UPnP")
+            fontPointSize: JamiTheme.settingsFontSize
+
+            onSwitchToggled: SettingsAdapter.setUseUPnP(checked)
+        }
+
+        ToggleSwitch {
+            id: checkBoxTurnEnable
+
+            Layout.fillWidth: true
+
+            labelText: qsTr("Use TURN")
+            fontPointSize: JamiTheme.settingsFontSize
+
+            onSwitchToggled: {
+                SettingsAdapter.setUseTURN(checked)
+                if (isSIP) {
+                    lineEditTurnAddress.setEnabled(checked)
+                    lineEditTurnUsername.setEnabled(checked)
+                    lineEditTurnPassword.setEnabled(checked)
+                    lineEditTurnRealmSIP.setEnabled(checked)
+                }
+            }
+        }
+
+        SettingsMaterialLineEdit {
+            id: lineEditTurnAddress
+
+            Layout.fillWidth: true
+            Layout.preferredHeight: JamiTheme.preferredFieldHeight
+            itemWidth: root.itemWidth
+            titleField: qsTr("TURN Address")
+            onEditFinished: SettingsAdapter.setTURNAddress(textField)
+        }
+
+        SettingsMaterialLineEdit {
+            id: lineEditTurnUsername
+
+            Layout.fillWidth: true
+            Layout.preferredHeight: JamiTheme.preferredFieldHeight
+            itemWidth: root.itemWidth
+            titleField: qsTr("TURN Username")
+            onEditFinished: SettingsAdapter.setTURNUsername(textField)
+        }
+
+        SettingsMaterialLineEdit {
+            id: lineEditTurnPassword
+
+            Layout.fillWidth: true
+            Layout.preferredHeight: JamiTheme.preferredFieldHeight
+            itemWidth: root.itemWidth
+            titleField: qsTr("TURN Password")
+            onEditFinished: SettingsAdapter.setTURNPassword(textField)
+        }
+
+        SettingsMaterialLineEdit {
+            id: lineEditTurnRealmSIP
+            visible: isSIP
+
+            Layout.fillWidth: true
+            Layout.preferredHeight: JamiTheme.preferredFieldHeight
+            itemWidth: root.itemWidth
+            titleField: qsTr("TURN Realm")
+            onEditFinished: SettingsAdapter.setTURNRealm(textField)
+        }
+
+        ToggleSwitch {
+            id: checkBoxSTUNEnable
+
+            Layout.fillWidth: true
+
+            labelText: qsTr("Use STUN")
+            fontPointSize: JamiTheme.settingsFontSize
+
+            onSwitchToggled: {
+                SettingsAdapter.setUseSTUN(checked)
+                lineEditSTUNAddress.enabled = checked
+            }
+        }
+
+        SettingsMaterialLineEdit {
+            id: lineEditSTUNAddress
+
+            Layout.fillWidth: true
+            Layout.preferredHeight: JamiTheme.preferredFieldHeight
+            itemWidth: root.itemWidth
+            titleField: qsTr("STUN Address")
+            onEditFinished: SettingsAdapter.setSTUNAddress(textField)
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/settingsview/components/AdvancedJamiSecuritySettings.qml b/src/settingsview/components/AdvancedJamiSecuritySettings.qml
new file mode 100644
index 000000000..1a524ca29
--- /dev/null
+++ b/src/settingsview/components/AdvancedJamiSecuritySettings.qml
@@ -0,0 +1,178 @@
+/*
+ * Copyright (C) 2020 by Savoir-faire Linux
+ * Author: Aline Gondim Santos <aline.gondimsantos@savoirfairelinux.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+import QtQuick 2.15
+import QtQuick.Layouts 1.15
+import QtQuick.Window 2.14
+import QtQuick.Controls 2.15
+import QtQuick.Controls.Universal 2.12
+import QtGraphicalEffects 1.14
+import QtQuick.Controls.Styles 1.4
+import net.jami.Models 1.0
+import net.jami.Adapters 1.0
+import Qt.labs.platform 1.1
+import "../../commoncomponents"
+import "../../constant"
+
+ColumnLayout {
+    id: root
+
+    property int itemWidth
+
+    function updateSecurityAccountInfos() {
+        btnCACert.setText(UtilsAdapter.toFileInfoName(SettingsAdapter.getAccountConfig_TLS_CertificateListFile()))
+        btnCACert.setEnabled(SettingsAdapter.getAccountConfig_TLS_Enable())
+        btnUserCert.setText(UtilsAdapter.toFileInfoName(SettingsAdapter.getAccountConfig_TLS_CertificateFile()))
+        btnUserCert.setEnabled(SettingsAdapter.getAccountConfig_TLS_Enable())
+        btnPrivateKey.setText(UtilsAdapter.toFileInfoName(SettingsAdapter.getAccountConfig_TLS_PrivateKeyFile()))
+        btnPrivateKey.setEnabled(SettingsAdapter.getAccountConfig_TLS_Enable())
+    }
+
+    function changeFileCACert(url){
+        if(url.length !== 0) {
+           SettingsAdapter.set_FileCACert(url)
+            btnCACert.setText(UtilsAdapter.toFileInfoName(url))
+        }
+    }
+
+    function changeFileUserCert(url){
+        if(url.length !== 0) {
+           SettingsAdapter.set_FileUserCert(url)
+            btnUserCert.setText(UtilsAdapter.toFileInfoName(url))
+        }
+    }
+
+    function changeFilePrivateKey(url){
+        if(url.length !== 0) {
+           SettingsAdapter.set_FilePrivateKey(url)
+            btnPrivateKey.setText(UtilsAdapter.toFileInfoName(url))
+        }
+    }
+
+    JamiFileDialog {
+        id: caCert_Dialog
+
+        property string oldPath : SettingsAdapter.getAccountConfig_TLS_CertificateListFile()
+        property string openPath : oldPath === "" ? (UtilsAdapter.getCurrentPath() + "/ringtones/") : (UtilsAdapter.toFileAbsolutepath(oldPath))
+
+        mode: JamiFileDialog.OpenFile
+        title: qsTr("Select a CA certificate")
+        folder: openPath
+        nameFilters: [qsTr("Certificate File") + " (*.crt)", qsTr(
+                "All files") + " (*)"]
+
+        onAccepted: {
+            var url = UtilsAdapter.getAbsPath(file.toString())
+            changeFileCACert(url)
+        }
+    }
+
+    JamiFileDialog {
+        id: userCert_Dialog
+
+        property string oldPath : SettingsAdapter.getAccountConfig_TLS_CertificateFile()
+        property string openPath : oldPath === "" ? (UtilsAdapter.getCurrentPath() + "/ringtones/") : (UtilsAdapter.toFileAbsolutepath(oldPath))
+
+        mode: JamiFileDialog.OpenFile
+        title: qsTr("Select a user certificate")
+        folder: openPath
+        nameFilters: [qsTr("Certificate File") + " (*.crt)", qsTr(
+                "All files") + " (*)"]
+
+        onAccepted: {
+            var url = UtilsAdapter.getAbsPath(file.toString())
+            changeFileUserCert(url)
+        }
+    }
+
+    JamiFileDialog {
+        id: privateKey_Dialog
+
+        property string oldPath : {
+            return SettingsAdapter.getAccountConfig_TLS_PrivateKeyFile()
+        }
+        property string openPath : oldPath === "" ? (UtilsAdapter.getCurrentPath() + "/ringtones/") : (UtilsAdapter.toFileAbsolutepath(oldPath))
+
+        mode: JamiFileDialog.OpenFile
+        title: qsTr("Select a private key")
+        folder: openPath
+        nameFilters: [qsTr("Key File") + " (*.key)", qsTr(
+                "All files") + " (*)"]
+
+        onAccepted: {
+            var url = UtilsAdapter.getAbsPath(file.toString())
+            changeFilePrivateKey(url)
+        }
+    }
+
+    ElidedTextLabel {
+        Layout.fillWidth: true
+        Layout.preferredHeight: JamiTheme.preferredFieldHeight
+
+        eText: qsTr("Security")
+        fontSize: JamiTheme.headerFontSize
+        maxWidth: width
+    }
+
+    ColumnLayout {
+        Layout.fillWidth: true
+        Layout.leftMargin: JamiTheme.preferredMarginSize
+
+        SettingMaterialButton {
+            id: btnCACert
+            Layout.fillWidth: true
+            Layout.preferredHeight: JamiTheme.preferredFieldHeight
+
+            titleField: qsTr("CA Certificate")
+            source: "qrc:/images/icons/round-folder-24px.svg"
+            itemWidth: root.itemWidth
+            onClick: caCert_Dialog.open()
+        }
+
+        SettingMaterialButton {
+            id: btnUserCert
+            Layout.fillWidth: true
+            Layout.preferredHeight: JamiTheme.preferredFieldHeight
+
+            titleField: qsTr("User Certificate")
+            source: "qrc:/images/icons/round-folder-24px.svg"
+            itemWidth: root.itemWidth
+            onClick: userCert_Dialog.open()
+        }
+
+        SettingMaterialButton {
+            id: btnPrivateKey
+            Layout.fillWidth: true
+            Layout.preferredHeight: JamiTheme.preferredFieldHeight
+
+            titleField: qsTr("Private Key")
+            source: "qrc:/images/icons/round-folder-24px.svg"
+            itemWidth: root.itemWidth
+            onClick: privateKey_Dialog.open()
+        }
+
+        SettingsMaterialLineEdit {
+            id: lineEditCertPassword
+
+            Layout.fillWidth: true
+            Layout.preferredHeight: JamiTheme.preferredFieldHeight
+            itemWidth: root.itemWidth
+            titleField: qsTr("Private Key Password")
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/settingsview/components/AdvancedMediaSettings.qml b/src/settingsview/components/AdvancedMediaSettings.qml
new file mode 100644
index 000000000..27581ac96
--- /dev/null
+++ b/src/settingsview/components/AdvancedMediaSettings.qml
@@ -0,0 +1,89 @@
+/*
+ * Copyright (C) 2020 by Savoir-faire Linux
+ * Author: Aline Gondim Santos <aline.gondimsantos@savoirfairelinux.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+import QtQuick 2.15
+import QtQuick.Layouts 1.15
+import QtQuick.Window 2.14
+import QtQuick.Controls 2.15
+import QtQuick.Controls.Universal 2.12
+import QtGraphicalEffects 1.14
+import QtQuick.Controls.Styles 1.4
+import net.jami.Models 1.0
+import net.jami.Adapters 1.0
+import Qt.labs.platform 1.1
+import "../../commoncomponents"
+import "../../constant"
+
+ColumnLayout {
+    id: root
+
+    function updateMediaConnectivityAccountInfos() {
+        videoCheckBox.checked = SettingsAdapter.getAccountConfig_Video_Enabled()
+        videoSettings.updateCodecs();
+        audioSettings.updateCodecs();
+    }
+
+    Label {
+        Layout.fillWidth: true
+        Layout.preferredHeight: JamiTheme.preferredFieldHeight
+
+        text: qsTr("Media")
+        font.pointSize: JamiTheme.headerFontSize
+        font.kerning: true
+
+        horizontalAlignment: Text.AlignLeft
+        verticalAlignment: Text.AlignVCenter
+    }
+
+    ColumnLayout {
+        Layout.fillWidth: true
+        Layout.leftMargin: JamiTheme.preferredMarginSize
+
+        ToggleSwitch {
+            id: videoCheckBox
+
+            labelText: qsTr("Enable Video")
+            fontPointSize: JamiTheme.settingsFontSize
+
+            onSwitchToggled: SettingsAdapter.setVideoState(checked)
+        }
+
+        RowLayout {
+            Layout.fillWidth: true
+            Layout.fillHeight: true
+
+            MediaSettings {
+                id: videoSettings
+
+                Layout.fillWidth: true
+                Layout.fillHeight: true
+
+                mediaType: MediaSettings.VIDEO
+            }
+
+            MediaSettings {
+                id: audioSettings
+
+                Layout.fillWidth: true
+                Layout.fillHeight: true
+
+                mediaType: MediaSettings.AUDIO
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/settingsview/components/AdvancedNameServerSettings.qml b/src/settingsview/components/AdvancedNameServerSettings.qml
new file mode 100644
index 000000000..e1205b334
--- /dev/null
+++ b/src/settingsview/components/AdvancedNameServerSettings.qml
@@ -0,0 +1,65 @@
+/*
+ * Copyright (C) 2020 by Savoir-faire Linux
+ * Author: Aline Gondim Santos <aline.gondimsantos@savoirfairelinux.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+import QtQuick 2.15
+import QtQuick.Layouts 1.15
+import QtQuick.Window 2.14
+import QtQuick.Controls 2.15
+import QtQuick.Controls.Universal 2.12
+import QtGraphicalEffects 1.14
+import QtQuick.Controls.Styles 1.4
+import net.jami.Models 1.0
+import net.jami.Adapters 1.0
+import Qt.labs.platform 1.1
+import "../../commoncomponents"
+
+ColumnLayout {
+    id: root
+
+    property int itemWidth
+
+    function updateNameServerInfos() {
+        lineEditNameServer.setText(SettingsAdapter.getAccountConfig_RingNS_Uri())
+    }
+
+    Text {
+        Layout.fillWidth: true
+        Layout.rightMargin: JamiTheme.preferredMarginSize / 2
+
+        font.pointSize: JamiTheme.headerFontSize
+        font.kerning: true
+
+        horizontalAlignment: Text.AlignLeft
+        verticalAlignment: Text.AlignVCenter
+
+        text: qsTr("Name Server")
+        elide: Text.ElideRight
+    }
+
+    SettingsMaterialLineEdit {
+        id: lineEditNameServer
+
+        Layout.fillWidth: true
+        Layout.leftMargin: JamiTheme.preferredMarginSize
+        Layout.preferredHeight: JamiTheme.preferredFieldHeight
+        itemWidth: root.itemWidth
+        titleField: qsTr("Address")
+
+        onEditFinished: SettingsAdapter.setNameServer(textField)
+    }
+}
\ No newline at end of file
diff --git a/src/settingsview/components/AdvancedOpenDHTSettings.qml b/src/settingsview/components/AdvancedOpenDHTSettings.qml
new file mode 100644
index 000000000..8c76f683d
--- /dev/null
+++ b/src/settingsview/components/AdvancedOpenDHTSettings.qml
@@ -0,0 +1,95 @@
+/*
+ * Copyright (C) 2020 by Savoir-faire Linux
+ * Author: Aline Gondim Santos <aline.gondimsantos@savoirfairelinux.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+import QtQuick 2.15
+import QtQuick.Layouts 1.15
+import QtQuick.Window 2.14
+import QtQuick.Controls 2.15
+import QtQuick.Controls.Universal 2.12
+import QtGraphicalEffects 1.14
+import QtQuick.Controls.Styles 1.4
+import net.jami.Models 1.0
+import net.jami.Adapters 1.0
+import Qt.labs.platform 1.1
+import "../../commoncomponents"
+import "../../constant"
+
+ColumnLayout {
+    id: root
+
+    property int itemWidth
+
+    function updateOpenDHTSettingsInfos() {
+        checkBoxEnableProxy.checked = SettingsAdapter.getAccountConfig_ProxyEnabled()
+        lineEditProxy.setText(SettingsAdapter.getAccountConfig_ProxyServer())
+        lineEditBootstrap.setText(SettingsAdapter.getAccountConfig_Hostname())
+    }
+
+    Text {
+        Layout.fillWidth: true
+        Layout.rightMargin: JamiTheme.preferredMarginSize / 2
+
+        font.pointSize: JamiTheme.headerFontSize
+        font.kerning: true
+
+        horizontalAlignment: Text.AlignLeft
+        verticalAlignment: Text.AlignVCenter
+
+        text: qsTr("OpenDHT Configuration")
+        elide: Text.ElideRight
+    }
+
+    ColumnLayout {
+        Layout.fillWidth: true
+        Layout.leftMargin: JamiTheme.preferredMarginSize
+
+        ToggleSwitch {
+            id: checkBoxEnableProxy
+
+            labelText: qsTr("Enable proxy")
+            fontPointSize: JamiTheme.settingsFontSize
+
+            onSwitchToggled: {
+                SettingsAdapter.setEnableProxy(checked)
+                lineEditProxy.setEnabled(checked)
+            }
+        }
+
+        SettingsMaterialLineEdit {
+            id: lineEditProxy
+
+            Layout.fillWidth: true
+            Layout.preferredHeight: JamiTheme.preferredFieldHeight
+            itemWidth: root.itemWidth
+            titleField: qsTr("Proxy Address")
+
+            onEditFinished: SettingsAdapter.setProxyAddress(textField)
+        }
+
+        SettingsMaterialLineEdit {
+            id: lineEditBootstrap
+
+            Layout.fillWidth: true
+            Layout.preferredHeight: JamiTheme.preferredFieldHeight
+            itemWidth: root.itemWidth
+            titleField: qsTr("Bootstrap")
+
+            onEditFinished: SettingsAdapter.setBootstrapAddress(textField)
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/settingsview/components/AdvancedPublicAddressSettings.qml b/src/settingsview/components/AdvancedPublicAddressSettings.qml
new file mode 100644
index 000000000..8e0b44ea4
--- /dev/null
+++ b/src/settingsview/components/AdvancedPublicAddressSettings.qml
@@ -0,0 +1,96 @@
+/*
+ * Copyright (C) 2020 by Savoir-faire Linux
+ * Author: Aline Gondim Santos <aline.gondimsantos@savoirfairelinux.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+import QtQuick 2.15
+import QtQuick.Layouts 1.15
+import QtQuick.Window 2.14
+import QtQuick.Controls 2.15
+import QtQuick.Controls.Universal 2.12
+import QtGraphicalEffects 1.14
+import QtQuick.Controls.Styles 1.4
+import net.jami.Models 1.0
+import net.jami.Adapters 1.0
+import Qt.labs.platform 1.1
+import "../../commoncomponents"
+import "../../constant"
+
+ColumnLayout {
+    id: root
+
+    property int itemWidth
+
+    function updatePublicAddressAccountInfos() {
+        checkBoxCustomAddressPort.checked = SettingsAdapter.getAccountConfig_PublishedSameAsLocal()
+        lineEditSIPCustomAddress.setText(SettingsAdapter.getAccountConfig_PublishedAddress())
+        customPortSIPSpinBox.setValue(SettingsAdapter.getAccountConfig_PublishedPort())
+    }
+
+    Text {
+        Layout.fillWidth: true
+
+        font.pointSize: JamiTheme.headerFontSize
+        font.kerning: true
+
+        horizontalAlignment: Text.AlignLeft
+        verticalAlignment: Text.AlignVCenter
+
+        text: qsTr("Public Address")
+        elide: Text.ElideRight
+    }
+
+    ColumnLayout {
+        Layout.fillWidth: true
+        Layout.leftMargin: JamiTheme.preferredMarginSize
+
+        ToggleSwitch {
+            id: checkBoxCustomAddressPort
+
+            labelText: qsTr("Use Custom Address/Port")
+            fontPointSize: JamiTheme.settingsFontSize
+
+            onSwitchToggled: {
+                SettingsAdapter.setUseCustomAddressAndPort(checked)
+                lineEditSIPCustomAddress.setEnabled(checked)
+                customPortSIPSpinBox.setEnabled(checked)
+            }
+        }
+
+        SettingsMaterialLineEdit {
+            id: lineEditSIPCustomAddress
+
+            Layout.fillWidth: true
+            Layout.preferredHeight: JamiTheme.preferredFieldHeight
+            itemWidth: root.itemWidth
+            titleField: qsTr("Address")
+
+            onEditFinished: SettingsAdapter.lineEditSIPCustomAddressLineEditTextChanged(textField)
+        }
+
+        SettingSpinBox {
+            id: customPortSIPSpinBox
+
+            title: qsTr("Port")
+            itemWidth: root.itemWidth
+            bottomValue: 0
+            topValue: 65535
+            step: 1
+
+            onNewValue: SettingsAdapter.customPortSIPSpinBoxValueChanged(valueField)
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/settingsview/components/AdvancedSDPSettings.qml b/src/settingsview/components/AdvancedSDPSettings.qml
new file mode 100644
index 000000000..a2a642f69
--- /dev/null
+++ b/src/settingsview/components/AdvancedSDPSettings.qml
@@ -0,0 +1,149 @@
+/*
+ * Copyright (C) 2019-2020 by Savoir-faire Linux
+ * Author: Yang Wang   <yang.wang@savoirfairelinux.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+import QtQuick 2.15
+import QtQuick.Window 2.14
+import QtQuick.Controls 2.14
+import QtQuick.Controls.Universal 2.12
+import QtQuick.Layouts 1.3
+import QtGraphicalEffects 1.14
+import QtQuick.Controls.Styles 1.4
+import QtQuick.Dialogs 1.3
+import Qt.labs.platform 1.1
+import net.jami.Models 1.0
+import net.jami.Adapters 1.0
+
+import "../../commoncomponents"
+import "../../constant"
+
+ColumnLayout {
+    id: root
+
+    property int itemWidth
+
+    function updateSDPAccountInfos(){
+        audioRTPMinPortSpinBox.setValue(SettingsAdapter.getAccountConfig_Audio_AudioPortMin())
+        audioRTPMaxPortSpinBox.setValue(SettingsAdapter.getAccountConfig_Audio_AudioPortMax())
+        videoRTPMinPortSpinBox.setValue(SettingsAdapter.getAccountConfig_Video_VideoPortMin())
+        videoRTPMaxPortSpinBox.setValue(SettingsAdapter.getAccountConfig_Video_VideoPortMax())
+    }
+
+    function audioRTPMinPortSpinBoxEditFinished(value) {
+        if (SettingsAdapter.getAccountConfig_Audio_AudioPortMax() < value) {
+            audioRTPMinPortSpinBox.setValue(SettingsAdapter.getAccountConfig_Audio_AudioPortMin())
+            return
+        }
+       SettingsAdapter.audioRTPMinPortSpinBoxEditFinished(value)
+    }
+
+    function audioRTPMaxPortSpinBoxEditFinished(value) {
+        if (value <SettingsAdapter.getAccountConfig_Audio_AudioPortMin()) {
+            audioRTPMaxPortSpinBox.setValue(SettingsAdapter.getAccountConfig_Audio_AudioPortMax())
+            return
+        }
+       SettingsAdapter.audioRTPMaxPortSpinBoxEditFinished(value)
+    }
+
+    function videoRTPMinPortSpinBoxEditFinished(value) {
+        if (SettingsAdapter.getAccountConfig_Video_VideoPortMax() < value) {
+            videoRTPMinPortSpinBox.setValue(SettingsAdapter.getAccountConfig_Video_VideoPortMin())
+            return
+        }
+       SettingsAdapter.videoRTPMinPortSpinBoxEditFinished(value)
+    }
+
+    function videoRTPMaxPortSpinBoxEditFinished(value) {
+        if (value <SettingsAdapter.getAccountConfig_Video_VideoPortMin()) {
+            videoRTPMinPortSpinBox.setValue(SettingsAdapter.getAccountConfig_Video_VideoPortMin())
+            return
+        }
+       SettingsAdapter.videoRTPMaxPortSpinBoxEditFinished(value)
+    }
+
+    ElidedTextLabel {
+        Layout.fillWidth: true
+        Layout.preferredHeight: JamiTheme.preferredFieldHeight
+
+        eText: qsTr("SDP Session Negotiation (ICE Fallback)")
+        fontSize: JamiTheme.headerFontSize
+        maxWidth: width
+    }
+
+    ElidedTextLabel {
+        Layout.fillWidth: true
+        Layout.preferredHeight: JamiTheme.preferredFieldHeight
+        Layout.leftMargin: JamiTheme.preferredMarginSize
+
+        eText: qsTr("Only used during negotiation in case ICE is not supported")
+        fontSize: JamiTheme.settingsFontSize
+        maxWidth: width
+    }
+
+    ColumnLayout {
+        Layout.fillWidth: true
+        Layout.leftMargin: JamiTheme.preferredMarginSize
+
+        SettingSpinBox {
+            id: audioRTPMinPortSpinBox
+
+            title: qsTr("Audio RTP Min Port")
+            itemWidth: root.itemWidth
+            bottomValue: 0
+            topValue: 65535
+            step: 1
+
+            onNewValue: audioRTPMinPortSpinBoxEditFinished(valueField)
+        }
+
+        SettingSpinBox {
+            id: audioRTPMaxPortSpinBox
+
+            title: qsTr("Audio RTP Max Port")
+            itemWidth: root.itemWidth
+            bottomValue: 0
+            topValue: 65535
+            step: 1
+
+            onNewValue: audioRTPMaxPortSpinBoxEditFinished(valueField)
+        }
+
+        SettingSpinBox {
+            id: videoRTPMinPortSpinBox
+
+            title: qsTr("Video RTP Min Port")
+            itemWidth: root.itemWidth
+            bottomValue: 0
+            topValue: 65535
+            step: 1
+
+            onNewValue: videoRTPMinPortSpinBoxEditFinished(valueField)
+        }
+
+        SettingSpinBox {
+            id: videoRTPMaxPortSpinBox
+
+            title: qsTr("Video RTP Max Port")
+            itemWidth: root.itemWidth
+            bottomValue: 0
+            topValue: 65535
+            step: 1
+
+            onNewValue: videoRTPMaxPortSpinBoxEditFinished(valueField)
+        }
+    }
+}
diff --git a/src/settingsview/components/AdvancedSIPSecuritySettings.qml b/src/settingsview/components/AdvancedSIPSecuritySettings.qml
new file mode 100644
index 000000000..c1dd5e759
--- /dev/null
+++ b/src/settingsview/components/AdvancedSIPSecuritySettings.qml
@@ -0,0 +1,329 @@
+/*
+ * Copyright (C) 2020 by Savoir-faire Linux
+ * Author: Aline Gondim Santos <aline.gondimsantos@savoirfairelinux.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+import QtQuick 2.15
+import QtQuick.Layouts 1.15
+import QtQuick.Window 2.14
+import QtQuick.Controls 2.15
+import QtQuick.Controls.Universal 2.12
+import QtGraphicalEffects 1.14
+import QtQuick.Controls.Styles 1.4
+import net.jami.Models 1.0
+import net.jami.Adapters 1.0
+import Qt.labs.platform 1.1
+import "../../commoncomponents"
+
+ColumnLayout {
+    id: root
+
+    property int itemWidth
+
+    function updateSecurityAccountInfos() {
+        enableSDESToggle.enabled = SettingsAdapter.getAccountConfig_SRTP_Enabled()
+        fallbackRTPToggle.enabled = SettingsAdapter.getAccountConfig_SRTP_Enabled()
+        btnSIPCACert.setEnabled(SettingsAdapter.getAccountConfig_TLS_Enable())
+        btnSIPUserCert.setEnabled(SettingsAdapter.getAccountConfig_TLS_Enable())
+        btnSIPPrivateKey.setEnabled(SettingsAdapter.getAccountConfig_TLS_Enable())
+        lineEditSIPCertPassword.setEnabled(SettingsAdapter.getAccountConfig_TLS_Enable())
+
+        btnSIPCACert.setText(UtilsAdapter.toFileInfoName(SettingsAdapter.getAccountConfig_TLS_CertificateListFile()))
+        btnSIPUserCert.setText(UtilsAdapter.toFileInfoName(SettingsAdapter.getAccountConfig_TLS_CertificateFile()))
+        btnSIPPrivateKey.setText(UtilsAdapter.toFileInfoName(SettingsAdapter.getAccountConfig_TLS_PrivateKeyFile()))
+        lineEditSIPCertPassword.setText(SettingsAdapter.getAccountConfig_TLS_Password())
+
+        encryptMediaStreamsToggle.checked = SettingsAdapter.getAccountConfig_SRTP_Enabled()
+        enableSDESToggle.checked = (SettingsAdapter.getAccountConfig_SRTP_KeyExchange()  === Account.KeyExchangeProtocol.SDES)
+        fallbackRTPToggle.checked = SettingsAdapter.getAccountConfig_SRTP_RtpFallback()
+        encryptNegotitationToggle.checked = SettingsAdapter.getAccountConfig_TLS_Enable()
+        verifyIncomingCertificatesServerToogle.checked = SettingsAdapter.getAccountConfig_TLS_VerifyServer()
+        verifyIncomingCertificatesClientToogle.checked = SettingsAdapter.getAccountConfig_TLS_VerifyClient()
+        requireCeritificateForTLSIncomingToggle.checked = SettingsAdapter.getAccountConfig_TLS_RequireClientCertificate()
+
+        var method = SettingsAdapter.getAccountConfig_TLS_Method_inInt()
+        tlsProtocolComboBox.setCurrentIndex(method)
+
+        outgoingTLSServerNameLineEdit.setText(SettingsAdapter.getAccountConfig_TLS_Servername())
+        negotiationTimeoutSpinBox.setValue(SettingsAdapter.getAccountConfig_TLS_NegotiationTimeoutSec())
+    }
+
+    function changeFileCACert(url){
+        if(url.length !== 0) {
+           SettingsAdapter.set_FileCACert(url)
+            btnSIPCACert.setText(UtilsAdapter.toFileInfoName(url))
+        }
+    }
+
+    function changeFileUserCert(url){
+        if(url.length !== 0) {
+           SettingsAdapter.set_FileUserCert(url)
+            btnSIPUserCert.setText(UtilsAdapter.toFileInfoName(url))
+        }
+    }
+
+    function changeFilePrivateKey(url){
+        if(url.length !== 0) {
+           SettingsAdapter.set_FilePrivateKey(url)
+            btnSIPPrivateKey.setText(UtilsAdapter.toFileInfoName(url))
+        }
+    }
+
+    JamiFileDialog {
+        id: caCert_Dialog_SIP
+
+        property string oldPath : SettingsAdapter.getAccountConfig_TLS_CertificateListFile()
+        property string openPath : oldPath === "" ? (UtilsAdapter.getCurrentPath() + "/ringtones/") : (UtilsAdapter.toFileAbsolutepath(oldPath))
+
+        mode: JamiFileDialog.OpenFile
+        title: qsTr("Select a CA certificate")
+        folder: openPath
+        nameFilters: [qsTr("Certificate File") + " (*.crt)", qsTr(
+                "All files") + " (*)"]
+
+        onAccepted: {
+            var url = UtilsAdapter.getAbsPath(file.toString())
+            changeFileCACert(url)
+        }
+    }
+
+    JamiFileDialog {
+        id: userCert_Dialog_SIP
+
+        property string oldPath : SettingsAdapter.getAccountConfig_TLS_CertificateFile()
+        property string openPath : oldPath === "" ? (UtilsAdapter.getCurrentPath() + "/ringtones/") : (UtilsAdapter.toFileAbsolutepath(oldPath))
+
+        mode: JamiFileDialog.OpenFile
+        title: qsTr("Select a user certificate")
+        folder: openPath
+        nameFilters: [qsTr("Certificate File") + " (*.crt)", qsTr(
+                "All files") + " (*)"]
+
+        onAccepted: {
+            var url = UtilsAdapter.getAbsPath(file.toString())
+            changeFileUserCert(url)
+        }
+    }
+
+    JamiFileDialog {
+        id: privateKey_Dialog_SIP
+
+        property string oldPath : SettingsAdapter.getAccountConfig_TLS_PrivateKeyFile()
+        property string openPath : oldPath === "" ? (UtilsAdapter.getCurrentPath() + "/ringtones/") : (UtilsAdapter.toFileAbsolutepath(oldPath))
+
+        mode: JamiFileDialog.OpenFile
+        title: qsTr("Select a private key")
+        folder: openPath
+        nameFilters: [qsTr("Key File") + " (*.key)", qsTr(
+                "All files") + " (*)"]
+
+        onAccepted: {
+            var url = UtilsAdapter.getAbsPath(file.toString())
+            changeFilePrivateKey(url)
+        }
+    }
+
+    ElidedTextLabel {
+        Layout.fillWidth: true
+        Layout.preferredHeight: JamiTheme.preferredFieldHeight
+
+        eText: qsTr("Security")
+        fontSize: JamiTheme.headerFontSize
+        maxWidth: width
+    }
+
+    ColumnLayout {
+        Layout.fillWidth: true
+        Layout.leftMargin: JamiTheme.preferredMarginSize
+
+        ToggleSwitch {
+            id: encryptMediaStreamsToggle
+
+            labelText: qsTr("Encrypt Media Streams (SRTP)")
+            fontPointSize: JamiTheme.settingsFontSize
+
+            onSwitchToggled: {
+                SettingsAdapter.setUseSRTP(checked)
+                enableSDESToggle.enabled = checked
+                fallbackRTPToggle.enabled = checked
+            }
+        }
+
+        ToggleSwitch {
+            id: enableSDESToggle
+
+            labelText: qsTr("Enable SDES(Key Exchange)")
+            fontPointSize: JamiTheme.settingsFontSize
+
+            onSwitchToggled: {
+                SettingsAdapter.setUseSDES(checked)
+            }
+        }
+
+        ToggleSwitch {
+            id: fallbackRTPToggle
+
+            labelText: qsTr("Can Fallback on RTP")
+            fontPointSize: JamiTheme.settingsFontSize
+
+            onSwitchToggled: {
+                SettingsAdapter.setUseRTPFallback(checked)
+            }
+        }
+
+        ToggleSwitch {
+            id: encryptNegotitationToggle
+
+            labelText: qsTr("Encrypt Negotiation (TLS)")
+            fontPointSize: JamiTheme.settingsFontSize
+
+            onSwitchToggled: {
+                SettingsAdapter.setUseTLS(checked)
+                btnSIPCACert.setEnabled(checked)
+                btnSIPUserCert.setEnabled(checked)
+                btnSIPPrivateKey.setEnabled(checked)
+                lineEditSIPCertPassword.setEnabled(checked)
+            }
+        }
+
+        SettingMaterialButton {
+            id: btnSIPCACert
+            Layout.fillWidth: true
+            Layout.preferredHeight: JamiTheme.preferredFieldHeight
+
+            titleField: qsTr("CA Certificate")
+            source: "qrc:/images/icons/round-folder-24px.svg"
+            itemWidth: root.itemWidth
+            onClick: caCert_Dialog_SIP.open()
+        }
+
+        SettingMaterialButton {
+            id: btnSIPUserCert
+            Layout.fillWidth: true
+            Layout.preferredHeight: JamiTheme.preferredFieldHeight
+
+            titleField: qsTr("User Certificate")
+            source: "qrc:/images/icons/round-folder-24px.svg"
+            itemWidth: root.itemWidth
+            onClick: userCert_Dialog_SIP.open()
+        }
+
+        SettingMaterialButton {
+            id: btnSIPPrivateKey
+            Layout.fillWidth: true
+            Layout.preferredHeight: JamiTheme.preferredFieldHeight
+
+            titleField: qsTr("Private Key")
+            source: "qrc:/images/icons/round-folder-24px.svg"
+            itemWidth: root.itemWidth
+            onClick: privateKey_Dialog_SIP.open()
+        }
+
+        // Private key password
+        SettingsMaterialLineEdit {
+            id: lineEditSIPCertPassword
+
+            Layout.fillWidth: true
+            Layout.preferredHeight: JamiTheme.preferredFieldHeight
+            itemWidth: root.itemWidth
+            titleField: qsTr("Private Key Password")
+
+            onEditFinished: SettingsAdapter.lineEditSIPCertPasswordLineEditTextChanged(textField)
+        }
+
+        ToggleSwitch {
+            id: verifyIncomingCertificatesServerToogle
+
+            labelText: qsTr("Verify Certificates (Server Side)")
+            fontPointSize: JamiTheme.settingsFontSize
+
+            onSwitchToggled: {
+                SettingsAdapter.setVerifyCertificatesServer(checked)
+            }
+        }
+
+        ToggleSwitch {
+            id: verifyIncomingCertificatesClientToogle
+
+            labelText: qsTr("Verify Certificates (Client Side)")
+            fontPointSize: JamiTheme.settingsFontSize
+
+            onSwitchToggled: {
+                SettingsAdapter.setVerifyCertificatesClient(checked)
+            }
+        }
+
+        ToggleSwitch {
+            id: requireCeritificateForTLSIncomingToggle
+
+            labelText: qsTr("TLS Connections Require Certificate")
+            fontPointSize: JamiTheme.settingsFontSize
+
+            onSwitchToggled: {
+                SettingsAdapter.setRequireCertificatesIncomingTLS(checked)
+            }
+        }
+
+        SettingsComboBox {
+            id: tlsProtocolComboBox
+
+            Layout.fillWidth: true
+            Layout.preferredHeight: JamiTheme.preferredFieldHeight
+            Layout.rightMargin: JamiTheme.preferredMarginSize
+
+            labelText: qsTr("TLS Protocol Method")
+            fontPointSize: JamiTheme.settingsFontSize
+            comboModel: ListModel {
+                ListElement{textDisplay: "Default"; firstArg: "Default"; secondArg: 0}
+                ListElement{textDisplay: "TLSv1"; firstArg: "TLSv1"; secondArg: 1}
+                ListElement{textDisplay: "TLSv1.1"; firstArg: "TLSv1.1"; secondArg: 2}
+                ListElement{textDisplay: "TLSv1.2"; firstArg: "TLSv1.2"; secondArg: 3}
+            }
+            widthOfComboBox: root.itemWidth
+            tipText: qsTr("Audio input device selector")
+            role: "textDisplay"
+
+            onIndexChanged: {
+                var indexOfOption = comboModel.get(modelIndex).secondArg
+                SettingsAdapter.tlsProtocolComboBoxIndexChanged(parseInt(indexOfOption))
+            }
+        }
+
+        SettingsMaterialLineEdit {
+            id: outgoingTLSServerNameLineEdit
+
+            Layout.fillWidth: true
+            Layout.preferredHeight: JamiTheme.preferredFieldHeight
+            itemWidth: root.itemWidth
+            titleField: qsTr("Outgoing TLS Server Name")
+
+            onEditFinished: SettingsAdapter.outgoingTLSServerNameLineEditTextChanged(textField)
+        }
+
+        SettingSpinBox {
+            id: negotiationTimeoutSpinBox
+            Layout.fillWidth: true
+
+            title: qsTr("Negotiation Timeout (seconds)")
+            itemWidth: root.itemWidth
+            bottomValue: 0
+            topValue: 3000
+            step: 1
+
+            onNewValue: SettingsAdapter.negotiationTimeoutSpinBoxValueChanged(valueField)
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/settingsview/components/AdvancedSIPSettingsView.qml b/src/settingsview/components/AdvancedSIPSettingsView.qml
deleted file mode 100644
index ae28a8639..000000000
--- a/src/settingsview/components/AdvancedSIPSettingsView.qml
+++ /dev/null
@@ -1,1510 +0,0 @@
-/*
- * Copyright (C) 2019-2020 by Savoir-faire Linux
- * Author: Yang Wang   <yang.wang@savoirfairelinux.com>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-import QtQuick 2.15
-import QtQuick.Window 2.14
-import QtQuick.Controls 2.14
-import QtQuick.Controls.Universal 2.12
-import QtQuick.Layouts 1.3
-import QtGraphicalEffects 1.14
-import QtQuick.Controls.Styles 1.4
-import QtQuick.Dialogs 1.3
-import Qt.labs.platform 1.1
-import net.jami.Models 1.0
-import net.jami.Adapters 1.0
-
-import "../../commoncomponents"
-
-ColumnLayout {
-    id: root
-
-    property int itemWidth
-
-    function updateAccountInfoDisplayedAdvanceSIP(){
-        // Call Settings
-        checkBoxAutoAnswerSIP.checked = SettingsAdapter.getAccountConfig_AutoAnswer()
-        checkBoxCustomRingtoneSIP.checked = SettingsAdapter.getAccountConfig_Ringtone_RingtoneEnabled()
-
-        // security
-        btnSIPCACert.enabled = SettingsAdapter.getAccountConfig_TLS_Enable()
-        btnSIPUserCert.enabled = SettingsAdapter.getAccountConfig_TLS_Enable()
-        btnSIPPrivateKey.enabled = SettingsAdapter.getAccountConfig_TLS_Enable()
-        lineEditSIPCertPassword.enabled = SettingsAdapter.getAccountConfig_TLS_Enable()
-        enableSDESToggle.enabled = SettingsAdapter.getAccountConfig_SRTP_Enabled()
-        fallbackRTPToggle.enabled = SettingsAdapter.getAccountConfig_SRTP_Enabled()
-
-        btnSIPCACert.text = UtilsAdapter.toFileInfoName(SettingsAdapter.getAccountConfig_TLS_CertificateListFile())
-        btnSIPUserCert.text = UtilsAdapter.toFileInfoName(SettingsAdapter.getAccountConfig_TLS_CertificateFile())
-        btnSIPPrivateKey.text = UtilsAdapter.toFileInfoName(SettingsAdapter.getAccountConfig_TLS_PrivateKeyFile())
-        lineEditSIPCertPassword.text = SettingsAdapter.getAccountConfig_TLS_Password()
-
-        encryptMediaStreamsToggle.checked = SettingsAdapter.getAccountConfig_SRTP_Enabled()
-        enableSDESToggle.checked = (SettingsAdapter.getAccountConfig_SRTP_KeyExchange()  === Account.KeyExchangeProtocol.SDES)
-        fallbackRTPToggle.checked = SettingsAdapter.getAccountConfig_SRTP_RtpFallback()
-        encryptNegotitationToggle.checked = SettingsAdapter.getAccountConfig_TLS_Enable()
-        verifyIncomingCertificatesServerToogle.checked = SettingsAdapter.getAccountConfig_TLS_VerifyServer()
-        verifyIncomingCertificatesClientToogle.checked = SettingsAdapter.getAccountConfig_TLS_VerifyClient()
-        requireCeritificateForTLSIncomingToggle.checked = SettingsAdapter.getAccountConfig_TLS_RequireClientCertificate()
-
-        var method = SettingsAdapter.getAccountConfig_TLS_Method_inInt()
-        tlsProtocolComboBox.currentIndex = method
-
-        outgoingTLSServerNameLineEdit.text = SettingsAdapter.getAccountConfig_TLS_Servername()
-        negotiationTimeoutSpinBox.value = SettingsAdapter.getAccountConfig_TLS_NegotiationTimeoutSec()
-
-        // Connectivity
-        checkBoxUPnPSIP.checked = SettingsAdapter.getAccountConfig_UpnpEnabled()
-        checkBoxTurnEnableSIP.checked = SettingsAdapter.getAccountConfig_TURN_Enabled()
-        lineEditTurnAddressSIP.text = SettingsAdapter.getAccountConfig_TURN_Server()
-        lineEditTurnUsernameSIP.text = SettingsAdapter.getAccountConfig_TURN_Username()
-        lineEditTurnPsswdSIP.text = SettingsAdapter.getAccountConfig_TURN_Password()
-        lineEditTurnRealmSIP.text = SettingsAdapter.getAccountConfig_TURN_Realm()
-        lineEditTurnAddressSIP.enabled = SettingsAdapter.getAccountConfig_TURN_Enabled()
-        lineEditTurnUsernameSIP.enabled = SettingsAdapter.getAccountConfig_TURN_Enabled()
-        lineEditTurnPsswdSIP.enabled = SettingsAdapter.getAccountConfig_TURN_Enabled()
-        lineEditTurnRealmSIP.enabled = SettingsAdapter.getAccountConfig_TURN_Enabled()
-
-        checkBoxSTUNEnableSIP.checked = SettingsAdapter.getAccountConfig_STUN_Enabled()
-        lineEditSTUNAddressSIP.text = SettingsAdapter.getAccountConfig_STUN_Server()
-        lineEditSTUNAddressSIP.enabled = SettingsAdapter.getAccountConfig_STUN_Enabled()
-
-        registrationExpireTimeoutSpinBox.value = SettingsAdapter.getAccountConfig_Registration_Expire()
-        networkInterfaceSpinBox.value = SettingsAdapter.getAccountConfig_Localport()
-
-        // published address
-        checkBoxCustomAddressPort.checked = SettingsAdapter.getAccountConfig_PublishedSameAsLocal()
-        lineEditSIPCustomAddress.text = SettingsAdapter.getAccountConfig_PublishedAddress()
-        customPortSIPSpinBox.value = SettingsAdapter.getAccountConfig_PublishedPort()
-
-        // codecs
-        videoCheckBoxSIP.checked = SettingsAdapter.getAccountConfig_Video_Enabled()
-        updateAudioCodecs()
-        updateVideoCodecs()
-        btnRingtoneSIP.enabled = SettingsAdapter.getAccountConfig_Ringtone_RingtoneEnabled()
-        btnRingtoneSIP.text = UtilsAdapter.toFileInfoName(SettingsAdapter.getAccountConfig_Ringtone_RingtonePath())
-        lineEditSTUNAddressSIP.enabled = SettingsAdapter.getAccountConfig_STUN_Enabled()
-
-        // SDP session negotiation ports
-        audioRTPMinPortSpinBox.value = SettingsAdapter.getAccountConfig_Audio_AudioPortMin()
-        audioRTPMaxPortSpinBox.value = SettingsAdapter.getAccountConfig_Audio_AudioPortMax()
-        videoRTPMinPortSpinBox.value = SettingsAdapter.getAccountConfig_Video_VideoPortMin()
-        videoRTPMaxPortSpinBox.value = SettingsAdapter.getAccountConfig_Video_VideoPortMax()
-
-        // voicemail
-        lineEditVoiceMailDialCode.text = SettingsAdapter.getAccountConfig_Mailbox()
-    }
-
-    function updateAudioCodecs(){
-        audioListWidgetSIP.model.layoutAboutToBeChanged()
-        audioListWidgetSIP.model.dataChanged(audioListWidgetSIP.model.index(0, 0),
-                                     audioListWidgetSIP.model.index(audioListWidgetSIP.model.rowCount() - 1, 0))
-        audioListWidgetSIP.model.layoutChanged()
-    }
-
-    function updateVideoCodecs(){
-        videoListWidgetSIP.model.layoutAboutToBeChanged()
-        videoListWidgetSIP.model.dataChanged(videoListWidgetSIP.model.index(0, 0),
-                                     videoListWidgetSIP.model.index(videoListWidgetSIP.model.rowCount() - 1, 0))
-        videoListWidgetSIP.model.layoutChanged()
-    }
-
-    function decreaseAudioCodecPriority(){
-        var index = audioListWidgetSIP.currentIndex
-        var codecId = audioListWidgetSIP.model.data(audioListWidgetSIP.model.index(index,0), AudioCodecListModel.AudioCodecID)
-
-       SettingsAdapter.decreaseAudioCodecPriority(codecId)
-        audioListWidgetSIP.currentIndex = index + 1
-        updateAudioCodecs()
-    }
-
-    function increaseAudioCodecPriority(){
-        var index = audioListWidgetSIP.currentIndex
-        var codecId = audioListWidgetSIP.model.data(audioListWidgetSIP.model.index(index,0), AudioCodecListModel.AudioCodecID)
-
-       SettingsAdapter.increaseAudioCodecPriority(codecId)
-        audioListWidgetSIP.currentIndex = index - 1
-        updateAudioCodecs()
-    }
-
-    function decreaseVideoCodecPriority(){
-        var index = videoListWidgetSIP.currentIndex
-        var codecId = videoListWidgetSIP.model.data(videoListWidgetSIP.model.index(index,0), VideoCodecListModel.VideoCodecID)
-
-       SettingsAdapter.decreaseVideoCodecPriority(codecId)
-        videoListWidgetSIP.currentIndex = index + 1
-        updateVideoCodecs()
-    }
-
-    function increaseVideoCodecPriority(){
-        var index = videoListWidgetSIP.currentIndex
-        var codecId = videoListWidgetSIP.model.data(videoListWidgetSIP.model.index(index,0), VideoCodecListModel.VideoCodecID)
-
-       SettingsAdapter.increaseVideoCodecPriority(codecId)
-        videoListWidgetSIP.currentIndex = index - 1
-        updateVideoCodecs()
-    }
-
-    // slots
-    function audioRTPMinPortSpinBoxEditFinished(value){
-        if (SettingsAdapter.getAccountConfig_Audio_AudioPortMax() < value) {
-            audioRTPMinPortSpinBox.value = SettingsAdapter.getAccountConfig_Audio_AudioPortMin()
-            return
-        }
-       SettingsAdapter.audioRTPMinPortSpinBoxEditFinished(value)
-    }
-
-    function audioRTPMaxPortSpinBoxEditFinished(value){
-        if (value <SettingsAdapter.getAccountConfig_Audio_AudioPortMin()) {
-            audioRTPMaxPortSpinBox.value = SettingsAdapter.getAccountConfig_Audio_AudioPortMax()
-            return
-        }
-       SettingsAdapter.audioRTPMaxPortSpinBoxEditFinished(value)
-    }
-
-    function videoRTPMinPortSpinBoxEditFinished(value){
-        if (SettingsAdapter.getAccountConfig_Video_VideoPortMax() < value) {
-            videoRTPMinPortSpinBox.value = SettingsAdapter.getAccountConfig_Video_VideoPortMin()
-            return
-        }
-       SettingsAdapter.videoRTPMinPortSpinBoxEditFinished(value)
-    }
-
-    function videoRTPMaxPortSpinBoxEditFinished(value){
-        if (value <SettingsAdapter.getAccountConfig_Video_VideoPortMin()) {
-            videoRTPMinPortSpinBox.value = SettingsAdapter.getAccountConfig_Video_VideoPortMin()
-            return
-        }
-       SettingsAdapter.videoRTPMaxPortSpinBoxEditFinished(value)
-    }
-
-
-    function changeRingtonePath(url){
-        if(url.length !== 0) {
-           SettingsAdapter.set_RingtonePath(url)
-            btnRingtoneSIP.text = UtilsAdapter.toFileInfoName(url)
-        } else if (SettingsAdapter.getAccountConfig_Ringtone_RingtonePath().length === 0){
-            btnRingtoneSIP.text = qsTr("Add a custom ringtone")
-        }
-    }
-
-    function changeFileCACert(url){
-        if(url.length !== 0) {
-           SettingsAdapter.set_FileCACert(url)
-            btnSIPCACert.text = UtilsAdapter.toFileInfoName(url)
-        }
-    }
-
-    function changeFileUserCert(url){
-        if(url.length !== 0) {
-           SettingsAdapter.set_FileUserCert(url)
-            btnSIPUserCert.text = UtilsAdapter.toFileInfoName(url)
-        }
-    }
-
-    function changeFilePrivateKey(url){
-        if(url.length !== 0) {
-           SettingsAdapter.set_FilePrivateKey(url)
-            btnSIPPrivateKey.text = UtilsAdapter.toFileInfoName(url)
-        }
-    }
-
-    JamiFileDialog {
-        id: ringtonePath_Dialog_SIP
-
-        property string oldPath : SettingsAdapter.getAccountConfig_Ringtone_RingtonePath()
-        property string openPath : oldPath === "" ? (UtilsAdapter.getCurrentPath() + "/ringtones/") : (UtilsAdapter.toFileAbsolutepath(oldPath))
-
-        mode: JamiFileDialog.OpenFile
-        title: qsTr("Select a new ringtone")
-        folder: openPath
-
-        nameFilters: [qsTr("Audio Files") + " (*.wav *.ogg *.opus *.mp3 *.aiff *.wma)", qsTr(
-                "All files") + " (*)"]
-
-        onAccepted: {
-            var url = UtilsAdapter.getAbsPath(file.toString())
-            changeRingtonePath(url)
-        }
-    }
-
-    JamiFileDialog {
-        id: caCert_Dialog_SIP
-
-        property string oldPath : SettingsAdapter.getAccountConfig_TLS_CertificateListFile()
-        property string openPath : oldPath === "" ? (UtilsAdapter.getCurrentPath() + "/ringtones/") : (UtilsAdapter.toFileAbsolutepath(oldPath))
-
-        mode: JamiFileDialog.OpenFile
-        title: qsTr("Select a CA certificate")
-        folder: openPath
-        nameFilters: [qsTr("Certificate File") + " (*.crt)", qsTr(
-                "All files") + " (*)"]
-
-        onAccepted: {
-            var url = UtilsAdapter.getAbsPath(file.toString())
-            changeFileCACert(url)
-        }
-    }
-
-    JamiFileDialog {
-        id: userCert_Dialog_SIP
-
-        property string oldPath : SettingsAdapter.getAccountConfig_TLS_CertificateFile()
-        property string openPath : oldPath === "" ? (UtilsAdapter.getCurrentPath() + "/ringtones/") : (UtilsAdapter.toFileAbsolutepath(oldPath))
-
-        mode: JamiFileDialog.OpenFile
-        title: qsTr("Select a user certificate")
-        folder: openPath
-        nameFilters: [qsTr("Certificate File") + " (*.crt)", qsTr(
-                "All files") + " (*)"]
-
-        onAccepted: {
-            var url = UtilsAdapter.getAbsPath(file.toString())
-            changeFileUserCert(url)
-        }
-    }
-
-    JamiFileDialog {
-        id: privateKey_Dialog_SIP
-
-        property string oldPath : SettingsAdapter.getAccountConfig_TLS_PrivateKeyFile()
-        property string openPath : oldPath === "" ? (UtilsAdapter.getCurrentPath() + "/ringtones/") : (UtilsAdapter.toFileAbsolutepath(oldPath))
-
-        mode: JamiFileDialog.OpenFile
-        title: qsTr("Select a private key")
-        folder: openPath
-        nameFilters: [qsTr("Key File") + " (*.key)", qsTr(
-                "All files") + " (*)"]
-
-        onAccepted: {
-            var url = UtilsAdapter.getAbsPath(file.toString())
-            changeFilePrivateKey(url)
-        }
-    }
-
-    // call setting section
-    ColumnLayout {
-        Layout.fillWidth: true
-        Layout.fillHeight: true
-
-        ElidedTextLabel {
-            Layout.fillWidth: true
-
-            eText: qsTr("Call Settings")
-            fontSize: JamiTheme.headerFontSize
-            maxWidth: width
-        }
-
-        ColumnLayout {
-            Layout.fillWidth: true
-            Layout.leftMargin: JamiTheme.preferredMarginSize
-
-            ToggleSwitch {
-                id: checkBoxAutoAnswerSIP
-
-                labelText: qsTr("Auto Answer Calls")
-                fontPointSize: JamiTheme.settingsFontSize
-
-                onSwitchToggled: {
-                   SettingsAdapter.setAutoAnswerCalls(checked)
-                }
-            }
-
-            ToggleSwitch {
-                id: checkBoxCustomRingtoneSIP
-
-                labelText: qsTr("Enable Custom Ringtone")
-                fontPointSize: JamiTheme.settingsFontSize
-
-                onSwitchToggled: {
-                   SettingsAdapter.setEnableRingtone(checked)
-                    btnRingtoneSIP.enabled = checked
-                }
-            }
-
-            RowLayout {
-                Layout.fillWidth: true
-
-                Text {
-                    Layout.fillWidth: true
-                    Layout.rightMargin: JamiTheme.preferredMarginSize
-                    Layout.preferredHeight: JamiTheme.preferredFieldHeight
-                    text: qsTr("Select Custom Ringtone")
-                    elide: Text.ElideRight
-                    font.pointSize: JamiTheme.settingsFontSize
-                    font.kerning: true
-                    verticalAlignment: Text.AlignVCenter
-                }
-
-                MaterialButton {
-                    id: btnRingtoneSIP
-
-                    Layout.alignment: Qt.AlignCenter
-                    Layout.preferredWidth: itemWidth
-                    Layout.preferredHeight: JamiTheme.preferredFieldHeight
-
-                    source: "qrc:/images/icons/round-folder-24px.svg"
-                    color: JamiTheme.buttonTintedGrey
-                    hoveredColor: JamiTheme.buttonTintedGreyHovered
-                    pressedColor: JamiTheme.buttonTintedGreyPressed
-
-                    onClicked: {
-                        ringtonePath_Dialog_SIP.open()
-                    }
-                }
-            }
-        }
-    }
-
-    // voice mail section
-    ColumnLayout {
-        Layout.fillWidth: true
-
-        ElidedTextLabel {
-            Layout.fillWidth: true
-            Layout.preferredHeight: JamiTheme.preferredFieldHeight
-
-            eText: qsTr("Voicemail")
-            fontSize: JamiTheme.headerFontSize
-            maxWidth: width
-        }
-
-        RowLayout {
-            Layout.fillWidth: true
-            Layout.maximumHeight: JamiTheme.preferredFieldHeight
-            Layout.leftMargin: JamiTheme.preferredMarginSize
-
-            Text {
-                Layout.fillWidth: true
-                Layout.rightMargin: JamiTheme.preferredMarginSize
-                Layout.preferredHeight: JamiTheme.preferredFieldHeight
-                text: qsTr("Voicemail Dial Code")
-                elide: Text.ElideRight
-                font.pointSize: JamiTheme.settingsFontSize
-                font.kerning: true
-                verticalAlignment: Text.AlignVCenter
-            }
-
-            MaterialLineEdit {
-                id: lineEditVoiceMailDialCode
-
-                Layout.alignment: Qt.AlignCenter
-                Layout.preferredHeight: JamiTheme.preferredFieldHeight
-                Layout.preferredWidth: itemWidth
-
-                padding: 8
-
-                font.pointSize: JamiTheme.settingsFontSize
-                font.kerning: true
-
-                verticalAlignment: Text.AlignVCenter
-
-                onEditingFinished: {
-                   SettingsAdapter.lineEditVoiceMailDialCodeEditFinished(text)
-                }
-            }
-        }
-    }
-
-    // security section
-    ColumnLayout {
-        Layout.fillWidth: true
-
-        ElidedTextLabel {
-            Layout.fillWidth: true
-            Layout.preferredHeight: JamiTheme.preferredFieldHeight
-
-            eText: qsTr("Security")
-            fontSize: JamiTheme.headerFontSize
-            maxWidth: width
-        }
-
-        ColumnLayout {
-            Layout.fillWidth: true
-            Layout.leftMargin: JamiTheme.preferredMarginSize
-
-            ToggleSwitch {
-                id: encryptMediaStreamsToggle
-
-                labelText: qsTr("Encrypt Media Streams (SRTP)")
-                fontPointSize: JamiTheme.settingsFontSize
-
-                onSwitchToggled: {
-                   SettingsAdapter.setUseSRTP(checked)
-                    enableSDESToggle.enabled = checked
-                    fallbackRTPToggle.enabled = checked
-                }
-            }
-
-            ToggleSwitch {
-                id: enableSDESToggle
-
-                labelText: qsTr("Enable SDES(Key Exchange)")
-                fontPointSize: JamiTheme.settingsFontSize
-
-                onSwitchToggled: {
-                   SettingsAdapter.setUseSDES(checked)
-                }
-            }
-
-            ToggleSwitch {
-                id: fallbackRTPToggle
-
-                labelText: qsTr("Can Fallback on RTP")
-                fontPointSize: JamiTheme.settingsFontSize
-
-                onSwitchToggled: {
-                   SettingsAdapter.setUseRTPFallback(checked)
-                }
-            }
-
-            ToggleSwitch {
-                id: encryptNegotitationToggle
-
-                labelText: qsTr("Encrypt Negotiation (TLS)")
-                fontPointSize: JamiTheme.settingsFontSize
-
-                onSwitchToggled: {
-                   SettingsAdapter.setUseTLS(checked)
-                    btnSIPCACert.enabled = checked
-                    btnSIPUserCert.enabled = checked
-                    btnSIPPrivateKey.enabled = checked
-                    lineEditSIPCertPassword.enabled = checked
-                }
-            }
-
-            GridLayout {
-                Layout.fillWidth: true
-
-                rows: 4
-                columns: 2
-
-                ElidedTextLabel {
-                    Layout.fillWidth: true
-                    Layout.preferredHeight: JamiTheme.preferredFieldHeight
-
-                    eText: qsTr("CA Certificate")
-                    fontSize: JamiTheme.settingsFontSize
-                    maxWidth: width
-                }
-
-                MaterialButton {
-                    id: btnSIPCACert
-
-                    Layout.alignment: Qt.AlignCenter
-                    Layout.preferredWidth: itemWidth
-                    Layout.preferredHeight: JamiTheme.preferredFieldHeight
-
-                    source: "qrc:/images/icons/round-folder-24px.svg"
-                    color: JamiTheme.buttonTintedGrey
-                    hoveredColor: JamiTheme.buttonTintedGreyHovered
-                    pressedColor: JamiTheme.buttonTintedGreyPressed
-
-                    onClicked: {
-                        caCert_Dialog_SIP.open()
-                    }
-                }
-
-                ElidedTextLabel {
-                    Layout.fillWidth: true
-                    Layout.preferredHeight: JamiTheme.preferredFieldHeight
-
-                    eText: qsTr("User Certificate")
-                    fontSize: JamiTheme.settingsFontSize
-                    maxWidth: width
-                }
-
-                MaterialButton {
-                    id: btnSIPUserCert
-
-                    Layout.alignment: Qt.AlignCenter
-                    Layout.preferredWidth: itemWidth
-                    Layout.preferredHeight: JamiTheme.preferredFieldHeight
-
-                    source: "qrc:/images/icons/round-folder-24px.svg"
-                    color: JamiTheme.buttonTintedGrey
-                    hoveredColor: JamiTheme.buttonTintedGreyHovered
-                    pressedColor: JamiTheme.buttonTintedGreyPressed
-
-                    onClicked: {
-                        userCert_Dialog_SIP.open()
-                    }
-                }
-
-                ElidedTextLabel {
-                    Layout.fillWidth: true
-                    Layout.preferredHeight: JamiTheme.preferredFieldHeight
-
-                    eText: qsTr("Private Key")
-                    fontSize: JamiTheme.settingsFontSize
-                    maxWidth: width
-                }
-
-                MaterialButton {
-                    id: btnSIPPrivateKey
-
-                    Layout.alignment: Qt.AlignCenter
-                    Layout.preferredWidth: itemWidth
-                    Layout.preferredHeight: JamiTheme.preferredFieldHeight
-
-                    source: "qrc:/images/icons/round-folder-24px.svg"
-                    color: JamiTheme.buttonTintedGrey
-                    hoveredColor: JamiTheme.buttonTintedGreyHovered
-                    pressedColor: JamiTheme.buttonTintedGreyPressed
-
-                    onClicked: {
-                        privateKey_Dialog_SIP.open()
-                    }
-                }
-
-                // Private key password
-                ElidedTextLabel {
-                    Layout.fillWidth: true
-                    Layout.preferredHeight: JamiTheme.preferredFieldHeight
-
-                    eText: qsTr("Private Key Password")
-                    fontSize: JamiTheme.settingsFontSize
-                    maxWidth: width
-                }
-
-                MaterialLineEdit {
-                    id: lineEditSIPCertPassword
-
-                    Layout.alignment: Qt.AlignCenter
-                    Layout.preferredHeight: JamiTheme.preferredFieldHeight
-                    Layout.preferredWidth: itemWidth
-
-                    padding: 8
-
-                    font.pointSize: JamiTheme.settingsFontSize
-                    font.kerning: true
-
-                    horizontalAlignment: Text.AlignLeft
-                    verticalAlignment: Text.AlignVCenter
-                    echoMode: TextInput.Password
-
-                    onEditingFinished: {
-                       SettingsAdapter.lineEditSIPCertPasswordLineEditTextChanged(text)
-                    }
-                }
-            }
-
-            ToggleSwitch {
-                id: verifyIncomingCertificatesServerToogle
-
-                labelText: qsTr("Verify Certificates (Server Side)")
-                fontPointSize: JamiTheme.settingsFontSize
-
-                onSwitchToggled: {
-                   SettingsAdapter.setVerifyCertificatesServer(checked)
-                }
-            }
-
-            ToggleSwitch {
-                id: verifyIncomingCertificatesClientToogle
-
-                labelText: qsTr("Verify Certificates (Client Side)")
-                fontPointSize: JamiTheme.settingsFontSize
-
-                onSwitchToggled: {
-                   SettingsAdapter.setVerifyCertificatesClient(checked)
-                }
-            }
-
-            ToggleSwitch {
-                id: requireCeritificateForTLSIncomingToggle
-
-                labelText: qsTr("TLS Connections Require Certificate")
-                fontPointSize: JamiTheme.settingsFontSize
-
-                onSwitchToggled: {
-                   SettingsAdapter.setRequireCertificatesIncomingTLS(checked)
-                }
-            }
-
-            GridLayout {
-                Layout.fillWidth: true
-
-                rows: 3
-                columns: 2
-
-                Text {
-                    Layout.fillWidth: true
-                    Layout.rightMargin: JamiTheme.preferredMarginSize
-                    Layout.preferredHeight: JamiTheme.preferredFieldHeight
-                    text: qsTr("TLS Protocol Method")
-                    elide: Text.ElideRight
-                    font.pointSize: JamiTheme.settingsFontSize
-                    font.kerning: true
-                    verticalAlignment: Text.AlignVCenter
-                }
-
-                SettingParaCombobox {
-                    id: tlsProtocolComboBox
-
-                    Layout.preferredWidth: itemWidth
-                    Layout.preferredHeight: JamiTheme.preferredFieldHeight
-
-                    font.pointSize: JamiTheme.settingsFontSize
-                    font.kerning: true
-
-                    textRole: "textDisplay"
-
-                    model: ListModel {
-                        ListElement{textDisplay: "Default"; firstArg: "Default"; secondArg: 0}
-                        ListElement{textDisplay: "TLSv1"; firstArg: "TLSv1"; secondArg: 1}
-                        ListElement{textDisplay: "TLSv1.1"; firstArg: "TLSv1.1"; secondArg: 2}
-                        ListElement{textDisplay: "TLSv1.2"; firstArg: "TLSv1.2"; secondArg: 3}
-                    }
-
-                    onActivated: {
-                        var indexOfOption = tlsProtocolComboBox.model.get(index).secondArg
-                       SettingsAdapter.tlsProtocolComboBoxIndexChanged(parseInt(indexOfOption))
-                    }
-                }
-
-                Text {
-                    Layout.fillWidth: true
-                    Layout.rightMargin: JamiTheme.preferredMarginSize
-                    Layout.preferredHeight: JamiTheme.preferredFieldHeight
-                    text: qsTr("Outgoing TLS Server Name")
-                    elide: Text.ElideRight
-                    font.pointSize: JamiTheme.settingsFontSize
-                    font.kerning: true
-                    verticalAlignment: Text.AlignVCenter
-                }
-
-                MaterialLineEdit {
-                    id: outgoingTLSServerNameLineEdit
-
-                    Layout.alignment: Qt.AlignCenter
-                    Layout.preferredHeight: JamiTheme.preferredFieldHeight
-                    Layout.preferredWidth: itemWidth
-
-                    padding: 8
-
-                    font.pointSize: JamiTheme.settingsFontSize
-                    font.kerning: true
-
-                    horizontalAlignment: Text.AlignLeft
-                    verticalAlignment: Text.AlignVCenter
-
-                    onEditingFinished: {
-                       SettingsAdapter.outgoingTLSServerNameLineEditTextChanged(text)
-                    }
-                }
-
-                Text {
-                    Layout.fillWidth: true
-                    Layout.rightMargin: JamiTheme.preferredMarginSize
-                    Layout.preferredHeight: JamiTheme.preferredFieldHeight
-                    text: qsTr("Negotiation Timeout (seconds)")
-                    elide: Text.ElideRight
-                    font.pointSize: JamiTheme.settingsFontSize
-                    font.kerning: true
-                    verticalAlignment: Text.AlignVCenter
-                }
-
-                SpinBox {
-                    id: negotiationTimeoutSpinBox
-
-                    Layout.preferredWidth: itemWidth
-                    Layout.preferredHeight: JamiTheme.preferredFieldHeight
-
-                    font.pointSize: JamiTheme.settingsFontSize
-                    font.kerning: true
-
-                    from: 0
-                    to: 3000
-                    stepSize: 1
-
-                    up.indicator.width: (width < 200) ? (width / 5) : 40
-                    down.indicator.width: (width < 200) ? (width / 5) : 40
-
-                    onValueModified: {
-                       SettingsAdapter.negotiationTimeoutSpinBoxValueChanged(value)
-                    }
-                }
-            }
-        }
-    }
-
-    // connectivity section
-    ColumnLayout {
-        Layout.fillWidth: true
-
-        ElidedTextLabel {
-            Layout.fillWidth: true
-            Layout.preferredHeight: JamiTheme.preferredFieldHeight
-
-            eText: qsTr("Connectivity")
-            fontSize: JamiTheme.headerFontSize
-            maxWidth: width
-        }
-
-        GridLayout {
-            Layout.fillWidth: true
-            Layout.leftMargin: JamiTheme.preferredMarginSize
-
-            rows: 9
-            columns: 2
-
-            Text {
-                Layout.fillWidth: true
-                Layout.rightMargin: JamiTheme.preferredMarginSize
-                Layout.preferredHeight: JamiTheme.preferredFieldHeight
-                text: qsTr("Registration Expire Timeout (seconds)")
-                elide: Text.ElideRight
-                font.pointSize: JamiTheme.settingsFontSize
-                font.kerning: true
-                verticalAlignment: Text.AlignVCenter
-            }
-
-            SpinBox {
-                id: registrationExpireTimeoutSpinBox
-
-                Layout.preferredWidth: itemWidth
-                Layout.preferredHeight: JamiTheme.preferredFieldHeight
-                Layout.alignment: Qt.AlignCenter
-
-                font.pointSize: JamiTheme.buttonFontSize
-                font.kerning: true
-
-                from: 0
-                to: 3000
-                stepSize: 1
-
-                up.indicator.width: (width < 200) ? (width / 5) : 40
-                down.indicator.width: (width < 200) ? (width / 5) : 40
-
-                onValueModified: {
-                   SettingsAdapter.registrationTimeoutSpinBoxValueChanged(value)
-                }
-            }
-
-            // 2nd row
-            Text {
-                Layout.fillWidth: true
-                Layout.rightMargin: JamiTheme.preferredMarginSize
-                Layout.preferredHeight: JamiTheme.preferredFieldHeight
-                text: qsTr("Newtwork interface")
-                elide: Text.ElideRight
-                font.pointSize: JamiTheme.settingsFontSize
-                font.kerning: true
-                verticalAlignment: Text.AlignVCenter
-            }
-
-            SpinBox {
-                id: networkInterfaceSpinBox
-
-                Layout.preferredWidth: itemWidth
-                Layout.preferredHeight: JamiTheme.preferredFieldHeight
-                Layout.alignment: Qt.AlignCenter
-
-                font.pointSize: JamiTheme.buttonFontSize
-                font.kerning: true
-
-                from: 0
-                to: 65536
-                stepSize: 1
-
-                up.indicator.width: (width < 200) ? (width / 5) : 40
-                down.indicator.width: (width < 200) ? (width / 5) : 40
-
-                onValueModified: {
-                   SettingsAdapter.networkInterfaceSpinBoxValueChanged(value)
-                }
-            }
-
-            // 3rd row
-            ToggleSwitch {
-                id: checkBoxUPnPSIP
-
-                Layout.columnSpan: 2
-
-                labelText: qsTr("Use UPnP")
-                fontPointSize: JamiTheme.settingsFontSize
-
-                onSwitchToggled: {
-                   SettingsAdapter.setUseUPnP(checked)
-                }
-            }
-
-            // 4th row
-            ToggleSwitch {
-                id: checkBoxTurnEnableSIP
-
-                Layout.columnSpan: 2
-
-                labelText: qsTr("Use TURN")
-                fontPointSize: JamiTheme.settingsFontSize
-
-                onSwitchToggled: {
-                   SettingsAdapter.setUseTURN(checked)
-                    lineEditTurnAddressSIP.enabled = checked
-                    lineEditTurnUsernameSIP.enabled = checked
-                    lineEditTurnPsswdSIP.enabled = checked
-                    lineEditTurnRealmSIP.enabled = checked
-                }
-            }
-
-            // 5th row
-            Text {
-                Layout.fillWidth: true
-                Layout.rightMargin: JamiTheme.preferredMarginSize
-                Layout.preferredHeight: JamiTheme.preferredFieldHeight
-                text: qsTr("TURN Address")
-                elide: Text.ElideRight
-                font.pointSize: JamiTheme.settingsFontSize
-                font.kerning: true
-                verticalAlignment: Text.AlignVCenter
-            }
-
-            MaterialLineEdit {
-                id: lineEditTurnAddressSIP
-
-                Layout.alignment: Qt.AlignCenter
-                Layout.preferredHeight: JamiTheme.preferredFieldHeight
-                Layout.preferredWidth: itemWidth
-
-                padding: 8
-
-                font.pointSize: JamiTheme.settingsFontSize
-                font.kerning: true
-
-                horizontalAlignment: Text.AlignLeft
-                verticalAlignment: Text.AlignVCenter
-
-                onEditingFinished: {
-                   SettingsAdapter.setTURNAddress(text)
-                }
-            }
-
-            // 6th row
-            Text {
-                Layout.fillWidth: true
-                Layout.rightMargin: JamiTheme.preferredMarginSize
-                Layout.preferredHeight: JamiTheme.preferredFieldHeight
-                text: qsTr("TURN Username")
-                elide: Text.ElideRight
-                font.pointSize: JamiTheme.settingsFontSize
-                font.kerning: true
-                verticalAlignment: Text.AlignVCenter
-            }
-
-            MaterialLineEdit {
-                id: lineEditTurnUsernameSIP
-
-                Layout.alignment: Qt.AlignCenter
-                Layout.preferredHeight: JamiTheme.preferredFieldHeight
-                Layout.preferredWidth: itemWidth
-
-                padding: 8
-
-                font.pointSize: JamiTheme.settingsFontSize
-                font.kerning: true
-
-                horizontalAlignment: Text.AlignLeft
-                verticalAlignment: Text.AlignVCenter
-
-                onEditingFinished: {
-                   SettingsAdapter.setTURNUsername(text)
-                }
-            }
-
-            Text {
-                Layout.fillWidth: true
-                Layout.rightMargin: JamiTheme.preferredMarginSize
-                Layout.preferredHeight: JamiTheme.preferredFieldHeight
-                text: qsTr("TURN Password")
-                elide: Text.ElideRight
-                font.pointSize: JamiTheme.settingsFontSize
-                font.kerning: true
-                verticalAlignment: Text.AlignVCenter
-            }
-
-            MaterialLineEdit {
-                id: lineEditTurnPsswdSIP
-
-                Layout.alignment: Qt.AlignCenter
-                Layout.preferredHeight: JamiTheme.preferredFieldHeight
-                Layout.preferredWidth: itemWidth
-
-                padding: 8
-
-                font.pointSize: JamiTheme.settingsFontSize
-                font.kerning: true
-
-                horizontalAlignment: Text.AlignLeft
-                verticalAlignment: Text.AlignVCenter
-
-                echoMode: TextInput.Password
-
-                onEditingFinished: {
-                   SettingsAdapter.setTURNPassword(text)
-                }
-            }
-
-            // 8th row
-            Text {
-                Layout.fillWidth: true
-                Layout.rightMargin: JamiTheme.preferredMarginSize
-                Layout.preferredHeight: JamiTheme.preferredFieldHeight
-                text: qsTr("TURN Realm")
-                elide: Text.ElideRight
-                font.pointSize: JamiTheme.settingsFontSize
-                font.kerning: true
-                verticalAlignment: Text.AlignVCenter
-            }
-
-            MaterialLineEdit {
-                id: lineEditTurnRealmSIP
-
-                Layout.alignment: Qt.AlignCenter
-                Layout.preferredHeight: JamiTheme.preferredFieldHeight
-                Layout.preferredWidth: itemWidth
-
-                padding: 8
-
-                font.pointSize: JamiTheme.settingsFontSize
-                font.kerning: true
-
-                horizontalAlignment: Text.AlignLeft
-                verticalAlignment: Text.AlignVCenter
-
-                onEditingFinished: {
-                   SettingsAdapter.setTURNRealm(text)
-                }
-            }
-
-            // 9th row
-            ToggleSwitch {
-                id: checkBoxSTUNEnableSIP
-
-                labelText: qsTr("Use STUN")
-                fontPointSize: JamiTheme.settingsFontSize
-
-                Layout.columnSpan: 2
-
-                onSwitchToggled: {
-                   SettingsAdapter.setUseSTUN(checked)
-                    lineEditSTUNAddressSIP.enabled = checked
-                }
-            }
-
-            // 10th row
-            Text {
-                Layout.fillWidth: true
-                Layout.rightMargin: JamiTheme.preferredMarginSize
-                Layout.preferredHeight: JamiTheme.preferredFieldHeight
-                text: qsTr("STUN Address")
-                elide: Text.ElideRight
-                font.pointSize: JamiTheme.settingsFontSize
-                font.kerning: true
-                verticalAlignment: Text.AlignVCenter
-            }
-
-            MaterialLineEdit {
-                id: lineEditSTUNAddressSIP
-
-                Layout.alignment: Qt.AlignCenter
-                Layout.preferredHeight: JamiTheme.preferredFieldHeight
-                Layout.preferredWidth: itemWidth
-
-                padding: 8
-
-                font.pointSize: JamiTheme.settingsFontSize
-                font.kerning: true
-
-                horizontalAlignment: Text.AlignLeft
-                verticalAlignment: Text.AlignVCenter
-
-                onEditingFinished: {
-                   SettingsAdapter.setSTUNAddress(text)
-                }
-            }
-        }
-    }
-
-    // public address section
-    ColumnLayout {
-        Layout.fillWidth: true
-
-        ElidedTextLabel {
-            Layout.fillWidth: true
-            Layout.preferredHeight: JamiTheme.preferredFieldHeight
-
-            text: qsTr("Public Address")
-            fontSize: JamiTheme.headerFontSize
-            maxWidth: width
-        }
-
-        GridLayout {
-            Layout.fillWidth: true
-            Layout.leftMargin: JamiTheme.preferredMarginSize
-
-            rows: 3
-            columns: 2
-
-            // 1st row
-            ToggleSwitch {
-                id: checkBoxCustomAddressPort
-
-                labelText: qsTr("Use Custom Address/Port")
-                fontPointSize: JamiTheme.settingsFontSize
-
-                Layout.columnSpan: 2
-
-                onSwitchToggled: {
-                   SettingsAdapter.setUseCustomAddressAndPort(checked)
-                    lineEditSIPCustomAddress.enabled = checked
-                    customPortSIPSpinBox.enabled = checked
-                }
-            }
-
-            //2nd row
-            ElidedTextLabel {
-                Layout.leftMargin: JamiTheme.preferredMarginSize
-                Layout.fillWidth: true
-                Layout.preferredHeight: JamiTheme.preferredFieldHeight
-
-                eText: qsTr("Address")
-                fontSize: JamiTheme.settingsFontSize
-                maxWidth: width
-            }
-
-            MaterialLineEdit {
-                id: lineEditSIPCustomAddress
-
-                Layout.alignment: Qt.AlignCenter
-                Layout.preferredHeight: JamiTheme.preferredFieldHeight
-                Layout.preferredWidth: itemWidth
-
-                padding: 8
-
-                font.pointSize: JamiTheme.settingsFontSize
-                font.kerning: true
-
-                horizontalAlignment: Text.AlignLeft
-                verticalAlignment: Text.AlignVCenter
-
-                onEditingFinished: {
-                   SettingsAdapter.lineEditSIPCustomAddressLineEditTextChanged(text)
-                }
-            }
-
-            //3rd row
-            ElidedTextLabel {
-                Layout.leftMargin: JamiTheme.preferredMarginSize
-                Layout.fillWidth: true
-                Layout.preferredHeight: JamiTheme.preferredFieldHeight
-
-                eText: qsTr("Port")
-                fontSize: JamiTheme.settingsFontSize
-                maxWidth: width
-            }
-
-            SpinBox {
-                id: customPortSIPSpinBox
-
-                Layout.preferredWidth: itemWidth
-                Layout.preferredHeight: JamiTheme.preferredFieldHeight
-                Layout.alignment: Qt.AlignCenter
-
-                font.pointSize: JamiTheme.settingsFontSize
-                font.kerning: true
-
-                from: 0
-                to: 65535
-                stepSize: 1
-
-                up.indicator.width: (width < 200) ? (width / 5) : 40
-                down.indicator.width: (width < 200) ? (width / 5) : 40
-
-                onValueModified: {
-                   SettingsAdapter.customPortSIPSpinBoxValueChanged(value)
-                }
-            }
-        }
-    }
-
-    // media section
-    ColumnLayout {
-        Layout.fillWidth: true
-
-        Label {
-            Layout.fillWidth: true
-            Layout.preferredHeight: JamiTheme.preferredFieldHeight
-
-            text: qsTr("Media")
-
-            font.pointSize: JamiTheme.headerFontSize
-            font.kerning: true
-
-            horizontalAlignment: Text.AlignLeft
-            verticalAlignment: Text.AlignVCenter
-        }
-
-        ColumnLayout {
-            Layout.fillWidth: true
-            Layout.leftMargin: JamiTheme.preferredMarginSize
-
-            ToggleSwitch {
-                id: videoCheckBoxSIP
-
-                labelText: qsTr("Enable Video")
-                fontPointSize: JamiTheme.settingsFontSize
-
-                onSwitchToggled: {
-                   SettingsAdapter.setVideoState(checked)
-                }
-            }
-
-            RowLayout {
-                Layout.fillWidth: true
-                Layout.fillHeight: true
-
-                ColumnLayout {
-                    Layout.fillWidth: true
-                    Layout.fillHeight: true
-
-                    RowLayout {
-                        Layout.fillWidth: true
-                        Layout.fillHeight: true
-                        Layout.maximumHeight: JamiTheme.preferredFieldHeight
-
-                        ElidedTextLabel {
-                            Layout.fillWidth: true
-                            Layout.preferredHeight: JamiTheme.preferredFieldHeight
-
-                            maxWidth: width
-                            eText:  qsTr("Video Codecs")
-                            fontSize: JamiTheme.settingsFontSize
-                        }
-
-                        HoverableButtonTextItem {
-                            id: videoDownPushButtonSIP
-
-                            Layout.preferredWidth: 24
-                            Layout.preferredHeight: 24
-
-                            radius: height / 2
-
-                            source: "qrc:/images/icons/round-arrow_drop_down-24px.svg"
-
-                            onClicked: {
-                                decreaseVideoCodecPriority()
-                            }
-                        }
-
-                        HoverableButtonTextItem {
-                            id: videoUpPushButtonSIP
-
-                            Layout.preferredWidth: 24
-                            Layout.preferredHeight: 24
-
-                            radius: height / 2
-
-                            source: "qrc:/images/icons/round-arrow_drop_up-24px.svg"
-
-                            onClicked: {
-                                increaseVideoCodecPriority()
-                            }
-                        }
-                    }
-
-                    ListViewJami {
-                        id: videoListWidgetSIP
-
-                        Layout.fillWidth: true
-                        Layout.preferredHeight: 190
-
-                        model: VideoCodecListModel{}
-
-                        delegate: VideoCodecDelegate {
-                            id: videoCodecDelegate
-
-                            width: videoListWidgetSIP.width
-                            height: videoListWidgetSIP.height / 4
-
-                            videoCodecName : VideoCodecName
-                            isEnabled : IsEnabled
-                            videoCodecId: VideoCodecID
-
-                            onClicked: {
-                                videoListWidget.currentIndex = index
-                            }
-
-                            onVideoCodecStateChange:{
-                               SettingsAdapter.videoCodecsStateChange(idToSet , isToBeEnabled)
-                                updateVideoCodecs()
-                            }
-                        }
-                    }
-                }
-
-                ColumnLayout {
-                    Layout.fillWidth: true
-                    Layout.fillHeight: true
-                    Layout.leftMargin: JamiTheme.preferredMarginSize / 2
-
-                    RowLayout {
-                        Layout.fillWidth: true
-                        Layout.fillHeight: true
-                        Layout.maximumHeight: JamiTheme.preferredFieldHeight
-
-                        ElidedTextLabel {
-                            Layout.fillWidth: true
-                            Layout.preferredHeight: JamiTheme.preferredFieldHeight
-
-                            maxWidth: width
-                            eText:  qsTr("Audio Codecs")
-                            fontSize: JamiTheme.settingsFontSize
-                        }
-
-                        HoverableButtonTextItem {
-                            id: audioDownPushButtonSIP
-
-                            Layout.preferredWidth: 24
-                            Layout.preferredHeight: 24
-
-                            radius: height / 2
-
-                            source: "qrc:/images/icons/round-arrow_drop_down-24px.svg"
-
-                            onClicked: {
-                                decreaseAudioCodecPriority()
-                            }
-                        }
-
-                        HoverableButtonTextItem {
-                            id: audioUpPushButtonSIP
-
-                            Layout.preferredWidth: 24
-                            Layout.preferredHeight: 24
-
-                            radius: height / 2
-
-                            source: "qrc:/images/icons/round-arrow_drop_up-24px.svg"
-
-                            onClicked: {
-                                increaseAudioCodecPriority()
-                            }
-                        }
-                    }
-
-                    ListViewJami {
-                        id: audioListWidgetSIP
-
-                        Layout.fillWidth: true
-                        Layout.preferredHeight: 190
-
-                        model: AudioCodecListModel{}
-
-                        delegate: AudioCodecDelegate {
-                            id: audioCodecDelegate
-
-                            width: audioListWidgetSIP.width
-                            height: audioListWidgetSIP.height / 4
-
-                            layer.mipmap: false
-                            clip: true
-
-                            audioCodecName : AudioCodecName
-                            isEnabled : IsEnabled
-                            audioCodecId: AudioCodecID
-                            samplerRate: Samplerate
-
-                            onClicked: {
-                                audioListWidget.currentIndex = index
-                            }
-
-                            onAudioCodecStateChange:{
-                               SettingsAdapter.audioCodecsStateChange(idToSet , isToBeEnabled)
-                                updateAudioCodecs()
-                            }
-                        }
-                    }
-                }
-            }
-        }
-    }
-
-    // SDP Session
-    ColumnLayout {
-        Layout.fillWidth: true
-
-        ElidedTextLabel {
-            Layout.fillWidth: true
-            Layout.preferredHeight: JamiTheme.preferredFieldHeight
-
-            eText: qsTr("SDP Session Negotiation (ICE Fallback)")
-            fontSize: JamiTheme.headerFontSize
-            maxWidth: width
-        }
-
-        ElidedTextLabel {
-            Layout.fillWidth: true
-            Layout.preferredHeight: JamiTheme.preferredFieldHeight
-            Layout.leftMargin: JamiTheme.preferredMarginSize
-
-            eText: qsTr("Only used during negotiation in case ICE is not supported")
-            fontSize: JamiTheme.settingsFontSize
-            maxWidth: width
-        }
-
-        GridLayout {
-            Layout.fillWidth: true
-            Layout.leftMargin: JamiTheme.preferredMarginSize
-
-            rows: 4
-            columns: 2
-
-            // 1st row
-            Text {
-                Layout.fillWidth: true
-                Layout.rightMargin: JamiTheme.preferredMarginSize
-                Layout.preferredHeight: JamiTheme.preferredFieldHeight
-                text: qsTr("Audio RTP Min Port")
-                elide: Text.ElideRight
-                font.pointSize: JamiTheme.settingsFontSize
-                font.kerning: true
-                verticalAlignment: Text.AlignVCenter
-            }
-
-            SpinBox {
-                id:audioRTPMinPortSpinBox
-
-                Layout.preferredWidth: itemWidth
-                Layout.preferredHeight: JamiTheme.preferredFieldHeight
-
-                font.pointSize: JamiTheme.settingsFontSize
-                font.kerning: true
-
-                from: 0
-                to: 65535
-                stepSize: 1
-
-                up.indicator.width: (width < 200) ? (width / 5) : 40
-                down.indicator.width: (width < 200) ? (width / 5) : 40
-
-                onValueModified: {
-                    audioRTPMinPortSpinBoxEditFinished(value)
-                }
-            }
-
-            // 2nd row
-            Text {
-                Layout.fillWidth: true
-                Layout.rightMargin: JamiTheme.preferredMarginSize
-                Layout.preferredHeight: JamiTheme.preferredFieldHeight
-                text: qsTr("Audio RTP Max Port")
-                elide: Text.ElideRight
-                font.pointSize: JamiTheme.settingsFontSize
-                font.kerning: true
-                verticalAlignment: Text.AlignVCenter
-            }
-
-            SpinBox {
-                id:audioRTPMaxPortSpinBox
-
-                Layout.preferredWidth: itemWidth
-                Layout.preferredHeight: JamiTheme.preferredFieldHeight
-
-                font.pointSize: JamiTheme.settingsFontSize
-                font.kerning: true
-
-                from: 0
-                to: 65535
-                stepSize: 1
-
-                up.indicator.width: (width < 200) ? (width / 5) : 40
-                down.indicator.width: (width < 200) ? (width / 5) : 40
-
-                onValueModified: {
-                    audioRTPMaxPortSpinBoxEditFinished(value)
-                }
-            }
-
-            // 3rd row
-            Text {
-                Layout.fillWidth: true
-                Layout.rightMargin: JamiTheme.preferredMarginSize
-                Layout.preferredHeight: JamiTheme.preferredFieldHeight
-                text: qsTr("Video RTP Min Port")
-                elide: Text.ElideRight
-                font.pointSize: JamiTheme.settingsFontSize
-                font.kerning: true
-                verticalAlignment: Text.AlignVCenter
-            }
-
-            SpinBox {
-                id:videoRTPMinPortSpinBox
-
-                Layout.preferredWidth: itemWidth
-                Layout.preferredHeight: JamiTheme.preferredFieldHeight
-
-                font.pointSize: JamiTheme.settingsFontSize
-                font.kerning: true
-
-                from: 0
-                to: 65535
-                stepSize: 1
-
-                up.indicator.width: (width < 200) ? (width / 5) : 40
-                down.indicator.width: (width < 200) ? (width / 5) : 40
-
-                onValueModified: {
-                    videoRTPMinPortSpinBoxEditFinished(value)
-                }
-            }
-
-            // 4th row
-            Text {
-                Layout.fillWidth: true
-                Layout.rightMargin: JamiTheme.preferredMarginSize
-                Layout.preferredHeight: JamiTheme.preferredFieldHeight
-                text: qsTr("Video RTP Max Port")
-                elide: Text.ElideRight
-                font.pointSize: JamiTheme.settingsFontSize
-                font.kerning: true
-                verticalAlignment: Text.AlignVCenter
-            }
-
-            SpinBox {
-                id:videoRTPMaxPortSpinBox
-
-                Layout.preferredWidth: itemWidth
-                Layout.preferredHeight: JamiTheme.preferredFieldHeight
-
-                font.pointSize: JamiTheme.settingsFontSize
-                font.kerning: true
-
-                from: 0
-                to: 65535
-                stepSize: 1
-
-                up.indicator.width: (width < 200) ? (width / 5) : 40
-                down.indicator.width: (width < 200) ? (width / 5) : 40
-
-                onValueModified: {
-                    videoRTPMaxPortSpinBoxEditFinished(value)
-                }
-            }
-        }
-    }
-}
diff --git a/src/settingsview/components/AdvancedSettings.qml b/src/settingsview/components/AdvancedSettings.qml
new file mode 100644
index 000000000..8a7174a01
--- /dev/null
+++ b/src/settingsview/components/AdvancedSettings.qml
@@ -0,0 +1,180 @@
+/*
+ * Copyright (C) 2020 by Savoir-faire Linux
+ * Author: Aline Gondim Santos <aline.gondimsantos@savoirfairelinux.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+import QtQuick 2.15
+import QtQuick.Layouts 1.15
+import QtQuick.Window 2.14
+import QtQuick.Controls 2.15
+import QtQuick.Controls.Universal 2.12
+import QtGraphicalEffects 1.14
+import QtQuick.Controls.Styles 1.4
+import net.jami.Models 1.0
+import net.jami.Adapters 1.0
+import Qt.labs.platform 1.1
+import "../../commoncomponents"
+import "../../constant"
+
+ColumnLayout {
+    id: root
+
+    property bool isSIP
+    property int itemWidth
+
+    signal scrolled
+
+    function updateAdvancedAccountInfos() {
+        advancedCallSettings.updateCallSettingsInfos()
+        advancedVoiceMailSettings.updateVoiceMailSettingsInfos()
+        advancedSIPSecuritySettings.updateSecurityAccountInfos()
+        advancedNameServerSettings.updateNameServerInfos()
+        advancedOpenDHTSettings.updateOpenDHTSettingsInfos()
+        advancedJamiSecuritySettings.updateSecurityAccountInfos()
+        advancedConnectivitySettings.updateConnectivityAccountInfos()
+        advancedPublicAddressSettings.updatePublicAddressAccountInfos()
+        advancedMediaSettings.updateMediaConnectivityAccountInfos()
+        advancedSDPStettings.updateSDPAccountInfos()
+    }
+
+    RowLayout {
+        id: rowAdvancedSettingsBtn
+        Layout.fillWidth: true
+        Layout.bottomMargin: 8
+
+        Text {
+            Layout.fillWidth: true
+            Layout.preferredHeight: JamiTheme.preferredFieldHeight
+
+            font.pointSize: JamiTheme.headerFontSize
+            font.kerning: true
+
+            horizontalAlignment: Text.AlignLeft
+            verticalAlignment: Text.AlignVCenter
+
+            text: qsTr("Advanced Account Settings")
+            elide: Text.ElideRight
+        }
+
+        HoverableButtonTextItem {
+            Layout.preferredWidth: JamiTheme.preferredFieldHeight
+            Layout.preferredHeight: JamiTheme.preferredFieldHeight
+            Layout.alignment: Qt.AlignHCenter
+
+            radius: height / 2
+
+            toolTipText: qsTr("Press to display or hide advance settings")
+
+            source: {
+                if (advancedSettingsView.visible) {
+                    return "qrc:/images/icons/round-arrow_drop_up-24px.svg"
+                } else {
+                    return "qrc:/images/icons/round-arrow_drop_down-24px.svg"
+                }
+            }
+
+            onClicked: {
+                advancedSettingsView.visible = !advancedSettingsView.visible
+                if(advancedSettingsView.visible)
+                    updateAdvancedAccountInfos()
+                scrolled()
+            }
+        }
+    }
+
+    ColumnLayout {
+        id: advancedSettingsView
+        visible: false
+
+        AdvancedCallSettings {
+            id: advancedCallSettings
+            isSIP: root.isSIP
+            itemWidth: root.itemWidth
+
+            Layout.fillWidth: true
+        }
+
+        AdvancedVoiceMailSettings {
+            id: advancedVoiceMailSettings
+            visible: root.isSIP
+            itemWidth: root.itemWidth
+
+            Layout.fillWidth: true
+        }
+
+        AdvancedSIPSecuritySettings {
+            id: advancedSIPSecuritySettings
+            visible: root.isSIP
+            itemWidth: root.itemWidth
+
+            Layout.fillWidth: true
+        }
+
+        AdvancedNameServerSettings {
+            id: advancedNameServerSettings
+            visible: !root.isSIP
+            itemWidth: root.itemWidth
+
+            Layout.fillWidth: true
+        }
+
+        AdvancedOpenDHTSettings {
+            id: advancedOpenDHTSettings
+            visible: !root.isSIP
+            itemWidth: root.itemWidth
+
+            Layout.fillWidth: true
+        }
+
+        AdvancedJamiSecuritySettings {
+            id: advancedJamiSecuritySettings
+            visible: !root.isSIP
+            itemWidth: root.itemWidth
+
+            Layout.fillWidth: true
+        }
+
+        AdvancedConnectivitySettings {
+            id: advancedConnectivitySettings
+            itemWidth: root.itemWidth
+            isSIP: root.isSIP
+
+            Layout.fillWidth: true
+        }
+
+        AdvancedPublicAddressSettings {
+            id: advancedPublicAddressSettings
+            visible: isSIP
+            itemWidth: root.itemWidth
+
+            Layout.fillWidth: true
+        }
+
+        AdvancedMediaSettings {
+            id: advancedMediaSettings
+
+            Layout.fillWidth: true
+        }
+
+        AdvancedSDPSettings {
+            id: advancedSDPStettings
+            visible: isSIP
+            itemWidth: root.itemWidth
+
+            Layout.fillWidth: true
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/settingsview/components/AdvancedSettingsView.qml b/src/settingsview/components/AdvancedSettingsView.qml
deleted file mode 100644
index 6a70cd9fd..000000000
--- a/src/settingsview/components/AdvancedSettingsView.qml
+++ /dev/null
@@ -1,1024 +0,0 @@
-/*
- * Copyright (C) 2019-2020 by Savoir-faire Linux
- * Author: Yang Wang   <yang.wang@savoirfairelinux.com>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-import QtQuick 2.15
-import QtQuick.Window 2.14
-import QtQuick.Controls 2.14
-import QtQuick.Controls.Universal 2.12
-import QtQuick.Layouts 1.3
-import QtGraphicalEffects 1.14
-import QtQuick.Controls.Styles 1.4
-import QtQuick.Dialogs 1.3
-import Qt.labs.platform 1.1
-import net.jami.Models 1.0
-import net.jami.Adapters 1.0
-
-import "../../commoncomponents"
-
-ColumnLayout {
-    id: root
-
-    property int itemWidth
-
-    function updateAccountInfoDisplayedAdvance() {
-        //Call Settings
-        checkAutoConnectOnLocalNetwork.checked = SettingsAdapter.getAccountConfig_PeerDiscovery()
-        checkBoxUntrusted.checked = SettingsAdapter.getAccountConfig_DHT_PublicInCalls()
-        checkBoxRdv.checked = SettingsAdapter.getAccountConfig_RendezVous()
-        checkBoxAutoAnswer.checked = SettingsAdapter.getAccountConfig_AutoAnswer()
-        checkBoxCustomRingtone.checked = SettingsAdapter.getAccountConfig_Ringtone_RingtoneEnabled()
-
-        // Name Server
-        lineEditNameServer.text = SettingsAdapter.getAccountConfig_RingNS_Uri()
-
-        //OpenDHT Config
-        checkBoxEnableProxy.checked = SettingsAdapter.getAccountConfig_ProxyEnabled()
-        lineEditProxy.text = SettingsAdapter.getAccountConfig_ProxyServer()
-        lineEditBootstrap.text = SettingsAdapter.getAccountConfig_Hostname()
-
-        // Security
-        btnCACert.text = UtilsAdapter.toFileInfoName(SettingsAdapter.getAccountConfig_TLS_CertificateListFile())
-        btnUserCert.text = UtilsAdapter.toFileInfoName(SettingsAdapter.getAccountConfig_TLS_CertificateFile())
-        btnPrivateKey.text = UtilsAdapter.toFileInfoName(SettingsAdapter.getAccountConfig_TLS_PrivateKeyFile())
-
-        // Connectivity
-        checkBoxUPnP.checked = SettingsAdapter.getAccountConfig_UpnpEnabled()
-        checkBoxTurnEnable.checked = SettingsAdapter.getAccountConfig_TURN_Enabled()
-        lineEditTurnAddress.text = SettingsAdapter.getAccountConfig_TURN_Server()
-        lineEditTurnUsername.text = SettingsAdapter.getAccountConfig_TURN_Username()
-        lineEditTurnPassword.text = SettingsAdapter.getAccountConfig_TURN_Password()
-        checkBoxSTUNEnable.checked = SettingsAdapter.getAccountConfig_STUN_Enabled()
-        lineEditSTUNAddress.text = SettingsAdapter.getAccountConfig_STUN_Server()
-        // codecs
-        videoCheckBox.checked = SettingsAdapter.getAccountConfig_Video_Enabled()
-            // update audio and video codec, make sure this change does not trigger item change events
-        updateAudioCodecs();
-        updateVideoCodecs();
-        btnRingtone.enabled = SettingsAdapter.getAccountConfig_Ringtone_RingtoneEnabled()
-        btnRingtone.text = UtilsAdapter.toFileInfoName(SettingsAdapter.getAccountConfig_Ringtone_RingtonePath())
-        lineEditProxy.enabled = SettingsAdapter.getAccountConfig_ProxyEnabled()
-        lineEditSTUNAddress.enabled = SettingsAdapter.getAccountConfig_STUN_Enabled()
-    }
-
-    function updateAudioCodecs(){
-        audioListWidget.model.layoutAboutToBeChanged()
-        audioListWidget.model.dataChanged(audioListWidget.model.index(0, 0),
-                                     audioListWidget.model.index(audioListWidget.model.rowCount() - 1, 0))
-        audioListWidget.model.layoutChanged()
-    }
-
-    function updateVideoCodecs(){
-        videoListWidget.model.layoutAboutToBeChanged()
-        videoListWidget.model.dataChanged(videoListWidget.model.index(0, 0),
-                                     videoListWidget.model.index(videoListWidget.model.rowCount() - 1, 0))
-        videoListWidget.model.layoutChanged()
-    }
-
-    function decreaseAudioCodecPriority(){
-        var index = audioListWidget.currentIndex
-        var codecId = audioListWidget.model.data(audioListWidget.model.index(index,0), AudioCodecListModel.AudioCodecID)
-
-       SettingsAdapter.decreaseAudioCodecPriority(codecId)
-        audioListWidget.currentIndex = index + 1
-        updateAudioCodecs()
-    }
-
-    function increaseAudioCodecPriority(){
-        var index = audioListWidget.currentIndex
-        var codecId = audioListWidget.model.data(audioListWidget.model.index(index,0), AudioCodecListModel.AudioCodecID)
-
-       SettingsAdapter.increaseAudioCodecPriority(codecId)
-        audioListWidget.currentIndex = index - 1
-        updateAudioCodecs()
-    }
-
-    function decreaseVideoCodecPriority(){
-        var index = videoListWidget.currentIndex
-        var codecId = videoListWidget.model.data(videoListWidget.model.index(index,0), VideoCodecListModel.VideoCodecID)
-
-       SettingsAdapter.decreaseVideoCodecPriority(codecId)
-        videoListWidget.currentIndex = index + 1
-        updateVideoCodecs()
-    }
-
-    function increaseVideoCodecPriority(){
-        var index = videoListWidget.currentIndex
-        var codecId = videoListWidget.model.data(videoListWidget.model.index(index,0), VideoCodecListModel.VideoCodecID)
-
-       SettingsAdapter.increaseVideoCodecPriority(codecId)
-        videoListWidget.currentIndex = index - 1
-        updateVideoCodecs()
-    }
-
-    function changeRingtonePath(url){
-        if(url.length !== 0) {
-           SettingsAdapter.set_RingtonePath(url)
-            btnRingtone.text = UtilsAdapter.toFileInfoName(url)
-        } else if (SettingsAdapter.getAccountConfig_Ringtone_RingtonePath().length === 0){
-            btnRingtone.text = qsTr("Add a custom ringtone")
-        }
-    }
-
-    function changeFileCACert(url){
-        if(url.length !== 0) {
-           SettingsAdapter.set_FileCACert(url)
-            btnCACert.text = UtilsAdapter.toFileInfoName(url)
-        }
-    }
-
-    function changeFileUserCert(url){
-        if(url.length !== 0) {
-           SettingsAdapter.set_FileUserCert(url)
-            btnUserCert.text = UtilsAdapter.toFileInfoName(url)
-        }
-    }
-
-    function changeFilePrivateKey(url){
-        if(url.length !== 0) {
-           SettingsAdapter.set_FilePrivateKey(url)
-            btnPrivateKey.text = UtilsAdapter.toFileInfoName(url)
-        }
-    }
-
-    JamiFileDialog {
-        id: ringtonePath_Dialog
-
-        property string oldPath : SettingsAdapter.getAccountConfig_Ringtone_RingtonePath()
-        property string openPath : oldPath === "" ? (UtilsAdapter.getCurrentPath() + "/ringtones/") : (UtilsAdapter.toFileAbsolutepath(oldPath))
-
-        mode: JamiFileDialog.OpenFile
-        title: qsTr("Select a new ringtone")
-        folder: openPath
-
-        nameFilters: [qsTr("Audio Files") + " (*.wav *.ogg *.opus *.mp3 *.aiff *.wma)", qsTr(
-                "All files") + " (*)"]
-
-        onAccepted: {
-            var url = UtilsAdapter.getAbsPath(file.toString())
-            changeRingtonePath(url)
-        }
-    }
-
-    JamiFileDialog {
-        id: caCert_Dialog
-
-        property string oldPath : SettingsAdapter.getAccountConfig_TLS_CertificateListFile()
-        property string openPath : oldPath === "" ? (UtilsAdapter.getCurrentPath() + "/ringtones/") : (UtilsAdapter.toFileAbsolutepath(oldPath))
-
-        mode: JamiFileDialog.OpenFile
-        title: qsTr("Select a CA certificate")
-        folder: openPath
-        nameFilters: [qsTr("Certificate File") + " (*.crt)", qsTr(
-                "All files") + " (*)"]
-
-        onAccepted: {
-            var url = UtilsAdapter.getAbsPath(file.toString())
-            changeFileCACert(url)
-        }
-    }
-
-    JamiFileDialog {
-        id: userCert_Dialog
-
-        property string oldPath : SettingsAdapter.getAccountConfig_TLS_CertificateFile()
-        property string openPath : oldPath === "" ? (UtilsAdapter.getCurrentPath() + "/ringtones/") : (UtilsAdapter.toFileAbsolutepath(oldPath))
-
-        mode: JamiFileDialog.OpenFile
-        title: qsTr("Select a user certificate")
-        folder: openPath
-        nameFilters: [qsTr("Certificate File") + " (*.crt)", qsTr(
-                "All files") + " (*)"]
-
-        onAccepted: {
-            var url = UtilsAdapter.getAbsPath(file.toString())
-            changeFileUserCert(url)
-        }
-    }
-
-    JamiFileDialog {
-        id: privateKey_Dialog
-
-        property string oldPath : {
-            return SettingsAdapter.getAccountConfig_TLS_PrivateKeyFile()
-        }
-        property string openPath : oldPath === "" ? (UtilsAdapter.getCurrentPath() + "/ringtones/") : (UtilsAdapter.toFileAbsolutepath(oldPath))
-
-        mode: JamiFileDialog.OpenFile
-        title: qsTr("Select a private key")
-        folder: openPath
-        nameFilters: [qsTr("Key File") + " (*.key)", qsTr(
-                "All files") + " (*)"]
-
-        onAccepted: {
-            var url = UtilsAdapter.getAbsPath(file.toString())
-            changeFilePrivateKey(url)
-        }
-    }
-
-    ColumnLayout {
-        Layout.fillWidth: true
-        Layout.fillHeight: true
-
-        ElidedTextLabel {
-            Layout.fillWidth: true
-
-            eText: qsTr("Call Settings")
-            fontSize: JamiTheme.headerFontSize
-            maxWidth: width
-        }
-
-        ColumnLayout {
-            Layout.fillWidth: true
-            Layout.leftMargin: JamiTheme.preferredMarginSize
-
-            ToggleSwitch {
-                id: checkBoxUntrusted
-
-                labelText: qsTr("Allow incoming calls from unknown contacts")
-                fontPointSize: JamiTheme.settingsFontSize
-
-                onSwitchToggled: {
-                   SettingsAdapter.setCallsUntrusted(checked)
-                }
-            }
-
-            ToggleSwitch {
-                id: checkBoxAutoAnswer
-
-                labelText: qsTr("Auto Answer Calls")
-                fontPointSize: JamiTheme.settingsFontSize
-
-                onSwitchToggled: {
-                   SettingsAdapter.setAutoAnswerCalls(checked)
-                }
-            }
-
-            ToggleSwitch {
-                id: checkBoxCustomRingtone
-
-                labelText: qsTr("Enable Custom Ringtone")
-                fontPointSize: JamiTheme.settingsFontSize
-
-                onSwitchToggled: {
-                   SettingsAdapter.setEnableRingtone(checked)
-                    btnRingtone.enabled = checked
-                }
-            }
-
-            RowLayout {
-                Layout.fillWidth: true
-
-                ElidedTextLabel {
-                    Layout.fillWidth: true
-                    Layout.preferredHeight: JamiTheme.preferredFieldHeight
-
-                    eText: qsTr("Select Custom Ringtone")
-                    maxWidth: width
-                    fontSize: JamiTheme.settingsFontSize
-                }
-
-                MaterialButton {
-                    id: btnRingtone
-
-                    Layout.alignment: Qt.AlignCenter
-                    Layout.preferredWidth: itemWidth
-                    Layout.preferredHeight: JamiTheme.preferredFieldHeight
-
-                    source: "qrc:/images/icons/round-folder-24px.svg"
-                    color: JamiTheme.buttonTintedGrey
-                    hoveredColor: JamiTheme.buttonTintedGreyHovered
-                    pressedColor: JamiTheme.buttonTintedGreyPressed
-
-                    onClicked: {
-                        ringtonePath_Dialog.open()
-                    }
-                }
-            }
-
-            ToggleSwitch {
-                id: checkBoxRdv
-
-                labelText: qsTr("(Experimental) Rendez-vous: turn your account into a conference room")
-                fontPointSize: JamiTheme.settingsFontSize
-
-                onSwitchToggled: {
-                   SettingsAdapter.setIsRendezVous(checked)
-                }
-            }
-        }
-    }
-
-    ColumnLayout {
-        Layout.fillWidth: true
-
-        ElidedTextLabel {
-            Layout.fillWidth: true
-            Layout.preferredHeight: JamiTheme.preferredFieldHeight
-
-            eText: qsTr("Name Server")
-            maxWidth: width
-            fontSize: JamiTheme.headerFontSize
-        }
-
-        RowLayout {
-            Layout.fillWidth: true
-            Layout.maximumHeight: JamiTheme.preferredFieldHeight
-            Layout.leftMargin: JamiTheme.preferredMarginSize
-
-            Text {
-                Layout.fillWidth: true
-                Layout.rightMargin: JamiTheme.preferredMarginSize
-                Layout.preferredHeight: JamiTheme.preferredFieldHeight
-                text: qsTr("Address")
-                elide: Text.ElideRight
-                font.pointSize: JamiTheme.settingsFontSize
-                font.kerning: true
-                verticalAlignment: Text.AlignVCenter
-            }
-
-            MaterialLineEdit {
-                id: lineEditNameServer
-
-                Layout.alignment: Qt.AlignCenter
-                Layout.preferredHeight: JamiTheme.preferredFieldHeight
-                Layout.preferredWidth: itemWidth
-
-                padding: 8
-
-                font.pointSize: JamiTheme.settingsFontSize
-                font.kerning: true
-
-                verticalAlignment: Text.AlignVCenter
-
-                onEditingFinished: {
-                   SettingsAdapter.setNameServer(text)
-                }
-            }
-        }
-    }
-
-    ColumnLayout {
-        Layout.fillWidth: true
-
-        Text {
-            Layout.fillWidth: true
-            Layout.rightMargin: JamiTheme.preferredMarginSize
-            Layout.preferredHeight: JamiTheme.preferredFieldHeight
-            text: qsTr("OpenDHT Configuration")
-            elide: Text.ElideRight
-            font.pointSize: JamiTheme.headerFontSize
-            font.kerning: true
-            verticalAlignment: Text.AlignVCenter
-        }
-
-        ColumnLayout {
-            Layout.fillWidth: true
-            Layout.leftMargin: JamiTheme.preferredMarginSize
-
-            ToggleSwitch {
-                id: checkBoxEnableProxy
-
-                labelText: qsTr("Enable proxy")
-                fontPointSize: JamiTheme.settingsFontSize
-
-                onSwitchToggled: {
-                   SettingsAdapter.setEnableProxy(checked)
-                    lineEditProxy.enabled = checked
-                }
-            }
-
-            RowLayout {
-                Layout.fillWidth: true
-
-                ElidedTextLabel {
-                    Layout.fillWidth: true
-                    Layout.preferredHeight: JamiTheme.preferredFieldHeight
-
-                    text: qsTr("Proxy Address")
-                    font.pointSize: JamiTheme.settingsFontSize
-                    maxWidth: width
-                }
-
-                MaterialLineEdit {
-                    id: lineEditProxy
-
-                    Layout.alignment: Qt.AlignCenter
-                    Layout.preferredHeight: JamiTheme.preferredFieldHeight
-                    Layout.preferredWidth: itemWidth
-
-                    padding: 8
-
-                    font.pointSize: JamiTheme.settingsFontSize
-                    font.kerning: true
-
-                    horizontalAlignment: Text.AlignLeft
-                    verticalAlignment: Text.AlignVCenter
-                    wrapMode: Text.NoWrap
-                    onEditingFinished: {
-                       SettingsAdapter.setProxyAddress(text)
-                    }
-                }
-            }
-
-            RowLayout {
-                Layout.fillWidth: true
-
-                ElidedTextLabel {
-                    Layout.fillWidth: true
-                    Layout.preferredHeight: JamiTheme.preferredFieldHeight
-
-                    text: qsTr("Bootstrap")
-                    font.pointSize: JamiTheme.settingsFontSize
-                    maxWidth: width
-                }
-
-                MaterialLineEdit {
-                    id: lineEditBootstrap
-
-                    Layout.alignment: Qt.AlignCenter
-                    Layout.preferredHeight: JamiTheme.preferredFieldHeight
-                    Layout.preferredWidth: itemWidth
-
-                    padding: 8
-
-                    font.pointSize: JamiTheme.settingsFontSize
-                    font.kerning: true
-
-                    horizontalAlignment: Text.AlignLeft
-                    verticalAlignment: Text.AlignVCenter
-                    wrapMode: Text.NoWrap
-                    onEditingFinished: {
-                       SettingsAdapter.setBootstrapAddress(text)
-                    }
-                }
-            }
-        }
-    }
-
-    ColumnLayout {
-        Layout.fillWidth: true
-
-        Text {
-            Layout.fillWidth: true
-            Layout.rightMargin: JamiTheme.preferredMarginSize
-            Layout.preferredHeight: JamiTheme.preferredFieldHeight
-            text: qsTr("Security")
-            elide: Text.ElideRight
-            font.pointSize: JamiTheme.headerFontSize
-            font.kerning: true
-            verticalAlignment: Text.AlignVCenter
-        }
-
-        ColumnLayout {
-            Layout.fillWidth: true
-            Layout.leftMargin: JamiTheme.preferredMarginSize
-
-            GridLayout {
-                rows: 4
-                columns: 2
-
-                Layout.fillWidth: true
-
-                // CA Certificate
-                ElidedTextLabel {
-                    Layout.fillWidth: true
-                    Layout.preferredHeight: JamiTheme.preferredFieldHeight
-
-                    eText: qsTr("CA Certificate")
-                    fontSize: JamiTheme.settingsFontSize
-                    maxWidth: width
-                }
-
-                MaterialButton {
-                    id: btnCACert
-
-                    Layout.alignment: Qt.AlignCenter
-                    Layout.preferredHeight: JamiTheme.preferredFieldHeight
-                    Layout.preferredWidth: itemWidth
-
-                    source: "qrc:/images/icons/round-folder-24px.svg"
-                    color: JamiTheme.buttonTintedGrey
-                    hoveredColor: JamiTheme.buttonTintedGreyHovered
-                    pressedColor: JamiTheme.buttonTintedGreyPressed
-
-                    onClicked: {
-                        caCert_Dialog.open()
-                    }
-                }
-
-                // User Certificate
-                ElidedTextLabel {
-                    Layout.fillWidth: true
-                    Layout.preferredHeight: JamiTheme.preferredFieldHeight
-
-                    eText: qsTr("User Certificate")
-                    fontSize: JamiTheme.settingsFontSize
-                    maxWidth: width
-                }
-
-                MaterialButton {
-                    id: btnUserCert
-
-                    Layout.alignment: Qt.AlignCenter
-                    Layout.preferredHeight: JamiTheme.preferredFieldHeight
-                    Layout.preferredWidth: itemWidth
-
-                    source: "qrc:/images/icons/round-folder-24px.svg"
-                    color: JamiTheme.buttonTintedGrey
-                    hoveredColor: JamiTheme.buttonTintedGreyHovered
-                    pressedColor: JamiTheme.buttonTintedGreyPressed
-
-                    onClicked: {
-                        userCert_Dialog.open()
-                    }
-                }
-
-                // Private Key
-                ElidedTextLabel {
-                    Layout.fillWidth: true
-                    Layout.preferredHeight: JamiTheme.preferredFieldHeight
-
-                    eText: qsTr("Private Key")
-                    fontSize: JamiTheme.settingsFontSize
-                    maxWidth: width
-                }
-
-                MaterialButton {
-                    id: btnPrivateKey
-
-                    Layout.alignment: Qt.AlignCenter
-                    Layout.preferredHeight: JamiTheme.preferredFieldHeight
-                    Layout.preferredWidth: itemWidth
-
-                    source: "qrc:/images/icons/round-folder-24px.svg"
-                    color: JamiTheme.buttonTintedGrey
-                    hoveredColor: JamiTheme.buttonTintedGreyHovered
-                    pressedColor: JamiTheme.buttonTintedGreyPressed
-
-                    onClicked: {
-                        privateKey_Dialog.open()
-                    }
-                }
-
-                // Private key password
-                Text {
-                    Layout.fillWidth: true
-                    Layout.rightMargin: JamiTheme.preferredMarginSize
-                    Layout.preferredHeight: JamiTheme.preferredFieldHeight
-                    text: qsTr("Private Key Password")
-                    elide: Text.ElideRight
-                    font.pointSize: JamiTheme.settingsFontSize
-                    font.kerning: true
-                    verticalAlignment: Text.AlignVCenter
-                }
-
-                MaterialLineEdit {
-                    id: lineEditCertPassword
-
-                    Layout.alignment: Qt.AlignCenter
-                    Layout.preferredHeight: JamiTheme.preferredFieldHeight
-                    Layout.preferredWidth: itemWidth
-
-                    padding: 8
-
-                    font.pointSize: JamiTheme.settingsFontSize
-                    font.kerning: true
-
-                    horizontalAlignment: Text.AlignLeft
-                    verticalAlignment: Text.AlignVCenter
-                    echoMode: TextInput.Password
-                    wrapMode: Text.NoWrap
-                }
-            }
-        }
-    }
-
-    ColumnLayout {
-        Layout.fillWidth: true
-
-        ElidedTextLabel {
-            Layout.fillWidth: true
-            Layout.preferredHeight: JamiTheme.preferredFieldHeight
-
-            eText: qsTr("Connectivity")
-            fontSize: JamiTheme.headerFontSize
-            maxWidth: width
-        }
-
-        ColumnLayout {
-            Layout.fillWidth: true
-            Layout.leftMargin: JamiTheme.preferredMarginSize
-
-            ToggleSwitch {
-                id: checkAutoConnectOnLocalNetwork
-
-                Layout.fillWidth: true
-
-                labelText: qsTr("Auto Connect On Local Network")
-                fontPointSize: JamiTheme.settingsFontSize
-
-                onSwitchToggled: {
-                   SettingsAdapter.setAutoConnectOnLocalNetwork(checked)
-                }
-            }
-
-            ToggleSwitch {
-                id: checkBoxUPnP
-
-                Layout.fillWidth: true
-
-                labelText: qsTr("Use UPnP")
-                fontPointSize: JamiTheme.settingsFontSize
-
-                onSwitchToggled: {
-                   SettingsAdapter.setUseUPnP(checked)
-                }
-            }
-
-            ToggleSwitch {
-                id: checkBoxTurnEnable
-
-                Layout.fillWidth: true
-
-                labelText: qsTr("Use TURN")
-                fontPointSize: JamiTheme.settingsFontSize
-
-                onSwitchToggled: {
-                   SettingsAdapter.setUseTURN(checked)
-                }
-            }
-
-            RowLayout {
-                Layout.fillWidth: true
-                Layout.maximumHeight: JamiTheme.preferredFieldHeight
-
-                Text {
-                    Layout.fillWidth: true
-                    Layout.rightMargin: JamiTheme.preferredMarginSize
-                    Layout.preferredHeight: JamiTheme.preferredFieldHeight
-                    text: qsTr("TURN Address")
-                    elide: Text.ElideRight
-                    font.pointSize: JamiTheme.settingsFontSize
-                    font.kerning: true
-                    verticalAlignment: Text.AlignVCenter
-                }
-
-                MaterialLineEdit {
-                    id: lineEditTurnAddress
-
-                    Layout.alignment: Qt.AlignCenter
-                    Layout.preferredHeight: JamiTheme.preferredFieldHeight
-                    Layout.preferredWidth: itemWidth
-
-                    padding: 8
-
-                    font.pointSize: JamiTheme.settingsFontSize
-                    font.kerning: true
-
-                    horizontalAlignment: Text.AlignLeft
-                    verticalAlignment: Text.AlignVCenter
-                    wrapMode: Text.NoWrap
-                    onEditingFinished: {
-                       SettingsAdapter.setTURNAddress(text)
-                    }
-                }
-            }
-
-            RowLayout {
-                Layout.fillWidth: true
-                Layout.maximumHeight: JamiTheme.preferredFieldHeight
-
-                Text {
-                    Layout.fillWidth: true
-                    Layout.rightMargin: JamiTheme.preferredMarginSize
-                    Layout.preferredHeight: JamiTheme.preferredFieldHeight
-                    text: qsTr("TURN Username")
-                    elide: Text.ElideRight
-                    font.pointSize: JamiTheme.settingsFontSize
-                    font.kerning: true
-                    verticalAlignment: Text.AlignVCenter
-                }
-
-                MaterialLineEdit {
-                    id: lineEditTurnUsername
-
-                    Layout.alignment: Qt.AlignCenter
-                    Layout.preferredHeight: JamiTheme.preferredFieldHeight
-                    Layout.preferredWidth: itemWidth
-
-                    padding: 8
-
-                    font.pointSize: JamiTheme.settingsFontSize
-                    font.kerning: true
-
-                    horizontalAlignment: Text.AlignLeft
-                    verticalAlignment: Text.AlignVCenter
-                    wrapMode: Text.NoWrap
-                    onEditingFinished: {
-                       SettingsAdapter.setTURNUsername(text)
-                    }
-                }
-            }
-
-            RowLayout {
-                Layout.fillWidth: true
-                Layout.maximumHeight: JamiTheme.preferredFieldHeight
-
-                Text {
-                    Layout.fillWidth: true
-                    Layout.rightMargin: JamiTheme.preferredMarginSize
-                    Layout.preferredHeight: JamiTheme.preferredFieldHeight
-                    text: qsTr("TURN Password")
-                    elide: Text.ElideRight
-                    font.pointSize: JamiTheme.settingsFontSize
-                    font.kerning: true
-                    verticalAlignment: Text.AlignVCenter
-                }
-
-                MaterialLineEdit {
-                    id: lineEditTurnPassword
-
-                    Layout.alignment: Qt.AlignCenter
-                    Layout.preferredHeight: JamiTheme.preferredFieldHeight
-                    Layout.preferredWidth: itemWidth
-
-                    padding: 8
-                    layer.mipmap: false
-
-                    font.pointSize: JamiTheme.settingsFontSize
-                    font.kerning: true
-
-                    horizontalAlignment: Text.AlignLeft
-                    verticalAlignment: Text.AlignVCenter
-                    echoMode: TextInput.Password
-                    wrapMode: Text.NoWrap
-                    onEditingFinished: SettingsAdapter.setTURNPassword(text)
-                }
-            }
-
-            ToggleSwitch {
-                id: checkBoxSTUNEnable
-
-                Layout.fillWidth: true
-
-                labelText: qsTr("Use STUN")
-                fontPointSize: JamiTheme.settingsFontSize
-
-                onSwitchToggled: {
-                   SettingsAdapter.setUseSTUN(checked)
-                    lineEditSTUNAddress.enabled = checked
-                }
-            }
-
-            RowLayout {
-                Layout.fillWidth: true
-                Layout.maximumHeight: JamiTheme.preferredFieldHeight
-
-                Text {
-                    id: lblEditSTUNAddress
-                    Layout.fillWidth: true
-                    Layout.rightMargin: JamiTheme.preferredMarginSize
-                    Layout.preferredHeight: JamiTheme.preferredFieldHeight
-                    text: qsTr("STUN Address")
-                    elide: Text.ElideRight
-                    font.pointSize: JamiTheme.settingsFontSize
-                    font.kerning: true
-                    verticalAlignment: Text.AlignVCenter
-                }
-
-                MaterialLineEdit {
-                    id: lineEditSTUNAddress
-
-                    Layout.alignment: Qt.AlignCenter
-                    Layout.preferredHeight: JamiTheme.preferredFieldHeight
-                    Layout.preferredWidth: itemWidth
-
-                    padding: 8
-
-                    font.pointSize: JamiTheme.settingsFontSize
-                    font.kerning: true
-
-                    placeholderText: qsTr("STUN Address")
-
-                    horizontalAlignment: Text.AlignRight
-                    verticalAlignment: Text.AlignVCenter
-                    wrapMode: Text.NoWrap
-                    onEditingFinished: SettingsAdapter.setSTUNAddress(text)
-                }
-            }
-        }
-    }
-
-    ColumnLayout {
-        Layout.fillWidth: true
-
-        Label {
-            Layout.fillWidth: true
-            Layout.preferredHeight: JamiTheme.preferredFieldHeight
-
-            text: qsTr("Media")
-            font.pointSize: JamiTheme.headerFontSize
-            font.kerning: true
-
-            horizontalAlignment: Text.AlignLeft
-            verticalAlignment: Text.AlignVCenter
-        }
-
-        ColumnLayout {
-            Layout.fillWidth: true
-            Layout.leftMargin: JamiTheme.preferredMarginSize
-
-            ToggleSwitch {
-                id: videoCheckBox
-
-                labelText: qsTr("Enable Video")
-                fontPointSize: JamiTheme.settingsFontSize
-
-                onSwitchToggled: SettingsAdapter.setVideoState(checked)
-            }
-
-            RowLayout {
-                Layout.fillWidth: true
-                Layout.fillHeight: true
-
-                ColumnLayout {
-                    Layout.fillWidth: true
-                    Layout.fillHeight: true
-
-                    RowLayout {
-                        Layout.fillWidth: true
-                        Layout.fillHeight: true
-                        Layout.maximumHeight: JamiTheme.preferredFieldHeight
-
-                        ElidedTextLabel {
-                            Layout.fillWidth: true
-                            Layout.preferredHeight: JamiTheme.preferredFieldHeight
-
-                            maxWidth: width
-                            eText:  qsTr("Video Codecs")
-                            fontSize: JamiTheme.settingsFontSize
-                        }
-
-                        HoverableButtonTextItem {
-                            id: videoDownPushButton
-
-                            Layout.preferredWidth: 24
-                            Layout.preferredHeight: 24
-
-                            radius: height / 2
-
-                            source: "qrc:/images/icons/round-arrow_drop_down-24px.svg"
-
-                            onClicked: {
-                                decreaseVideoCodecPriority()
-                            }
-                        }
-
-                        HoverableButtonTextItem {
-                            id: videoUpPushButton
-
-                            Layout.preferredWidth: 24
-                            Layout.preferredHeight: 24
-
-                            radius: height / 2
-
-                            source: "qrc:/images/icons/round-arrow_drop_up-24px.svg"
-
-                            onClicked: {
-                                increaseVideoCodecPriority()
-                            }
-                        }
-                    }
-
-                    ListViewJami {
-                        id: videoListWidget
-
-                        Layout.fillWidth: true
-                        Layout.preferredHeight: 190
-
-                        model: VideoCodecListModel{}
-
-                        delegate: VideoCodecDelegate {
-                            id: videoCodecDelegate
-
-                            width: videoListWidget.width
-                            height: videoListWidget.height / 4
-
-                            videoCodecName : VideoCodecName
-                            isEnabled : IsEnabled
-                            videoCodecId: VideoCodecID
-
-                            onClicked: {
-                                videoListWidget.currentIndex = index
-                            }
-
-                            onVideoCodecStateChange:{
-                               SettingsAdapter.videoCodecsStateChange(idToSet , isToBeEnabled)
-                                updateVideoCodecs()
-                            }
-                        }
-                    }
-                }
-
-                ColumnLayout {
-                    Layout.fillWidth: true
-                    Layout.fillHeight: true
-                    Layout.leftMargin: JamiTheme.preferredMarginSize / 2
-
-                    RowLayout {
-                        Layout.fillWidth: true
-                        Layout.fillHeight: true
-                        Layout.maximumHeight: JamiTheme.preferredFieldHeight
-
-                        ElidedTextLabel {
-                            Layout.fillWidth: true
-                            Layout.preferredHeight: JamiTheme.preferredFieldHeight
-
-                            maxWidth: width
-                            eText:  qsTr("Audio Codecs")
-                            fontSize: JamiTheme.settingsFontSize
-                        }
-
-                        HoverableButtonTextItem {
-                            id: audioDownPushButton
-
-                            Layout.preferredWidth: 24
-                            Layout.preferredHeight: 24
-
-                            radius: height / 2
-
-                            source: "qrc:/images/icons/round-arrow_drop_down-24px.svg"
-
-                            onClicked: {
-                                decreaseAudioCodecPriority()
-                            }
-                        }
-
-                        HoverableButtonTextItem {
-                            id: audioUpPushButton
-
-                            Layout.preferredWidth: 24
-                            Layout.preferredHeight: 24
-
-                            radius: height / 2
-
-                            source: "qrc:/images/icons/round-arrow_drop_up-24px.svg"
-
-                            onClicked: {
-                                increaseAudioCodecPriority()
-                            }
-                        }
-                    }
-
-                    ListViewJami {
-                        id: audioListWidget
-
-                        Layout.fillWidth: true
-                        Layout.preferredHeight: 190
-
-                        model: AudioCodecListModel{}
-
-                        delegate: AudioCodecDelegate {
-                            id: audioCodecDelegate
-
-                            width: audioListWidget.width
-                            height: audioListWidget.height / 4
-
-                            layer.mipmap: false
-                            clip: true
-
-                            audioCodecName : AudioCodecName
-                            isEnabled : IsEnabled
-                            audioCodecId: AudioCodecID
-                            samplerRate: Samplerate
-
-                            onClicked: {
-                                audioListWidget.currentIndex = index
-                            }
-
-                            onAudioCodecStateChange:{
-                               SettingsAdapter.audioCodecsStateChange(idToSet , isToBeEnabled)
-                                updateAudioCodecs()
-                            }
-                        }
-                    }
-                }
-            }
-        }
-    }
-}
diff --git a/src/settingsview/components/AdvancedVoiceMailSettings.qml b/src/settingsview/components/AdvancedVoiceMailSettings.qml
new file mode 100644
index 000000000..842b1af52
--- /dev/null
+++ b/src/settingsview/components/AdvancedVoiceMailSettings.qml
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2020 by Savoir-faire Linux
+ * Author: Aline Gondim Santos <aline.gondimsantos@savoirfairelinux.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+import QtQuick 2.15
+import QtQuick.Layouts 1.15
+import QtQuick.Window 2.14
+import QtQuick.Controls 2.15
+import QtQuick.Controls.Universal 2.12
+import QtGraphicalEffects 1.14
+import QtQuick.Controls.Styles 1.4
+import net.jami.Models 1.0
+import net.jami.Adapters 1.0
+import Qt.labs.platform 1.1
+import "../../commoncomponents"
+import "../../constant"
+
+ColumnLayout {
+    id: root
+
+    property int itemWidth
+
+    function updateVoiceMailSettingsInfos() {
+        lineEditVoiceMailDialCode.setText(SettingsAdapter.getAccountConfig_Mailbox())
+    }
+
+    ElidedTextLabel {
+        Layout.fillWidth: true
+        Layout.preferredHeight: JamiTheme.preferredFieldHeight
+
+        eText: qsTr("Voicemail")
+        fontSize: JamiTheme.headerFontSize
+        maxWidth: width
+    }
+
+    SettingsMaterialLineEdit {
+        id: lineEditVoiceMailDialCode
+
+        Layout.fillWidth: true
+        Layout.leftMargin: JamiTheme.preferredMarginSize
+        Layout.preferredHeight: JamiTheme.preferredFieldHeight
+        itemWidth: root.itemWidth
+        titleField: qsTr("Voicemail Dial Code")
+
+        onEditFinished: SettingsAdapter.lineEditVoiceMailDialCodeEditFinished(textField)
+    }
+}
\ No newline at end of file
diff --git a/src/settingsview/components/AudioSettings.qml b/src/settingsview/components/AudioSettings.qml
new file mode 100644
index 000000000..8321829d7
--- /dev/null
+++ b/src/settingsview/components/AudioSettings.qml
@@ -0,0 +1,205 @@
+/*
+ * Copyright (C) 2020 by Savoir-faire Linux
+ * Author: Aline Gondim Santos <aline.gondimsantos@savoirfairelinux.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+import QtQuick 2.15
+import QtQuick.Window 2.14
+import QtQuick.Controls 2.15
+import QtQuick.Controls.Universal 2.12
+import QtQuick.Layouts 1.3
+import QtGraphicalEffects 1.14
+import QtQuick.Controls.Styles 1.4
+import net.jami.Models 1.0
+import net.jami.Adapters 1.0
+import net.jami.Enums 1.0
+import Qt.labs.platform 1.1
+import "../../commoncomponents"
+
+ColumnLayout {
+    id:root
+
+    property int itemWidth
+
+    enum Setting {
+        AUDIOINPUT,
+        AUDIOOUTPUT,
+        RINGTONEDEVICE,
+        AUDIOMANAGER
+    }
+
+    Connections {
+        target: settingsViewRect
+
+        function onStopAudioMeter() {
+            stopAudioMeter()
+        }
+
+        function onStartAudioMeter() {
+            startAudioMeter()
+        }
+    }
+
+    Connections{
+        target: AVModel
+        enabled: root.visible
+
+        function onAudioMeter(id, level) {
+            if (id === "audiolayer_id") {
+                audioInputMeter.setLevel(level)
+            }
+        }
+    }
+
+    function populateAudioSettings() {
+        inputComboBoxSetting.comboModel.reset()
+        audioOutputDeviceModel.reset()
+        audioManagerComboBoxSetting.comboModel.reset()
+
+        inputComboBoxSetting.setCurrentIndex(inputComboBoxSetting.comboModel.getCurrentSettingIndex())
+        outputComboBoxSetting.setCurrentIndex(audioOutputDeviceModel.getCurrentSettingIndex())
+        ringtoneDeviceComboBoxSetting.setCurrentIndex(audioOutputDeviceModel.getCurrentRingtoneDeviceIndex())
+        if(audioManagerComboBoxSetting.comboModel.rowCount() > 0) {
+            audioManagerComboBoxSetting.setCurrentIndex(audioManagerComboBoxSetting.comboModel.getCurrentSettingIndex())
+        }
+
+        audioManagerComboBoxSetting.visible = (audioManagerComboBoxSetting.comboModel.rowCount() > 0)
+    }
+
+    function stopAudioMeter(async = true){
+        audioInputMeter.stop()
+        AccountAdapter.stopAudioMeter(async)
+    }
+
+    function startAudioMeter(async = true){
+        audioInputMeter.start()
+        AccountAdapter.startAudioMeter(async)
+    }
+
+    AudioOutputDeviceModel{
+        id: audioOutputDeviceModel
+    }
+
+    ElidedTextLabel {
+        Layout.fillWidth: true
+        Layout.preferredHeight: JamiTheme.preferredFieldHeight
+
+        eText: qsTr("Audio")
+        fontSize: JamiTheme.headerFontSize
+        maxWidth: width
+    }
+
+    SettingsComboBox {
+        id: inputComboBoxSetting
+
+        Layout.fillWidth: true
+        Layout.maximumHeight: JamiTheme.preferredFieldHeight
+        Layout.leftMargin: JamiTheme.preferredMarginSize
+
+        labelText: qsTr("Microphone")
+        fontPointSize: JamiTheme.settingsFontSize
+        comboModel: AudioInputDeviceModel {}
+        widthOfComboBox: itemWidth
+        tipText: qsTr("Audio input device selector")
+        role: "ID_UTF8"
+
+        onIndexChanged: {
+            stopAudioMeter(false)
+            var selectedInputDeviceName = comboModel.data(comboModel.index( modelIndex, 0), AudioInputDeviceModel.Device_ID)
+            AVModel.setInputDevice(selectedInputDeviceName)
+            startAudioMeter(false)
+        }
+    }
+
+    // the audio level meter
+    LevelMeter {
+        id: audioInputMeter
+
+        Layout.alignment: Qt.AlignHCenter
+        Layout.preferredWidth: itemWidth * 2
+        Layout.preferredHeight: JamiTheme.preferredFieldHeight
+
+        indeterminate: false
+        from: 0
+        to: 100
+    }
+
+    SettingsComboBox {
+        id: outputComboBoxSetting
+
+        Layout.fillWidth: true
+        Layout.maximumHeight: JamiTheme.preferredFieldHeight
+        Layout.leftMargin: JamiTheme.preferredMarginSize
+
+        labelText: qsTr("Output Device")
+        fontPointSize: JamiTheme.settingsFontSize
+        comboModel: audioOutputDeviceModel
+        widthOfComboBox: itemWidth
+        tipText: qsTr("Choose the audio output device")
+        role: "ID_UTF8"
+
+        onIndexChanged: {
+            stopAudioMeter(false)
+            var selectedOutputDeviceName = audioOutputDeviceModel.data(audioOutputDeviceModel.index( modelIndex, 0), AudioOutputDeviceModel.Device_ID)
+            AVModel.setOutputDevice(selectedOutputDeviceName)
+            startAudioMeter(false)
+        }
+    }
+
+    SettingsComboBox {
+        id: ringtoneDeviceComboBoxSetting
+
+        Layout.fillWidth: true
+        Layout.maximumHeight: JamiTheme.preferredFieldHeight
+        Layout.leftMargin: JamiTheme.preferredMarginSize
+
+        labelText: qsTr("Ringtone Device")
+        fontPointSize: JamiTheme.settingsFontSize
+        comboModel: audioOutputDeviceModel
+        widthOfComboBox: itemWidth
+        tipText: qsTr("Choose the ringtone output device")
+        role: "ID_UTF8"
+
+        onIndexChanged: {
+            stopAudioMeter(false)
+            var selectedRingtoneDeviceName = audioOutputDeviceModel.data(audioOutputDeviceModel.index( modelIndex, 0), AudioOutputDeviceModel.Device_ID)
+            AVModel.setRingtoneDevice(selectedRingtoneDeviceName)
+            startAudioMeter(false)
+        }
+    }
+
+    SettingsComboBox {
+        id: audioManagerComboBoxSetting
+
+        Layout.fillWidth: true
+        Layout.maximumHeight: JamiTheme.preferredFieldHeight
+        Layout.leftMargin: JamiTheme.preferredMarginSize
+
+        labelText: qsTr("Audio Manager")
+        fontPointSize: JamiTheme.settingsFontSize
+        comboModel: AudioManagerListModel {}
+        widthOfComboBox: itemWidth
+        role: "ID_UTF8"
+
+        onIndexChanged: {
+            stopAudioMeter(false)
+            var selectedAudioManager = comboModel.data(comboModel.index( modelIndex, 0), AudioManagerListModel.AudioManagerID)
+            AVModel.setAudioManager(selectedAudioManager)
+            startAudioMeter(false)
+            populateAudioSettings()
+        }
+    }
+}
diff --git a/src/settingsview/components/AvSettingPage.qml b/src/settingsview/components/AvSettingPage.qml
index 72ac98b9a..aa56c8c0b 100644
--- a/src/settingsview/components/AvSettingPage.qml
+++ b/src/settingsview/components/AvSettingPage.qml
@@ -32,259 +32,35 @@ Rectangle {
     id: root
 
     property int preferredColumnWidth: root.width / 2 - 50
-    property int preferredSettingsWidth: root.width - 100
-    property real aspectRatio: 0.75
-    property bool previewAvailable: false
 
     signal backArrowClicked
 
-    Connections{
-        target: AVModel
-        enabled: root.visible
-
-        function onAudioMeter(id, level){
-            slotAudioMeter(id,level)
-        }
-    }
-
-    Connections{
-        target: RenderManager
-        enabled: root.visible
-
-        function onVideoDeviceListChanged(){
-            slotVideoDeviceListChanged()
-        }
-    }
-
     onVisibleChanged: {
         if (!visible) {
-            stopPreviewing()
-            stopAudioMeter()
-        }
-    }
-
-    function populateAVSettings(){
-        audioInputComboBox.model.reset()
-        audioOutputDeviceModel.reset()
-
-        audioInputComboBox.currentIndex = audioInputComboBox.model.getCurrentSettingIndex()
-        outputComboBox.currentIndex = audioOutputDeviceModel.getCurrentSettingIndex()
-        ringtoneDeviceComboBox.currentIndex = audioOutputDeviceModel.getCurrentRingtoneDeviceIndex()
-
-        audioManagerRowLayout.visible = (audioManagerComboBox.model.rowCount() > 0)
-        if(audioManagerComboBox.model.rowCount() > 0){
-        audioManagerComboBox.currentIndex = audioManagerComboBox.model.getCurrentSettingIndex()
-        }
-
-        populateVideoSettings()
-        var encodeAccel = AVModel.getHardwareAcceleration()
-        hardwareAccelControl.checked = encodeAccel
-    }
-
-    function populateVideoSettings() {
-        deviceBox.model.reset()
-
-        deviceBox.enabled = (deviceBox.model.deviceCount() > 0)
-        resolutionBox.enabled = (deviceBox.model.deviceCount() > 0)
-        fpsBox.enabled = (deviceBox.model.deviceCount() > 0)
-        labelVideoDevice.enabled = (deviceBox.model.deviceCount() > 0)
-        labelVideoResolution.enabled = (deviceBox.model.deviceCount() > 0)
-        labelVideoFps.enabled = (deviceBox.model.deviceCount() > 0)
-
-        deviceBox.currentIndex = deviceBox.model.getCurrentSettingIndex()
-        slotDeviceBoxCurrentIndexChanged(deviceBox.currentIndex)
-
-        try{
-            startPreviewing(false)
-        } catch (err2){ console.log("Start preview fail when populate video settings, exception: "+ err2.message)}
-
-    }
-
-    function setFormatListForCurrentDevice(){
-        var device = AVModel.getCurrentVideoCaptureDevice()
-        if(SettingsAdapter.get_DeviceCapabilitiesSize(device) === 0){
-            return
-        }
-
-        try{
-            resolutionBox.model.reset()
-            resolutionBox.currentIndex = resolutionBox.model.getCurrentSettingIndex()
-            slotFormatCurrentIndexChanged(resolutionBox.currentIndex,true)
-        } catch(err){console.warn("Exception: " + err.message)}
-    }
-
-    function startPreviewing(force = false, async = true){
-        AccountAdapter.startPreviewing(force, async)
-        previewAvailable = true
-    }
-
-    function stopPreviewing(async = true){
-        AccountAdapter.stopPreviewing(async)
-    }
-
-    function startAudioMeter(async = true){
-        audioInputMeter.start()
-        AccountAdapter.startAudioMeter(async)
-    }
-
-    function stopAudioMeter(async = true){
-        audioInputMeter.stop()
-        AccountAdapter.stopAudioMeter(async)
-    }
-
-    // slots for av page
-    function slotAudioMeter(id, level){
-        if (id === "audiolayer_id") {
-                audioInputMeter.setLevel(level)
-            }
-    }
-
-    function slotSetHardwareAccel(state){
-        AVModel.setHardwareAcceleration(state)
-        startPreviewing(true)
-    }
-
-    function slotAudioManagerIndexChanged(index){
-        stopAudioMeter(false)
-        var selectedAudioManager = audioManagerComboBox.model.data(audioManagerComboBox.model.index(
-                                                        index, 0), AudioManagerListModel.AudioManagerID)
-        AVModel.setAudioManager(selectedAudioManager)
-        startAudioMeter(false)
-    }
-
-    function slotRingtoneDeviceIndexChanged(index){
-        stopAudioMeter(false)
-        var selectedRingtoneDeviceName = audioOutputDeviceModel.data(audioOutputDeviceModel.index(
-                                                        index, 0), AudioOutputDeviceModel.Device_ID)
-        AVModel.setRingtoneDevice(selectedRingtoneDeviceName)
-        startAudioMeter(false)
-    }
-
-    function slotAudioOutputIndexChanged(index){
-        stopAudioMeter(false)
-        var selectedOutputDeviceName = audioOutputDeviceModel.data(audioOutputDeviceModel.index(
-                                                        index, 0), AudioOutputDeviceModel.Device_ID)
-        AVModel.setOutputDevice(selectedOutputDeviceName)
-        startAudioMeter(false)
-    }
-
-    function slotAudioInputIndexChanged(index){
-        stopAudioMeter(false)
-        var selectedInputDeviceName = audioInputComboBox.model.data(audioInputComboBox.model.index(
-                                                        index, 0), AudioInputDeviceModel.Device_ID)
-
-        AVModel.setInputDevice(selectedInputDeviceName)
-        startAudioMeter(false)
-    }
-
-    function slotDeviceBoxCurrentIndexChanged(index){
-        if(deviceBox.model.deviceCount() <= 0){
-            return
-        }
-
-        try{
-            var deviceId = deviceBox.model.data(deviceBox.model.index(
-                                                          index, 0), VideoInputDeviceModel.DeviceId)
-            var deviceName = deviceBox.model.data(deviceBox.model.index(
-                                                            index, 0), VideoInputDeviceModel.DeviceName)
-            if(deviceId.length === 0){
-                console.warn("Couldn't find device: " + deviceName)
-                return
-            }
-
-            AVModel.setCurrentVideoCaptureDevice(deviceId)
-            AVModel.setDefaultDevice(deviceId)
-            setFormatListForCurrentDevice()
-            startPreviewing(true)
-        } catch(err){console.warn(err.message)}
-    }
-
-    function slotFormatCurrentIndexChanged(index, isResolutionIndex){
-        var resolution
-        var rate
-        if(isResolutionIndex){
-            resolution = resolutionBox.model.data(resolutionBox.model.index(
-                                                                 index, 0), VideoFormatResolutionModel.Resolution)
-            fpsBox.model.currentResolution = resolution
-            fpsBox.currentIndex = fpsBox.model.getCurrentSettingIndex()
-            rate = fpsBox.model.data(fpsBox.model.index(
-                                                       fpsBox.currentIndex, 0), VideoFormatFpsModel.FPS)
-        } else {
-            resolution = resolutionBox.model.data(resolutionBox.model.index(
-                                                                 resolutionBox.currentIndex, 0), VideoFormatResolutionModel.Resolution)
-            fpsBox.model.currentResolution = resolution
-            rate = fpsBox.model.data(fpsBox.model.index(
-                                                       index, 0), VideoFormatFpsModel.FPS)
-        }
-
-        try{
-           SettingsAdapter.set_Video_Settings_Rate_And_Resolution(AVModel.getCurrentVideoCaptureDevice(),rate,resolution)
-            updatePreviewRatio(resolution)
-        } catch(error){console.warn(error.message)}
-    }
-
-    function slotVideoDeviceListChanged(){
-        populateVideoSettings()
-    }
-
-    function updatePreviewRatio(resolution){
-        var res = resolution.split("x")
-        var ratio = res[1] / res[0]
-        if (ratio) {
-            aspectRatio = ratio
-        } else {
-            console.error("Could not scale recording video preview")
+            videoSettings.stopPreviewing()
+            audioSettings.stopAudioMeter()
         }
     }
 
-    AudioOutputDeviceModel{
-        id: audioOutputDeviceModel
+    function populateAVSettings() {
+        audioSettings.populateAudioSettings()
+        videoSettings.populateVideoSettings()
     }
 
     ColumnLayout {
         anchors.fill: root
 
-        RowLayout {
-            id: avSettingsTitle
+        SettingsHeader {
             Layout.alignment: Qt.AlignLeft | Qt.AlignVCenter
             Layout.leftMargin: JamiTheme.preferredMarginSize
             Layout.fillWidth: true
             Layout.preferredHeight: 64
 
-            HoverableButton {
-                id: backToSettingsMenuButton
-
-                Layout.preferredWidth: JamiTheme.preferredFieldHeight
-                Layout.preferredHeight: JamiTheme.preferredFieldHeight
-
-                radius: JamiTheme.preferredFieldHeight
-                source: "qrc:/images/icons/ic_arrow_back_24px.svg"
-                backgroundColor: "white"
-                onExitColor: "white"
-                toolTipText: qsTr("Toggle to display side panel")
-                hoverEnabled: true
-
-                visible: mainViewWindow.sidePanelHidden
-
-                onClicked: {
-                    backArrowClicked()
-                }
-            }
-
-            Label {
-                Layout.fillWidth: true
-
-                text: qsTr("Audio / Video")
-                font.pointSize: JamiTheme.titleFontSize
-                font.kerning: true
-
-                horizontalAlignment: Text.AlignLeft
-                verticalAlignment: Text.AlignVCenter
-            }
+            title: qsTr("Audio / Video")
 
+            onBackArrowClicked: root.backArrowClicked()
         }
 
-
         ScrollView {
             id: avSettingsScrollView
 
@@ -302,341 +78,25 @@ Rectangle {
                 width: root.width
 
                 // Audio
-                ColumnLayout {
-                    Layout.fillWidth: true
-                    Layout.leftMargin: JamiTheme.preferredMarginSize
-                    Layout.rightMargin: JamiTheme.preferredMarginSize
-
-                    ElidedTextLabel {
-                        Layout.fillWidth: true
-                        Layout.preferredHeight: JamiTheme.preferredFieldHeight
-
-                        eText: qsTr("Audio")
-                        fontSize: JamiTheme.headerFontSize
-                        maxWidth: width
-                    }
-
-                    RowLayout {
-                        Layout.fillWidth: true
-                        Layout.maximumHeight: JamiTheme.preferredFieldHeight
-                        Layout.leftMargin: JamiTheme.preferredMarginSize
-
-                        ElidedTextLabel {
-                            Layout.fillWidth: true
-                            Layout.fillHeight: true
-
-                            eText: qsTr("Microphone")
-                            fontSize: JamiTheme.settingsFontSize
-                            maxWidth: width
-                        }
+                AudioSettings {
+                    id: audioSettings
 
-
-                        SettingParaCombobox {
-                            id: audioInputComboBox
-
-                            Layout.preferredWidth: preferredColumnWidth
-                            Layout.preferredHeight: JamiTheme.preferredFieldHeight
-
-                            font.pointSize: JamiTheme.buttonFontSize
-                            font.kerning: true
-
-                            model: AudioInputDeviceModel {}
-                            textRole: "ID_UTF8"
-                            tooltipText: qsTr("Audio input device selector")
-                            onActivated: {
-                                slotAudioInputIndexChanged(index)
-                            }
-                        }
-                    }
-
-                    // the audio level meter
-                    LevelMeter {
-                        id: audioInputMeter
-
-                        Layout.alignment: Qt.AlignHCenter
-                        Layout.preferredWidth: preferredSettingsWidth
-                        Layout.preferredHeight: JamiTheme.preferredFieldHeight
-
-                        indeterminate: false
-                        from: 0
-                        to: 100
-                    }
-
-                    RowLayout {
-                        Layout.fillWidth: true
-                        Layout.maximumHeight: JamiTheme.preferredFieldHeight
-                        Layout.leftMargin: JamiTheme.preferredMarginSize
-
-                        ElidedTextLabel {
-                            Layout.fillWidth: true
-
-                            eText: qsTr("Output Device")
-                            fontSize: JamiTheme.settingsFontSize
-                            maxWidth: width
-                        }
-
-
-                        SettingParaCombobox {
-                            id: outputComboBox
-
-                            Layout.preferredWidth: preferredColumnWidth
-                            Layout.preferredHeight: JamiTheme.preferredFieldHeight
-
-                            font.pointSize: JamiTheme.settingsFontSize
-                            font.kerning: true
-
-                            model: audioOutputDeviceModel
-                            textRole: "ID_UTF8"
-                            tooltipText: qsTr("Choose the audio output device")
-                            onActivated: {
-                                slotAudioOutputIndexChanged(index)
-                            }
-                        }
-                    }
-
-                    RowLayout {
-                        Layout.fillWidth: true
-                        Layout.maximumHeight: JamiTheme.preferredFieldHeight
-                        Layout.leftMargin: JamiTheme.preferredMarginSize
-
-                        ElidedTextLabel {
-                            Layout.fillWidth: true
-
-                            eText: qsTr("Ringtone Device")
-                            font.pointSize: JamiTheme.settingsFontSize
-                            maxWidth: width
-                        }
-
-
-                        SettingParaCombobox {
-                            id: ringtoneDeviceComboBox
-
-                            Layout.preferredWidth: preferredColumnWidth
-                            Layout.preferredHeight: JamiTheme.preferredFieldHeight
-
-                            font.pointSize: JamiTheme.settingsFontSize
-                            font.kerning: true
-
-                            model: audioOutputDeviceModel
-
-                            textRole: "ID_UTF8"
-                            tooltipText: qsTr("Choose the ringtone output device")
-                            onActivated: {
-                                slotRingtoneDeviceIndexChanged(index)
-                            }
-                        }
-                    }
-
-                    RowLayout {
-                        id: audioManagerRowLayout
-
-                        Layout.fillWidth: true
-                        Layout.maximumHeight: JamiTheme.preferredFieldHeight
-                        Layout.leftMargin: JamiTheme.preferredMarginSize
-
-                        ElidedTextLabel {
-                            Layout.fillWidth: true
-
-                            text: qsTr("Audio Manager")
-                            fontSize: JamiTheme.settingsFontSize
-                            maxWidth: width
-                        }
-
-                        SettingParaCombobox {
-                            id: audioManagerComboBox
-
-                            Layout.preferredWidth: preferredColumnWidth
-                            Layout.preferredHeight: JamiTheme.preferredFieldHeight
-
-                            font.pointSize: JamiTheme.buttonFontSize
-                            font.kerning: true
-
-                            model: AudioManagerListModel {}
-
-                            textRole: "ID_UTF8"
-
-                            onActivated: {
-                                slotAudioManagerIndexChanged(index)
-                            }
-                        }
-                    }
-                }
-
-                ColumnLayout {
                     Layout.fillWidth: true
                     Layout.leftMargin: JamiTheme.preferredMarginSize
                     Layout.rightMargin: JamiTheme.preferredMarginSize
 
-                    ElidedTextLabel {
-                        Layout.fillWidth: true
-                        Layout.preferredHeight: JamiTheme.preferredFieldHeight
-
-                        eText: qsTr("Video")
-                        fontSize: JamiTheme.headerFontSize
-                        maxWidth: preferredSettingsWidth
-                    }
-
-                    RowLayout {
-                        Layout.fillWidth: true
-                        Layout.maximumHeight: JamiTheme.preferredFieldHeight
-                        Layout.leftMargin: JamiTheme.preferredMarginSize
-
-                        ElidedTextLabel {
-                            id: labelVideoDevice
-
-                            Layout.fillWidth: true
-
-                            eText: qsTr("Device")
-                            fontSize: JamiTheme.settingsFontSize
-                            maxWidth: width
-                        }
-
-
-                        SettingParaCombobox {
-                            id: deviceBox
-
-                            Layout.preferredWidth: preferredColumnWidth
-                            Layout.preferredHeight: JamiTheme.preferredFieldHeight
-
-                            font.pointSize: JamiTheme.buttonFontSize
-                            font.kerning: true
-
-                            model: VideoInputDeviceModel {}
-
-                            textRole: "DeviceName_UTF8"
-                            tooltipText: qsTr("Video device selector")
-                            onActivated: {
-                                slotDeviceBoxCurrentIndexChanged(index)
-                            }
-                        }
-                    }
-
-                    RowLayout {
-                        Layout.fillWidth: true
-                        Layout.maximumHeight: JamiTheme.preferredFieldHeight
-                        Layout.leftMargin: JamiTheme.preferredMarginSize
-
-                        ElidedTextLabel {
-                            id: labelVideoResolution
-
-                            Layout.fillWidth: true
-
-                            eText: qsTr("Resolution")
-                            fontSize: JamiTheme.settingsFontSize
-                            maxWidth: width
-                        }
-
-                        SettingParaCombobox {
-                            id: resolutionBox
-
-                            Layout.preferredWidth: preferredColumnWidth
-                            Layout.preferredHeight: JamiTheme.preferredFieldHeight
-
-                            font.pointSize: JamiTheme.buttonFontSize
-                            font.kerning: true
-
-                            model: VideoFormatResolutionModel {}
-                            textRole: "Resolution_UTF8"
-
-                            tooltipText: qsTr("Video device resolution selector")
-
-                            onActivated: {
-                                slotFormatCurrentIndexChanged(index,true)
-                            }
-                        }
-                    }
-
-                    RowLayout {
-                        Layout.fillWidth: true
-                        Layout.maximumHeight: JamiTheme.preferredFieldHeight
-                        Layout.leftMargin: JamiTheme.preferredMarginSize
-
-                        ElidedTextLabel {
-                            id: labelVideoFps
-
-                            Layout.fillWidth: true
-
-                            eText: qsTr("Fps")
-                            fontSize: JamiTheme.settingsFontSize
-                            maxWidth: width
-                        }
-
-                        SettingParaCombobox {
-                            id: fpsBox
-
-                            Layout.preferredWidth: preferredColumnWidth
-                            Layout.preferredHeight: JamiTheme.preferredFieldHeight
-
-                            font.pointSize: JamiTheme.buttonFontSize
-                            font.kerning: true
-
-                            model: VideoFormatFpsModel {}
-                            textRole: "FPS_ToDisplay_UTF8"
-
-                            tooltipText: qsTr("Video device fps selector")
-
-                            onActivated: {
-                                slotFormatCurrentIndexChanged(index,false)
-                            }
-                        }
-                    }
-                }
-
-                Rectangle {
-                    id: rectBox
-                    Layout.alignment: Qt.AlignHCenter
-                    Layout.maximumHeight: width * aspectRatio
-                    Layout.minimumHeight: width * aspectRatio
-                    Layout.preferredHeight: width * aspectRatio
-
-                    Layout.minimumWidth: 200
-                    Layout.maximumWidth: 400
-                    Layout.preferredWidth: preferredSettingsWidth
-                    color: "white"
-                    radius: 5
-
-                    PreviewRenderer {
-                        id: previewWidget
-                        anchors.fill: rectBox
-                        anchors.centerIn: rectBox
-
-                        layer.enabled: true
-                        layer.effect: OpacityMask {
-                            maskSource: rectBox
-                        }
-                    }
-                }
-
-                Label {
-                    visible: !previewAvailable
-
-                    Layout.fillWidth: true
-
-                    Layout.preferredHeight: JamiTheme.preferredFieldHeight
-
-                    text: qsTr("Preview unavailable")
-                    font.pointSize: JamiTheme.settingsFontSize
-                    font.kerning: true
-
-                    horizontalAlignment: Text.AlignHCenter
-                    verticalAlignment: Text.AlignVCenter
+                    itemWidth: preferredColumnWidth
                 }
 
-                // Toggle switch to enable hardware acceleration
-                ToggleSwitch {
-                    id: hardwareAccelControl
+                // Video
+                VideoSettings {
+                    id: videoSettings
 
                     Layout.fillWidth: true
                     Layout.leftMargin: JamiTheme.preferredMarginSize
                     Layout.rightMargin: JamiTheme.preferredMarginSize
-                    Layout.bottomMargin: JamiTheme.preferredMarginSize
-
-                    labelText: qsTr("Enable hardware acceleration")
-                    fontPointSize: JamiTheme.settingsFontSize
 
-                    onSwitchToggled: {
-                        slotSetHardwareAccel(checked)
-                    }
+                    itemWidth: preferredColumnWidth
                 }
             }
         }
diff --git a/src/settingsview/components/BannedContacts.qml b/src/settingsview/components/BannedContacts.qml
new file mode 100644
index 000000000..1c4681745
--- /dev/null
+++ b/src/settingsview/components/BannedContacts.qml
@@ -0,0 +1,153 @@
+/*
+ * Copyright (C) 2020 by Savoir-faire Linux
+ * Author: Aline Gondim Santos <aline.gondimsantos@savoirfairelinux.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+import QtQuick 2.15
+import QtQuick.Window 2.14
+import QtQuick.Controls 2.15
+import QtQuick.Controls.Universal 2.12
+import QtQuick.Layouts 1.3
+import QtGraphicalEffects 1.14
+import QtQuick.Controls.Styles 1.4
+import net.jami.Models 1.0
+import net.jami.Adapters 1.0
+import Qt.labs.platform 1.1
+import "../../commoncomponents"
+
+ColumnLayout {
+    id:root
+
+    property bool isSIP
+
+    visible: {
+        if (bannedListWidget.model.rowCount() <= 0)
+            return false
+        return true && !isSIP && SettingsAdapter.getAccountConfig_Manageruri() === ""
+    }
+
+    Connections {
+        target: MessagesAdapter
+
+        function onContactBanned() {
+            bannedListWidget.model.reset()
+            root.visible = true
+            bannedContactsBtn.visible = true
+            bannedListWidget.visible = false
+        }
+    }
+
+    Connections {
+        id: accountConnections_ContactModel
+        target: AccountAdapter.contactModel
+        enabled: root.visible
+
+        function onModelUpdated(uri, needsSorted) {
+            updateAndShowBannedContactsSlot()
+        }
+
+        function onContactAdded(contactUri) {
+            updateAndShowBannedContactsSlot()
+        }
+    }
+
+    function toggleBannedContacts() {
+        var bannedContactsVisible = bannedListWidget.visible
+        bannedListWidget.visible = !bannedContactsVisible
+        updateAndShowBannedContactsSlot()
+    }
+
+    function setVisibility() {
+        root.visible = bannedListWidget.model.rowCount() > 0
+    }
+
+    function updateAndShowBannedContactsSlot() {
+        bannedListWidget.model.reset()
+        setVisibility()
+        if(bannedListWidget.model.rowCount() <= 0) {
+            bannedListWidget.visible = false
+            bannedContactsBtn.visible = false
+        } else {
+            bannedContactsBtn.visible = true
+        }
+    }
+
+    function unban(index) {
+        SettingsAdapter.unbanContact(index)
+        updateAndShowBannedContactsSlot()
+    }
+
+    function connectCurrentAccount(status) {
+        accountConnections_ContactModel.enabled = status
+    }
+
+    RowLayout {
+        id: bannedContactsBtn
+
+        Layout.fillWidth: true
+
+        ElidedTextLabel {
+            Layout.fillWidth: true
+
+            eText: qsTr("Banned Contacts")
+            fontSize: JamiTheme.headerFontSize
+            maxWidth: root.width - JamiTheme.preferredFieldHeight
+                        - JamiTheme.preferredMarginSize * 4
+        }
+
+        HoverableButtonTextItem {
+            Layout.alignment: Qt.AlignRight
+            Layout.preferredWidth: JamiTheme.preferredFieldHeight
+            Layout.preferredHeight: JamiTheme.preferredFieldHeight
+
+            radius: height / 2
+
+            toolTipText: qsTr("press to open or hide display of banned contact")
+
+            source: bannedListWidget.visible?
+                        "qrc:/images/icons/round-arrow_drop_up-24px.svg" :
+                        "qrc:/images/icons/round-arrow_drop_down-24px.svg"
+
+            onClicked: toggleBannedContacts()
+        }
+    }
+
+    ListViewJami {
+        id: bannedListWidget
+
+        Layout.fillWidth: true
+        Layout.preferredHeight: 160
+
+        visible: false
+
+        model: BannedListModel {}
+
+        delegate: BannedItemDelegate {
+            id: bannedListDelegate
+
+            width: bannedListWidget.width
+            height: 74
+
+            contactName : ContactName
+            contactID: ContactID
+            contactPicture_base64: ContactPicture
+
+            onClicked: bannedListWidget.currentIndex = index
+
+            onBtnReAddContactClicked: unban(index)
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/settingsview/components/CurrentAccountSettings.qml b/src/settingsview/components/CurrentAccountSettings.qml
new file mode 100644
index 000000000..71e1f2b07
--- /dev/null
+++ b/src/settingsview/components/CurrentAccountSettings.qml
@@ -0,0 +1,332 @@
+/*
+ * Copyright (C) 2019-2020 by Savoir-faire Linux
+ * Author: Yang Wang   <yang.wang@savoirfairelinux.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+import QtQuick 2.15
+import QtQuick.Window 2.14
+import QtQuick.Controls 2.14
+import QtQuick.Controls.Universal 2.12
+import QtQuick.Layouts 1.3
+import QtGraphicalEffects 1.14
+import QtQuick.Controls.Styles 1.4
+import QtQuick.Dialogs 1.3
+import Qt.labs.platform 1.1
+import net.jami.Models 1.0
+import net.jami.Adapters 1.0
+
+import "../../commoncomponents"
+
+Rectangle {
+    id: root
+
+    property bool isSIP
+
+    property int preferredColumnWidth : root.width / 2 - 50
+
+    signal navigateToMainView
+    signal navigateToNewWizardView
+    signal backArrowClicked
+
+    function isPhotoBoothOpened() {
+        return accountProfile.isPhotoBoothOpened()
+    }
+
+    function updateAccountInfoDisplayed() {
+        accountProfile.setAvatar()
+
+        accountEnableCheckBox.checked = SettingsAdapter.get_CurrentAccountInfo_Enabled()
+        accountProfile.updateAccountInfo()
+        userIdentity.updateAccountInfo()
+        linkedDevices.updateAndShowDevicesSlot()
+        bannedContacts.setVisibility()
+        advancedSettings.updateAdvancedAccountInfos()
+    }
+
+    function passwordClicked() {
+        if (AccountAdapter.hasPassword()) {
+            passwordDialog.openDialog(PasswordDialog.ChangePassword)
+        } else {
+            passwordDialog.openDialog(PasswordDialog.SetPassword)
+        }
+    }
+
+    function exportAccountSlot() {
+        exportBtn_Dialog.open()
+    }
+
+    function delAccountSlot() {
+        deleteAccountDialog.open()
+    }
+
+    function connectCurrentAccount() {
+        if (!isSIP) {
+            linkedDevices.connectCurrentAccount(true)
+            bannedContacts.connectCurrentAccount(true)
+        }
+    }
+
+    function disconnectAccountConnections() {
+        linkedDevices.connectCurrentAccount(false)
+        bannedContacts.connectCurrentAccount(false)
+    }
+
+    DeleteAccountDialog {
+        id: deleteAccountDialog
+
+        anchors.centerIn: parent.Center
+
+        onAccepted: {
+            AccountAdapter.setSelectedConvId()
+
+            if(UtilsAdapter.getAccountListSize() > 0) {
+                navigateToMainView()
+            } else {
+                navigateToNewWizardView()
+            }
+        }
+    }
+
+    PasswordDialog {
+        id: passwordDialog
+
+        anchors.centerIn: parent.Center
+
+        onDoneSignal: {
+            var success = (code === successCode)
+            var title = success ? qsTr("Success") : qsTr("Error")
+            var iconMode = success ? StandardIcon.Information : StandardIcon.Critical
+
+            var info
+            switch(currentPurpose) {
+                case PasswordDialog.ExportAccount:
+                    info = success ? qsTr("Export Successful") : qsTr("Export Failed")
+                    break
+                case PasswordDialog.ChangePassword:
+                    info = success ? qsTr("Password Changed Successfully") : qsTr("Password Change Failed")
+                    break
+                case PasswordDialog.SetPassword:
+                    info = success ? qsTr("Password Set Successfully") : qsTr("Password Set Failed")
+                    passwdPushButton.text = success ? qsTr("Change Password") : qsTr("Set Password")
+                    break
+            }
+
+            MessageBox.openWithParameters(title,info, iconMode, StandardButton.Ok)
+        }
+    }
+
+    JamiFileDialog {
+        id: exportBtn_Dialog
+
+        mode: JamiFileDialog.SaveFile
+
+        title: qsTr("Export Account Here")
+        folder: StandardPaths.writableLocation(StandardPaths.DesktopLocation)
+
+        nameFilters: [qsTr("Jami archive files") + " (*.gz)", qsTr(
+                "All files") + " (*)"]
+
+        onAccepted: {
+            // is there password? If so, go to password dialog, else, go to following directly
+            var exportPath = UtilsAdapter.getAbsPath(file.toString())
+            if (AccountAdapter.hasPassword()) {
+                passwordDialog.openDialog(PasswordDialog.ExportAccount,exportPath)
+                return
+            } else {
+                if (exportPath.length > 0) {
+                    var isSuccessful = AccountAdapter.model.exportToFile(UtilsAdapter.getCurrAccId(), exportPath,"")
+                    var title = isSuccessful ? qsTr("Success") : qsTr("Error")
+                    var iconMode = isSuccessful ? StandardIcon.Information : StandardIcon.Critical
+                    var info = isSuccessful ? qsTr("Export Successful") : qsTr("Export Failed")
+                    MessageBox.openWithParameters(title,info, iconMode, StandardButton.Ok)
+                }
+            }
+        }
+    }
+
+    ColumnLayout {
+        anchors.fill: root
+
+        SettingsHeader {
+            Layout.alignment: Qt.AlignLeft | Qt.AlignVCenter
+            Layout.leftMargin: JamiTheme.preferredMarginSize
+            Layout.fillWidth: true
+            Layout.preferredHeight: 64
+
+            title: qsTr("Account Settings")
+
+            onBackArrowClicked: root.backArrowClicked()
+        }
+
+        ScrollView {
+            id: scrollView
+
+            property ScrollBar vScrollBar: ScrollBar.vertical
+            ScrollBar.horizontal.policy: ScrollBar.AlwaysOff
+            ScrollBar.vertical.policy: ScrollBar.AsNeeded
+
+            Layout.fillHeight: true
+            Layout.fillWidth: true
+
+            focus: true
+            clip: true
+
+            ColumnLayout {
+                id: accountLayout
+
+                width: root.width
+
+                ToggleSwitch {
+                    id: accountEnableCheckBox
+
+                    Layout.topMargin: JamiTheme.preferredMarginSize
+                    Layout.leftMargin: JamiTheme.preferredMarginSize
+                    Layout.rightMargin: JamiTheme.preferredMarginSize
+
+                    labelText: qsTr("Enable")
+                    fontPointSize: JamiTheme.headerFontSize
+
+                    onSwitchToggled: AccountAdapter.model.setAccountEnabled(UtilsAdapter.getCurrAccId(), checked)
+                }
+
+                AccountProfile {
+                    id: accountProfile
+
+                    Layout.fillWidth: true
+                    Layout.topMargin: JamiTheme.preferredMarginSize
+                    Layout.leftMargin: JamiTheme.preferredMarginSize
+                    Layout.rightMargin: JamiTheme.preferredMarginSize
+                }
+
+                UserIdentity {
+                    id: userIdentity
+                    isSIP: root.isSIP
+
+                    Layout.fillWidth: true
+                    Layout.alignment: Qt.AlignHCenter
+                    Layout.leftMargin: JamiTheme.preferredMarginSize
+                    Layout.rightMargin: JamiTheme.preferredMarginSize
+
+                    itemWidth: preferredColumnWidth
+                }
+
+                MaterialButton {
+                    id: passwdPushButton
+
+                    visible: !isSIP && SettingsAdapter.getAccountConfig_Manageruri() === ""
+                    Layout.alignment: Qt.AlignHCenter
+                    Layout.preferredWidth: JamiTheme.preferredFieldWidth
+                    Layout.preferredHeight: JamiTheme.preferredFieldHeight
+
+                    color: JamiTheme.buttonTintedBlack
+                    hoveredColor: JamiTheme.buttonTintedBlackHovered
+                    pressedColor: JamiTheme.buttonTintedBlackPressed
+                    outlined: true
+
+                    toolTipText: AccountAdapter.hasPassword() ?
+                                qsTr("Change the current password") :
+                                qsTr("Currently no password, press this button to set a password")
+                    text: AccountAdapter.hasPassword() ? qsTr("Change Password") :
+                                                                        qsTr("Set Password")
+
+                    source: "qrc:/images/icons/round-edit-24px.svg"
+
+                    onClicked: {
+                        passwordClicked()
+                    }
+                }
+
+                MaterialButton {
+                    id: btnExportAccount
+
+                    visible: !isSIP && SettingsAdapter.getAccountConfig_Manageruri() === ""
+                    Layout.alignment: Qt.AlignHCenter
+                    Layout.preferredWidth: JamiTheme.preferredFieldWidth
+                    Layout.preferredHeight: JamiTheme.preferredFieldHeight
+
+                    color: JamiTheme.buttonTintedBlack
+                    hoveredColor: JamiTheme.buttonTintedBlackHovered
+                    pressedColor: JamiTheme.buttonTintedBlackPressed
+                    outlined: true
+
+                    toolTipText: qsTr("Press this button to export account to a .gz file")
+                    text: qsTr("Export Account")
+
+                    source: "qrc:/images/icons/round-save_alt-24px.svg"
+
+                    onClicked: {
+                        exportAccountSlot()
+                    }
+                }
+
+                MaterialButton {
+                    Layout.alignment: Qt.AlignHCenter
+                    Layout.preferredWidth: JamiTheme.preferredFieldWidth
+                    Layout.preferredHeight: JamiTheme.preferredFieldHeight
+                    Layout.leftMargin: JamiTheme.preferredMarginSize
+                    Layout.rightMargin: JamiTheme.preferredMarginSize
+
+                    color: JamiTheme.buttonTintedRed
+                    hoveredColor: JamiTheme.buttonTintedRedHovered
+                    pressedColor: JamiTheme.buttonTintedRedPressed
+
+                    toolTipText: qsTr("Press this button to delete this account")
+                    text: qsTr("Delete Account")
+
+                    source: "qrc:/images/icons/delete_forever-24px.svg"
+
+                    onClicked: {
+                        delAccountSlot()
+                    }
+                }
+
+                LinkedDevices {
+                    id: linkedDevices
+                    visible: !isSIP && SettingsAdapter.getAccountConfig_Manageruri() === ""
+
+                    Layout.fillWidth: true
+                    Layout.alignment: Qt.AlignHCenter
+                    Layout.leftMargin: JamiTheme.preferredMarginSize
+                    Layout.rightMargin: JamiTheme.preferredMarginSize
+                }
+
+                BannedContacts {
+                    id: bannedContacts
+                    isSIP: root.isSIP
+
+                    Layout.fillWidth: true
+                    Layout.alignment: Qt.AlignHCenter
+                    Layout.leftMargin: JamiTheme.preferredMarginSize
+                    Layout.rightMargin: JamiTheme.preferredMarginSize
+                }
+
+                AdvancedSettings {
+                    id: advancedSettings
+
+                    Layout.fillWidth: true
+                    Layout.leftMargin: JamiTheme.preferredMarginSize
+                    Layout.rightMargin: JamiTheme.preferredMarginSize
+                    Layout.bottomMargin: 8
+
+                    itemWidth: preferredColumnWidth
+                    isSIP: root.isSIP
+
+                    onScrolled: scrollView.vScrollBar.position = advancedSettings.y / accountLayout.height
+                }
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/settingsview/components/CurrentAccountSettingsScrollPage.qml b/src/settingsview/components/CurrentAccountSettingsScrollPage.qml
deleted file mode 100644
index 968243462..000000000
--- a/src/settingsview/components/CurrentAccountSettingsScrollPage.qml
+++ /dev/null
@@ -1,899 +0,0 @@
-/*
- * Copyright (C) 2019-2020 by Savoir-faire Linux
- * Author: Yang Wang   <yang.wang@savoirfairelinux.com>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-import QtQuick 2.15
-import QtQuick.Window 2.14
-import QtQuick.Controls 2.14
-import QtQuick.Controls.Universal 2.12
-import QtQuick.Layouts 1.3
-import QtGraphicalEffects 1.14
-import QtQuick.Controls.Styles 1.4
-import QtQuick.Dialogs 1.3
-import Qt.labs.platform 1.1
-import net.jami.Models 1.0
-import net.jami.Adapters 1.0
-
-import "../../commoncomponents"
-
-Rectangle {
-    id: root
-
-    property string registeredName: ""
-    property bool registeredIdNeedsSet: false
-
-    property int preferredColumnWidth : root.width / 2 - 50
-
-    signal navigateToMainView
-    signal navigateToNewWizardView
-    signal backArrowClicked
-
-    function updateAccountInfoDisplayed() {
-        setAvatar()
-
-        accountEnableCheckBox.checked = SettingsAdapter.get_CurrentAccountInfo_Enabled()
-        displayNameLineEdit.text = SettingsAdapter.getCurrentAccount_Profile_Info_Alias()
-
-        var showLocalAccountConfig = (SettingsAdapter.getAccountConfig_Manageruri() === "")
-        passwdPushButton.visible = showLocalAccountConfig
-        btnExportAccount.visible = showLocalAccountConfig
-        linkDevPushButton.visible = showLocalAccountConfig
-
-        registeredIdNeedsSet = (SettingsAdapter.get_CurrentAccountInfo_RegisteredName() === "")
-
-        if(!registeredIdNeedsSet){
-            currentRegisteredID.text = SettingsAdapter.get_CurrentAccountInfo_RegisteredName()
-        } else {
-            currentRegisteredID.text = ""
-        }
-
-        currentRingIDText.text = SettingsAdapter.getCurrentAccount_Profile_Info_Uri()
-
-        // update device list view
-        updateAndShowDevicesSlot()
-
-        bannedContactsLayoutWidget.visible = (bannedListWidget.model.rowCount() > 0)
-
-        if (advanceSettingsView.visible) {
-            advanceSettingsView.updateAccountInfoDisplayedAdvance()
-        }
-    }
-
-    function connectCurrentAccount() {
-        accountConnections_ContactModel.enabled = true
-        accountConnections_DeviceModel.enabled = true
-    }
-
-    function disconnectAccountConnections() {
-        accountConnections_ContactModel.enabled = false
-        accountConnections_DeviceModel.enabled = false
-    }
-
-    function isPhotoBoothOpened() {
-        return currentAccountAvatar.takePhotoState
-    }
-
-    function setAvatar() {
-        currentAccountAvatar.setAvatarPixmap(
-                   SettingsAdapter.getAvatarImage_Base64(
-                        currentAccountAvatar.boothWidth),
-                   SettingsAdapter.getIsDefaultAvatar())
-    }
-
-    function stopBooth() {
-        currentAccountAvatar.stopBooth()
-    }
-
-    function toggleBannedContacts() {
-        var bannedContactsVisible = bannedContactsListWidget.visible
-        bannedContactsListWidget.visible = !bannedContactsVisible
-        updateAndShowBannedContactsSlot()
-    }
-
-    function unban(index) {
-       SettingsAdapter.unbanContact(index)
-        updateAndShowBannedContactsSlot()
-    }
-
-    Connections {
-        id: accountConnections_ContactModel
-        target: AccountAdapter.contactModel
-        enabled: root.visible
-
-        function onModelUpdated(uri, needsSorted) {
-            updateAndShowBannedContactsSlot()
-        }
-
-        function onContactAdded(contactUri){
-            updateAndShowBannedContactsSlot()
-        }
-
-        function onContactRemoved(contactUri){
-            updateAndShowBannedContactsSlot()
-        }
-    }
-
-    Connections {
-        id: accountConnections_DeviceModel
-        target: AccountAdapter.deviceModel
-        enabled: root.visible
-
-        function onDeviceAdded(id) {
-            updateAndShowDevicesSlot()
-        }
-
-        function onDeviceRevoked(id, status) {
-            updateAndShowDevicesSlot()
-        }
-
-        function onDeviceUpdated(id) {
-            updateAndShowDevicesSlot()
-        }
-    }
-
-    function setAccEnableSlot(state) {
-        AccountAdapter.model.setAccountEnabled(UtilsAdapter.getCurrAccId(), state)
-    }
-
-    // JamiFileDialog for exporting account
-    JamiFileDialog {
-        id: exportBtn_Dialog
-
-        mode: JamiFileDialog.SaveFile
-
-        title: qsTr("Export Account Here")
-        folder: StandardPaths.writableLocation(StandardPaths.DesktopLocation)
-
-        nameFilters: [qsTr("Jami archive files") + " (*.gz)", qsTr(
-                "All files") + " (*)"]
-
-        onAccepted: {
-            // is there password? If so, go to password dialog, else, go to following directly
-            var exportPath = UtilsAdapter.getAbsPath(file.toString())
-            if (AccountAdapter.hasPassword()) {
-                passwordDialog.openDialog(PasswordDialog.ExportAccount,exportPath)
-                return
-            } else {
-                if (exportPath.length > 0) {
-                    var isSuccessful = AccountAdapter.model.exportToFile(UtilsAdapter.getCurrAccId(), exportPath,"")
-                    var title = isSuccessful ? qsTr("Success") : qsTr("Error")
-                    var iconMode = isSuccessful ? StandardIcon.Information : StandardIcon.Critical
-                    var info = isSuccessful ? qsTr("Export Successful") : qsTr("Export Failed")
-                    MessageBox.openWithParameters(title,info, iconMode, StandardButton.Ok)
-                }
-            }
-        }
-    }
-
-    function exportAccountSlot() {
-        exportBtn_Dialog.open()
-    }
-
-    PasswordDialog {
-        id: passwordDialog
-
-        anchors.centerIn: parent.Center
-
-        onDoneSignal: {
-            var success = (code === successCode)
-            var title = success ? qsTr("Success") : qsTr("Error")
-            var iconMode = success ? StandardIcon.Information : StandardIcon.Critical
-
-            var info
-            switch(currentPurpose){
-            case PasswordDialog.ExportAccount:
-                info = success ? qsTr("Export Successful") : qsTr("Export Failed")
-                break
-            case PasswordDialog.ChangePassword:
-                info = success ? qsTr("Password Changed Successfully") : qsTr("Password Change Failed")
-                break
-            case PasswordDialog.SetPassword:
-                info = success ? qsTr("Password Set Successfully") : qsTr("Password Set Failed")
-                passwdPushButton.text = success ? qsTr("Change Password") : qsTr("Set Password")
-                break
-            }
-
-            MessageBox.openWithParameters(title,info, iconMode, StandardButton.Ok)
-        }
-    }
-
-    function passwordClicked() {
-        if (AccountAdapter.hasPassword()){
-            passwordDialog.openDialog(PasswordDialog.ChangePassword)
-        } else {
-            passwordDialog.openDialog(PasswordDialog.SetPassword)
-        }
-    }
-
-    function delAccountSlot() {
-        deleteAccountDialog.open()
-    }
-
-    DeleteAccountDialog {
-        id: deleteAccountDialog
-
-        anchors.centerIn: parent.Center
-
-        onAccepted: {
-            AccountAdapter.setSelectedConvId()
-
-            if(UtilsAdapter.getAccountListSize() > 0){
-                navigateToMainView()
-            } else {
-                navigateToNewWizardView()
-            }
-        }
-    }
-
-    NameRegistrationDialog{
-        id : nameRegistrationDialog
-
-        onAccepted: {
-            registeredIdNeedsSet = false
-            currentRegisteredID.nameRegistrationState =
-                    UsernameLineEdit.NameRegistrationState.BLANK
-        }
-    }
-
-    LinkDeviceDialog{
-        id: linkDeviceDialog
-
-        anchors.centerIn: parent.Center
-
-        onAccepted: {
-            updateAndShowDevicesSlot()
-        }
-    }
-
-    function showLinkDevSlot() {
-        linkDeviceDialog.openLinkDeviceDialog()
-    }
-
-    RevokeDevicePasswordDialog{
-        id: revokeDevicePasswordDialog
-
-        anchors.centerIn: parent.Center
-
-        onRevokeDeviceWithPassword:{
-            revokeDeviceWithIDAndPassword(idOfDevice, password)
-        }
-    }
-
-    MessageBox{
-        id: revokeDeviceMessageBox
-
-        property string idOfDev: ""
-
-        title:qsTr("Remove Device")
-        text :qsTr("Are you sure you wish to remove this device?")
-        icon :StandardIcon.Information
-        standardButtons: StandardButton.Ok | StandardButton.Cancel
-
-        onAccepted: {
-            revokeDeviceWithIDAndPassword(idOfDev,"")
-        }
-    }
-
-    function removeDeviceSlot(index){
-        var idOfDevice = deviceItemListModel.data(deviceItemListModel.index(index,0), DeviceItemListModel.DeviceID)
-        if(AccountAdapter.hasPassword()){
-            revokeDevicePasswordDialog.openRevokeDeviceDialog(idOfDevice)
-        } else {
-            revokeDeviceMessageBox.idOfDev = idOfDevice
-            revokeDeviceMessageBox.open()
-        }
-    }
-
-    function revokeDeviceWithIDAndPassword(idDevice, password){
-        AccountAdapter.deviceModel.revokeDevice(idDevice, password)
-        updateAndShowDevicesSlot()
-    }
-
-    function updateAndShowBannedContactsSlot() {
-        if(bannedListWidget.model.rowCount() <= 0){
-            bannedContactsLayoutWidget.visible = false
-            return
-        }
-
-        bannedListWidget.model.reset()
-    }
-
-    function updateAndShowDevicesSlot() {
-        if(SettingsAdapter.getAccountConfig_Manageruri() === ""){
-            linkDevPushButton.visible = true
-        }
-
-        settingsListView.model.reset()
-    }
-
-    ColumnLayout {
-        anchors.fill: root
-
-        RowLayout {
-            id: accountPageTitle
-            Layout.alignment: Qt.AlignLeft | Qt.AlignVCenter
-            Layout.leftMargin: JamiTheme.preferredMarginSize
-            Layout.fillWidth: true
-            Layout.preferredHeight: 64
-
-            HoverableButton {
-                id: backToSettingsMenuButton
-
-                Layout.preferredWidth: JamiTheme.preferredFieldHeight
-                Layout.preferredHeight: JamiTheme.preferredFieldHeight
-
-                radius: JamiTheme.preferredFieldHeight
-                source: "qrc:/images/icons/ic_arrow_back_24px.svg"
-                backgroundColor: "white"
-                onExitColor: "white"
-                toolTipText: qsTr("Toggle to display side panel")
-                hoverEnabled: true
-                visible: mainViewWindow.sidePanelHidden
-
-                onClicked: {
-                    backArrowClicked()
-                }
-            }
-
-            Label {
-                Layout.fillWidth: true
-
-                text: qsTr("Account Settings")
-
-                font.pointSize: JamiTheme.titleFontSize
-                font.kerning: true
-
-                horizontalAlignment: Text.AlignLeft
-                verticalAlignment: Text.AlignVCenter
-            }
-        }
-
-        ScrollView {
-            id: accountScrollView
-
-            property ScrollBar vScrollBar: ScrollBar.vertical
-            ScrollBar.horizontal.policy: ScrollBar.AlwaysOff
-            ScrollBar.vertical.policy: ScrollBar.AsNeeded
-
-            Layout.fillHeight: true
-            Layout.fillWidth: true
-
-            focus: true
-            clip: true
-
-            // ScrollView Layout
-            ColumnLayout {
-                id: accountViewLayout
-
-                width: root.width
-
-                ToggleSwitch {
-                    id: accountEnableCheckBox
-
-                    Layout.fillWidth: true
-                    Layout.topMargin: JamiTheme.preferredMarginSize
-                    Layout.leftMargin: JamiTheme.preferredMarginSize
-                    Layout.rightMargin: JamiTheme.preferredMarginSize
-
-                    labelText: qsTr("Enable")
-                    fontPointSize: JamiTheme.headerFontSize
-
-                    onSwitchToggled: {
-                        setAccEnableSlot(checked)
-                    }
-                }
-
-                // Profile
-                ColumnLayout {
-                    Layout.fillWidth: true
-                    Layout.topMargin: JamiTheme.preferredMarginSize
-                    Layout.leftMargin: JamiTheme.preferredMarginSize
-                    Layout.rightMargin: JamiTheme.preferredMarginSize
-
-                    Label {
-                        Layout.fillWidth: true
-                        Layout.preferredHeight: JamiTheme.preferredFieldHeight
-
-                        text: qsTr("Profile")
-                        font.pointSize: JamiTheme.headerFontSize
-                        font.kerning: true
-
-                        horizontalAlignment: Text.AlignLeft
-                        verticalAlignment: Text.AlignVCenter
-                    }
-
-                    PhotoboothView {
-                        id: currentAccountAvatar
-
-                        Layout.alignment: Qt.AlignCenter
-
-                        boothWidth: Math.min(224, root.width - 100) + 50
-
-                        Layout.preferredWidth: boothWidth
-
-                        onImageAcquired: {
-                           SettingsAdapter.setCurrAccAvatar(imgBase64)
-                        }
-
-                        onImageCleared: {
-                           SettingsAdapter.clearCurrentAvatar()
-                            setAvatar()
-                        }
-                    }
-
-                    MaterialLineEdit {
-                        id: displayNameLineEdit
-
-                        Layout.alignment: Qt.AlignCenter
-                        Layout.preferredHeight: JamiTheme.preferredFieldHeight
-                        Layout.preferredWidth: JamiTheme.preferredFieldWidth
-
-                        font.pointSize: JamiTheme.textFontSize
-                        font.kerning: true
-
-                        horizontalAlignment: Text.AlignHCenter
-                        verticalAlignment: Text.AlignVCenter
-                        padding: 8
-
-                        onEditingFinished: {
-                            AccountAdapter.setCurrAccDisplayName(
-                                        displayNameLineEdit.text)
-                        }
-                    }
-                }
-
-                // Identity
-                ColumnLayout {
-                    Layout.fillWidth: true
-                    Layout.alignment: Qt.AlignHCenter
-                    Layout.leftMargin: JamiTheme.preferredMarginSize
-                    Layout.rightMargin: JamiTheme.preferredMarginSize
-
-                    ElidedTextLabel {
-                        Layout.fillWidth: true
-                        Layout.preferredHeight: JamiTheme.preferredFieldHeight
-
-                        eText: qsTr("Identity")
-                        maxWidth: root.width - 72
-                        fontSize: JamiTheme.headerFontSize
-                    }
-
-                    RowLayout {
-                        Layout.fillWidth: true
-                        Layout.preferredHeight: JamiTheme.preferredFieldHeight
-                        Layout.leftMargin: JamiTheme.preferredMarginSize
-
-                        Label {
-                            id: idLabel
-                            Layout.fillWidth: true
-                            Layout.fillHeight: true
-
-                            text: qsTr("Id")
-                            font.pointSize: JamiTheme.settingsFontSize
-                            font.kerning: true
-
-                            horizontalAlignment: Text.AlignLeft
-                            verticalAlignment: Text.AlignVCenter
-                        }
-
-                        TextField {
-                            id: currentRingID
-
-                            property var backgroundColor: "transparent"
-                            property var borderColor: "transparent"
-
-                            Layout.fillWidth: true
-                            Layout.fillHeight: true
-
-                            font.pointSize: JamiTheme.textFontSize
-                            font.kerning: true
-                            font.bold: true
-
-                            readOnly: true
-                            selectByMouse: true
-
-                            text: currentRingIDText.elidedText
-
-                            horizontalAlignment: Text.AlignRight
-                            verticalAlignment: Text.AlignVCenter
-
-                            background: Rectangle {
-                                anchors.fill: parent
-                                radius: 0
-                                border.color: currentRingID.borderColor
-                                border.width: 0
-                                color: currentRingID.backgroundColor
-                            }
-
-                            TextMetrics {
-                                id: currentRingIDText
-
-                                elide: Text.ElideRight
-                                elideWidth: root.width - idLabel.width -JamiTheme.preferredMarginSize*4
-
-                                text: SettingsAdapter.getCurrentAccount_Profile_Info_Uri()
-                            }
-                        }
-                    }
-
-                    RowLayout {
-                        Layout.fillWidth: true
-                        Layout.leftMargin: JamiTheme.preferredMarginSize
-                        Layout.preferredHeight: JamiTheme.preferredFieldHeight
-
-                        ElidedTextLabel {
-                            id: lblRegisteredName
-                            Layout.fillWidth: true
-                            Layout.preferredWidth: preferredColumnWidth
-
-                            eText: qsTr("Registered name")
-                            fontSize: JamiTheme.settingsFontSize
-                            maxWidth: width
-                        }
-
-                        UsernameLineEdit {
-                            id: currentRegisteredID
-
-                            Layout.alignment: Qt.AlignRight
-                            Layout.preferredHeight: JamiTheme.preferredFieldHeight
-                            Layout.fillWidth: true
-
-                            placeholderText: registeredIdNeedsSet ?
-                                                 qsTr("Type here to register a username") : ""
-                            text: {
-                                if (!registeredIdNeedsSet)
-                                    return SettingsAdapter.get_CurrentAccountInfo_RegisteredName()
-                                else
-                                    return ""
-                            }
-                            readOnly: !registeredIdNeedsSet
-                            font.bold: !registeredIdNeedsSet
-
-                            horizontalAlignment: registeredIdNeedsSet ?
-                                                Text.AlignLeft :
-                                                Text.AlignRight
-                            verticalAlignment: Text.AlignVCenter
-                            padding: 8
-                        }
-                    }
-
-                    MaterialButton {
-                        id: btnRegisterName
-
-                        Layout.alignment: Qt.AlignVCenter | Qt.AlignRight
-                        Layout.rightMargin: currentRegisteredID.width / 2 - width / 2
-                        Layout.preferredWidth: 120
-                        Layout.preferredHeight: 30
-
-                        visible: registeredIdNeedsSet &&
-                                 currentRegisteredID.nameRegistrationState ===
-                                 UsernameLineEdit.NameRegistrationState.FREE
-
-                        text: qsTr("Register")
-                        toolTipText: qsTr("Register the username")
-                        color: JamiTheme.buttonTintedGrey
-                        hoveredColor: JamiTheme.buttonTintedGreyHovered
-                        pressedColor: JamiTheme.buttonTintedGreyPressed
-
-                        onClicked: nameRegistrationDialog.openNameRegistrationDialog(
-                                       currentRegisteredID.text)
-                    }
-                }
-
-                // Buttons Pwd, Export, Delete
-                ColumnLayout {
-                    Layout.fillWidth: true
-                    Layout.alignment: Qt.AlignHCenter
-                    Layout.leftMargin: JamiTheme.preferredMarginSize
-                    Layout.rightMargin: JamiTheme.preferredMarginSize
-
-                    MaterialButton {
-                        id: passwdPushButton
-
-                        Layout.alignment: Qt.AlignHCenter
-                        Layout.preferredWidth: JamiTheme.preferredFieldWidth
-                        Layout.preferredHeight: JamiTheme.preferredFieldHeight
-
-                        visible: SettingsAdapter.getAccountConfig_Manageruri() === ""
-
-                        color: JamiTheme.buttonTintedBlack
-                        hoveredColor: JamiTheme.buttonTintedBlackHovered
-                        pressedColor: JamiTheme.buttonTintedBlackPressed
-                        outlined: true
-
-                        toolTipText: AccountAdapter.hasPassword() ?
-                                    qsTr("Change the current password") :
-                                    qsTr("Currently no password, press this button to set a password")
-                        text: AccountAdapter.hasPassword() ? qsTr("Change Password") :
-                                                                           qsTr("Set Password")
-
-                        source: "qrc:/images/icons/round-edit-24px.svg"
-
-                        onClicked: {
-                            passwordClicked()
-                        }
-                    }
-
-                    MaterialButton {
-                        id: btnExportAccount
-
-                        Layout.alignment: Qt.AlignHCenter
-                        Layout.preferredWidth: JamiTheme.preferredFieldWidth
-                        Layout.preferredHeight: JamiTheme.preferredFieldHeight
-
-                        visible: SettingsAdapter.getAccountConfig_Manageruri() === ""
-
-                        color: JamiTheme.buttonTintedBlack
-                        hoveredColor: JamiTheme.buttonTintedBlackHovered
-                        pressedColor: JamiTheme.buttonTintedBlackPressed
-                        outlined: true
-
-                        toolTipText: qsTr("Press this button to export account to a .gz file")
-                        text: qsTr("Export Account")
-
-                        source: "qrc:/images/icons/round-save_alt-24px.svg"
-
-                        onClicked: {
-                            exportAccountSlot()
-                        }
-                    }
-
-                    MaterialButton {
-                        id: btnDeleteAccount
-
-                        Layout.alignment: Qt.AlignHCenter
-                        Layout.preferredWidth: JamiTheme.preferredFieldWidth
-                        Layout.preferredHeight: JamiTheme.preferredFieldHeight
-
-                        color: JamiTheme.buttonTintedRed
-                        hoveredColor: JamiTheme.buttonTintedRedHovered
-                        pressedColor: JamiTheme.buttonTintedRedPressed
-
-                        toolTipText: qsTr("Press this button to delete this account")
-                        text: qsTr("Delete Account")
-
-                        source: "qrc:/images/icons/delete_forever-24px.svg"
-
-                        onClicked: {
-                            delAccountSlot()
-                        }
-                    }
-                }
-
-                // Linked devices
-                ColumnLayout {
-                    Layout.fillWidth: true
-                    Layout.leftMargin: JamiTheme.preferredMarginSize
-                    Layout.rightMargin: JamiTheme.preferredMarginSize
-
-                    Label {
-                        Layout.preferredHeight: JamiTheme.preferredFieldHeight
-
-                        text: qsTr("Linked Devices")
-
-                        font.pointSize: JamiTheme.headerFontSize
-                        font.kerning: true
-                    }
-
-                    ColumnLayout {
-                        id: linkedDevicesLayout
-                        Layout.fillWidth: true
-
-                        ListViewJami {
-                            id: settingsListView
-
-                            Layout.fillWidth: true
-                            Layout.preferredHeight: 160
-
-                            model: DeviceItemListModel{}
-
-                            delegate: DeviceItemDelegate {
-                                id: settingsListDelegate
-
-                                implicitWidth: settingsListView.width
-                                width: settingsListView.width
-                                height: 70
-
-                                deviceName: DeviceName
-                                deviceId: DeviceID
-                                isCurrent: IsCurrent
-
-                                onClicked: {
-                                    settingsListView.currentIndex = index
-                                }
-
-                                onBtnRemoveDeviceClicked:{
-                                    removeDeviceSlot(index)
-                                }
-                            }
-                        }
-
-
-                        MaterialButton {
-                            id: linkDevPushButton
-
-                            Layout.alignment: Qt.AlignCenter
-                            Layout.preferredWidth: JamiTheme.preferredFieldWidth
-                            Layout.preferredHeight: JamiTheme.preferredFieldHeight
-
-                            visible: SettingsAdapter.getAccountConfig_Manageruri() === ""
-
-                            color: JamiTheme.buttonTintedBlack
-                            hoveredColor: JamiTheme.buttonTintedBlackHovered
-                            pressedColor: JamiTheme.buttonTintedBlackPressed
-                            outlined: true
-                            toolTipText: qsTr("Press to link one more device with this account")
-
-                            source: "qrc:/images/icons/round-add-24px.svg"
-
-                            text: qsTr("Link Another Device")
-
-                            onClicked: {
-                                showLinkDevSlot()
-                            }
-                        }
-                    }
-                }
-
-                // Banned contacts
-                ColumnLayout {
-                    id: bannedContactsLayoutWidget
-
-                    Layout.fillWidth: true
-                    Layout.leftMargin: JamiTheme.preferredMarginSize
-                    Layout.rightMargin: JamiTheme.preferredMarginSize
-                    Layout.alignment: Qt.AlignHCenter
-
-                    RowLayout {
-                        Layout.fillWidth: true
-
-                        ElidedTextLabel {
-
-                            id: lblBannedContacts
-
-                            Layout.fillWidth: true
-
-                            eText: qsTr("Banned Contacts")
-                            fontSize: JamiTheme.headerFontSize
-                            maxWidth: root.width - bannedContactsBtn.width
-                                      - JamiTheme.preferredMarginSize * 4
-                        }
-
-                        HoverableButtonTextItem {
-                            id: bannedContactsBtn
-
-                            Layout.alignment: Qt.AlignRight
-
-                            Layout.preferredWidth: JamiTheme.preferredFieldHeight
-                            Layout.preferredHeight: JamiTheme.preferredFieldHeight
-
-                            radius: height / 2
-
-                            toolTipText: qsTr("press to open or hide display of banned contact")
-
-                            source: bannedContactsListWidget.visible?
-                                        "qrc:/images/icons/round-arrow_drop_up-24px.svg" :
-                                        "qrc:/images/icons/round-arrow_drop_down-24px.svg"
-                            onClicked: {
-                                toggleBannedContacts()
-                            }
-                        }
-                    }
-
-
-                    ColumnLayout {
-                        id: bannedContactsListWidget
-
-                        visible: false
-
-                        ListViewJami {
-                            id: bannedListWidget
-
-                            Layout.fillWidth: true
-                            Layout.preferredHeight: 160
-
-                            model: BannedListModel{}
-
-                            delegate: BannedItemDelegate{
-                                id: bannedListDelegate
-
-                                width: bannedListWidget.width
-                                height: 74
-
-                                contactName : ContactName
-                                contactID: ContactID
-                                contactPicture_base64: ContactPicture
-
-                                onClicked: {
-                                    bannedListWidget.currentIndex = index
-                                }
-
-                                onBtnReAddContactClicked: {
-                                    unban(index)
-                                }
-                            }
-                        }
-                    }
-                }
-
-                // Advanced Settigs Button
-                RowLayout {
-                    id: rowAdvancedSettingsBtn
-                    Layout.fillWidth: true
-                    Layout.leftMargin: JamiTheme.preferredMarginSize
-                    Layout.rightMargin: JamiTheme.preferredMarginSize
-                    Layout.bottomMargin: 8
-
-                    ElidedTextLabel {
-                        id: lblAdvancedAccountSettings
-
-                        Layout.fillWidth: true
-                        Layout.preferredHeight: JamiTheme.preferredFieldHeight
-
-                        eText: qsTr("Advanced Account Settings")
-
-                        fontSize: JamiTheme.headerFontSize
-                        maxWidth: root.width - advancedAccountSettingsPButton.width
-                                  - JamiTheme.preferredMarginSize * 6
-                    }
-
-                    HoverableButtonTextItem {
-                        id: advancedAccountSettingsPButton
-
-                        Layout.preferredWidth: JamiTheme.preferredFieldHeight
-                        Layout.preferredHeight: JamiTheme.preferredFieldHeight
-                        Layout.alignment: Qt.AlignHCenter
-
-                        radius: height / 2
-
-                        toolTipText: qsTr("Press to display or hide advance settings")
-
-                        source: {
-                            if (advanceSettingsView.visible) {
-                                return "qrc:/images/icons/round-arrow_drop_up-24px.svg"
-                            } else {
-                                return "qrc:/images/icons/round-arrow_drop_down-24px.svg"
-                            }
-                        }
-
-                        onClicked: {
-                            advanceSettingsView.visible = !advanceSettingsView.visible
-                            if (advanceSettingsView.visible) {
-                                advanceSettingsView.updateAccountInfoDisplayedAdvance()
-                                accountScrollView.vScrollBar.position =
-                                        rowAdvancedSettingsBtn.y / accountViewLayout.height
-                            } else {
-                                accountScrollView.vScrollBar.position = 0
-                            }
-                        }
-                    }
-                }
-
-                // Advanced Settings
-                AdvancedSettingsView {
-                    id: advanceSettingsView
-                    Layout.fillWidth: true
-                    Layout.leftMargin: JamiTheme.preferredMarginSize
-                    Layout.rightMargin: JamiTheme.preferredMarginSize
-                    Layout.bottomMargin: JamiTheme.preferredMarginSize
-                    visible: false
-                    itemWidth: preferredColumnWidth
-                }
-            }
-        }
-    }
-}
diff --git a/src/settingsview/components/CurrentSIPAccountSettingScrollPage.qml b/src/settingsview/components/CurrentSIPAccountSettingScrollPage.qml
deleted file mode 100644
index 34d21a656..000000000
--- a/src/settingsview/components/CurrentSIPAccountSettingScrollPage.qml
+++ /dev/null
@@ -1,456 +0,0 @@
-/*
- * Copyright (C) 2019-2020 by Savoir-faire Linux
- * Author: Yang Wang   <yang.wang@savoirfairelinux.com>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-import QtQuick 2.15
-import QtQuick.Window 2.14
-import QtQuick.Controls 2.14
-import QtQuick.Controls.Universal 2.12
-import QtQuick.Layouts 1.3
-import QtGraphicalEffects 1.14
-import net.jami.Models 1.0
-import net.jami.Adapters 1.0
-
-import "../../commoncomponents"
-
-Rectangle {
-    id: root
-    signal navigateToMainView
-    signal navigateToNewWizardView
-    signal backArrowClicked
-
-    property int preferredColumnWidth : root.width / 2 - 50
-
-    function updateAccountInfoDisplayed() {
-        displaySIPNameLineEdit.text = SettingsAdapter.getCurrentAccount_Profile_Info_Alias()
-        usernameSIP.text = SettingsAdapter.getAccountConfig_Username()
-        hostnameSIP.text = SettingsAdapter.getAccountConfig_Hostname()
-        passSIPlineEdit.text = SettingsAdapter.getAccountConfig_Password()
-        proxySIP.text = SettingsAdapter.getAccountConfig_ProxyServer()
-
-        accountSIPEnableCheckBox.checked = SettingsAdapter.get_CurrentAccountInfo_Enabled()
-
-        setAvatar()
-
-        if (advanceSIPSettingsView.visible) {
-            advanceSIPSettingsView.updateAccountInfoDisplayedAdvanceSIP()
-        }
-    }
-
-    function isPhotoBoothOpened() {
-        return currentSIPAccountAvatar.takePhotoState
-    }
-
-    function setAvatar() {
-        currentSIPAccountAvatar.setAvatarPixmap(
-                   SettingsAdapter.getAvatarImage_Base64(
-                        currentSIPAccountAvatar.boothWidth),
-                   SettingsAdapter.getIsDefaultAvatar())
-    }
-
-    function stopBooth() {
-        currentSIPAccountAvatar.stopBooth()
-    }
-
-    // slots
-    function setAccEnableSlot(state) {
-        AccountAdapter.model.setAccountEnabled(UtilsAdapter.getCurrAccId(), state)
-    }
-
-    function delAccountSlot() {
-        deleteAccountDialog_SIP.open()
-    }
-
-    DeleteAccountDialog {
-        id: deleteAccountDialog_SIP
-
-        anchors.centerIn: parent.Center
-
-        onAccepted: {
-            AccountAdapter.setSelectedConvId()
-
-            if(UtilsAdapter.getAccountListSize() > 0){
-                navigateToMainView()
-            } else {
-                navigateToNewWizardView()
-            }
-        }
-    }
-
-    ColumnLayout {
-        anchors.fill: root
-
-        RowLayout {
-            id: sipAccountPageTitle
-            Layout.alignment: Qt.AlignLeft | Qt.AlignVCenter
-            Layout.leftMargin: JamiTheme.preferredMarginSize
-            Layout.minimumHeight: 64
-
-            HoverableButton {
-                id: backToSettingsMenuButton
-
-                Layout.preferredWidth: JamiTheme.preferredFieldHeight
-
-                radius: JamiTheme.preferredFieldHeight
-                source: "qrc:/images/icons/ic_arrow_back_24px.svg"
-                backgroundColor: "white"
-                onExitColor: "white"
-                toolTipText: qsTr("Toggle to display side panel")
-                hoverEnabled: true
-                visible: mainViewWindow.sidePanelHidden
-
-                onClicked: {
-                    backArrowClicked()
-                }
-            }
-
-            Label {
-                Layout.fillWidth: true
-
-                text: qsTr("Account Settings")
-
-                font.pointSize: JamiTheme.titleFontSize
-                font.kerning: true
-
-                horizontalAlignment: Text.AlignLeft
-                verticalAlignment: Text.AlignVCenter
-            }
-        }
-
-        ScrollView {
-            id: sipAccountScrollView
-
-            property ScrollBar vScrollBar: ScrollBar.vertical
-
-            Layout.fillHeight: true
-            Layout.fillWidth: true
-
-            clip: true
-
-            ColumnLayout {
-                id: accountSIPLayout
-
-                width: root.width
-
-                ToggleSwitch {
-                    id: accountSIPEnableCheckBox
-
-                    Layout.topMargin: JamiTheme.preferredMarginSize
-                    Layout.leftMargin: JamiTheme.preferredMarginSize
-                    Layout.rightMargin: JamiTheme.preferredMarginSize
-
-                    labelText: qsTr("Enable")
-                    fontPointSize: JamiTheme.headerFontSize
-
-                    onSwitchToggled: {
-                        setAccEnableSlot(checked)
-                    }
-                }
-
-                ColumnLayout {
-                    Layout.fillWidth: true
-                    Layout.fillHeight: true
-                    Layout.leftMargin: JamiTheme.preferredMarginSize
-                    Layout.rightMargin: JamiTheme.preferredMarginSize
-
-                    Label {
-                        Layout.fillWidth: true
-                        Layout.preferredHeight: JamiTheme.preferredFieldHeight
-
-                        text: qsTr("Profile")
-                        font.pointSize: JamiTheme.headerFontSize
-                        font.kerning: true
-
-                        horizontalAlignment: Text.AlignLeft
-                        verticalAlignment: Text.AlignVCenter
-                    }
-
-                    PhotoboothView {
-                        id: currentSIPAccountAvatar
-
-                        Layout.alignment: Qt.AlignCenter
-
-                        boothWidth: Math.min(224, root.width - 100) + 50
-
-                        Layout.preferredWidth: boothWidth
-
-                        onImageAcquired: {
-                           SettingsAdapter.setCurrAccAvatar(imgBase64)
-                        }
-
-                        onImageCleared: {
-                           SettingsAdapter.clearCurrentAvatar()
-                            setAvatar()
-                        }
-                    }
-
-                    MaterialLineEdit {
-                        id: displaySIPNameLineEdit
-
-                        Layout.alignment: Qt.AlignCenter
-                        Layout.preferredHeight: JamiTheme.preferredFieldHeight
-                        Layout.preferredWidth: JamiTheme.preferredFieldWidth
-
-                        font.pointSize: JamiTheme.textFontSize
-                        font.kerning: true
-
-                        horizontalAlignment: Text.AlignHCenter
-                        verticalAlignment: Text.AlignVCenter
-                        padding: 8
-
-                        onEditingFinished: {
-                            AccountAdapter.setCurrAccDisplayName(
-                                        displaySIPNameLineEdit.text)
-                        }
-                    }
-                }
-
-                ColumnLayout {
-                    Layout.fillWidth: true
-                    Layout.alignment: Qt.AlignHCenter
-                    Layout.leftMargin: JamiTheme.preferredMarginSize
-                    Layout.rightMargin: JamiTheme.preferredMarginSize
-
-                    ElidedTextLabel {
-                        Layout.fillWidth: true
-                        Layout.preferredHeight: JamiTheme.preferredFieldHeight
-
-                        eText: qsTr("Identity")
-                        maxWidth: root.width - 72
-                        fontSize: JamiTheme.headerFontSize
-                    }
-
-
-                    GridLayout {
-                        rows: 4
-                        columns: 2
-                        flow: GridLayout.LeftToRight
-
-                        Layout.fillWidth: true
-                        Layout.leftMargin: JamiTheme.preferredMarginSize
-
-                        // user name
-                        ElidedTextLabel {
-                            Layout.fillWidth: true
-                            Layout.preferredHeight: JamiTheme.preferredFieldHeight
-
-                            eText: qsTr("Username")
-                            fontSize: JamiTheme.settingsFontSize
-                            maxWidth: preferredColumnWidth
-                        }
-
-                        MaterialLineEdit {
-                            id: usernameSIP
-
-                            Layout.alignment: Qt.AlignCenter
-                            Layout.preferredHeight: JamiTheme.preferredFieldHeight
-                            Layout.preferredWidth: preferredColumnWidth
-
-                            font.pointSize: JamiTheme.settingsFontSize
-                            font.kerning: true
-
-                            horizontalAlignment: Text.AlignLeft
-                            verticalAlignment: Text.AlignVCenter
-
-                            padding: 8
-
-                            onEditingFinished: {
-                               SettingsAdapter.setAccountConfig_Username(
-                                            usernameSIP.text)
-                            }
-                        }
-
-                        // host name
-                        ElidedTextLabel {
-                            Layout.fillWidth: true
-                            Layout.preferredHeight: JamiTheme.preferredFieldHeight
-
-                            eText: qsTr("Hostname")
-                            fontSize: JamiTheme.settingsFontSize
-                            maxWidth: preferredColumnWidth
-                        }
-
-                        MaterialLineEdit {
-                            id: hostnameSIP
-
-                            Layout.alignment: Qt.AlignCenter
-                            Layout.preferredHeight: JamiTheme.preferredFieldHeight
-                            Layout.preferredWidth: preferredColumnWidth
-
-                            font.pointSize: JamiTheme.settingsFontSize
-                            font.kerning: true
-
-                            horizontalAlignment: Text.AlignLeft
-                            verticalAlignment: Text.AlignVCenter
-
-                            padding: 8
-
-                            onEditingFinished: {
-                               SettingsAdapter.setAccountConfig_Hostname(
-                                            hostnameSIP.text)
-                            }
-                        }
-
-                        // proxy
-                        ElidedTextLabel {
-                            Layout.fillWidth: true
-                            Layout.preferredHeight: JamiTheme.preferredFieldHeight
-
-                            text: qsTr("Proxy")
-                            font.pointSize: JamiTheme.settingsFontSize
-                            maxWidth: preferredColumnWidth
-                        }
-
-                        MaterialLineEdit {
-                            id: proxySIP
-
-                            Layout.alignment: Qt.AlignCenter
-                            Layout.preferredHeight: JamiTheme.preferredFieldHeight
-                            Layout.preferredWidth: preferredColumnWidth
-
-                            font.pointSize: JamiTheme.settingsFontSize
-                            font.kerning: true
-
-                            horizontalAlignment: Text.AlignLeft
-                            verticalAlignment: Text.AlignVCenter
-
-                            padding: 8
-
-                            onEditingFinished: {
-                               SettingsAdapter.setAccountConfig_ProxyServer(
-                                            proxySIP.text)
-                            }
-                        }
-
-                        // password
-                        ElidedTextLabel {
-                            Layout.fillWidth: true
-                            Layout.preferredHeight: JamiTheme.preferredFieldHeight
-
-                            eText: qsTr("Password")
-                            fontSize: JamiTheme.settingsFontSize
-                            maxWidth: preferredColumnWidth
-                        }
-
-                        MaterialLineEdit {
-                            id: passSIPlineEdit
-
-                            Layout.alignment: Qt.AlignCenter
-                            Layout.preferredHeight: JamiTheme.preferredFieldHeight
-                            Layout.preferredWidth: preferredColumnWidth
-
-                            font.pointSize: JamiTheme.settingsFontSize
-                            font.kerning: true
-
-                            echoMode: TextInput.Password
-                            horizontalAlignment: Text.AlignLeft
-                            verticalAlignment: Text.AlignVCenter
-
-                            padding: 8
-
-                            onEditingFinished: {
-                               SettingsAdapter.setAccountConfig_Password(
-                                            passSIPlineEdit.text)
-                            }
-                        }
-                    }
-
-
-                    MaterialButton {
-                        Layout.alignment: Qt.AlignHCenter
-                        Layout.preferredWidth: JamiTheme.preferredFieldWidth
-                        Layout.preferredHeight: JamiTheme.preferredFieldHeight
-
-                        color: JamiTheme.buttonTintedRed
-                        hoveredColor: JamiTheme.buttonTintedRedHovered
-                        pressedColor: JamiTheme.buttonTintedRedPressed
-
-                        toolTipText: qsTr("Press this button to delete this account")
-                        text: qsTr("Delete Account")
-
-                        source: "qrc:/images/icons/delete_forever-24px.svg"
-
-                        onClicked: {
-                            delAccountSlot()
-                        }
-                    }
-                }
-
-                RowLayout {
-                    id: rowAdvancedSettingsBtn
-                    Layout.fillWidth: true
-                    Layout.leftMargin: JamiTheme.preferredMarginSize
-                    Layout.rightMargin: JamiTheme.preferredMarginSize
-                    Layout.bottomMargin: 8
-
-                    ElidedTextLabel {
-                        id: lblAdvancedAccountSettings
-
-                        Layout.fillWidth: true
-                        Layout.preferredHeight: JamiTheme.preferredFieldHeight
-
-                        eText: qsTr("Advanced Account Settings")
-                        fontSize: JamiTheme.headerFontSize
-                        maxWidth: root.width - advancedAccountSettingsSIPButton.width
-                                  - JamiTheme.preferredMarginSize * 6
-                    }
-
-                    HoverableButtonTextItem {
-                        id: advancedAccountSettingsSIPButton
-
-                        Layout.preferredWidth: JamiTheme.preferredFieldHeight
-                        Layout.preferredHeight: JamiTheme.preferredFieldHeight
-                        Layout.alignment: Qt.AlignHCenter
-
-                        radius: height / 2
-
-                        toolTipText: qsTr("Press to display or hide advance settings")
-
-                        source: {
-                            if (advanceSIPSettingsView.visible) {
-                                return "qrc:/images/icons/round-arrow_drop_up-24px.svg"
-                            } else {
-                                return "qrc:/images/icons/round-arrow_drop_down-24px.svg"
-                            }
-                        }
-
-                        onClicked: {
-                            advanceSIPSettingsView.visible = !advanceSIPSettingsView.visible
-                            if(advanceSIPSettingsView.visible){
-                                advanceSIPSettingsView.updateAccountInfoDisplayedAdvanceSIP()
-                                sipAccountScrollView.vScrollBar.position  = rowAdvancedSettingsBtn.y / accountSIPLayout.height
-                            } else {
-                                sipAccountScrollView.vScrollBar.position = 0
-                            }
-                        }
-                    }
-                }
-
-                // instantiate advance setting page
-                AdvancedSIPSettingsView {
-                    id: advanceSIPSettingsView
-                    Layout.fillWidth: true
-                    Layout.leftMargin: JamiTheme.preferredMarginSize
-                    Layout.rightMargin: JamiTheme.preferredMarginSize
-                    Layout.bottomMargin: JamiTheme.preferredMarginSize
-                    visible: false
-                    itemWidth: preferredColumnWidth
-                }
-            }
-        }
-    }
-}
diff --git a/src/settingsview/components/GeneralSettingsPage.qml b/src/settingsview/components/GeneralSettingsPage.qml
index 68cc60117..ce8ec4cd7 100644
--- a/src/settingsview/components/GeneralSettingsPage.qml
+++ b/src/settingsview/components/GeneralSettingsPage.qml
@@ -31,166 +31,22 @@ import "../../commoncomponents"
 Rectangle {
     id: root
 
-    function populateGeneralSettings(){
-        // settings
-        closeOrMinCheckBox.checked = SettingsAdapter.getAppValue(Settings.MinimizeOnClose)
-        applicationOnStartUpCheckBox.checked = UtilsAdapter.checkStartupLink()
-        notificationCheckBox.checked = SettingsAdapter.getAppValue(Settings.EnableNotifications)
-
-        alwaysRecordingCheckBox.checked = AVModel.getAlwaysRecord()
-        recordPreviewCheckBox.checked = AVModel.getRecordPreview()
-        recordQualityValueLabel.text = UtilsAdapter.getRecordQualityString(AVModel.getRecordQuality() / 100)
-        recordQualitySlider.value = AVModel.getRecordQuality() / 100
-
-        AVModel.setRecordPath(SettingsAdapter.getDir_Document())
-
-        autoUpdateCheckBox.checked = SettingsAdapter.getAppValue(Settings.Key.AutoUpdate)
-    }
-
-    function setEnableNotifications(state) {
-        SettingsAdapter.setAppValue(Settings.Key.EnableNotifications, state)
-    }
-
-    function setMinimizeOnClose(state) {
-        SettingsAdapter.setAppValue(Settings.Key.MinimizeOnClose, state)
-    }
-
-    function slotSetRunOnStartUp(state){
-        SettingsAdapter.setRunOnStartUp(state)
-    }
-
-    function setAutoUpdate(state) {
-        SettingsAdapter.setAppValue(Settings.Key.AutoUpdate, state)
-    }
-
-    function slotAlwaysRecordingClicked(state){
-        AVModel.setAlwaysRecord(state)
-    }
-
-    function slotRecordPreviewClicked(state){
-        AVModel.setRecordPreview(state)
-    }
-
-    function slotRecordQualitySliderValueChanged(value){
-        recordQualityValueLabel.text = UtilsAdapter.getRecordQualityString(value)
-        updateRecordQualityTimer.restart()
-    }
-
-    Timer{
-        id: updateRecordQualityTimer
-
-        interval: 500
-
-        onTriggered: {
-            slotRecordQualitySliderSliderReleased()
-        }
-    }
-
-    function slotRecordQualitySliderSliderReleased(){
-        var value = recordQualitySlider.value
-        AVModel.setRecordQuality(value * 100)
-    }
-
-    function openDownloadFolderSlot(){
-        downloadPathDialog.open()
-    }
-
-    FolderDialog {
-        id: downloadPathDialog
-
-        title: qsTr("Select A Folder For Your Downloads")
-        currentFolder: StandardPaths.writableLocation(StandardPaths.DownloadLocation)
-
-        onAccepted: {
-            var dir = UtilsAdapter.getAbsPath(folder.toString())
-            downloadPath = dir
-        }
-    }
-
-    function openRecordFolderSlot(){
-        recordPathDialog.open()
-    }
-
-    FolderDialog {
-        id: recordPathDialog
-
-        title: qsTr("Select A Folder For Your Recordings")
-        currentFolder: StandardPaths.writableLocation(StandardPaths.HomeLocation)
-
-        onAccepted: {
-            var dir = UtilsAdapter.getAbsPath(folder.toString())
-            recordPath = dir
-        }
-    }
-
-    //TODO: complete check for update and check for Beta slot functions
-    function checkForUpdateSlot(){}
-    function installBetaSlot(){}
-
-    // settings
-    property string downloadPath: SettingsAdapter.getDir_Download()
-
-    // recording
-    property string recordPath: SettingsAdapter.getDir_Document()
-
     property int preferredColumnWidth : root.width / 2 - 50
-    property int preferredSettingsWidth : root.width - 100
 
     signal backArrowClicked
 
-    onDownloadPathChanged: {
-        if(downloadPath === "") return
-       SettingsAdapter.setDownloadPath(downloadPath)
-    }
-
-    onRecordPathChanged: {
-        if(recordPath === "") return
-
-        if(AVModel){
-            AVModel.setRecordPath(recordPath)
-        }
-    }
-
     ColumnLayout {
         anchors.fill: root
 
-        RowLayout {
-            id: generalSettingsTitle
+        SettingsHeader {
             Layout.alignment: Qt.AlignLeft | Qt.AlignVCenter
             Layout.leftMargin: JamiTheme.preferredMarginSize
             Layout.fillWidth: true
             Layout.preferredHeight: 64
 
-            HoverableButton {
-                id: backToSettingsMenuButton
-
-                Layout.preferredWidth: JamiTheme.preferredFieldHeight
-                Layout.preferredHeight: JamiTheme.preferredFieldHeight
-
-                radius: JamiTheme.preferredFieldHeight
-                source: "qrc:/images/icons/ic_arrow_back_24px.svg"
-                backgroundColor: "white"
-                onExitColor: "white"
-                toolTipText: qsTr("Toggle to display side panel")
-                hoverEnabled: true
-                visible: mainViewWindow.sidePanelHidden
-
-                onClicked: {
-                    backArrowClicked()
-                }
-            }
-
-            Label {
-                Layout.fillWidth: true
-
-                text: qsTr("General")
-                font.pointSize: JamiTheme.titleFontSize
-                font.kerning: true
-
-                horizontalAlignment: Text.AlignLeft
-                verticalAlignment: Text.AlignVCenter
-            }
+            title: qsTr("General")
 
+            onBackArrowClicked: root.backArrowClicked()
         }
 
         ScrollView {
@@ -206,303 +62,30 @@ Rectangle {
                 width: root.width
 
                 // system setting panel
-                ColumnLayout {
+                SystemSettings {
                     Layout.fillWidth: true
                     Layout.topMargin: JamiTheme.preferredMarginSize
                     Layout.leftMargin: JamiTheme.preferredMarginSize
                     Layout.rightMargin: JamiTheme.preferredMarginSize
 
-                    Label {
-                        Layout.fillWidth: true
-
-                        text: qsTr("System")
-                        font.pointSize: JamiTheme.headerFontSize
-                        font.kerning: true
-
-                        horizontalAlignment: Text.AlignLeft
-                        verticalAlignment: Text.AlignVCenter
-                    }
-
-                    ToggleSwitch {
-                        id: notificationCheckBox
-                        Layout.fillWidth: true
-                        Layout.leftMargin: JamiTheme.preferredMarginSize
-
-                        labelText: qsTr("Enable desktop notifications")
-                        fontPointSize: JamiTheme.settingsFontSize
-
-                        tooltipText: qsTr("toggle enable notifications")
-
-                        onSwitchToggled: {
-                            setEnableNotifications(checked)
-                        }
-                    }
-
-                    ToggleSwitch {
-                        id: closeOrMinCheckBox
-                        Layout.fillWidth: true
-                        Layout.leftMargin: JamiTheme.preferredMarginSize
-
-                        labelText: qsTr("Keep minimize on close")
-                        fontPointSize: JamiTheme.settingsFontSize
-
-                        tooltipText: qsTr("toggle keep minimized on close")
-
-                        onSwitchToggled: {
-                            setMinimizeOnClose(checked)
-                        }
-                    }
-
-                    ToggleSwitch {
-                        id: applicationOnStartUpCheckBox
-                        Layout.fillWidth: true
-                        Layout.leftMargin: JamiTheme.preferredMarginSize
-
-                        labelText: qsTr("Run On Startup")
-                        fontPointSize: JamiTheme.settingsFontSize
-
-                        tooltipText: qsTr("toggle run application on system startup")
-
-                        onSwitchToggled: {
-                            slotSetRunOnStartUp(checked)
-                        }
-                    }
-
-                    RowLayout {
-                        Layout.fillWidth: true
-                        Layout.preferredHeight: JamiTheme.preferredFieldHeight
-                        Layout.leftMargin: JamiTheme.preferredMarginSize
-
-                        Label {
-                            Layout.fillWidth: true
-                            Layout.fillHeight: true
-
-                            text: qsTr("Downloads folder")
-                            font.pointSize: JamiTheme.settingsFontSize
-                            font.kerning: true
-
-                            horizontalAlignment: Text.AlignLeft
-                            verticalAlignment: Text.AlignVCenter
-                        }
-
-                        MaterialButton {
-                            id: downloadButton
-
-                            Layout.alignment: Qt.AlignRight
-                            Layout.preferredWidth: preferredColumnWidth
-                            Layout.fillHeight: true
-
-                            toolTipText: qsTr("Press to choose download folder path")
-                            text: downloadPath
-                            source: "qrc:/images/icons/round-folder-24px.svg"
-                            color: JamiTheme.buttonTintedGrey
-                            hoveredColor: JamiTheme.buttonTintedGreyHovered
-                            pressedColor: JamiTheme.buttonTintedGreyPressed
-
-                            onClicked: {
-                                openDownloadFolderSlot()
-                            }
-                        }
-                    }
+                    itemWidth: preferredColumnWidth
                 }
 
-                // // call recording setting panel
-                ColumnLayout {
+                // call recording setting panel
+                RecordingSettings {
                     Layout.fillWidth: true
                     Layout.leftMargin: JamiTheme.preferredMarginSize
                     Layout.rightMargin: JamiTheme.preferredMarginSize
 
-                    ElidedTextLabel {
-                        Layout.fillWidth: true
-
-                        eText: qsTr("Call Recording")
-                        font.pointSize: JamiTheme.headerFontSize
-                        maxWidth: width
-                    }
-
-                    ToggleSwitch {
-                        id: alwaysRecordingCheckBox
-                        Layout.fillWidth: true
-                        Layout.leftMargin: JamiTheme.preferredMarginSize
-
-                        labelText: qsTr("Always record calls")
-                        fontPointSize: JamiTheme.settingsFontSize
-
-                        onSwitchToggled: {
-                            slotAlwaysRecordingClicked(checked)
-                        }
-                    }
-
-                    ToggleSwitch {
-                        id: recordPreviewCheckBox
-                        Layout.fillWidth: true
-                        Layout.leftMargin: JamiTheme.preferredMarginSize
-
-                        labelText: qsTr("Record preview video for a call")
-                        fontPointSize: JamiTheme.settingsFontSize
-
-                        onSwitchToggled: {
-                            slotRecordPreviewClicked(checked)
-                        }
-                    }
-
-                    RowLayout {
-                        Layout.fillWidth: true
-                        Layout.preferredHeight: JamiTheme.preferredFieldHeight
-                        Layout.leftMargin: JamiTheme.preferredMarginSize
-
-                        Text {
-                            Layout.fillWidth: true
-                            Layout.rightMargin: JamiTheme.preferredMarginSize / 2
-
-                            text: qsTr("Quality")
-                            font.pointSize: JamiTheme.settingsFontSize
-                            font.kerning: true
-                            elide: Text.ElideRight
-                            horizontalAlignment: Text.AlignLeft
-                            verticalAlignment: Text.AlignVCenter
-                        }
-
-                        Text {
-                            id: recordQualityValueLabel
-
-                            Layout.alignment: Qt.AlignRight
-                            Layout.fillHeight: true
-                            Layout.fillWidth: true
-                            Layout.rightMargin: JamiTheme.preferredMarginSize / 2
-
-                            text: qsTr("VALUE ")
-
-                            font.pointSize: JamiTheme.settingsFontSize
-                            font.kerning: true
-
-                            horizontalAlignment: Text.AlignRight
-                            verticalAlignment: Text.AlignVCenter
-                        }
-
-                        Slider {
-                            id: recordQualitySlider
-
-                            Layout.maximumWidth: preferredColumnWidth
-                            Layout.alignment: Qt.AlignRight
-                            Layout.fillWidth: true
-                            Layout.fillHeight: true
-
-                            from: 0
-                            to: 500
-                            stepSize: 1
-
-                            onMoved: {
-                                slotRecordQualitySliderValueChanged(value)
-                            }
-                        }
-                    }
-
-                    RowLayout {
-                        Layout.fillWidth: true
-                        Layout.preferredHeight: JamiTheme.preferredFieldHeight
-                        Layout.leftMargin: JamiTheme.preferredMarginSize
-
-                        Label {
-                            Layout.fillWidth: true
-                            Layout.fillHeight: true
-
-                            text: qsTr("Save in")
-                            font.pointSize: JamiTheme.settingsFontSize
-                            font.kerning: true
-
-                            horizontalAlignment: Text.AlignLeft
-                            verticalAlignment: Text.AlignVCenter
-                        }
-
-                        MaterialButton {
-                            id: recordPathButton
-
-                            Layout.alignment: Qt.AlignRight
-                            Layout.fillHeight: true
-                            Layout.preferredWidth: preferredColumnWidth
-
-                            toolTipText: qsTr("Press to choose record folder path")
-                            text: recordPath
-                            source: "qrc:/images/icons/round-folder-24px.svg"
-                            color: JamiTheme.buttonTintedGrey
-                            hoveredColor: JamiTheme.buttonTintedGreyHovered
-                            pressedColor: JamiTheme.buttonTintedGreyPressed
-
-                            onClicked: {
-                                openRecordFolderSlot()
-                            }
-                        }
-                    }
+                    itemWidth: preferredColumnWidth
                 }
 
                 // update setting panel
-                ColumnLayout {
+                UpdateSettings {
                     Layout.fillWidth: true
                     Layout.leftMargin: JamiTheme.preferredMarginSize
                     Layout.bottomMargin: JamiTheme.preferredMarginSize
                     visible: Qt.platform.os == "windows"? true : false
-
-                    Label {
-                        Layout.fillWidth: true
-                        Layout.preferredHeight: JamiTheme.preferredFieldHeight
-
-                        text: qsTr("Updates")
-                        font.pointSize: JamiTheme.headerFontSize
-                        font.kerning: true
-
-                        horizontalAlignment: Text.AlignLeft
-                        verticalAlignment: Text.AlignVCenter
-                    }
-
-                    ToggleSwitch {
-                        id: autoUpdateCheckBox
-
-                        labelText: qsTr("Check for updates automatically")
-                        fontPointSize: JamiTheme.settingsFontSize
-
-                        tooltipText: qsTr("toggle automatic updates")
-
-                        onSwitchToggled: {
-                            setAutoUpdate(checked)
-                        }
-                    }
-
-                    HoverableRadiusButton {
-                        id: checkUpdateButton
-
-                        Layout.alignment: Qt.AlignHCenter
-                        Layout.preferredWidth: JamiTheme.preferredFieldWidth
-                        Layout.preferredHeight: JamiTheme.preferredFieldHeight
-
-                        radius: height / 2
-
-                        toolTipText: qsTr("Check for updates now")
-                        text: qsTr("Updates")
-                        fontPointSize: JamiTheme.buttonFontSize
-
-                        onClicked: {
-                            checkForUpdateSlot()
-                        }
-                    }
-
-                    HoverableRadiusButton {
-                        id: installBetaButton
-
-                        Layout.alignment: Qt.AlignHCenter
-                        Layout.preferredWidth: JamiTheme.preferredFieldWidth
-                        Layout.preferredHeight: JamiTheme.preferredFieldHeight
-
-                        radius: height / 2
-
-                        toolTipText: qsTr("Install the latest beta version")
-                        text: qsTr("Beta Install")
-                        fontPointSize: JamiTheme.buttonFontSize
-
-                        onClicked: {
-                            installBetaSlot()
-                        }
-                    }
                 }
             }
         }
diff --git a/src/settingsview/components/JamiUserIdentity.qml b/src/settingsview/components/JamiUserIdentity.qml
new file mode 100644
index 000000000..9478eb66d
--- /dev/null
+++ b/src/settingsview/components/JamiUserIdentity.qml
@@ -0,0 +1,173 @@
+/*
+ * Copyright (C) 2020 by Savoir-faire Linux
+ * Author: Aline Gondim Santos <aline.gondimsantos@savoirfairelinux.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+import QtQuick 2.15
+import QtQuick.Layouts 1.15
+import QtQuick.Window 2.14
+import QtQuick.Controls 2.15
+import QtQuick.Controls.Universal 2.12
+import QtGraphicalEffects 1.14
+import QtQuick.Controls.Styles 1.4
+import net.jami.Models 1.0
+import net.jami.Adapters 1.0
+import Qt.labs.platform 1.1
+import "../../commoncomponents"
+
+ColumnLayout {
+    id: root
+
+    property int itemWidth
+    property bool registeredIdNeedsSet: false
+
+    function updateAccountInfo() {
+        currentRingIDText.text = SettingsAdapter.getCurrentAccount_Profile_Info_Uri()
+        registeredIdNeedsSet = (SettingsAdapter.get_CurrentAccountInfo_RegisteredName() === "")
+
+        if(!registeredIdNeedsSet) {
+            currentRegisteredID.text = SettingsAdapter.get_CurrentAccountInfo_RegisteredName()
+        } else {
+            currentRegisteredID.text = ""
+        }
+    }
+
+    NameRegistrationDialog {
+        id : nameRegistrationDialog
+
+        onAccepted: {
+            registeredIdNeedsSet = false
+            currentRegisteredID.nameRegistrationState =
+                    UsernameLineEdit.NameRegistrationState.BLANK
+        }
+    }
+
+    // Identity
+    RowLayout {
+        Layout.fillWidth: true
+        Layout.preferredHeight: JamiTheme.preferredFieldHeight
+
+        Label {
+            id: idLabel
+
+            text: qsTr("Id")
+            font.pointSize: JamiTheme.settingsFontSize
+            font.kerning: true
+
+            horizontalAlignment: Text.AlignLeft
+            verticalAlignment: Text.AlignVCenter
+        }
+
+        TextField {
+            id: currentRingID
+
+            property var backgroundColor: "transparent"
+            property var borderColor: "transparent"
+
+            Layout.fillWidth: true
+
+            font.pointSize: JamiTheme.textFontSize
+            font.kerning: true
+            font.bold: true
+
+            readOnly: true
+            selectByMouse: true
+
+            text: currentRingIDText.elidedText
+
+            horizontalAlignment: Text.AlignRight
+            verticalAlignment: Text.AlignVCenter
+
+            background: Rectangle {
+                anchors.fill: parent
+                radius: 0
+                border.color: currentRingID.borderColor
+                border.width: 0
+                color: currentRingID.backgroundColor
+            }
+
+            TextMetrics {
+                id: currentRingIDText
+
+                elide: Text.ElideRight
+                elideWidth: root.width - idLabel.width -JamiTheme.preferredMarginSize*4
+
+                text: SettingsAdapter.getCurrentAccount_Profile_Info_Uri()
+            }
+        }
+    }
+
+    RowLayout {
+        Layout.fillWidth: true
+        Layout.preferredHeight: JamiTheme.preferredFieldHeight
+
+        ElidedTextLabel {
+            Layout.fillWidth: true
+
+            eText: qsTr("Registered name")
+            fontSize: JamiTheme.settingsFontSize
+            maxWidth: width
+        }
+
+        UsernameLineEdit {
+            id: currentRegisteredID
+
+            Layout.alignment: Qt.AlignRight
+            Layout.fillWidth: true
+            Layout.preferredWidth: itemWidth
+            implicitWidth: itemWidth
+            wrapMode: Text.NoWrap
+
+            placeholderText: registeredIdNeedsSet ?
+                                    qsTr("Type here to register a username") : ""
+            text: {
+                if (!registeredIdNeedsSet)
+                    return SettingsAdapter.get_CurrentAccountInfo_RegisteredName()
+                else
+                    return ""
+            }
+            readOnly: !registeredIdNeedsSet
+            font.bold: !registeredIdNeedsSet
+
+            horizontalAlignment: registeredIdNeedsSet ?
+                                Text.AlignLeft :
+                                Text.AlignRight
+            verticalAlignment: Text.AlignVCenter
+            padding: 8
+        }
+    }
+
+    MaterialButton {
+        id: btnRegisterName
+
+        Layout.alignment: Qt.AlignVCenter | Qt.AlignRight
+        Layout.rightMargin: currentRegisteredID.width / 2 - width / 2
+        Layout.preferredWidth: 120
+        Layout.preferredHeight: 30
+
+        visible: registeredIdNeedsSet &&
+                    currentRegisteredID.nameRegistrationState ===
+                    UsernameLineEdit.NameRegistrationState.FREE
+
+        text: qsTr("Register")
+        toolTipText: qsTr("Register the username")
+        color: JamiTheme.buttonTintedGrey
+        hoveredColor: JamiTheme.buttonTintedGreyHovered
+        pressedColor: JamiTheme.buttonTintedGreyPressed
+
+        onClicked: nameRegistrationDialog.openNameRegistrationDialog(currentRegisteredID.text)
+    }
+}
\ No newline at end of file
diff --git a/src/settingsview/components/LevelMeter.qml b/src/settingsview/components/LevelMeter.qml
index 045d329a1..d8cf9eeef 100644
--- a/src/settingsview/components/LevelMeter.qml
+++ b/src/settingsview/components/LevelMeter.qml
@@ -20,7 +20,7 @@ import QtQuick 2.15
 import QtQuick.Controls 2.15
 
 ProgressBar {
-    id: levelMeter
+    id: root
 
     value: {
         return clamp(rmsLevel * 300.0, 0.0, 100.0)
@@ -28,19 +28,19 @@ ProgressBar {
 
     property real rmsLevel: 0
 
-    function clamp(num,a,b){
+    function clamp(num,a,b) {
         return Math.max(Math.min(num, Math.max(a, b)), Math.min(a, b))
     }
 
-    function start(){
+    function start() {
         rmsLevel = 0
     }
 
-    function stop(){
+    function stop() {
 
     }
 
-    function setLevel(rmsLevelIn){
+    function setLevel(rmsLevelIn) {
         rmsLevel = rmsLevelIn
     }
 
diff --git a/src/settingsview/components/LinkedDevices.qml b/src/settingsview/components/LinkedDevices.qml
new file mode 100644
index 000000000..02259d40e
--- /dev/null
+++ b/src/settingsview/components/LinkedDevices.qml
@@ -0,0 +1,163 @@
+/*
+ * Copyright (C) 2020 by Savoir-faire Linux
+ * Author: Aline Gondim Santos <aline.gondimsantos@savoirfairelinux.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+import QtQuick 2.15
+import QtQuick.Window 2.14
+import QtQuick.Controls 2.15
+import QtQuick.Controls.Universal 2.12
+import QtQuick.Dialogs 1.3
+import QtQuick.Layouts 1.3
+import QtGraphicalEffects 1.14
+import QtQuick.Controls.Styles 1.4
+import net.jami.Models 1.0
+import net.jami.Adapters 1.0
+import Qt.labs.platform 1.1
+import "../../commoncomponents"
+
+ColumnLayout {
+    id:root
+
+    Connections {
+        id: accountConnections_DeviceModel
+        target: AccountAdapter.deviceModel
+        enabled: root.visible
+
+        function onDeviceAdded(id) {
+            updateAndShowDevicesSlot()
+        }
+
+        function onDeviceRevoked(id, status) {
+            updateAndShowDevicesSlot()
+        }
+
+        function onDeviceUpdated(id) {
+            updateAndShowDevicesSlot()
+        }
+    }
+
+    function connectCurrentAccount(status) {
+        accountConnections_DeviceModel.enabled = status
+    }
+
+    function updateAndShowDevicesSlot() {
+        if(SettingsAdapter.getAccountConfig_Manageruri() === ""){
+            linkDevPushButton.visible = true
+        }
+        settingsListView.model.reset()
+    }
+
+    function revokeDeviceWithIDAndPassword(idDevice, password){
+        AccountAdapter.deviceModel.revokeDevice(idDevice, password)
+        updateAndShowDevicesSlot()
+    }
+
+    function removeDeviceSlot(index){
+        var idOfDevice = settingsListView.model.data(settingsListView.model.index(index,0), DeviceItemListModel.DeviceID)
+        if(AccountAdapter.hasPassword()){
+            revokeDevicePasswordDialog.openRevokeDeviceDialog(idOfDevice)
+        } else {
+            revokeDeviceMessageBox.idOfDev = idOfDevice
+            revokeDeviceMessageBox.open()
+        }
+    }
+
+    LinkDeviceDialog {
+        id: linkDeviceDialog
+
+        anchors.centerIn: parent.Center
+
+        onAccepted: updateAndShowDevicesSlot()
+    }
+
+    RevokeDevicePasswordDialog{
+        id: revokeDevicePasswordDialog
+
+        anchors.centerIn: parent.Center
+
+        onRevokeDeviceWithPassword: revokeDeviceWithIDAndPassword(idOfDevice, password)
+    }
+
+    MessageBox {
+        id: revokeDeviceMessageBox
+
+        property string idOfDev: ""
+
+        title:qsTr("Remove Device")
+        text :qsTr("Are you sure you wish to remove this device?")
+        icon :StandardIcon.Information
+        standardButtons: StandardButton.Ok | StandardButton.Cancel
+
+        onAccepted: revokeDeviceWithIDAndPassword(idOfDev,"")
+    }
+
+    Label {
+        Layout.preferredHeight: JamiTheme.preferredFieldHeight
+
+        text: qsTr("Linked Devices")
+
+        font.pointSize: JamiTheme.headerFontSize
+        font.kerning: true
+    }
+
+    ListViewJami {
+        id: settingsListView
+
+        Layout.fillWidth: true
+        Layout.preferredHeight: 160
+
+        model: DeviceItemListModel {}
+
+        delegate: DeviceItemDelegate {
+            id: settingsListDelegate
+
+            implicitWidth: settingsListView.width
+            width: settingsListView.width
+            height: 70
+
+            deviceName: DeviceName
+            deviceId: DeviceID
+            isCurrent: IsCurrent
+
+            onClicked: settingsListView.currentIndex = index
+
+            onBtnRemoveDeviceClicked: removeDeviceSlot(index)
+        }
+    }
+
+    MaterialButton {
+        id: linkDevPushButton
+
+        Layout.alignment: Qt.AlignCenter
+        Layout.preferredWidth: JamiTheme.preferredFieldWidth
+        Layout.preferredHeight: JamiTheme.preferredFieldHeight
+
+        visible: SettingsAdapter.getAccountConfig_Manageruri() === ""
+
+        color: JamiTheme.buttonTintedBlack
+        hoveredColor: JamiTheme.buttonTintedBlackHovered
+        pressedColor: JamiTheme.buttonTintedBlackPressed
+        outlined: true
+        toolTipText: qsTr("Press to link one more device with this account")
+
+        source: "qrc:/images/icons/round-add-24px.svg"
+
+        text: qsTr("Link Another Device")
+
+        onClicked: linkDeviceDialog.openLinkDeviceDialog()
+    }
+}
\ No newline at end of file
diff --git a/src/settingsview/components/AudioCodecDelegate.qml b/src/settingsview/components/MediaCodecDelegate.qml
similarity index 81%
rename from src/settingsview/components/AudioCodecDelegate.qml
rename to src/settingsview/components/MediaCodecDelegate.qml
index bc263159b..8add01452 100644
--- a/src/settingsview/components/AudioCodecDelegate.qml
+++ b/src/settingsview/components/MediaCodecDelegate.qml
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2019-2020 by Savoir-faire Linux
- * Author: Yang Wang   <yang.wang@savoirfairelinux.com>
+ * Copyright (C) 2020 by Savoir-faire Linux
+ * Author: Aline Gondim Santos <aline.gondimsantos@savoirfairelinux.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -28,13 +28,14 @@ import net.jami.Models 1.0
 ItemDelegate {
     id: root
 
-    property string audioCodecName : ""
+    property string mediaCodecName : ""
     property bool isEnabled : false
-    property int audioCodecId
+    property int mediaCodecId
     property string samplerRate: ""
     property int checkBoxWidth: 24
+    property int mediaType
 
-    signal audioCodecStateChange(string idToSet , bool isToBeEnabled)
+    signal mediaCodecStateChange(string idToSet , bool isToBeEnabled)
 
     highlighted: ListView.isCurrentItem
 
@@ -73,7 +74,7 @@ ItemDelegate {
                         result = Qt.Checked
                         result_bool = true
                     }
-                    audioCodecStateChange(audioCodecId,result_bool)
+                    mediaCodecStateChange(mediaCodecId, result_bool)
                     return result
                 }
         }
@@ -86,7 +87,12 @@ ItemDelegate {
             Layout.fillHeight: true
             Layout.rightMargin: JamiTheme.preferredMarginSize / 2
 
-            text: audioCodecName + " " + samplerRate + " Hz"
+            text: {
+                if (mediaType == MediaSettings.VIDEO)
+                    return mediaCodecName
+                else if (mediaType == MediaSettings.AUDIO)
+                    return mediaCodecName + " " + samplerRate + " Hz"
+            }
             elide: Text.ElideRight
             horizontalAlignment: Text.AlignLeft
             verticalAlignment: Text.AlignVCenter
diff --git a/src/settingsview/components/MediaSettings.qml b/src/settingsview/components/MediaSettings.qml
new file mode 100644
index 000000000..04f7b544d
--- /dev/null
+++ b/src/settingsview/components/MediaSettings.qml
@@ -0,0 +1,158 @@
+/*
+ * Copyright (C) 2020 by Savoir-faire Linux
+ * Author: Aline Gondim Santos <aline.gondimsantos@savoirfairelinux.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+import QtQuick 2.15
+import QtQuick.Layouts 1.15
+import QtQuick.Window 2.14
+import QtQuick.Controls 2.15
+import QtQuick.Controls.Universal 2.12
+import QtGraphicalEffects 1.14
+import QtQuick.Controls.Styles 1.4
+import net.jami.Models 1.0
+import net.jami.Adapters 1.0
+import Qt.labs.platform 1.1
+import "../../commoncomponents"
+import "../../constant"
+
+ColumnLayout {
+    id: root
+
+    enum Type {
+        VIDEO,
+        AUDIO
+    }
+
+    property int mediaType
+
+    function decreaseCodecPriority() {
+        var index = mediaListWidget.currentIndex
+        var codecId = mediaListWidget.model.data(mediaListWidget.model.index(index,0), MediaCodecListModel.MediaCodecID)
+
+        if (mediaType == MediaSettings.VIDEO)
+            SettingsAdapter.decreaseVideoCodecPriority(codecId)
+        else if (mediaType == MediaSettings.AUDIO)
+            SettingsAdapter.decreaseAudioCodecPriority(codecId)
+        mediaListWidget.currentIndex = index + 1
+        updateCodecs()
+    }
+
+    function updateCodecs() {
+        mediaListWidget.model.layoutAboutToBeChanged()
+        mediaListWidget.model.dataChanged(mediaListWidget.model.index(0, 0),
+                                     mediaListWidget.model.index(mediaListWidget.model.rowCount() - 1, 0))
+        mediaListWidget.model.layoutChanged()
+    }
+
+    function increaseCodecPriority(){
+        var index = mediaListWidget.currentIndex
+        var codecId = mediaListWidget.model.data(mediaListWidget.model.index(index,0), MediaCodecListModel.MediaCodecID)
+
+        if (mediaType == MediaSettings.VIDEO)
+            SettingsAdapter.increaseVideoCodecPriority(codecId)
+        else if (mediaType == MediaSettings.AUDIO)
+            SettingsAdapter.increaseAudioCodecPriority(codecId)
+        mediaListWidget.currentIndex = index - 1
+        updateCodecs()
+    }
+
+    RowLayout {
+        Layout.fillWidth: true
+        Layout.fillHeight: true
+        Layout.maximumHeight: JamiTheme.preferredFieldHeight
+
+        ElidedTextLabel {
+            Layout.fillWidth: true
+            Layout.preferredHeight: JamiTheme.preferredFieldHeight
+
+            maxWidth: width
+            eText:  {
+                if (mediaType == MediaSettings.VIDEO)
+                    return "Video Codecs"
+                else if (mediaType == MediaSettings.AUDIO)
+                    return "Audio Codecs"
+            }
+            fontSize: JamiTheme.settingsFontSize
+        }
+
+        HoverableButtonTextItem {
+            id: downPushButton
+
+            Layout.preferredWidth: 24
+            Layout.preferredHeight: 24
+
+            radius: height / 2
+
+            source: "qrc:/images/icons/round-arrow_drop_down-24px.svg"
+
+            onClicked: {
+                decreaseCodecPriority()
+            }
+        }
+
+        HoverableButtonTextItem {
+            id: mediaUpPushButton
+
+            Layout.preferredWidth: 24
+            Layout.preferredHeight: 24
+
+            radius: height / 2
+
+            source: "qrc:/images/icons/round-arrow_drop_up-24px.svg"
+
+            onClicked: {
+                increaseCodecPriority()
+            }
+        }
+    }
+
+    ListViewJami {
+        id: mediaListWidget
+
+        Layout.fillWidth: true
+        Layout.preferredHeight: 190
+
+        model: MediaCodecListModel {
+            mediaType: root.mediaType
+        }
+
+        delegate: MediaCodecDelegate {
+            id: mediaCodecDelegate
+
+            width: mediaListWidget.width
+            height: mediaListWidget.height / 4
+
+            mediaCodecName : MediaCodecName
+            isEnabled : IsEnabled
+            mediaCodecId: MediaCodecID
+            samplerRate: Samplerate
+            mediaType: root.mediaType
+
+            onClicked: {
+                mediaListWidget.currentIndex = index
+            }
+
+            onMediaCodecStateChange: {
+                if (mediaType == MediaSettings.VIDEO)
+                    SettingsAdapter.videoCodecsStateChange(idToSet , isToBeEnabled)
+                if (mediaType == MediaSettings.AUDIO)
+                    SettingsAdapter.audioCodecsStateChange(idToSet , isToBeEnabled)
+                updateCodecs()
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/settingsview/components/NameRegistrationDialog.qml b/src/settingsview/components/NameRegistrationDialog.qml
index 765803319..32c16a51b 100644
--- a/src/settingsview/components/NameRegistrationDialog.qml
+++ b/src/settingsview/components/NameRegistrationDialog.qml
@@ -26,7 +26,7 @@ import net.jami.Adapters 1.0
 import "../../commoncomponents"
 
 Dialog {
-    id: nameRegistrationDialog
+    id: root
 
     property string registerdName : ""
 
@@ -40,7 +40,7 @@ Dialog {
             startRegistration()
         }
 
-        nameRegistrationDialog.open()
+        root.open()
     }
 
     function startRegistration(){
diff --git a/src/settingsview/components/PluginSettingsPage.qml b/src/settingsview/components/PluginSettingsPage.qml
index c61024e17..cd32e65e1 100644
--- a/src/settingsview/components/PluginSettingsPage.qml
+++ b/src/settingsview/components/PluginSettingsPage.qml
@@ -29,13 +29,12 @@ import "../../commoncomponents"
 Rectangle {
     id: root
 
-    function populatePluginSettings(){
-        // settings
+    function populatePluginSettings() {
         enabledplugin.checked = PluginModel.getPluginsEnabled()
         pluginListSettingsView.visible = enabledplugin.checked
     }
 
-    function slotSetPluginEnabled(state){
+    function slotSetPluginEnabled(state) {
         PluginModel.setPluginsEnabled(state)
     }
 
@@ -44,43 +43,15 @@ Rectangle {
     ColumnLayout {
         anchors.fill: root
 
-        RowLayout {
-            id: pageTitle
+        SettingsHeader {
             Layout.alignment: Qt.AlignLeft | Qt.AlignVCenter
             Layout.leftMargin: JamiTheme.preferredMarginSize
             Layout.fillWidth: true
             Layout.preferredHeight: 64
 
-            HoverableButton {
-                id: backToSettingsMenuButton
+            title: qsTr("Plugin")
 
-                Layout.preferredWidth: JamiTheme.preferredFieldHeight
-                Layout.preferredHeight: JamiTheme.preferredFieldHeight
-
-                radius: JamiTheme.preferredFieldHeight
-                source: "qrc:/images/icons/ic_arrow_back_24px.svg"
-                backgroundColor: "white"
-                onExitColor: "white"
-                toolTipText: qsTr("Toggle to display side panel")
-                hoverEnabled: true
-                visible: mainViewWindow.sidePanelHidden
-
-                onClicked: {
-                    backArrowClicked()
-                }
-            }
-
-            Label {
-                Layout.fillWidth: true
-
-                text: qsTr("Plugin")
-
-                font.pointSize: JamiTheme.titleFontSize
-                font.kerning: true
-
-                horizontalAlignment: Text.AlignLeft
-                verticalAlignment: Text.AlignVCenter
-            }
+            onBackArrowClicked: root.backArrowClicked()
         }
 
         ScrollView {
diff --git a/src/settingsview/components/RecordingSettings.qml b/src/settingsview/components/RecordingSettings.qml
new file mode 100644
index 000000000..6d5773c6e
--- /dev/null
+++ b/src/settingsview/components/RecordingSettings.qml
@@ -0,0 +1,188 @@
+/*
+ * Copyright (C) 2020 by Savoir-faire Linux
+ * Author: Aline Gondim Santos <aline.gondimsantos@savoirfairelinux.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+import QtQuick 2.15
+import QtQuick.Window 2.14
+import QtQuick.Controls 2.15
+import QtQuick.Controls.Universal 2.12
+import QtQuick.Layouts 1.3
+import QtGraphicalEffects 1.14
+import QtQuick.Controls.Styles 1.4
+import net.jami.Models 1.0
+import net.jami.Adapters 1.0
+import Qt.labs.platform 1.1
+import "../../commoncomponents"
+
+ColumnLayout {
+    id:root
+
+    property int itemWidth
+    property string recordPath: SettingsAdapter.getDir_Document()
+
+    onRecordPathChanged: {
+        if(recordPath === "") return
+
+        if(AVModel){
+            AVModel.setRecordPath(recordPath)
+        }
+    }
+
+    FolderDialog {
+        id: recordPathDialog
+
+        title: qsTr("Select A Folder For Your Recordings")
+        currentFolder: StandardPaths.writableLocation(StandardPaths.HomeLocation)
+
+        onAccepted: {
+            var dir = UtilsAdapter.getAbsPath(folder.toString())
+            recordPath = dir
+        }
+    }
+
+    Timer{
+        id: updateRecordQualityTimer
+
+        interval: 500
+
+        onTriggered: AVModel.setRecordQuality(recordQualitySlider.value * 100)
+    }
+
+    ElidedTextLabel {
+        Layout.fillWidth: true
+
+        eText: qsTr("Call Recording")
+        font.pointSize: JamiTheme.headerFontSize
+        maxWidth: width
+    }
+
+    ToggleSwitch {
+        id: alwaysRecordingCheckBox
+        Layout.fillWidth: true
+        Layout.leftMargin: JamiTheme.preferredMarginSize
+
+        checked: AVModel.getAlwaysRecord()
+
+        labelText: qsTr("Always record calls")
+        fontPointSize: JamiTheme.settingsFontSize
+
+        onSwitchToggled: AVModel.setAlwaysRecord(checked)
+    }
+
+    ToggleSwitch {
+        id: recordPreviewCheckBox
+        Layout.fillWidth: true
+        Layout.leftMargin: JamiTheme.preferredMarginSize
+
+        checked: AVModel.getRecordPreview()
+
+        labelText: qsTr("Record preview video for a call")
+        fontPointSize: JamiTheme.settingsFontSize
+
+        onSwitchToggled: AVModel.setRecordPreview(checked)
+    }
+
+    RowLayout {
+        Layout.fillWidth: true
+        Layout.preferredHeight: JamiTheme.preferredFieldHeight
+        Layout.leftMargin: JamiTheme.preferredMarginSize
+
+        Text {
+            Layout.fillWidth: true
+            Layout.rightMargin: JamiTheme.preferredMarginSize / 2
+
+            text: qsTr("Quality")
+            font.pointSize: JamiTheme.settingsFontSize
+            font.kerning: true
+            elide: Text.ElideRight
+            horizontalAlignment: Text.AlignLeft
+            verticalAlignment: Text.AlignVCenter
+        }
+
+        Text {
+            id: recordQualityValueLabel
+
+            Layout.alignment: Qt.AlignRight
+            Layout.fillHeight: true
+            Layout.fillWidth: true
+            Layout.rightMargin: JamiTheme.preferredMarginSize / 2
+
+            text: UtilsAdapter.getRecordQualityString(AVModel.getRecordQuality() / 100)
+
+            font.pointSize: JamiTheme.settingsFontSize
+            font.kerning: true
+
+            horizontalAlignment: Text.AlignRight
+            verticalAlignment: Text.AlignVCenter
+        }
+
+        Slider {
+            id: recordQualitySlider
+
+            Layout.maximumWidth: itemWidth
+            Layout.alignment: Qt.AlignRight
+            Layout.fillWidth: true
+            Layout.fillHeight: true
+
+            value: AVModel.getRecordQuality() / 100
+
+            from: 0
+            to: 500
+            stepSize: 1
+
+            onMoved: {
+                recordQualityValueLabel.text = UtilsAdapter.getRecordQualityString(value)
+                updateRecordQualityTimer.restart()
+            }
+        }
+    }
+
+    RowLayout {
+        Layout.fillWidth: true
+        Layout.preferredHeight: JamiTheme.preferredFieldHeight
+        Layout.leftMargin: JamiTheme.preferredMarginSize
+
+        Label {
+            Layout.fillWidth: true
+            Layout.fillHeight: true
+
+            text: qsTr("Save in")
+            font.pointSize: JamiTheme.settingsFontSize
+            font.kerning: true
+
+            horizontalAlignment: Text.AlignLeft
+            verticalAlignment: Text.AlignVCenter
+        }
+
+        MaterialButton {
+            id: recordPathButton
+
+            Layout.alignment: Qt.AlignRight
+            Layout.fillHeight: true
+            Layout.preferredWidth: itemWidth
+
+            toolTipText: qsTr("Press to choose record folder path")
+            text: recordPath
+            source: "qrc:/images/icons/round-folder-24px.svg"
+            color: JamiTheme.buttonTintedGrey
+            hoveredColor: JamiTheme.buttonTintedGreyHovered
+            pressedColor: JamiTheme.buttonTintedGreyPressed
+
+            onClicked: recordPathDialog.open()
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/settingsview/components/SIPUserIdentity.qml b/src/settingsview/components/SIPUserIdentity.qml
new file mode 100644
index 000000000..0613b2217
--- /dev/null
+++ b/src/settingsview/components/SIPUserIdentity.qml
@@ -0,0 +1,86 @@
+/*
+ * Copyright (C) 2020 by Savoir-faire Linux
+ * Author: Aline Gondim Santos <aline.gondimsantos@savoirfairelinux.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+import QtQuick 2.15
+import QtQuick.Layouts 1.15
+import QtQuick.Window 2.14
+import QtQuick.Controls 2.15
+import QtQuick.Controls.Universal 2.12
+import QtGraphicalEffects 1.14
+import QtQuick.Controls.Styles 1.4
+import net.jami.Models 1.0
+import net.jami.Adapters 1.0
+import Qt.labs.platform 1.1
+import "../../commoncomponents"
+
+ColumnLayout {
+    id: root
+
+    property int itemWidth
+
+    function updateAccountInfo() {
+        usernameSIP.setText(SettingsAdapter.getAccountConfig_Username())
+        hostnameSIP.setText(SettingsAdapter.getAccountConfig_Hostname())
+        passSIPlineEdit.setText(SettingsAdapter.getAccountConfig_Password())
+        proxySIP.setText(SettingsAdapter.getAccountConfig_ProxyServer())
+    }
+
+    SettingsMaterialLineEdit {
+        id: usernameSIP
+
+        Layout.fillWidth: true
+        Layout.preferredHeight: JamiTheme.preferredFieldHeight
+
+        titleField: qsTr("Username")
+        itemWidth: root.itemWidth
+        onEditFinished: SettingsAdapter.setAccountConfig_Username(textField)
+    }
+
+    SettingsMaterialLineEdit {
+        id: hostnameSIP
+
+        Layout.fillWidth: true
+        Layout.preferredHeight: JamiTheme.preferredFieldHeight
+
+        titleField: qsTr("Hostname")
+        itemWidth: root.itemWidth
+        onEditFinished: SettingsAdapter.setAccountConfig_Hostname(textField)
+    }
+
+    SettingsMaterialLineEdit {
+        id: proxySIP
+
+        Layout.fillWidth: true
+        Layout.preferredHeight: JamiTheme.preferredFieldHeight
+
+        titleField: qsTr("Proxy")
+        itemWidth: root.itemWidth
+        onEditFinished: SettingsAdapter.setAccountConfig_ProxyServer(textField)
+    }
+
+    SettingsMaterialLineEdit {
+        id: passSIPlineEdit
+
+        Layout.fillWidth: true
+        Layout.preferredHeight: JamiTheme.preferredFieldHeight
+
+        titleField: qsTr("Password")
+        itemWidth: root.itemWidth
+        onEditFinished: SettingsAdapter.setAccountConfig_Password(textField)
+    }
+}
\ No newline at end of file
diff --git a/src/settingsview/components/SettingMaterialButton.qml b/src/settingsview/components/SettingMaterialButton.qml
new file mode 100644
index 000000000..41de79928
--- /dev/null
+++ b/src/settingsview/components/SettingMaterialButton.qml
@@ -0,0 +1,80 @@
+/*
+ * Copyright (C) 2020 by Savoir-faire Linux
+ * Author: Aline Gondim Santos <aline.gondimsantos@savoirfairelinux.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+import QtQuick 2.15
+import QtQuick.Layouts 1.15
+import QtQuick.Window 2.14
+import QtQuick.Controls 2.15
+import QtQuick.Controls.Universal 2.12
+import QtGraphicalEffects 1.14
+import QtQuick.Controls.Styles 1.4
+import net.jami.Models 1.0
+import net.jami.Adapters 1.0
+import Qt.labs.platform 1.1
+import "../../commoncomponents"
+import "../../constant"
+
+RowLayout {
+    id: root
+
+    property string titleField: ""
+    property string textField: ""
+    property string source
+    property int itemWidth
+
+    signal click
+
+    function setEnabled(status) {
+        button.enabled = status
+    }
+    function setText(text) {
+        root.textField = text
+        button.text = text
+    }
+
+    Text {
+        Layout.fillWidth: true
+        Layout.rightMargin: JamiTheme.preferredMarginSize / 2
+
+        font.pointSize: JamiTheme.settingsFontSize
+        font.kerning: true
+
+        horizontalAlignment: Text.AlignLeft
+        verticalAlignment: Text.AlignVCenter
+
+        text: root.titleField
+        elide: Text.ElideRight
+    }
+
+    MaterialButton {
+        id: button
+        Layout.preferredWidth: root.itemWidth
+        Layout.fillHeight: true
+
+        text: root.textField
+        source: root.source
+        color: JamiTheme.buttonTintedGrey
+        hoveredColor: JamiTheme.buttonTintedGreyHovered
+        pressedColor: JamiTheme.buttonTintedGreyPressed
+
+        onClicked: {
+            root.textField = text
+            click()
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/settingsview/components/SettingSpinBox.qml b/src/settingsview/components/SettingSpinBox.qml
new file mode 100644
index 000000000..71c0d21c8
--- /dev/null
+++ b/src/settingsview/components/SettingSpinBox.qml
@@ -0,0 +1,86 @@
+/*
+ * Copyright (C) 2020 by Savoir-faire Linux
+ * Author: Aline Gondim Santos <aline.gondimsantos@savoirfairelinux.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+import QtQuick 2.15
+import QtQuick.Layouts 1.15
+import QtQuick.Window 2.14
+import QtQuick.Controls 2.15
+import QtQuick.Controls.Universal 2.12
+import QtGraphicalEffects 1.14
+import QtQuick.Controls.Styles 1.4
+import net.jami.Models 1.0
+import net.jami.Adapters 1.0
+import Qt.labs.platform 1.1
+import "../../commoncomponents"
+import "../../constant"
+
+RowLayout {
+    id: root
+
+    property string title: ""
+    property int itemWidth
+    property int bottomValue
+    property int topValue
+    property int step
+    property int valueField
+
+    signal newValue
+
+    function setEnabled(status) {
+        spinBox.enabled = status
+    }
+
+    function setValue(value) {
+        root.valueField = value
+        spinBox.value = value
+    }
+
+    Text {
+        Layout.fillWidth: true
+        Layout.rightMargin: JamiTheme.preferredMarginSize
+        Layout.preferredHeight: JamiTheme.preferredFieldHeight
+        text: root.title
+        elide: Text.ElideRight
+        font.pointSize: JamiTheme.settingsFontSize
+        font.kerning: true
+        verticalAlignment: Text.AlignVCenter
+    }
+
+    SpinBox {
+        id: spinBox
+
+        Layout.preferredWidth: root.itemWidth
+        Layout.preferredHeight: JamiTheme.preferredFieldHeight
+        Layout.alignment: Qt.AlignCenter
+
+        font.pointSize: JamiTheme.buttonFontSize
+        font.kerning: true
+
+        from: root.bottomValue
+        to: root.topValue
+        stepSize: root.step
+
+        up.indicator.width: (width < 200) ? (width / 5) : 40
+        down.indicator.width: (width < 200) ? (width / 5) : 40
+
+        onValueModified: {
+            root.valueField = value
+            newValue()
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/settingsview/components/SettingsComboBox.qml b/src/settingsview/components/SettingsComboBox.qml
new file mode 100644
index 000000000..c25339d38
--- /dev/null
+++ b/src/settingsview/components/SettingsComboBox.qml
@@ -0,0 +1,82 @@
+/*
+ * Copyright (C) 2019-2020 by Savoir-faire Linux
+ * Author: Aline Gondim Santos <aline.gondimsantos@savoirfairelinux.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+import QtQuick 2.15
+import QtQuick.Window 2.14
+import QtQuick.Controls 2.14
+import QtQuick.Controls.Universal 2.12
+import QtQuick.Layouts 1.3
+import QtGraphicalEffects 1.14
+import QtQuick.Controls.Styles 1.4
+import "../../commoncomponents"
+import "../../constant"
+
+RowLayout {
+    id: root
+
+    property string labelText: ""
+    property var comboModel
+    property int fontPointSize: JamiTheme.headerFontSize
+    property int heightOfLayout: 30
+    property int widthOfComboBox: 50
+    property int modelIndex
+    property string tipText: ""
+    property string role: ""
+
+    signal indexChanged
+
+    function setCurrentIndex(index) {
+        comboBoxOfLayout.currentIndex = index
+        modelIndex = index
+    }
+
+    function setEnabled(status) {
+        comboBoxOfLayout.enabled = status
+        label.enabled = status
+    }
+
+    ElidedTextLabel {
+        id: label
+        Layout.fillWidth: true
+        Layout.preferredHeight: heightOfLayout
+        Layout.rightMargin: JamiTheme.preferredMarginSize
+
+        text: qsTr(labelText)
+        fontSize: JamiTheme.settingsFontSize
+        maxWidth: width
+    }
+
+    SettingParaCombobox {
+        id: comboBoxOfLayout
+        Layout.preferredWidth: widthOfComboBox
+        Layout.preferredHeight: JamiTheme.preferredFieldHeight
+
+        font.pointSize: JamiTheme.buttonFontSize
+        font.kerning: true
+
+        model: comboModel
+
+        textRole: role
+        tooltipText: tipText
+
+        onActivated: {
+            root.modelIndex = index
+            indexChanged()
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/settingsview/components/SettingsHeader.qml b/src/settingsview/components/SettingsHeader.qml
new file mode 100644
index 000000000..9501273b4
--- /dev/null
+++ b/src/settingsview/components/SettingsHeader.qml
@@ -0,0 +1,65 @@
+/*!
+ * Copyright (C) 2020 by Savoir-faire Linux
+ * Author: Aline Gondim Santos <aline.gondimsantos@savoirfairelinux.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+import QtQuick 2.15
+import QtQuick.Window 2.14
+import QtQuick.Controls 2.15
+import QtQuick.Controls.Universal 2.12
+import QtQuick.Layouts 1.3
+import QtGraphicalEffects 1.14
+import QtQuick.Controls.Styles 1.4
+import net.jami.Models 1.0
+import "../../commoncomponents"
+
+RowLayout {
+    id: root
+
+    property string title: ""
+    signal backArrowClicked
+
+    HoverableButton {
+        id: backToSettingsMenuButton
+
+        Layout.preferredWidth: JamiTheme.preferredFieldHeight
+        Layout.preferredHeight: JamiTheme.preferredFieldHeight
+
+        radius: JamiTheme.preferredFieldHeight
+        source: "qrc:/images/icons/ic_arrow_back_24px.svg"
+        backgroundColor: "white"
+        onExitColor: "white"
+        toolTipText: qsTr("Toggle to display side panel")
+        hoverEnabled: true
+
+        visible: mainViewWindow.sidePanelHidden
+
+        onClicked: {
+            backArrowClicked()
+        }
+    }
+
+    Label {
+        Layout.fillWidth: true
+
+        text: root.title
+        font.pointSize: JamiTheme.titleFontSize
+        font.kerning: true
+
+        horizontalAlignment: Text.AlignLeft
+        verticalAlignment: Text.AlignVCenter
+    }
+}
diff --git a/src/settingsview/components/SettingsMaterialLineEdit.qml b/src/settingsview/components/SettingsMaterialLineEdit.qml
new file mode 100644
index 000000000..3f37a1c1f
--- /dev/null
+++ b/src/settingsview/components/SettingsMaterialLineEdit.qml
@@ -0,0 +1,85 @@
+/*
+ * Copyright (C) 2020 by Savoir-faire Linux
+ * Author: Aline Gondim Santos <aline.gondimsantos@savoirfairelinux.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+import QtQuick 2.15
+import QtQuick.Layouts 1.15
+import QtQuick.Window 2.14
+import QtQuick.Controls 2.15
+import QtQuick.Controls.Universal 2.12
+import QtGraphicalEffects 1.14
+import QtQuick.Controls.Styles 1.4
+import net.jami.Models 1.0
+import net.jami.Adapters 1.0
+import Qt.labs.platform 1.1
+import "../../commoncomponents"
+import "../../constant"
+
+RowLayout {
+    id: root
+
+    property string titleField: ""
+    property string textField: ""
+    property int itemWidth
+    property int wrapMode: Text.NoWrap
+
+    signal editFinished
+
+    function setEnabled(status) {
+        materialLineEdit.enabled = status
+    }
+
+    function setText(text) {
+        root.textField = text
+        materialLineEdit.text = text
+    }
+
+    Text {
+        Layout.fillWidth: true
+        Layout.rightMargin: JamiTheme.preferredMarginSize / 2
+
+        font.pointSize: JamiTheme.settingsFontSize
+        font.kerning: true
+
+        horizontalAlignment: Text.AlignLeft
+        verticalAlignment: Text.AlignVCenter
+
+        text: titleField
+        elide: Text.ElideRight
+    }
+
+    MaterialLineEdit {
+        id: materialLineEdit
+        Layout.alignment: Qt.AlignCenter
+        Layout.preferredWidth: itemWidth
+
+        font.pointSize: JamiTheme.settingsFontSize
+        font.kerning: true
+
+        text: textField
+
+        horizontalAlignment: Text.AlignLeft
+        verticalAlignment: Text.AlignVCenter
+        wrapMode: root.wrapMode
+        padding: 8
+
+        onEditingFinished: {
+            root.textField = text
+            editFinished()
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/settingsview/components/SystemSettings.qml b/src/settingsview/components/SystemSettings.qml
new file mode 100644
index 000000000..2fb4c9b0e
--- /dev/null
+++ b/src/settingsview/components/SystemSettings.qml
@@ -0,0 +1,144 @@
+/*!
+ * Copyright (C) 2020 by Savoir-faire Linux
+ * Author: Aline Gondim Santos <aline.gondimsantos@savoirfairelinux.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+import QtQuick 2.15
+import QtQuick.Window 2.14
+import QtQuick.Controls 2.15
+import QtQuick.Controls.Universal 2.12
+import QtQuick.Layouts 1.3
+import QtGraphicalEffects 1.14
+import QtQuick.Controls.Styles 1.4
+import net.jami.Models 1.0
+import net.jami.Adapters 1.0
+import net.jami.Enums 1.0
+import Qt.labs.platform 1.1
+import "../../commoncomponents"
+
+ColumnLayout {
+    id:root
+
+    property int itemWidth
+    property string downloadPath: SettingsAdapter.getDir_Download()
+
+    onDownloadPathChanged: {
+        if(downloadPath === "") return
+       SettingsAdapter.setDownloadPath(downloadPath)
+    }
+
+    FolderDialog {
+        id: downloadPathDialog
+
+        title: qsTr("Select A Folder For Your Downloads")
+        currentFolder: StandardPaths.writableLocation(StandardPaths.DownloadLocation)
+
+        onAccepted: {
+            var dir = UtilsAdapter.getAbsPath(folder.toString())
+            downloadPath = dir
+        }
+    }
+
+    Label {
+        Layout.fillWidth: true
+
+        text: qsTr("System")
+        font.pointSize: JamiTheme.headerFontSize
+        font.kerning: true
+
+        horizontalAlignment: Text.AlignLeft
+        verticalAlignment: Text.AlignVCenter
+    }
+
+    ToggleSwitch {
+        id: notificationCheckBox
+        Layout.fillWidth: true
+        Layout.leftMargin: JamiTheme.preferredMarginSize
+
+        checked: SettingsAdapter.getAppValue(Settings.EnableNotifications)
+
+        labelText: qsTr("Enable desktop notifications")
+        fontPointSize: JamiTheme.settingsFontSize
+
+        tooltipText: qsTr("toggle enable notifications")
+
+        onSwitchToggled: SettingsAdapter.setAppValue(Settings.Key.EnableNotifications, checked)
+    }
+
+    ToggleSwitch {
+        id: closeOrMinCheckBox
+        Layout.fillWidth: true
+        Layout.leftMargin: JamiTheme.preferredMarginSize
+        checked: SettingsAdapter.getAppValue(Settings.MinimizeOnClose)
+
+        labelText: qsTr("Keep minimize on close")
+        fontPointSize: JamiTheme.settingsFontSize
+
+        tooltipText: qsTr("toggle keep minimized on close")
+
+        onSwitchToggled: SettingsAdapter.setAppValue(Settings.Key.MinimizeOnClose, checked)
+    }
+
+    ToggleSwitch {
+        id: applicationOnStartUpCheckBox
+        Layout.fillWidth: true
+        Layout.leftMargin: JamiTheme.preferredMarginSize
+
+        checked: UtilsAdapter.checkStartupLink()
+
+        labelText: qsTr("Run On Startup")
+        fontPointSize: JamiTheme.settingsFontSize
+
+        tooltipText: qsTr("toggle run application on system startup")
+
+        onSwitchToggled: SettingsAdapter.setRunOnStartUp(checked)
+    }
+
+    RowLayout {
+        Layout.fillWidth: true
+        Layout.preferredHeight: JamiTheme.preferredFieldHeight
+        Layout.leftMargin: JamiTheme.preferredMarginSize
+
+        Label {
+            Layout.fillWidth: true
+            Layout.fillHeight: true
+
+            text: qsTr("Downloads folder")
+            font.pointSize: JamiTheme.settingsFontSize
+            font.kerning: true
+
+            horizontalAlignment: Text.AlignLeft
+            verticalAlignment: Text.AlignVCenter
+        }
+
+        MaterialButton {
+            id: downloadButton
+
+            Layout.alignment: Qt.AlignRight
+            Layout.preferredWidth: itemWidth
+            Layout.fillHeight: true
+
+            toolTipText: qsTr("Press to choose download folder path")
+            text: downloadPath
+            source: "qrc:/images/icons/round-folder-24px.svg"
+            color: JamiTheme.buttonTintedGrey
+            hoveredColor: JamiTheme.buttonTintedGreyHovered
+            pressedColor: JamiTheme.buttonTintedGreyPressed
+
+            onClicked: downloadPathDialog.open()
+        }
+    }
+}
diff --git a/src/settingsview/components/ToggleSwitch.qml b/src/settingsview/components/ToggleSwitch.qml
index bb8cddb66..862f85b33 100644
--- a/src/settingsview/components/ToggleSwitch.qml
+++ b/src/settingsview/components/ToggleSwitch.qml
@@ -32,7 +32,7 @@ RowLayout {
     property int widthOfSwitch: 50
     property int heightOfSwitch: 10
     property int heightOfLayout: 30
-    property int fontPointSize: 13
+    property int fontPointSize: JamiTheme.headerFontSize
 
     property string tooltipText: ""
 
diff --git a/src/settingsview/components/UpdateSettings.qml b/src/settingsview/components/UpdateSettings.qml
new file mode 100644
index 000000000..456a8c8ec
--- /dev/null
+++ b/src/settingsview/components/UpdateSettings.qml
@@ -0,0 +1,98 @@
+/*
+ * Copyright (C) 2020 by Savoir-faire Linux
+ * Author: Aline Gondim Santos <aline.gondimsantos@savoirfairelinux.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+import QtQuick 2.15
+import QtQuick.Window 2.14
+import QtQuick.Controls 2.15
+import QtQuick.Controls.Universal 2.12
+import QtQuick.Layouts 1.3
+import QtGraphicalEffects 1.14
+import QtQuick.Controls.Styles 1.4
+import net.jami.Models 1.0
+import net.jami.Adapters 1.0
+import Qt.labs.platform 1.1
+import net.jami.Enums 1.0
+import "../../commoncomponents"
+
+ColumnLayout {
+    id: root
+
+    //TODO: complete check for update and check for Beta slot functions
+    function checkForUpdateSlot() {}
+    function installBetaSlot() {}
+
+    Label {
+        Layout.fillWidth: true
+        Layout.preferredHeight: JamiTheme.preferredFieldHeight
+
+        text: qsTr("Updates")
+        font.pointSize: JamiTheme.headerFontSize
+        font.kerning: true
+
+        horizontalAlignment: Text.AlignLeft
+        verticalAlignment: Text.AlignVCenter
+    }
+
+    ToggleSwitch {
+        id: autoUpdateCheckBox
+
+        checked: SettingsAdapter.getAppValue(Settings.Key.AutoUpdate)
+        labelText: qsTr("Check for updates automatically")
+        fontPointSize: JamiTheme.settingsFontSize
+
+        tooltipText: qsTr("toggle automatic updates")
+
+        onSwitchToggled: SettingsAdapter.setAppValue(Settings.Key.AutoUpdate, checked)
+    }
+
+    HoverableRadiusButton {
+        id: checkUpdateButton
+
+        Layout.alignment: Qt.AlignHCenter
+        Layout.preferredWidth: JamiTheme.preferredFieldWidth
+        Layout.preferredHeight: JamiTheme.preferredFieldHeight
+
+        radius: height / 2
+
+        toolTipText: qsTr("Check for updates now")
+        text: qsTr("Updates")
+        fontPointSize: JamiTheme.buttonFontSize
+
+        onClicked: {
+            checkForUpdateSlot()
+        }
+    }
+
+    HoverableRadiusButton {
+        id: installBetaButton
+
+        Layout.alignment: Qt.AlignHCenter
+        Layout.preferredWidth: JamiTheme.preferredFieldWidth
+        Layout.preferredHeight: JamiTheme.preferredFieldHeight
+
+        radius: height / 2
+
+        toolTipText: qsTr("Install the latest beta version")
+        text: qsTr("Beta Install")
+        fontPointSize: JamiTheme.buttonFontSize
+
+        onClicked: {
+            installBetaSlot()
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/settingsview/components/UserIdentity.qml b/src/settingsview/components/UserIdentity.qml
new file mode 100644
index 000000000..bbd91ff54
--- /dev/null
+++ b/src/settingsview/components/UserIdentity.qml
@@ -0,0 +1,71 @@
+/*
+ * Copyright (C) 2020 by Savoir-faire Linux
+ * Author: Aline Gondim Santos <aline.gondimsantos@savoirfairelinux.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+import QtQuick 2.15
+import QtQuick.Layouts 1.15
+import QtQuick.Window 2.14
+import QtQuick.Controls 2.15
+import QtQuick.Controls.Universal 2.12
+import QtGraphicalEffects 1.14
+import QtQuick.Controls.Styles 1.4
+import net.jami.Models 1.0
+import net.jami.Adapters 1.0
+import Qt.labs.platform 1.1
+import "../../commoncomponents"
+
+ColumnLayout {
+    id: root
+
+    property int itemWidth
+    property bool isSIP
+
+    function updateAccountInfo() {
+        if (!isSIP) {
+            jamiUserIdentity.updateAccountInfo()
+        } else {
+            sipUserIdentity.updateAccountInfo()
+        }
+    }
+
+    ElidedTextLabel {
+        Layout.fillWidth: true
+        Layout.preferredHeight: JamiTheme.preferredFieldHeight
+
+        eText: qsTr("Identity")
+        maxWidth: root.width - 72
+        fontSize: JamiTheme.headerFontSize
+    }
+
+    JamiUserIdentity {
+        id: jamiUserIdentity
+        visible: !root.isSIP
+        itemWidth: root.itemWidth
+
+        Layout.fillWidth: true
+        Layout.leftMargin: JamiTheme.preferredMarginSize
+    }
+
+    SIPUserIdentity {
+        id: sipUserIdentity
+        visible: root.isSIP
+        itemWidth: root.itemWidth
+
+        Layout.fillWidth: true
+        Layout.leftMargin: JamiTheme.preferredMarginSize
+    }
+}
diff --git a/src/settingsview/components/VideoCodecDelegate.qml b/src/settingsview/components/VideoCodecDelegate.qml
deleted file mode 100644
index 853dd8804..000000000
--- a/src/settingsview/components/VideoCodecDelegate.qml
+++ /dev/null
@@ -1,96 +0,0 @@
-/*
- * Copyright (C) 2019-2020 by Savoir-faire Linux
- * Author: Yang Wang   <yang.wang@savoirfairelinux.com>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-import QtQuick 2.15
-import QtQuick.Window 2.15
-import QtQuick.Controls 2.15
-import QtQuick.Controls.Universal 2.12
-import QtQuick.Layouts 1.3
-import QtGraphicalEffects 1.14
-import QtQuick.Controls.Styles 1.4
-import net.jami.Models 1.0
-
-ItemDelegate {
-    id: root
-
-    property string videoCodecName : ""
-    property bool isEnabled : false
-    property int videoCodecId
-    property int checkBoxWidth: 24
-
-    signal videoCodecStateChange(string idToSet , bool isToBeEnabled)
-
-    highlighted: ListView.isCurrentItem
-
-    RowLayout {
-        anchors.fill: parent
-
-        CheckBox{
-            id: checkBoxIsEnabled
-
-            Layout.leftMargin: 20
-            Layout.alignment: Qt.AlignLeft | Qt.AlignVCenter
-            Layout.fillHeight: true
-            Layout.preferredWidth: checkBoxWidth
-
-            tristate: false
-            checkState: isEnabled ? Qt.Checked : Qt.Unchecked
-
-            text: ""
-            indicator: Image {
-                anchors.centerIn: parent
-                width: checkBoxWidth
-                height: checkBoxWidth
-                source: checkBoxIsEnabled.checked ?
-                    "qrc:/images/icons/check_box-24px.svg" :
-                    "qrc:/images/icons/check_box_outline_blank-24px.svg"
-            }
-
-            nextCheckState: function() {
-                    var result
-                    var result_bool
-
-                    if (checkState === Qt.Checked) {
-                        result = Qt.Unchecked
-                        result_bool = false
-                    } else {
-                        result = Qt.Checked
-                        result_bool = true
-                    }
-                    videoCodecStateChange(videoCodecId,result_bool)
-                    return result
-                }
-        }
-
-        Label {
-            id: formatNameLabel
-
-            Layout.fillWidth: true
-            Layout.fillHeight: true
-            Layout.rightMargin: JamiTheme.preferredMarginSize / 2
-            Layout.alignment: Qt.AlignLeft | Qt.AlignVCenter
-
-            text: videoCodecName
-            elide: Text.ElideRight
-            horizontalAlignment: Text.AlignLeft
-            verticalAlignment: Text.AlignVCenter
-            font.pointSize: 8
-            font.kerning: true
-        }
-    }
-}
diff --git a/src/settingsview/components/VideoSettings.qml b/src/settingsview/components/VideoSettings.qml
new file mode 100644
index 000000000..755ae3662
--- /dev/null
+++ b/src/settingsview/components/VideoSettings.qml
@@ -0,0 +1,258 @@
+/*
+ * Copyright (C) 2020 by Savoir-faire Linux
+ * Author: Aline Gondim Santos <aline.gondimsantos@savoirfairelinux.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+import QtQuick 2.15
+import QtQuick.Window 2.14
+import QtQuick.Controls 2.15
+import QtQuick.Controls.Universal 2.12
+import QtQuick.Layouts 1.3
+import QtGraphicalEffects 1.14
+import QtQuick.Controls.Styles 1.4
+import net.jami.Models 1.0
+import net.jami.Adapters 1.0
+import net.jami.Enums 1.0
+import Qt.labs.platform 1.1
+import "../../commoncomponents"
+
+ColumnLayout {
+    id: root
+
+    property real aspectRatio: 0.75
+    property bool previewAvailable: false
+    property int itemWidth
+
+    Connections {
+        target: RenderManager
+        enabled: root.visible
+
+        function onVideoDeviceListChanged() {
+            populateVideoSettings()
+        }
+    }
+
+    function populateVideoSettings() {
+        deviceComboBoxSetting.comboModel.reset()
+
+        var count = deviceComboBoxSetting.comboModel.deviceCount() > 0
+        deviceComboBoxSetting.setEnabled(count)
+        resolutionComboBoxSetting.setEnabled(count)
+        fpsComboBoxSetting.setEnabled(count)
+
+        deviceComboBoxSetting.setCurrentIndex(deviceComboBoxSetting.comboModel.getCurrentSettingIndex())
+        slotDeviceBoxCurrentIndexChanged(deviceComboBoxSetting.modelIndex)
+        hardwareAccelControl.checked = AVModel.getHardwareAcceleration()
+
+        try {
+            startPreviewing(false)
+        } catch (err2){ console.log("Start preview fail when populate video settings, exception: "+ err2.message) }
+    }
+
+    function slotDeviceBoxCurrentIndexChanged(index) {
+        if(deviceComboBoxSetting.comboModel.deviceCount() <= 0)
+            return
+
+        try {
+            var deviceId = deviceComboBoxSetting.comboModel.data(deviceComboBoxSetting.comboModel.index(index, 0), VideoInputDeviceModel.DeviceId)
+            var deviceName = deviceComboBoxSetting.comboModel.data(deviceComboBoxSetting.comboModel.index(index, 0), VideoInputDeviceModel.DeviceName)
+            if(deviceId.length === 0) {
+                console.warn("Couldn't find device: " + deviceName)
+                return
+            }
+
+            AVModel.setCurrentVideoCaptureDevice(deviceId)
+            AVModel.setDefaultDevice(deviceId)
+            setFormatListForCurrentDevice()
+            startPreviewing(true)
+        } catch(err){ console.warn(err.message) }
+    }
+
+    function startPreviewing(force = false, async = true) {
+        AccountAdapter.startPreviewing(force, async)
+        previewAvailable = true
+    }
+
+    function setFormatListForCurrentDevice() {
+        var device = AVModel.getCurrentVideoCaptureDevice()
+        if (SettingsAdapter.get_DeviceCapabilitiesSize(device) === 0)
+            return
+
+        try {
+            resolutionComboBoxSetting.comboModel.reset()
+            resolutionComboBoxSetting.setCurrentIndex(resolutionComboBoxSetting.comboModel.getCurrentSettingIndex())
+            slotFormatCurrentIndexChanged(resolutionComboBoxSetting.modelIndex, true)
+        } catch(err){ console.warn("Exception: " + err.message) }
+    }
+
+    function stopPreviewing(async = true) {
+        AccountAdapter.stopPreviewing(async)
+    }
+
+    function slotFormatCurrentIndexChanged(index, isResolutionIndex) {
+        var resolution
+        var rate
+        if(isResolutionIndex) {
+            resolution = resolutionComboBoxSetting.comboModel.data(resolutionComboBoxSetting.comboModel.index(index, 0), VideoFormatResolutionModel.Resolution)
+            fpsComboBoxSetting.comboModel.currentResolution = resolution
+            fpsComboBoxSetting.setCurrentIndex(fpsComboBoxSetting.comboModel.getCurrentSettingIndex())
+            rate = fpsComboBoxSetting.comboModel.data(fpsComboBoxSetting.comboModel.index(index, 0), VideoFormatFpsModel.FPS)
+        } else {
+            resolution = resolutionComboBoxSetting.comboModel.data(resolutionComboBoxSetting.comboModel.index(index, 0), VideoFormatResolutionModel.Resolution)
+            fpsComboBoxSetting.comboModel.currentResolution = resolution
+            rate = fpsComboBoxSetting.comboModel.data(fpsComboBoxSetting.comboModel.model.index(index, 0), VideoFormatFpsModel.FPS)
+        }
+
+        try {
+           SettingsAdapter.set_Video_Settings_Rate_And_Resolution(AVModel.getCurrentVideoCaptureDevice(),rate,resolution)
+            updatePreviewRatio(resolution)
+        } catch(error){ console.warn(error.message) }
+    }
+
+    function updatePreviewRatio(resolution) {
+        var res = resolution.split("x")
+        var ratio = res[1] / res[0]
+        if (ratio) {
+            aspectRatio = ratio
+        } else {
+            console.error("Could not scale recording video preview")
+        }
+    }
+
+    ElidedTextLabel {
+        Layout.fillWidth: true
+        Layout.preferredHeight: JamiTheme.preferredFieldHeight
+
+        eText: qsTr("Video")
+        fontSize: JamiTheme.headerFontSize
+        maxWidth: itemWidth * 2
+    }
+
+    SettingsComboBox {
+        id: deviceComboBoxSetting
+
+        Layout.fillWidth: true
+        Layout.maximumHeight: JamiTheme.preferredFieldHeight
+        Layout.leftMargin: JamiTheme.preferredMarginSize
+
+        labelText: qsTr("Device")
+        fontPointSize: JamiTheme.settingsFontSize
+        comboModel: VideoInputDeviceModel {}
+        widthOfComboBox: itemWidth
+        tipText: qsTr("Video device selector")
+        role: "DeviceName_UTF8"
+
+        onIndexChanged: {
+            slotDeviceBoxCurrentIndexChanged(modelIndex)
+        }
+    }
+
+    SettingsComboBox {
+        id: resolutionComboBoxSetting
+
+        Layout.fillWidth: true
+        Layout.maximumHeight: JamiTheme.preferredFieldHeight
+        Layout.leftMargin: JamiTheme.preferredMarginSize
+
+        labelText: qsTr("Resolution")
+        fontPointSize: JamiTheme.settingsFontSize
+        comboModel: VideoFormatResolutionModel {}
+        widthOfComboBox: itemWidth
+        tipText: qsTr("Video device resolution selector")
+        role: "Resolution_UTF8"
+
+        onIndexChanged: {
+            slotFormatCurrentIndexChanged(modelIndex, true)
+        }
+    }
+
+    SettingsComboBox {
+        id: fpsComboBoxSetting
+
+        Layout.fillWidth: true
+        Layout.maximumHeight: JamiTheme.preferredFieldHeight
+        Layout.leftMargin: JamiTheme.preferredMarginSize
+
+        labelText: qsTr("Fps")
+        fontPointSize: JamiTheme.settingsFontSize
+        comboModel: VideoFormatFpsModel {}
+        widthOfComboBox: itemWidth
+        tipText: qsTr("Video device fps selector")
+        role: "FPS_ToDisplay_UTF8"
+
+        onIndexChanged: {
+            slotFormatCurrentIndexChanged(modelIndex, false)
+        }
+    }
+
+    // Toggle switch to enable hardware acceleration
+    ToggleSwitch {
+        id: hardwareAccelControl
+
+        Layout.fillWidth: true
+        Layout.leftMargin: JamiTheme.preferredMarginSize
+
+        labelText: qsTr("Enable hardware acceleration")
+        fontPointSize: JamiTheme.settingsFontSize
+
+        onSwitchToggled: {
+            AVModel.setHardwareAcceleration(checked)
+            videoSettings.startPreviewing(true)
+        }
+    }
+
+    // video Preview
+    Rectangle {
+        id: rectBox
+        Layout.alignment: Qt.AlignHCenter
+        Layout.maximumHeight: width * aspectRatio
+        Layout.minimumHeight: width * aspectRatio
+        Layout.preferredHeight: width * aspectRatio
+
+        Layout.minimumWidth: 200
+        Layout.maximumWidth: 400
+        Layout.preferredWidth: itemWidth * 2
+        Layout.bottomMargin: JamiTheme.preferredMarginSize
+        color: "white"
+        radius: 5
+
+        PreviewRenderer {
+            id: previewWidget
+            anchors.fill: rectBox
+            anchors.centerIn: rectBox
+
+            layer.enabled: true
+            layer.effect: OpacityMask {
+                maskSource: rectBox
+            }
+        }
+    }
+
+    Label {
+        visible: !previewAvailable
+
+        Layout.fillWidth: true
+        Layout.preferredHeight: JamiTheme.preferredFieldHeight
+        Layout.bottomMargin: JamiTheme.preferredMarginSize
+
+        text: qsTr("Preview unavailable")
+        font.pointSize: JamiTheme.settingsFontSize
+        font.kerning: true
+
+        horizontalAlignment: Text.AlignHCenter
+        verticalAlignment: Text.AlignVCenter
+    }
+}
\ No newline at end of file
diff --git a/src/videocodeclistmodel.cpp b/src/videocodeclistmodel.cpp
deleted file mode 100644
index f3de621df..000000000
--- a/src/videocodeclistmodel.cpp
+++ /dev/null
@@ -1,130 +0,0 @@
-/*
- * Copyright (C) 2019-2020 by Savoir-faire Linux
- * Author: Yang Wang   <yang.wang@savoirfairelinux.com>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include "videocodeclistmodel.h"
-
-#include <QList>
-
-VideoCodecListModel::VideoCodecListModel(QObject* parent)
-    : QAbstractListModel(parent)
-{}
-
-VideoCodecListModel::~VideoCodecListModel() {}
-
-int
-VideoCodecListModel::rowCount(const QModelIndex& parent) const
-{
-    if (!parent.isValid()) {
-        /*
-         * Count.
-         */
-        QList<lrc::api::Codec> realCodecList;
-        auto videoCodecListOld = LRCInstance::getCurrentAccountInfo().codecModel->getVideoCodecs();
-
-        for (auto codec : videoCodecListOld) {
-            if (codec.name.length()) {
-                realCodecList.append(codec);
-            }
-        }
-
-        return realCodecList.size();
-    }
-    /*
-     * A valid QModelIndex returns 0 as no entry has sub-elements.
-     */
-    return 0;
-}
-
-int
-VideoCodecListModel::columnCount(const QModelIndex& parent) const
-{
-    Q_UNUSED(parent);
-    /*
-     * Only need one column.
-     */
-    return 1;
-}
-
-QVariant
-VideoCodecListModel::data(const QModelIndex& index, int role) const
-{
-    auto videoCodecList = LRCInstance::getCurrentAccountInfo().codecModel->getVideoCodecs();
-    if (!index.isValid() || videoCodecList.size() <= index.row()) {
-        return QVariant();
-    }
-
-    QList<lrc::api::Codec> realCodecList;
-
-    for (auto codec : videoCodecList) {
-        if (codec.name.length()) {
-            realCodecList.append(codec);
-        }
-    }
-
-    switch (role) {
-    case Role::VideoCodecName:
-        return QVariant(realCodecList.at(index.row()).name);
-    case Role::IsEnabled:
-        return QVariant(realCodecList.at(index.row()).enabled);
-    case Role::VideoCodecID:
-        return QVariant(realCodecList.at(index.row()).id);
-    }
-    return QVariant();
-}
-
-QHash<int, QByteArray>
-VideoCodecListModel::roleNames() const
-{
-    QHash<int, QByteArray> roles;
-    roles[VideoCodecName] = "VideoCodecName";
-    roles[IsEnabled] = "IsEnabled";
-    roles[VideoCodecID] = "VideoCodecID";
-    return roles;
-}
-
-QModelIndex
-VideoCodecListModel::index(int row, int column, const QModelIndex& parent) const
-{
-    Q_UNUSED(parent);
-    if (column != 0) {
-        return QModelIndex();
-    }
-
-    if (row >= 0 && row < rowCount()) {
-        return createIndex(row, column);
-    }
-    return QModelIndex();
-}
-
-QModelIndex
-VideoCodecListModel::parent(const QModelIndex& child) const
-{
-    Q_UNUSED(child);
-    return QModelIndex();
-}
-
-Qt::ItemFlags
-VideoCodecListModel::flags(const QModelIndex& index) const
-{
-    auto flags = QAbstractItemModel::flags(index) | Qt::ItemNeverHasChildren | Qt::ItemIsSelectable
-                 | Qt::ItemIsUserCheckable | Qt::ItemIsEnabled;
-    if (!index.isValid()) {
-        return QAbstractItemModel::flags(index);
-    }
-    return flags;
-}
diff --git a/src/videocodeclistmodel.h b/src/videocodeclistmodel.h
deleted file mode 100644
index ec1f7aab9..000000000
--- a/src/videocodeclistmodel.h
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * Copyright (C) 2019-2020 by Savoir-faire Linux
- * Author: Yang Wang   <yang.wang@savoirfairelinux.com>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-#pragma once
-
-#include <QAbstractItemModel>
-
-#include "api/account.h"
-#include "api/contact.h"
-#include "api/conversation.h"
-#include "api/newdevicemodel.h"
-
-#include "lrcinstance.h"
-
-class VideoCodecListModel : public QAbstractListModel
-{
-    Q_OBJECT
-public:
-    enum Role { VideoCodecName = Qt::UserRole + 1, IsEnabled, VideoCodecID };
-    Q_ENUM(Role)
-
-    explicit VideoCodecListModel(QObject* parent = 0);
-    ~VideoCodecListModel();
-
-    /*
-     * QAbstractListModel override.
-     */
-    int rowCount(const QModelIndex& parent = QModelIndex()) const override;
-    int columnCount(const QModelIndex& parent) const override;
-    QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const override;
-    /*
-     * Override role name as access point in qml.
-     */
-    QHash<int, QByteArray> roleNames() const override;
-    QModelIndex index(int row, int column = 0, const QModelIndex& parent = QModelIndex()) const;
-    QModelIndex parent(const QModelIndex& child) const;
-    Qt::ItemFlags flags(const QModelIndex& index) const;
-};
diff --git a/src/wizardview/components/ProfilePage.qml b/src/wizardview/components/ProfilePage.qml
index f85f41478..70fec46f5 100644
--- a/src/wizardview/components/ProfilePage.qml
+++ b/src/wizardview/components/ProfilePage.qml
@@ -87,8 +87,8 @@ Rectangle {
             id: setAvatarWidget
 
             Layout.alignment: Qt.AlignCenter
-            Layout.preferredWidth: preferredWidth
-            Layout.preferredHeight: preferredWidth
+            Layout.preferredWidth: JamiTheme.preferredFieldHeight + boothWidth
+            Layout.preferredHeight: JamiTheme.preferredFieldHeight + boothWidth
 
             boothWidth: 200
         }
-- 
GitLab